mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-11-02 04:10:11 +00:00
re-did marks modes...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
2c684e6640
commit
2f024149a9
49
ui/base.js
49
ui/base.js
@ -387,30 +387,6 @@ function rollRibbon(n, ribbon, extend, no_compensate_shift){
|
|||||||
* Modes
|
* Modes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// XXX shifting images and unmarking in this mode do not work correctly...
|
|
||||||
var toggleMarkedOnlyView = createCSSClassToggler('.viewer', 'marked-only',
|
|
||||||
function(){
|
|
||||||
var cur = $('.current.image')
|
|
||||||
// current is marked...
|
|
||||||
if(cur.hasClass('marked')){
|
|
||||||
centerView(null, 'css')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// there is a marked image in this ribbon...
|
|
||||||
var target = getImageBefore(cur, null)
|
|
||||||
if(target.length > 0){
|
|
||||||
centerView(focusImage(target), 'css')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// get marked image from other ribbons...
|
|
||||||
prevRibbon()
|
|
||||||
if($('.current.image').hasClass('marked')){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
nextRibbon()
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
// XXX add ability to take all marked images and open them in a separate view...
|
// XXX add ability to take all marked images and open them in a separate view...
|
||||||
|
|
||||||
|
|
||||||
@ -863,10 +839,35 @@ function shiftImageDownNewRibbon(image, moving){
|
|||||||
|
|
||||||
/*********************************************************** Marks ***/
|
/*********************************************************** Marks ***/
|
||||||
|
|
||||||
|
// XXX shifting images and unmarking in this mode do not work correctly...
|
||||||
|
var toggleMarkesView = createCSSClassToggler('.viewer', 'marks-visible',
|
||||||
|
function(){
|
||||||
|
var cur = $('.current.image')
|
||||||
|
// current is marked...
|
||||||
|
if(cur.hasClass('marked')){
|
||||||
|
centerView(null, 'css')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// there is a marked image in this ribbon...
|
||||||
|
var target = getImageBefore(cur, null)
|
||||||
|
if(target.length > 0){
|
||||||
|
centerView(focusImage(target), 'css')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// get marked image from other ribbons...
|
||||||
|
prevRibbon()
|
||||||
|
if($('.current.image').hasClass('marked')){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
nextRibbon()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
// XXX if this unmarks an image in marked-only mode no visible image is
|
// XXX if this unmarks an image in marked-only mode no visible image is
|
||||||
// going to be current...
|
// going to be current...
|
||||||
var toggleImageMark = createCSSClassToggler('.current.image', 'marked',
|
var toggleImageMark = createCSSClassToggler('.current.image', 'marked',
|
||||||
function(action){
|
function(action){
|
||||||
|
toggleMarkesView('on')
|
||||||
$('.viewer').trigger('togglingMark', [$('.current.image'), action])
|
$('.viewer').trigger('togglingMark', [$('.current.image'), action])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
99
ui/data.js
99
ui/data.js
@ -41,7 +41,7 @@ var DATA = {
|
|||||||
images: {}
|
images: {}
|
||||||
}
|
}
|
||||||
|
|
||||||
var MARKS = []
|
var MARKED = []
|
||||||
|
|
||||||
var IMAGE_CACHE = []
|
var IMAGE_CACHE = []
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ function updateImage(image, gid, size){
|
|||||||
})
|
})
|
||||||
|
|
||||||
// setup marks...
|
// setup marks...
|
||||||
if(MARKS.indexOf(gid) != -1){
|
if(MARKED.indexOf(gid) != -1){
|
||||||
image.addClass('marked')
|
image.addClass('marked')
|
||||||
} else {
|
} else {
|
||||||
image.removeClass('marked')
|
image.removeClass('marked')
|
||||||
@ -460,6 +460,12 @@ function loadData(data, images_per_screen){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// NOTE: this compares two images by gid...
|
||||||
|
function imageDateCmp(a, b){
|
||||||
|
return DATA.images[b].ctime - DATA.images[a].ctime
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function convertDataGen1(data){
|
function convertDataGen1(data){
|
||||||
var res = {
|
var res = {
|
||||||
varsion: '2.0',
|
varsion: '2.0',
|
||||||
@ -471,10 +477,6 @@ function convertDataGen1(data){
|
|||||||
var ribbons = res.ribbons
|
var ribbons = res.ribbons
|
||||||
var images = res.images
|
var images = res.images
|
||||||
var order = res.order
|
var order = res.order
|
||||||
var _dateSort = function(a, b){
|
|
||||||
return images[b].ctime - images[a].ctime
|
|
||||||
}
|
|
||||||
|
|
||||||
// position...
|
// position...
|
||||||
res.current = data.position
|
res.current = data.position
|
||||||
|
|
||||||
@ -488,11 +490,11 @@ function convertDataGen1(data){
|
|||||||
order.push(id)
|
order.push(id)
|
||||||
images[id] = image
|
images[id] = image
|
||||||
}
|
}
|
||||||
ribbon.sort(_dateSort)
|
ribbon.sort(imageDateCmp)
|
||||||
})
|
})
|
||||||
|
|
||||||
// order...
|
// order...
|
||||||
order.sort(_dateSort)
|
order.sort(imageDateCmp)
|
||||||
|
|
||||||
// XXX STUB
|
// XXX STUB
|
||||||
res.current = order[0]
|
res.current = order[0]
|
||||||
@ -520,6 +522,19 @@ function saveLocalStorage(attr){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function loadLocalStorageMarks(attr){
|
||||||
|
attr = attr == null ? 'MARKED' : attr
|
||||||
|
MARKED = JSON.parse(localStorage[attr])
|
||||||
|
return loadData(DATA)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function saveLocalStorageMarks(attr){
|
||||||
|
attr = attr == null ? 'MARKED' : attr
|
||||||
|
localStorage[attr] = JSON.stringify(MARKED)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* Image caching...
|
* Image caching...
|
||||||
@ -559,6 +574,50 @@ function preCacheAllRibbons(){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Marking
|
||||||
|
*/
|
||||||
|
|
||||||
|
function loadMarkedOnlyData(){
|
||||||
|
var cur = DATA.current
|
||||||
|
var marked = MARKED.slice().sort(imageDateCmp)
|
||||||
|
ALL_DATA = DATA
|
||||||
|
DATA = {
|
||||||
|
varsion: '2.0',
|
||||||
|
current: null,
|
||||||
|
ribbons: [
|
||||||
|
marked
|
||||||
|
],
|
||||||
|
//order: marked.slice(),
|
||||||
|
order: DATA.order,
|
||||||
|
images: DATA.images,
|
||||||
|
}
|
||||||
|
DATA.current = getGIDBefore(cur, 0)
|
||||||
|
loadData(DATA)
|
||||||
|
toggleMarkesView('off')
|
||||||
|
return DATA
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// XXX name this in a better way...
|
||||||
|
function loadAllImages(){
|
||||||
|
DATA = ALL_DATA
|
||||||
|
loadData(DATA)
|
||||||
|
return DATA
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var toggleMarkedOnlyView = createCSSClassToggler('.viewer', 'marked-only-view',
|
||||||
|
function(action){
|
||||||
|
if(action == 'on'){
|
||||||
|
loadMarkedOnlyData()
|
||||||
|
} else {
|
||||||
|
loadAllImages()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* Setup
|
* Setup
|
||||||
*/
|
*/
|
||||||
@ -695,43 +754,43 @@ function setupDataBindings(viewer){
|
|||||||
|
|
||||||
// add marked image to list...
|
// add marked image to list...
|
||||||
if(action == 'on'){
|
if(action == 'on'){
|
||||||
MARKS.push(gid)
|
MARKED.push(gid)
|
||||||
|
|
||||||
// remove marked image from list...
|
// remove marked image from list...
|
||||||
} else {
|
} else {
|
||||||
MARKS.splice(MARKS.indexOf(gid), 1)
|
MARKED.splice(MARKED.indexOf(gid), 1)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.on('removeingRibbonMarks', function(evt, ribbon){
|
.on('removeingRibbonMarks', function(evt, ribbon){
|
||||||
$.each(DATA.ribbons[getRibbonIndex(ribbon)], function(_, e){
|
$.each(DATA.ribbons[getRibbonIndex(ribbon)], function(_, e){
|
||||||
var i = MARKS.indexOf(e)
|
var i = MARKED.indexOf(e)
|
||||||
if(i != -1){
|
if(i != -1){
|
||||||
MARKS.splice(i, 1)
|
MARKED.splice(i, 1)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.on('removeingAllMarks', function(evt){
|
.on('removeingAllMarks', function(evt){
|
||||||
MARKS.splice(0, MARKS.length)
|
MARKED.splice(0, MARKED.length)
|
||||||
})
|
})
|
||||||
.on('markingRibbon', function(evt, ribbon){
|
.on('markingRibbon', function(evt, ribbon){
|
||||||
$.each(DATA.ribbons[getRibbonIndex(ribbon)], function(_, e){
|
$.each(DATA.ribbons[getRibbonIndex(ribbon)], function(_, e){
|
||||||
var i = MARKS.indexOf(e)
|
var i = MARKED.indexOf(e)
|
||||||
if(i == -1){
|
if(i == -1){
|
||||||
MARKS.push(e)
|
MARKED.push(e)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.on('markingAll', function(evt){
|
.on('markingAll', function(evt){
|
||||||
MARKS.splice(0, MARKS.length)
|
MARKED.splice(0, MARKED.length)
|
||||||
MARKS.concat(DATA.order)
|
MARKED.concat(DATA.order)
|
||||||
})
|
})
|
||||||
.on('invertingMarks', function(evt, ribbon){
|
.on('invertingMarks', function(evt, ribbon){
|
||||||
$.each(DATA.ribbons[getRibbonIndex(ribbon)], function(_, e){
|
$.each(DATA.ribbons[getRibbonIndex(ribbon)], function(_, e){
|
||||||
var i = MARKS.indexOf(e)
|
var i = MARKED.indexOf(e)
|
||||||
if(i == -1){
|
if(i == -1){
|
||||||
MARKS.push(e)
|
MARKED.push(e)
|
||||||
} else {
|
} else {
|
||||||
MARKS.splice(i, 1)
|
MARKED.splice(i, 1)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@ -104,7 +104,7 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* dot mark... */
|
/* dot mark... */
|
||||||
.marked.image:after {
|
.marks-visible.viewer .marked.image:after {
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
content: "";
|
content: "";
|
||||||
@ -147,11 +147,11 @@ body {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
.marked-only.viewer:after {
|
.marks-visible.viewer:after {
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
content: "Showing marked images only";
|
content: "Marks visible";
|
||||||
font-size: 14pt;
|
font-size: 11pt;
|
||||||
border: none;
|
border: none;
|
||||||
color: blue;
|
color: blue;
|
||||||
width: auto;
|
width: auto;
|
||||||
@ -161,11 +161,27 @@ body {
|
|||||||
right: 10px;
|
right: 10px;
|
||||||
|
|
||||||
}
|
}
|
||||||
.marked-only .image:not(.marked) {
|
.marked-only-view.viewer:after {
|
||||||
display: none;
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
content: "Showing marked images only";
|
||||||
|
font-size: 11pt;
|
||||||
|
border: none;
|
||||||
|
color: blue;
|
||||||
|
width: auto;
|
||||||
|
height: auto;
|
||||||
|
|
||||||
|
top: 10px;
|
||||||
|
right: 10px;
|
||||||
|
|
||||||
}
|
}
|
||||||
.marked-only .marked.image:after {
|
.marked-only-view.marks-visible.viewer:after {
|
||||||
display: none;
|
content: "Showing marked images only (marks visible)";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* XXX should we use opacity??? */
|
||||||
|
.marked-only-view.viewer:not(.marks-visible) .image:not(.marked) {
|
||||||
|
opacity: 0.3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -270,6 +286,12 @@ $(function(){
|
|||||||
loadData(convertDataGen1(image_list))
|
loadData(convertDataGen1(image_list))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX this will reload everything...
|
||||||
|
if('MARKED' in localStorage){
|
||||||
|
loadLocalStorageMarks()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// NOTE: this is global so as to not to add any extra complexity to
|
// NOTE: this is global so as to not to add any extra complexity to
|
||||||
// the internal workings...
|
// the internal workings...
|
||||||
$('.viewer')
|
$('.viewer')
|
||||||
|
|||||||
@ -210,9 +210,11 @@ var KEYBOARD_CONFIG = {
|
|||||||
ctrl: function(){ removeImageMarks('ribbon') },
|
ctrl: function(){ removeImageMarks('ribbon') },
|
||||||
shift: function(){ removeImageMarks('all') },
|
shift: function(){ removeImageMarks('all') },
|
||||||
},
|
},
|
||||||
F2: function(){
|
F2: {
|
||||||
toggleMarkedOnlyView()
|
default: function(){ toggleMarkesView() },
|
||||||
centerRibbons()
|
shift: function(){
|
||||||
|
toggleMarkedOnlyView()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user