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-06-04 16:32:33 +04:00
|
|
|
<!-- use only for devel... -->
|
|
|
|
|
<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-06-04 16:32:33 +04:00
|
|
|
<script>
|
|
|
|
|
less = {
|
|
|
|
|
// or "production"
|
|
|
|
|
env: "development",
|
|
|
|
|
|
|
|
|
|
// load imports async
|
|
|
|
|
async: false,
|
|
|
|
|
|
|
|
|
|
// load imports async when in a page under
|
|
|
|
|
// a file protocol
|
|
|
|
|
fileAsync: false,
|
|
|
|
|
|
|
|
|
|
// when in watch mode, time in ms between polls
|
|
|
|
|
//poll: 1000,
|
|
|
|
|
|
|
|
|
|
// user functions, keyed by name
|
|
|
|
|
//functions: {},
|
|
|
|
|
|
|
|
|
|
// or "mediaQuery" or "all"
|
|
|
|
|
//dumpLineNumbers: "comments",
|
|
|
|
|
|
|
|
|
|
// whether to adjust url's to be relative
|
|
|
|
|
// if false, url's are already relative to the
|
|
|
|
|
// entry less file
|
|
|
|
|
//relativeUrls: false,
|
|
|
|
|
|
|
|
|
|
// a path to add on to the start of every url
|
|
|
|
|
//resource
|
|
|
|
|
//rootpath: ":/a.com/"
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
<script src="ext-lib/less.js"></script>
|
2013-05-28 15:22:05 +04:00
|
|
|
<script src="ext-lib/jquery.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-05-14 17:42:17 +04:00
|
|
|
<script src="base.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-05-14 17:42:17 +04:00
|
|
|
<script src="data.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-06-02 20:14:39 +04:00
|
|
|
<script src="setup.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 -->
|
|
|
|
|
<script src="images.js"></script>
|
|
|
|
|
|
|
|
|
|
|
2013-05-02 19:47:04 +04:00
|
|
|
<script>
|
2013-04-29 02:31:01 +04:00
|
|
|
|
2013-05-17 18:20:38 +04:00
|
|
|
//DEBUG = true
|
2013-05-14 21:49:05 +04:00
|
|
|
|
2013-04-26 05:30:56 +04:00
|
|
|
// setup...
|
|
|
|
|
$(function(){
|
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')
|
|
|
|
|
|
2013-06-04 09:00:59 +04:00
|
|
|
setupIndicators()
|
|
|
|
|
|
2013-06-01 18:43:14 +04:00
|
|
|
autoHideCursor($('.viewer'))
|
2013-05-17 17:58:23 +04:00
|
|
|
|
2013-04-26 05:30:56 +04:00
|
|
|
// NOTE: this is global so as to not to add any extra complexity to
|
|
|
|
|
// the internal workings...
|
2013-05-03 17:08:59 +04:00
|
|
|
$('.viewer')
|
|
|
|
|
.click(clickHandler)
|
2013-05-17 15:34:45 +04:00
|
|
|
// XXX for some reason this messes up alignment on initial view...
|
|
|
|
|
//.dblclick(dblClickHandler)
|
|
|
|
|
|
|
|
|
|
$(window)
|
|
|
|
|
.resize(function() {
|
2013-06-03 22:45:01 +04:00
|
|
|
toggleImageProportions('!')
|
2013-05-17 15:34:45 +04:00
|
|
|
centerView()
|
|
|
|
|
})
|
|
|
|
|
|
2013-05-02 23:22:43 +04:00
|
|
|
$(document)
|
|
|
|
|
.keydown(makeKeyboardHandler(
|
|
|
|
|
KEYBOARD_CONFIG,
|
2013-05-15 00:24:33 +04:00
|
|
|
function(k){
|
|
|
|
|
window.DEBUG && console.log(k)
|
|
|
|
|
}))
|
2013-05-03 17:08:59 +04:00
|
|
|
|
2013-05-13 02:24:36 +04:00
|
|
|
setupDataBindings()
|
2013-05-03 17:08:59 +04:00
|
|
|
|
2013-05-22 03:00:38 +04:00
|
|
|
|
2013-05-28 19:25:13 +04:00
|
|
|
/* XXX drag/drop
|
|
|
|
|
$(document)
|
|
|
|
|
.bind('dragover', function(e){
|
|
|
|
|
e.stopPropagation()
|
|
|
|
|
e.preventDefault()
|
|
|
|
|
// XXX is there a jQuery way out of this??
|
|
|
|
|
e.originalEvent.dataTransfer.dropEffect = 'copy' // Explicitly show this is a copy.
|
|
|
|
|
})
|
|
|
|
|
.bind('drop', function(e){
|
|
|
|
|
e.stopPropagation()
|
|
|
|
|
e.preventDefault()
|
|
|
|
|
|
|
|
|
|
// XXX is there a jQuery way out of this??
|
|
|
|
|
var files = e.originalEvent.dataTransfer.files
|
|
|
|
|
|
|
|
|
|
// XXX should we be using the loadJSON here???
|
|
|
|
|
// XXX desperatly need image caching and preview generation...
|
|
|
|
|
|
|
|
|
|
for (var i = 0, f; f = files[i]; i++) {
|
|
|
|
|
|
|
|
|
|
if (!f.type.match('image.*')) {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
console.log('FILE:', f)
|
|
|
|
|
|
|
|
|
|
var reader = new FileReader()
|
|
|
|
|
reader.onload = function(i){
|
|
|
|
|
return function(e){
|
|
|
|
|
// XXX need to avoid data URLs here and use plain old paths...
|
|
|
|
|
//ribbon.append(makeImage(e.target.result, i))
|
|
|
|
|
console.log('DROPPED')//, e.target.result)
|
|
|
|
|
}
|
|
|
|
|
}(i)
|
|
|
|
|
|
|
|
|
|
reader.readAsDataURL(f)
|
|
|
|
|
//reader.readAsText(f)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
*/
|
|
|
|
|
|
2013-05-22 03:00:38 +04:00
|
|
|
// we have an image file...
|
2013-05-28 02:17:24 +04:00
|
|
|
if((DATA_ATTR + '_BASE_URL') in localStorage){
|
|
|
|
|
BASE_URL = localStorage[DATA_ATTR + '_BASE_URL']
|
2013-05-28 04:41:16 +04:00
|
|
|
|
|
|
|
|
var loading = loadDir(BASE_URL)
|
2013-05-22 03:00:38 +04:00
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
// everything is in localStorage...
|
|
|
|
|
if('DATA' in localStorage){
|
|
|
|
|
loadLocalStorage()
|
|
|
|
|
|
|
|
|
|
// legacy default data...
|
|
|
|
|
} else {
|
|
|
|
|
DATA = convertDataGen1(image_list)
|
|
|
|
|
DATA = DATA.data
|
|
|
|
|
IMAGES = DATA.images
|
2013-06-02 20:14:39 +04:00
|
|
|
reloadViewer()
|
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-05-28 04:41:16 +04:00
|
|
|
loadLocalStorageSettings()
|
|
|
|
|
|
2013-05-22 03:41:51 +04:00
|
|
|
// XXX this will reload everything...
|
2013-06-04 01:55:42 +04:00
|
|
|
// XXX this might load the wrong marks (not sure)...
|
2013-05-22 03:41:51 +04:00
|
|
|
if('MARKED' in localStorage){
|
|
|
|
|
loadLocalStorageMarks()
|
|
|
|
|
}
|
2013-05-22 03:00:38 +04:00
|
|
|
|
2013-05-22 03:41:51 +04:00
|
|
|
updateImages()
|
|
|
|
|
})
|
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>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ribbon">
|
|
|
|
|
<div class="image"></div>
|
|
|
|
|
<div class="current image"></div>
|
|
|
|
|
<div class="image"></div>
|
|
|
|
|
<div class="image"></div>
|
|
|
|
|
</div>
|
|
|
|
|
</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-04-26 05:30:56 +04:00
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- vim:set ts=4 sw=4 spell : -->
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|