mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-11-01 03:40:09 +00:00
different marks architecture, a bit more complext to play with but allot more flexible (bugs expected)...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
312e0c700d
commit
088d4201d4
12
ui/data.js
12
ui/data.js
@ -1101,6 +1101,7 @@ function convertDataGen1(data, cmp){
|
||||
* Loaders
|
||||
*/
|
||||
|
||||
|
||||
function updateImageIndicators(gid, image){
|
||||
gid = gid == null ? getImageGID() : gid
|
||||
image = image == null ? getImage() : $(image)
|
||||
@ -1108,8 +1109,12 @@ function updateImageIndicators(gid, image){
|
||||
// marks...
|
||||
if(MARKED.indexOf(gid) != -1){
|
||||
image.addClass('marked')
|
||||
// XXX
|
||||
_addMark('selected', gid, image)
|
||||
} else {
|
||||
image.removeClass('marked')
|
||||
// XXX
|
||||
_removeMark('selected', gid, image)
|
||||
}
|
||||
|
||||
return image
|
||||
@ -1138,14 +1143,19 @@ function _loadImagePreviewURL(image, url){
|
||||
// may leak to newly loaded images...
|
||||
// XXX do a pre-caching framework...
|
||||
function updateImage(image, gid, size, sync){
|
||||
image = image == null ? getImage() : $(image)
|
||||
sync = sync == null ? SYNC_IMG_LOADER : sync
|
||||
image = $(image)
|
||||
var oldgid = getImageGID(image)
|
||||
|
||||
if(oldgid == gid || gid == null){
|
||||
gid = oldgid
|
||||
|
||||
} else {
|
||||
// remove old marks...
|
||||
if(typeof(oldgid) == typeof('str')){
|
||||
getImageMarks(oldgid).remove()
|
||||
}
|
||||
// reset gid...
|
||||
image
|
||||
.attr('gid', JSON.stringify(gid))
|
||||
.css({
|
||||
|
||||
@ -161,6 +161,7 @@
|
||||
border: dotted blue 5px;
|
||||
}
|
||||
|
||||
.mark.tagged,
|
||||
.mark.blue,
|
||||
.mark.red,
|
||||
.mark.yellow {
|
||||
@ -168,8 +169,8 @@
|
||||
margin-left: 0px;
|
||||
border: none;
|
||||
box-sizing: border-box;
|
||||
|
||||
}
|
||||
.mark.tagged:after,
|
||||
.mark.blue:after,
|
||||
.mark.red:after,
|
||||
.mark.yellow:after {
|
||||
@ -194,6 +195,16 @@
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.mark.tagged:after {
|
||||
box-shadow: none;
|
||||
text-shadow: black 0.1em 0.1em 0.4em, black 0.1em 0.1em;
|
||||
font-size: 10pt;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
content: "T";
|
||||
color: white;
|
||||
background: none;
|
||||
}
|
||||
.mark.blue:after {
|
||||
left: -25px;
|
||||
border: solid 3px blue;
|
||||
@ -208,6 +219,23 @@
|
||||
background: yellow;
|
||||
}
|
||||
|
||||
.ccw270,
|
||||
.cw90 {
|
||||
-webkit-transform: rotate(90deg);
|
||||
}
|
||||
.ccw180,
|
||||
.cw180 {
|
||||
-webkit-transform: rotate(180deg);
|
||||
}
|
||||
.ccw90,
|
||||
.cw270 {
|
||||
-webkit-transform: rotate(270deg);
|
||||
}
|
||||
.ccw0,
|
||||
.cw0 {
|
||||
-webkit-transform: rotate(0deg);
|
||||
}
|
||||
|
||||
</style>
|
||||
<script src="jquery.js"></script>
|
||||
|
||||
@ -264,7 +292,7 @@
|
||||
<div id="0" class="image2" style="background-image: url(image.jpg)"></div>
|
||||
<div class="mark red"></div>
|
||||
|
||||
<div id="1" class="current image2" style="background-image: url(image.jpg)"></div>
|
||||
<div id="1" class="current image2 cw180" style="background-image: url(image.jpg)"></div>
|
||||
<div class="mark"></div>
|
||||
<div class="mark blue" title="blue"></div>
|
||||
<div class="mark red" title="red"></div>
|
||||
@ -272,6 +300,7 @@
|
||||
|
||||
<div id="2" class="image2" style="background-image: url(image.jpg)"></div>
|
||||
<div class="mark select"></div>
|
||||
<div class="mark tagged" title="tagged"></div>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
|
||||
122
ui/layout.css
122
ui/layout.css
@ -224,7 +224,7 @@ button:hover {
|
||||
height: 20px;
|
||||
margin-top: -20px;
|
||||
text-align: center;
|
||||
vertical-align: center;
|
||||
vertical-align: middle;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: silver;
|
||||
@ -270,6 +270,7 @@ button:hover {
|
||||
/*********************************************************** Image ***/
|
||||
.marker,
|
||||
.current-marker,
|
||||
.mark,
|
||||
.image {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
@ -495,63 +496,64 @@ button:hover {
|
||||
opacity: 0.5;
|
||||
}
|
||||
*/
|
||||
/*
|
||||
.marks-visible.viewer .marked.image:after {
|
||||
display: block;
|
||||
position: absolute;
|
||||
content: "";
|
||||
font-size: 0pt;
|
||||
border: none;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
top: auto;
|
||||
bottom: 5px;
|
||||
left: auto;
|
||||
right: 5px;
|
||||
border-radius: 50%;
|
||||
background: blue;
|
||||
/* make the mark stand out if it is over an image with similar
|
||||
color/density */
|
||||
display: block;
|
||||
position: absolute;
|
||||
content: "";
|
||||
font-size: 0pt;
|
||||
border: none;
|
||||
|
||||
box-shadow: 0px 0px 7px 0px black;
|
||||
/*border: solid 1px white;*/
|
||||
width: @ribbon-mark-size;
|
||||
height: @ribbon-mark-size;
|
||||
|
||||
/*border: solid 1px black;*/
|
||||
top: auto;
|
||||
bottom: @ribbon-mark-offset;
|
||||
left: auto;
|
||||
right: @ribbon-mark-offset;
|
||||
|
||||
border-radius: 50%;
|
||||
background: blue;
|
||||
|
||||
box-shadow: 0px 0px 7px 0px black;
|
||||
}
|
||||
.marks-visible.viewer .marked.image[orientation="270"][flipped*="vertical"][flipped*="horizontal"]:after,
|
||||
.marks-visible.viewer .marked.image:not([orientation])[flipped*="vertical"]:after,
|
||||
.marks-visible.viewer .marked.image[orientation="0"][flipped*="vertical"]:after,
|
||||
.marks-visible.viewer .marked.image[orientation="180"][flipped="horizontal"]:after,
|
||||
.marks-visible.viewer .marked.image[orientation="90"]:not([flipped]):after {
|
||||
top: 5px;
|
||||
bottom: auto:
|
||||
top: @ribbon-mark-offset;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
right: 5px;
|
||||
right: @ribbon-mark-offset;
|
||||
}
|
||||
.marks-visible.viewer .marked.image:not([orientation])[flipped*="vertical"][flipped*="horizontal"]:after,
|
||||
.marks-visible.viewer .marked.image[orientation="0"][flipped*="vertical"][flipped*="horizontal"]:after,
|
||||
.marks-visible.viewer .marked.image[orientation="270"][flipped="vertical"]:after,
|
||||
.marks-visible.viewer .marked.image[orientation="90"][flipped="horizontal"]:after,
|
||||
.marks-visible.viewer .marked.image[orientation="180"]:not([flipped]):after {
|
||||
top: 5px;
|
||||
bottom: auto;
|
||||
left: 5px;
|
||||
right: auto;
|
||||
top: @ribbon-mark-offset;
|
||||
bottom: auto;
|
||||
left: @ribbon-mark-offset;
|
||||
right: auto;
|
||||
}
|
||||
.marks-visible.viewer .marked.image[orientation="90"][flipped*="vertical"][flipped*="horizontal"]:after,
|
||||
.marks-visible.viewer .marked.image[orientation="180"][flipped="vertical"]:after,
|
||||
.marks-visible.viewer .marked.image:not([orientation])[flipped*="horizontal"]:after,
|
||||
.marks-visible.viewer .marked.image[orientation="0"][flipped*="horizontal"]:after,
|
||||
.marks-visible.viewer .marked.image[orientation="270"]:not([flipped]):after {
|
||||
top: auto;
|
||||
bottom: 5px;
|
||||
left: 5px;
|
||||
right: auto;
|
||||
top: auto;
|
||||
bottom: @ribbon-mark-offset;
|
||||
left: @ribbon-mark-offset;
|
||||
right: auto;
|
||||
}
|
||||
*/
|
||||
/* NOTE: we use a different mark representation for single image mode... */
|
||||
/*
|
||||
.marks-visible.single-image-mode.viewer .marked.image:after {
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
*/
|
||||
/* corner mark... (a-la bookmarks in PortableMag)
|
||||
* XXX account for flipping... */
|
||||
/*
|
||||
@ -586,12 +588,48 @@ button:hover {
|
||||
bottom: @ribbon-mark-offset;
|
||||
right: @ribbon-mark-offset;
|
||||
}
|
||||
/
|
||||
|
||||
|
||||
/* XXX should we use opacity??? */
|
||||
.marked-only-view.viewer:not(.marks-visible) .image:not(.marked) {
|
||||
opacity: 0.3;
|
||||
opacity: 0.3;
|
||||
}
|
||||
*/
|
||||
/* new gen marks... */
|
||||
.mark {
|
||||
/* this fully covers the image to simplify positioning of actual marks */
|
||||
|
||||
margin-left: -300px;
|
||||
border: none;
|
||||
}
|
||||
.viewer:not(.marks-visible) .mark {
|
||||
display: none;
|
||||
}
|
||||
.mark.selected {
|
||||
width: 0px;
|
||||
margin-left: 0px;
|
||||
border: none;
|
||||
overflow: visible;
|
||||
}
|
||||
.mark.selected:after {
|
||||
display: block;
|
||||
position: absolute;
|
||||
content: "";
|
||||
font-size: 0pt;
|
||||
border: none;
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
top: auto;
|
||||
bottom: 10px;
|
||||
left: auto;
|
||||
right: 10px;
|
||||
box-shadow: 2px 2px 20px -2px rgba(0, 0, 0, 0.7);
|
||||
box-sizing: border-box;
|
||||
border-radius: 50%;
|
||||
background: blue;
|
||||
left: -15;
|
||||
}
|
||||
.marks-visible.single-image-mode.viewer .mark:after {
|
||||
display: none;
|
||||
}
|
||||
/****************************************************** Image info ***/
|
||||
.inline-image-info {
|
||||
@ -959,7 +997,7 @@ button:hover {
|
||||
.global-mode-indicators > *,
|
||||
.context-mode-indicators > * {
|
||||
font-size: small;
|
||||
vertical-align: center;
|
||||
vertical-align: middle;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.global-mode-indicators .circle,
|
||||
@ -986,7 +1024,7 @@ button:hover {
|
||||
.context-mode-indicators .indicator {
|
||||
display: none;
|
||||
height: 20px;
|
||||
vertical-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
/* actual indicators */
|
||||
/* marks... */
|
||||
@ -1143,9 +1181,10 @@ button:hover {
|
||||
.dark.viewer .ribbon-indicator:hover:after {
|
||||
opacity: 0.8;
|
||||
}
|
||||
.large.viewer:not(.single-image-mode) .current.image {
|
||||
border-width: 3px;
|
||||
.large.viewer:not(.single-image-mode) .current-marker {
|
||||
border-width: 2px;
|
||||
}
|
||||
.large.viewer:not(.single-image-mode) .mark:after,
|
||||
.large.viewer:not(.single-image-mode) .marked.image:after {
|
||||
-webkit-transform: rotate(0deg) scaleY(0.7) scaleX(0.7);
|
||||
-moz-transform: rotate(0deg) scaleY(0.7) scaleX(0.7);
|
||||
@ -1153,6 +1192,7 @@ button:hover {
|
||||
-ms-transform: rotate(0deg) scaleY(0.7) scaleX(0.7);
|
||||
transform: rotate(0deg) scaleY(0.7) scaleX(0.7);
|
||||
}
|
||||
.small.viewer:not(.single-image-mode) .mark:after,
|
||||
.small.viewer:not(.single-image-mode) .marked.image:after {
|
||||
-webkit-transform: rotate(0deg) scaleY(1.8) scaleX(1.8);
|
||||
-moz-transform: rotate(0deg) scaleY(1.8) scaleX(1.8);
|
||||
@ -1163,8 +1203,8 @@ button:hover {
|
||||
/********************************************************* Overlay ***/
|
||||
.overlay-block {
|
||||
display: none;
|
||||
position: absolute:
|
||||
top: 0px;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
@ -1237,7 +1277,7 @@ button:hover {
|
||||
border-radius: 3px;
|
||||
background: gray;
|
||||
padding: 20px;
|
||||
vertical-align: center;
|
||||
vertical-align: middle;
|
||||
box-shadow: 0px 5px 50px 0px black;
|
||||
}
|
||||
/* tables in dialogs... */
|
||||
|
||||
@ -4,6 +4,8 @@
|
||||
|
||||
/******************************************************** Settings ***/
|
||||
|
||||
@image-tile-size: 300px;
|
||||
|
||||
@ribbon-mark-offset: 5px;
|
||||
|
||||
@ribbon-mark-size: 10px;
|
||||
@ -318,7 +320,7 @@ button:hover {
|
||||
margin-top: -20px;
|
||||
|
||||
text-align: center;
|
||||
vertical-align: center;
|
||||
vertical-align: middle;
|
||||
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
@ -375,13 +377,14 @@ button:hover {
|
||||
/*********************************************************** Image ***/
|
||||
.marker,
|
||||
.current-marker,
|
||||
.mark,
|
||||
.image {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
text-align:left;
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
width: @image-tile-size;
|
||||
height: @image-tile-size;
|
||||
font-size: 12pt;
|
||||
overflow: hidden;
|
||||
|
||||
@ -560,6 +563,7 @@ button:hover {
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
.marks-visible.viewer .marked.image:after {
|
||||
display: block;
|
||||
position: absolute;
|
||||
@ -578,11 +582,7 @@ button:hover {
|
||||
border-radius: 50%;
|
||||
background: blue;
|
||||
|
||||
/* make the mark stand out if it is over an image with similar
|
||||
color/density */
|
||||
box-shadow: 0px 0px 7px 0px black;
|
||||
/*border: solid 1px white;*/
|
||||
/*border: solid 1px black;*/
|
||||
}
|
||||
.marks-visible.viewer .marked.image[orientation="270"][flipped*="vertical"][flipped*="horizontal"]:after,
|
||||
.marks-visible.viewer .marked.image:not([orientation])[flipped*="vertical"]:after,
|
||||
@ -590,7 +590,7 @@ button:hover {
|
||||
.marks-visible.viewer .marked.image[orientation="180"][flipped="horizontal"]:after,
|
||||
.marks-visible.viewer .marked.image[orientation="90"]:not([flipped]):after {
|
||||
top: @ribbon-mark-offset;
|
||||
bottom: auto:
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
right: @ribbon-mark-offset;
|
||||
}
|
||||
@ -614,11 +614,14 @@ button:hover {
|
||||
left: @ribbon-mark-offset;
|
||||
right: auto;
|
||||
}
|
||||
*/
|
||||
|
||||
/* NOTE: we use a different mark representation for single image mode... */
|
||||
/*
|
||||
.marks-visible.single-image-mode.viewer .marked.image:after {
|
||||
display: none;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/* corner mark... (a-la bookmarks in PortableMag)
|
||||
@ -655,13 +658,59 @@ button:hover {
|
||||
bottom: @ribbon-mark-offset;
|
||||
right: @ribbon-mark-offset;
|
||||
}
|
||||
/
|
||||
|
||||
|
||||
/* XXX should we use opacity??? */
|
||||
.marked-only-view.viewer:not(.marks-visible) .image:not(.marked) {
|
||||
opacity: 0.3;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* new gen marks... */
|
||||
|
||||
.mark {
|
||||
/* this fully covers the image to simplify positioning of actual marks */
|
||||
margin-left: -@image-tile-size;
|
||||
border: none;
|
||||
}
|
||||
.viewer:not(.marks-visible) .mark {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.mark.selected {
|
||||
width: 0px;
|
||||
margin-left: 0px;
|
||||
border: none;
|
||||
overflow: visible;
|
||||
}
|
||||
.mark.selected:after {
|
||||
display: block;
|
||||
position: absolute;
|
||||
content: "";
|
||||
font-size: 0pt;
|
||||
border: none;
|
||||
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
|
||||
top: auto;
|
||||
bottom: 10px;
|
||||
left: auto;
|
||||
right: 10px;
|
||||
|
||||
box-shadow: 2px 2px 20px -2px rgba(0,0,0,0.7);
|
||||
|
||||
box-sizing: border-box;
|
||||
border-radius: 50%;
|
||||
|
||||
|
||||
background: blue;
|
||||
left: -15;
|
||||
}
|
||||
.marks-visible.single-image-mode.viewer .mark:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -941,7 +990,7 @@ button:hover {
|
||||
position: absolute;
|
||||
height: 20px;
|
||||
width: auto;
|
||||
min-width: 300px;
|
||||
min-width: @image-tile-size;
|
||||
text-align: right;
|
||||
|
||||
color: transparent;
|
||||
@ -971,7 +1020,7 @@ button:hover {
|
||||
.global-mode-indicators > *,
|
||||
.context-mode-indicators > * {
|
||||
font-size: small;
|
||||
vertical-align: center;
|
||||
vertical-align: middle;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
@ -1001,7 +1050,7 @@ button:hover {
|
||||
.context-mode-indicators .indicator {
|
||||
display: none;
|
||||
height: 20px;
|
||||
vertical-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
|
||||
@ -1182,13 +1231,15 @@ button:hover {
|
||||
|
||||
|
||||
|
||||
.large.viewer:not(.single-image-mode) .current.image {
|
||||
border-width: 3px;
|
||||
.large.viewer:not(.single-image-mode) .current-marker {
|
||||
border-width: 2px;
|
||||
}
|
||||
.large.viewer:not(.single-image-mode) .mark:after,
|
||||
.large.viewer:not(.single-image-mode) .marked.image:after {
|
||||
.scale(0.7);
|
||||
}
|
||||
|
||||
.small.viewer:not(.single-image-mode) .mark:after,
|
||||
.small.viewer:not(.single-image-mode) .marked.image:after {
|
||||
.scale(1.8);
|
||||
}
|
||||
@ -1199,7 +1250,7 @@ button:hover {
|
||||
|
||||
.overlay-block {
|
||||
display: none;
|
||||
position: absolute:
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
height: 100%;
|
||||
@ -1280,7 +1331,7 @@ button:hover {
|
||||
|
||||
padding: 20px;
|
||||
|
||||
vertical-align: center;
|
||||
vertical-align: middle;
|
||||
|
||||
box-shadow: 0px 5px 50px 0px black;
|
||||
}
|
||||
|
||||
32
ui/marks.js
32
ui/marks.js
@ -12,6 +12,32 @@
|
||||
* helpers...
|
||||
*/
|
||||
|
||||
function _addMark(cls, gid, image){
|
||||
gid = gid == null ? getImageGID() : gid
|
||||
image = image == null ? getImage() : $(image)
|
||||
|
||||
var mark = $('.mark.'+cls+'.'+gid)
|
||||
|
||||
if(mark.length == 0){
|
||||
mark = $('<div class="mark selected"/>')
|
||||
.addClass(gid)
|
||||
.insertAfter(image)
|
||||
}
|
||||
return mark
|
||||
}
|
||||
function _removeMark(cls, gid, image){
|
||||
gid = gid == null ? getImageGID() : gid
|
||||
image = image == null ? getImage() : $(image)
|
||||
|
||||
var mark = $('.mark.'+cls+'.'+gid)
|
||||
|
||||
if(mark.length != 0){
|
||||
mark.detach()
|
||||
}
|
||||
return mark
|
||||
}
|
||||
|
||||
|
||||
// NOTE: to disable MARKED cleanout set no_cleanout_marks to true.
|
||||
// NOTE: MARKED may contain both gids that are not loaded and that do
|
||||
// not exist, as there is no way to distinguish between the two
|
||||
@ -81,6 +107,12 @@ var toggleImageMark = createCSSClassToggler(
|
||||
'marked',
|
||||
function(action){
|
||||
toggleMarkesView('on')
|
||||
// XXX
|
||||
if(action == 'on'){
|
||||
_addMark('selected')
|
||||
} else {
|
||||
_removeMark('selected')
|
||||
}
|
||||
$('.viewer').trigger('togglingMark', [getImage(), action])
|
||||
})
|
||||
|
||||
|
||||
@ -126,6 +126,22 @@ function getImageGID(image){
|
||||
}
|
||||
|
||||
|
||||
// Get marks associated with image...
|
||||
//
|
||||
// img can be:
|
||||
// - literal gid
|
||||
// - image
|
||||
// - null -- assume current image
|
||||
//
|
||||
// NOTE: this does not understand selectors as arguments...
|
||||
function getImageMarks(img){
|
||||
gid = typeof(img) == typeof('str') ? img : null
|
||||
gid = gid == null ? getImageGID(img) : gid
|
||||
|
||||
return $('.mark.'+gid)
|
||||
}
|
||||
|
||||
|
||||
function getRibbon(a){
|
||||
a = a == null ? getImage() : a
|
||||
|
||||
@ -241,15 +257,24 @@ function getImageBefore(image, ribbon){
|
||||
function shiftTo(image, ribbon){
|
||||
var target = getImageBefore(image, ribbon)
|
||||
var cur_ribbon = getRibbon(image)
|
||||
var marks = getImageMarks(image)
|
||||
|
||||
// insert before the first image if nothing is before the target...
|
||||
if(target.length == 0){
|
||||
image.prependTo($(ribbon))
|
||||
|
||||
} else {
|
||||
image.insertAfter(target)
|
||||
var target_marks = getImageMarks(target).last()
|
||||
image.insertAfter(
|
||||
// if target has marks, insert after them...
|
||||
target_marks.length > 0
|
||||
? target_marks
|
||||
: target)
|
||||
}
|
||||
|
||||
// move the marks...
|
||||
image.after(marks)
|
||||
|
||||
$('.viewer').trigger('shiftedImage', [image, cur_ribbon, ribbon])
|
||||
|
||||
// if removing last image out of a ribbon, remove the ribbon....
|
||||
@ -312,7 +337,13 @@ function createImage(n, force_create_new){
|
||||
'class': 'image'
|
||||
})
|
||||
} else {
|
||||
return $('<div order="'+n+'" gid="'+n+'" class="image"/>')
|
||||
return $('<div/>')
|
||||
.attr({
|
||||
order: n,
|
||||
gid: JSON.stringify(n),
|
||||
// need to strip extra classes...
|
||||
'class': 'image',
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -398,9 +429,7 @@ function removeRibbon(ribbon){
|
||||
// NOTE: this will remove everything out of a ribbon if left/right are
|
||||
// more than the length of the ribbon...
|
||||
function extendRibbon(left, right, ribbon, no_compensate_shift){
|
||||
ribbon = ribbon == null ?
|
||||
getRibbon()
|
||||
: $(ribbon)
|
||||
ribbon = ribbon == null ? getRibbon() : $(ribbon)
|
||||
left = left == null ? 0 : left
|
||||
right = right == null ? 0 : right
|
||||
var images = ribbon.children('.image')
|
||||
@ -420,12 +449,10 @@ function extendRibbon(left, right, ribbon, no_compensate_shift){
|
||||
// NOTE: we save the detached elements to reuse them on extending,
|
||||
// if needed...
|
||||
if(left < 0){
|
||||
//removed = $(images.splice(0, -left)).detach()
|
||||
removed = removed.concat($(images.splice(0, -left)).detach().toArray())
|
||||
}
|
||||
if(right < 0){
|
||||
var l = images.length
|
||||
//removed = $(images.splice(l+right, l)).detach()
|
||||
removed = removed.concat($(images.splice(l+right, l)).detach().toArray())
|
||||
}
|
||||
// calculate the maximum number of new elements left to create...
|
||||
@ -444,6 +471,11 @@ function extendRibbon(left, right, ribbon, no_compensate_shift){
|
||||
res.right = createImages(right, removed).appendTo(ribbon)
|
||||
}
|
||||
|
||||
// cleanup...
|
||||
$(removed).each(function(){
|
||||
getImageMarks($(this)).remove()
|
||||
})
|
||||
|
||||
// compensate the position...
|
||||
// NOTE: this is fool-proof as it's based on relative visual
|
||||
// position...
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user