tweaking...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2023-05-21 19:43:29 +03:00
parent 334cc66f6f
commit 1f7357ba41
3 changed files with 442 additions and 2 deletions

432
Viewer/css/ribbons.css Normal file
View File

@ -0,0 +1,432 @@
/**********************************************************************
*
* Modern experimental ribbon layout...
*
*
********************************************************* Settings ***/
/********************************************************** Viewer ***/
.viewer {
position: relative;
width: 100vw;
height: 100vh;
overflow: hidden;
/*border: solid blue 1px;*/
box-sizing: border-box;
user-select: none;
}
/* XXX this is a stub for printing help/docs... */
@media print {
.viewer {
display: none;
}
}
/****************************************** Ribbon set and locator ***/
.ribbon-set {
position: absolute;
display: block;
top: 50%;
left: 50%;
/* NOTE: this needs for scaling/zooming to behave correctly and not
shift the element, when its dimensions change...
...this is because .ribbon-set will both be used for scaling
and aligning... */
transform-origin: top left;
will-change: transform;
}
.ribbon-locator {
position: relative;
top: 0;
left: 0;
will-change: transform;
}
/********************************************************** Ribbon ***/
/* XXX for some reason setting image size in vmin stops this from
stretching in width... */
.shadow,
.ribbon {
position: relative;
display: block;
/* XXX BUG: setting this will mess up new ribbon creation....
display: inline-block;*/
height: auto;
/*min-width: 0px;*/
width: auto;
overflow: visible;
white-space: nowrap;
font-size: 0;
float: left;
clear: both;
background: var(--ribbon-background-color);
margin-top: var(--ribbon-margin);
margin-bottom: var(--ribbon-margin);
will-change: transform;
}
.ribbon:empty {
display: none;
}
/* XXX would be good to make this sticky -- always visible... */
.ribbon[title]:before {
display: block;
position: absolute;
content: attr(title);
font-size: 52pt;
font-style: italic;
font-weight: bold;
color: white;
text-shadow: black 2px 2px 15px;
top: -2pt;
right: 100%;
margin-right: 20pt;
}
.single-image-mode .ribbon[title]:before {
display: none;
}
.base-ribbon-marker {
position: absolute;
height: 100%;
color: transparent;
font-size: 20pt;
font-weight: bold;
}
.base-ribbon-marker:after {
content: "base ribbon";
display: block;
position: absolute;
width: var(--image-tile-size);
bottom: 0px;
left: 0px;
padding: 5px;
box-sizing: border-box;
z-index: 1000;
color: white;
background: black;
opacity: 0.2;
font-size: 20pt;
font-weight: bold;
transform-origin: bottom left;
transform: rotate(-90deg);
}
.single-image-mode.viewer .base-ribbon-marker {
display: none;
}
/*********************************************************** Image ***/
.marker,
.current-marker,
.mark,
.image {
position: relative;
display: inline-block;
vertical-align: middle;
text-align:left;
width: var(--image-tile-size);
height: var(--image-tile-size);
font-size: 12pt;
overflow: hidden;
box-sizing: border-box;
color: white;
/* XXX do we need this???
text-shadow:
black 0.1em 0.1em 0.4em,
black 0.1em 0.1em; */
/* NOTE: we can't set the bg color here because it will get
affected by filters... */
background: no-repeat 50% transparent;
background-size: contain;
border: solid var(--image-border) transparent;
/* XXX we are taking care of this in code -- see if we can use this */
image-orientation: none;
}
.image {
padding: var(--single-image-indicator-size);
background-color: var(--image-background-color);
}
.single-image-mode .image {
background-color: none;
}
.image div {
display: block;
position: absolute;
max-width: var(--image-tile-size);
width: auto;
max-height: var(--image-tile-size);
height: auto;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
white-space: normal;
text-align: center;
text-overflow: ellipsis;
/*font-size: 2vh;*/
pointer-events: none;
}
.crisp-resize .image {
image-rendering: -webkit-optimize-contrast;
image-rendering: crisp-edges;
}
/*
.current.image {
border: solid 5px red;
}
*/
/* NOTE: this is essentially a ribbon... */
.shadow {
position: absolute;
overflow: visible;
width: auto;
height: auto;
margin: 0px;
background: black;
-webkit-transition: all 0.1s ease-in;
-moz-transition: all 0.1s ease-in;
-ms-transition: all 0.1s ease-in;
-o-transition: all 0.1s ease-in;
transition: all 0.1s ease-in;
}
.shadow {
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-ms-transform-origin: 0 0;
-o-transform-origin: 0 0;
transform-origin: 0 0;
}
.image.moving {
visibility: hidden;
}
.current-marker {
display: none;
position: absolute;
border: solid 5px red;
background: none;
z-index: 100;
top: 0;
left: 0;
margin-top: calc(-1 * var(--image-tile-size) / 2);
margin-left: calc(-1 * var(--image-tile-size) / 2);
/* pass events through... (do we need IE10-?) */
pointer-events: none;
}
.marker {
width: 50px;
border: none;
background: no-repeat 50% transparent;
background-color: transparent;
color: white;
}
.marker:after {
display: block;
position: absolute;
content: "marker";
font-size: 32px;
font-weight: bold;
text-align: center;
overflow: visible;
width: 200px;
height: 32px;
top: 50%;
margin-top: -16px;
left: 50%;
margin-left: -100px;
transform-origin: center center;
transform: rotate(270deg) scaleY(1) scaleX(1);
opacity: 0.5;
}
.single-image-mode.viewer .marker {
display: none;
}
/* single image mode transitions */
/* XXX still buggy and not too needed...
.single-image-mode.viewer .image {
position: absolute;
top: 0px;
left: 0px;
opacity: 0;
.transition(opacity);
}
.single-image-mode.viewer .current.image {
opacity: 1;
}
*/
/* image turning... */
/* NOTE: need to account for proportions after turning... */
.image[orientation="90"] {
transform: rotate(90deg) scaleY(1) scaleX(1);
}
.image[orientation="180"] {
transform: rotate(180deg) scaleY(1) scaleX(1);
}
.image[orientation="270"] {
transform: rotate(270deg) scaleY(1) scaleX(1);
}
/* Flipped vertically only... */
/* NOTE: wee need to do all possible combinations here as we can't
combine different parts of a transform attr from different
classes */
.image[flipped*="vertical"] {
transform: rotate(0deg) scaleY(1) scaleX(-1);
}
.image[orientation="90"][flipped="vertical"] {
transform: rotate(90deg) scaleY(1) scaleX(-1)
}
.image[orientation="180"][flipped="vertical"] {
transform: rotate(180deg) scaleY(1) scaleX(-1)
}
.image[orientation="270"][flipped="vertical"] {
transform: rotate(270deg) scaleY(1) scaleX(-1)
}
/* Flipped horizontally only... */
.image[flipped*="horizontal"] {
transform: rotate(0deg) scaleY(-1) scaleX(1);
}
.image[orientation="90"][flipped="horizontal"] {
.transform(90deg, -1)
}
.image[orientation="180"][flipped="horizontal"] {
.transform(180deg, -1)
}
.image[orientation="270"][flipped="horizontal"] {
.transform(270deg, -1)
}
/* Flipped vertically and horizontally... */
.image[flipped*="vertical"][flipped*="horizontal"] {
transform: rotate(0deg) scaleY(-1) scaleX(-1)
}
.image[orientation="90"][flipped*="vertical"][flipped*="horizontal"] {
transform: rotate(90deg) scaleY(-1) scaleX(-1)
}
.image[orientation="180"][flipped*="vertical"][flipped*="horizontal"] {
transform: rotate(180deg) scaleY(-1) scaleX(-1)
}
.image[orientation="270"][flipped*="vertical"][flipped*="horizontal"] {
transform: rotate(270deg) scaleY(-1) scaleX(-1)
}
/* image separators... */
.ribbon-image-separators.viewer .image {
box-shadow:
9px 4px 0 -8px rgba(128,128,128,0.2),
-9px 4px 0 -8px rgba(128,128,128,0.2);
}
.ribbon-image-separators.viewer .image[orientation="90"],
.ribbon-image-separators.viewer .image[orientation="270"] {
box-shadow:
4px 9px 0 -8px rgba(128,128,128,0.2),
4px -9px 0 -8px rgba(128,128,128,0.2);
}
.ribbon-image-separators.single-image-mode.viewer .image {
box-shadow: none;
}
/* default backgrounds */
/* XXX not sure if we need these...
.image {
background-image: url(images/loading.gif);
}
.image[orientation="90"] {
background-image: url(images/loading-90deg.gif);
}
.image[orientation="180"] {
background-image: url(images/loading-180deg.gif);
}
.image[orientation="270"] {
background-image: url(images/loading-270deg.gif);
}
*/
/* separator test */
/*
.image.red+.image:not(.red):before {
display: inline-block;
position: relative;
content: "";
top:0px;
left: -50px;
width: 100px;
height: 100%;
background-color: yellow;
}
*/
/**********************************************************************
* vim:set spell ft=css : */

View File

@ -511,6 +511,8 @@ var CLIActions = actions.Actions({
return Promise.all([
// NOTE: no need to call .cacheMetadata(..) as
// it is already running after .loadImages(..)
// XXX for some reason this reports making previews
// but does not actually make them...
index.makePreviews('all') ])} })
.then(function(){
return index

View File

@ -616,7 +616,9 @@ var SharpActions = actions.Actions({
.sort()
.reverse()
if(sizes){
sizes = sizes instanceof Array ? sizes : [sizes]
sizes = sizes instanceof Array ?
sizes
: [sizes]
// normalize to preview size...
sizes =
(this.config['preview-normalized'] ?
@ -632,7 +634,8 @@ var SharpActions = actions.Actions({
sizes = cfg_sizes }
// XXX we should cache this on a previous stage...
var index_dir = this.config['index-dir'] || '.ImageGrid'
var index_dir = this.config['index-dir']
|| '.ImageGrid'
// get/normalize images...
return [
@ -653,6 +656,9 @@ var SharpActions = actions.Actions({
...args,
] },
// generate image paths...
// XXX BUG: for some reason base_path here gets the first argument to .makePreviews)(..)
// .makePreviews('all')
// will create previews in ./all/.ImageGrid/...
function(gid, sizes, path_tpl, index_dir, base_path){
var that = this
var img = this.images[gid]