diff --git a/ui/data.js b/ui/data.js index d9229d49..d95966f1 100755 --- a/ui/data.js +++ b/ui/data.js @@ -15,7 +15,7 @@ var MAX_SCREEN_IMAGES = 12 // if set to true each image will have basic info written to its html // title attr. -var IMAGE_TITLE_DATA = true +var IMAGE_INFO = true var CACHE_DIR = '.ImageGridCache' @@ -390,7 +390,7 @@ function imagesFromUrls(lst){ $.each(lst, function(i, e){ - // this is ugly but I'm bored so this pretty... + // this is ugly but I'm bored so this is pretty... var ii = i < 10 ? '0000000' + i : i < 100 ? '000000' + i : i < 1000 ? '00000' + i @@ -436,12 +436,6 @@ function dataFromImages(images){ function ribbonsFromFavDirs(path, images, cmp){ path = path == null ? BASE_URL : path images = images == null ? IMAGES : images - /*cmp = cmp == null ? - function(a, b){ - return imageDateCmp(a, b, images) - } - : cmp - */ // build a reverse name-gid index for fast access... var index = {} @@ -554,13 +548,14 @@ function updateImage(image, gid, size){ } size = size == null ? getVisibleImageSize('max') : size + // get the image data... var img_data = IMAGES[gid] if(img_data == null){ img_data = STUB_IMAGE_DATA } var name = img_data.path.split('/').pop() - // get the url... + // preview... var preview = getBestPreview(gid, size) image .css({ @@ -569,21 +564,34 @@ function updateImage(image, gid, size){ .attr({ order: DATA.order.indexOf(gid), orientation: img_data.orientation == null ? 0 : img_data.orientation, - title: IMAGE_TITLE_DATA ? - 'Image: ' + name +'\n'+ - 'Order: ' + DATA.order.indexOf(gid) +'\n'+ - 'GID: '+ gid +'\n'+ - 'Preview size:'+ preview.size : '', }) - // setup marks... + // image info... + if(IMAGE_INFO){ + var info = image.find('.info') + if(info.length == 0){ + info = $('
') + .addClass('info') + .appendTo(image) + } + info.html( + 'Image: ' + name + + '
Order: ' + DATA.order.indexOf(gid) + + '
GID: '+ gid + + (window.DEBUG ? '
Preview size:'+ preview.size : '') + + '' + ) + } else { + image.find('.info').remove() + } + + // marks... if(MARKED.indexOf(gid) != -1){ image.addClass('marked') } else { image.removeClass('marked') } - return image } diff --git a/ui/index.html b/ui/index.html index 2f1a738b..5d81bd48 100755 --- a/ui/index.html +++ b/ui/index.html @@ -56,6 +56,7 @@ body { } + .ribbon { position: relative; display: block; @@ -78,6 +79,8 @@ body { margin-bottom: 0px; } + + .image { position: relative; display: inline-block; @@ -106,6 +109,8 @@ body { border: solid red 5px; } + + /* image turning... */ /* NOTE: need to account for proportions after turning... */ .image[orientation="90"] { @@ -131,6 +136,7 @@ body { } + /* dot mark... */ .marks-visible.viewer .marked.image:after { display: block; @@ -238,6 +244,75 @@ body { } + +/* Image info */ +.image .info { + display: none; + + position: absolute; + bottom: 0px; + width: 100%; + background: black; + opacity: 0.7; + + -moz-user-select: auto; + -webkit-user-select: auto; + -o-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.image .info::selection { + color: white; + background: red; +} +.image-info-visible.viewer .image:hover .info { + display: block; +} +.single-image-mode.viewer .image .info { + display: none; +} +.image[orientation="90"] .info { + top: auto; + left: 100%; + + -ms-transform-origin: bottom left; + -webkit-transform-origin: bottom left; + transform-origin: bottom left; + + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); +} +.image[orientation="180"] .info { + top: 0px; + bottom: auto; + + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.image[orientation="270"] .info { + top: auto; + left: auto; + right: 100%; + + -ms-transform-origin: bottom right; + -webkit-transform-origin: bottom right; + transform-origin: bottom right; + + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} + + + .up-indicator, .down-indicator, .start-indicator, diff --git a/ui/keybindings.js b/ui/keybindings.js index 8f656973..425cbabe 100755 --- a/ui/keybindings.js +++ b/ui/keybindings.js @@ -16,6 +16,29 @@ var DIRECTION = 'next' /*********************************************************************/ var KEYBOARD_CONFIG = { + // help mode... + // NOTE: need to keep all info modes before the rest so as to give + // their bindings priority... + '.help-mode': { + title: 'Help', + doc: 'NOTE: In this mode all other key bindings are disabled, except '+ + 'the ones explicitly defined here.', + ignore: '*', + + Esc: doc('Close help', + function(){ + toggleKeyboardHelp('off') + return false + }), + H: 'Esc', + Q: 'Esc', + // '?' + '/': { + shift: 'Esc', + }, + }, + + // single image mode only... '.single-image-mode': { title: 'Single image mode', @@ -27,34 +50,23 @@ var KEYBOARD_CONFIG = { centerRibbons() }), Esc: doc('Exit single image mode', - function(){ toggleSingleImageMode('off') }), + function(){ + toggleSingleImageMode('off') + return false + }), Q: 'Esc', }, + // single image mode only... '.marked-only-view:not(.single-image-mode)': { title: 'Marked only view', Esc: doc('Exit marked only view', - function(){ toggleMarkedOnlyView('off') }) - }, - - - // help mode... - '.help-mode': { - title: 'Help', - doc: 'NOTE: In this mode all other key bindings are disabled, except '+ - 'the ones explicitly defined here.', - ignore: '*', - - Esc: doc('Close help', - function(){ toggleKeyboardHelp('off') }), - H: 'Esc', - Q: 'Esc', - // '?' - '/': { - shift: 'Esc', - }, + function(){ + toggleMarkedOnlyView('off') + return false + }) }, @@ -291,6 +303,9 @@ var KEYBOARD_CONFIG = { 'Position (global): '+ order +'/'+ DATA.order.length +'\n'+ '') }), + // XXX group this with other info stuff into a single on/off toggle... + shift: doc('Toggle image info visibility (on hover)', + function(){ toggleImageInfo() }), ctrl: doc('Invert image marks', function(){ invertImageMarks() }), }, diff --git a/ui/modes.js b/ui/modes.js index b7d3508e..37c3973e 100755 --- a/ui/modes.js +++ b/ui/modes.js @@ -61,6 +61,9 @@ var toggleTheme = createCSSClassToggler('.viewer', }) +var toggleImageInfo = createCSSClassToggler('.viewer', '.image-info-visible') + + // NOTE: this confirmsto the css toggler protocol, but is not implemented // via createCSSClassToggler as we do not need to set any classes, // al least at this point...