2013-04-26 05:30:56 +04:00
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<title>ImageGrid.Viewer</title>
|
|
|
|
|
|
|
|
|
|
|
2013-05-31 00:23:45 +04:00
|
|
|
<link rel="stylesheet" href="layout.css">
|
2013-11-30 05:43:08 +04:00
|
|
|
<link rel="stylesheet" href="css/editor.css">
|
2013-06-04 16:32:33 +04:00
|
|
|
<!-- use only for devel... -->
|
2013-06-04 21:47:17 +04:00
|
|
|
<!--link rel="stylesheet/less" href="layout.less"-->
|
2013-05-17 04:52:43 +04:00
|
|
|
|
2013-05-31 00:23:45 +04:00
|
|
|
<style>
|
2013-05-30 19:15:38 +04:00
|
|
|
|
2013-05-30 07:29:07 +04:00
|
|
|
|
|
|
|
|
|
2013-04-26 05:30:56 +04:00
|
|
|
</style>
|
|
|
|
|
|
2013-05-28 15:22:05 +04:00
|
|
|
<script src="ext-lib/jquery.js"></script>
|
2013-11-30 05:43:08 +04:00
|
|
|
<script src="ext-lib/jquery-ui.js"></script>
|
2013-04-26 05:30:56 +04:00
|
|
|
|
2013-04-26 23:07:07 +04:00
|
|
|
<script src="lib/jli.js"></script>
|
|
|
|
|
<script src="lib/keyboard.js"></script>
|
2013-06-07 01:36:49 +04:00
|
|
|
<script src="lib/scroller.js"></script>
|
2013-12-09 21:10:12 +04:00
|
|
|
<script src="lib/panels.js"></script>
|
2013-11-30 05:43:08 +04:00
|
|
|
<script src="lib/editor.js"></script>
|
2013-04-26 23:07:07 +04:00
|
|
|
|
2013-06-08 05:46:57 +04:00
|
|
|
<script src="compatibility.js"></script>
|
|
|
|
|
|
2013-12-15 14:24:00 +04:00
|
|
|
<!-- keep this the first thing to load -->
|
|
|
|
|
<script src="setup.js"></script>
|
|
|
|
|
|
2013-09-25 02:08:25 +04:00
|
|
|
<script src="ribbons.js"></script>
|
2013-09-21 05:47:54 +04:00
|
|
|
<script src="data.js"></script>
|
2013-12-15 14:43:51 +04:00
|
|
|
<script src="formats.js"></script>
|
2013-12-15 14:24:00 +04:00
|
|
|
<!--script src="cache.js"></script-->
|
2013-12-14 05:07:57 +04:00
|
|
|
<script src="files.js"></script>
|
2013-11-25 07:55:30 +04:00
|
|
|
<script src="urlhistory.js"></script>
|
2013-09-25 02:08:25 +04:00
|
|
|
<script src="crop.js"></script>
|
|
|
|
|
<script src="sort.js"></script>
|
|
|
|
|
<script src="workers.js"></script>
|
2013-05-17 15:34:45 +04:00
|
|
|
<script src="modes.js"></script>
|
2013-05-17 06:57:35 +04:00
|
|
|
<script src="marks.js"></script>
|
2013-12-12 19:35:13 +04:00
|
|
|
<script src="bookmarks.js"></script>
|
2013-06-07 00:56:43 +04:00
|
|
|
<script src="localstorage.js"></script>
|
2013-06-02 20:14:39 +04:00
|
|
|
<script src="info.js"></script>
|
2013-05-14 17:42:17 +04:00
|
|
|
<script src="ui.js"></script>
|
2013-11-30 22:24:56 +04:00
|
|
|
<script src="editor.js"></script>
|
2013-12-08 21:53:05 +04:00
|
|
|
<script src="tags.js"></script>
|
2013-05-28 15:22:05 +04:00
|
|
|
<script src="keybindings.js"></script>
|
2013-04-29 02:31:01 +04:00
|
|
|
|
2013-05-14 21:49:05 +04:00
|
|
|
<!-- XXX STUB -->
|
2013-08-16 04:28:50 +04:00
|
|
|
<!--script src="images.js"></script-->
|
2013-05-14 21:49:05 +04:00
|
|
|
|
|
|
|
|
|
2013-05-02 19:47:04 +04:00
|
|
|
<script>
|
2013-04-29 02:31:01 +04:00
|
|
|
|
2014-01-15 22:52:28 +04:00
|
|
|
|
2013-05-17 18:20:38 +04:00
|
|
|
//DEBUG = true
|
2013-05-14 21:49:05 +04:00
|
|
|
|
2013-06-07 01:55:29 +04:00
|
|
|
var SCROLLER_ENABLED = true
|
2013-06-10 16:10:16 +04:00
|
|
|
var SCROLLER_ANIMATE_DURATION = 100
|
|
|
|
|
// XXX scroller transitions not yet ready...
|
|
|
|
|
// ...need to disable transitions on some actions (where we
|
|
|
|
|
// explicitly say 'css')
|
|
|
|
|
//var TRANSITION_MODE_DEFAULT = 'css'
|
2013-06-07 01:36:49 +04:00
|
|
|
|
2013-04-26 05:30:56 +04:00
|
|
|
// setup...
|
|
|
|
|
$(function(){
|
2013-06-08 15:10:58 +04:00
|
|
|
// NOTE: keep this as early as possible...
|
|
|
|
|
$(document)
|
|
|
|
|
.keydown(makeKeyboardHandler(
|
|
|
|
|
KEYBOARD_CONFIG,
|
|
|
|
|
function(k){
|
|
|
|
|
window.DEBUG && console.log(k)
|
|
|
|
|
}))
|
|
|
|
|
|
2013-06-01 18:43:14 +04:00
|
|
|
// defaults...
|
2013-05-18 01:16:56 +04:00
|
|
|
toggleTheme('gray')
|
2013-06-01 18:43:14 +04:00
|
|
|
toggleImageInfo('on')
|
|
|
|
|
autoHideCursor($('.viewer'))
|
2013-05-17 17:58:23 +04:00
|
|
|
|
2013-06-08 02:29:14 +04:00
|
|
|
|
2013-06-07 01:36:49 +04:00
|
|
|
if(SCROLLER_ENABLED){
|
2013-06-10 16:10:16 +04:00
|
|
|
SCROLLER = makeScrollHandler($('.viewer'), {
|
2013-06-07 04:27:49 +04:00
|
|
|
// XXX after click and initial move the screen jumps
|
|
|
|
|
// (both x and y), margins, left vs. translate?
|
|
|
|
|
//
|
|
|
|
|
// the problem is in centerView(...), seems scroller.js
|
|
|
|
|
// seems to not know where the element is after it does
|
|
|
|
|
// it's job, so the jump is scroller resetting the
|
|
|
|
|
// position...
|
2013-06-07 01:36:49 +04:00
|
|
|
scrollDisabled: true,
|
|
|
|
|
|
|
|
|
|
//enableMultiClicks: true,
|
|
|
|
|
// XXX does not seem to work...
|
|
|
|
|
//multiClickTimeout: 100,
|
|
|
|
|
|
2013-06-07 04:27:49 +04:00
|
|
|
// it's either this or disable the jQuery animation...
|
|
|
|
|
// ...have to benchmark to see which is better...
|
2013-06-10 16:10:16 +04:00
|
|
|
// XXX BUG: if transition is set to non-0 then it initializes
|
|
|
|
|
// only after an action, e.g. a click...
|
|
|
|
|
transitionDuration: TRANSITION_MODE_DEFAULT == 'animate' ? 0 : SCROLLER_ANIMATE_DURATION,
|
2013-06-07 01:36:49 +04:00
|
|
|
transitionEasing: 'liner',
|
2013-06-08 15:10:58 +04:00
|
|
|
|
|
|
|
|
// keep selectable elements selectable...
|
|
|
|
|
ignoreElements: '.noScroll, '+
|
|
|
|
|
'.image .inline-image-info, '+
|
|
|
|
|
'.overlay-info, '+
|
2013-06-10 17:28:32 +04:00
|
|
|
'.overlay, '+
|
2013-06-08 15:10:58 +04:00
|
|
|
'',
|
2013-06-07 01:36:49 +04:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
$('.viewer')
|
|
|
|
|
.on('shortClick', function(){ clickHandler(event) })
|
2013-06-07 04:27:49 +04:00
|
|
|
// XXX for some reason this is broken...
|
2013-06-07 01:36:49 +04:00
|
|
|
//.on('doubleClick', dblClickHandler)
|
|
|
|
|
.on('longClick', dblClickHandler)
|
|
|
|
|
|
2013-06-07 01:55:29 +04:00
|
|
|
.on('swipeLeft', function(){
|
|
|
|
|
updateDirection('prev')
|
|
|
|
|
prevImage()
|
|
|
|
|
centerRibbons()
|
|
|
|
|
})
|
|
|
|
|
.on('swipeRight', function(){
|
|
|
|
|
updateDirection('next')
|
|
|
|
|
nextImage()
|
|
|
|
|
centerRibbons()
|
|
|
|
|
})
|
|
|
|
|
.on('swipeUp', function(){
|
2013-06-16 02:57:17 +04:00
|
|
|
//prevRibbon()
|
|
|
|
|
shiftImageDown(null, DIRECTION)
|
2013-06-07 01:55:29 +04:00
|
|
|
centerRibbons()
|
|
|
|
|
})
|
|
|
|
|
.on('swipeDown', function(){
|
2013-06-16 02:57:17 +04:00
|
|
|
//nextRibbon()
|
|
|
|
|
shiftImageUp(null, DIRECTION)
|
2013-06-07 01:55:29 +04:00
|
|
|
centerRibbons()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
2013-06-07 01:36:49 +04:00
|
|
|
} else {
|
|
|
|
|
// NOTE: this is global so as to not to add any extra complexity to
|
|
|
|
|
// the internal workings...
|
|
|
|
|
$('.viewer')
|
|
|
|
|
// XXX this messes things up...
|
|
|
|
|
//.dblclick(dblClickHandler)
|
|
|
|
|
.click(clickHandler)
|
|
|
|
|
}
|
2013-05-17 15:34:45 +04:00
|
|
|
|
|
|
|
|
$(window)
|
|
|
|
|
.resize(function() {
|
2013-06-03 22:45:01 +04:00
|
|
|
toggleImageProportions('!')
|
2013-05-17 15:34:45 +04:00
|
|
|
centerView()
|
|
|
|
|
})
|
|
|
|
|
|
2013-06-08 18:28:10 +04:00
|
|
|
setupBaseURLHistory()
|
2013-05-13 02:24:36 +04:00
|
|
|
setupDataBindings()
|
2013-05-03 17:08:59 +04:00
|
|
|
|
2013-07-04 21:15:02 +04:00
|
|
|
// XXX do we need drag'n'drop here???
|
2013-05-28 19:25:13 +04:00
|
|
|
|
2013-12-15 18:56:21 +04:00
|
|
|
var data_attr = CONFIG.data_attr
|
|
|
|
|
|
2013-08-16 04:28:50 +04:00
|
|
|
// we have an image.json file...
|
2013-12-15 18:56:21 +04:00
|
|
|
if((data_attr + '_BASE_URL') in localStorage
|
|
|
|
|
&& !/^\.[\/\\]*/.test(localStorage[data_attr + '_BASE_URL'])){
|
2013-06-11 04:46:45 +04:00
|
|
|
|
2013-12-15 18:56:21 +04:00
|
|
|
loadLocalStorageBaseURLHistory(data_attr)
|
2013-11-25 06:57:40 +04:00
|
|
|
|
2013-12-15 18:56:21 +04:00
|
|
|
BASE_URL = localStorage[data_attr + '_BASE_URL']
|
2013-05-28 04:41:16 +04:00
|
|
|
|
2014-01-26 08:43:44 +04:00
|
|
|
//var loading = statusNotify(loadDir(BASE_URL))
|
2014-01-29 07:27:07 +04:00
|
|
|
|
|
|
|
|
//var loading = statusProgress('Loading', statusNotify(loadDir(BASE_URL)))
|
|
|
|
|
|
|
|
|
|
var loading = statusNotify(loadDir(BASE_URL))
|
2013-05-22 03:00:38 +04:00
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
// everything is in localStorage...
|
|
|
|
|
if('DATA' in localStorage){
|
|
|
|
|
loadLocalStorage()
|
|
|
|
|
|
2013-08-16 04:28:50 +04:00
|
|
|
/* XXX do we need this anymore???
|
2013-05-22 03:00:38 +04:00
|
|
|
// legacy default data...
|
|
|
|
|
} else {
|
|
|
|
|
DATA = convertDataGen1(image_list)
|
|
|
|
|
IMAGES = DATA.images
|
2013-06-15 20:08:23 +04:00
|
|
|
DATA = DATA.data
|
2013-06-02 20:14:39 +04:00
|
|
|
reloadViewer()
|
2013-08-16 04:28:50 +04:00
|
|
|
*/
|
2013-05-22 03:00:38 +04:00
|
|
|
}
|
2013-05-22 03:41:51 +04:00
|
|
|
var loading = $.Deferred().resolve()
|
|
|
|
|
}
|
2013-05-22 03:00:38 +04:00
|
|
|
|
2013-05-22 03:41:51 +04:00
|
|
|
loading
|
|
|
|
|
.done(function(){
|
2013-06-01 21:44:49 +04:00
|
|
|
showStatus('Loading settings...')
|
2013-12-15 18:56:21 +04:00
|
|
|
data_attr + '_SETTINGS' in localStorage && loadLocalStorageSettings()
|
2013-05-28 04:41:16 +04:00
|
|
|
|
2013-10-14 18:14:51 +04:00
|
|
|
/* XXX do we need this???
|
2013-05-22 03:41:51 +04:00
|
|
|
// XXX this will reload everything...
|
2013-07-07 19:46:45 +04:00
|
|
|
MARKED.length == 0
|
2013-12-15 18:56:21 +04:00
|
|
|
&& data_attr + '_MARKED' in localStorage
|
2013-07-07 19:46:45 +04:00
|
|
|
&& loadLocalStorageMarks()
|
2013-10-14 18:14:51 +04:00
|
|
|
*/
|
2013-05-22 03:00:38 +04:00
|
|
|
|
2013-05-22 03:41:51 +04:00
|
|
|
updateImages()
|
2013-12-31 03:18:18 +04:00
|
|
|
toggleMarksView('on')
|
2013-06-10 16:10:16 +04:00
|
|
|
|
|
|
|
|
SCROLLER.start()
|
2013-12-02 08:50:43 +04:00
|
|
|
|
2013-05-22 03:41:51 +04:00
|
|
|
})
|
2013-05-22 03:00:38 +04:00
|
|
|
|
2013-04-26 05:30:56 +04:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
|
|
|
|
|
<!-- This is the basic viewer structure...
|
|
|
|
|
|
|
|
|
|
Unpopulated
|
|
|
|
|
NOTE: there can be only .ribbon-set element.
|
|
|
|
|
|
|
|
|
|
<div class="viewer">
|
|
|
|
|
<div class="ribbon-set"></div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Populated
|
|
|
|
|
|
|
|
|
|
<div class="viewer">
|
|
|
|
|
<div class="ribbon-set">
|
|
|
|
|
<div class="ribbon">
|
|
|
|
|
<div class="image"></div>
|
|
|
|
|
<div class="image"></div>
|
2013-12-06 17:09:02 +04:00
|
|
|
...
|
2013-04-26 05:30:56 +04:00
|
|
|
</div>
|
|
|
|
|
<div class="ribbon">
|
|
|
|
|
<div class="image"></div>
|
|
|
|
|
<div class="current image"></div>
|
|
|
|
|
<div class="image"></div>
|
2013-12-06 17:09:02 +04:00
|
|
|
<div class="mark selected"></div>
|
2013-04-26 05:30:56 +04:00
|
|
|
<div class="image"></div>
|
2013-12-06 17:09:02 +04:00
|
|
|
...
|
2013-04-26 05:30:56 +04:00
|
|
|
</div>
|
2013-12-06 17:09:02 +04:00
|
|
|
...
|
2013-04-26 05:30:56 +04:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
<div class="viewer">
|
2013-04-30 00:54:32 +04:00
|
|
|
|
2013-04-26 05:30:56 +04:00
|
|
|
<div class="ribbon-set"></div>
|
2013-04-30 00:54:32 +04:00
|
|
|
|
|
|
|
|
|
2013-04-30 01:34:26 +04:00
|
|
|
<!-- XXX should these be here??? -->
|
2013-05-23 15:22:38 +04:00
|
|
|
<div class="overlay-block">
|
|
|
|
|
<div class="background"></div>
|
|
|
|
|
<div class="content"></div>
|
|
|
|
|
</div>
|
2013-06-08 05:46:57 +04:00
|
|
|
|
2013-04-26 05:30:56 +04:00
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- vim:set ts=4 sw=4 spell : -->
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|