Modified:
/exhibit/trunk/src/webapp/api/extensions/data-editor/data-editor-extension-bundle-debug.js
/exhibit/trunk/src/webapp/api/extensions/data-editor/data-editor-extension-bundle.js
/exhibit/trunk/src/webapp/api/extensions/data-editor/scripts/data-editor.js
/exhibit/trunk/src/webapp/api/extensions/data-editor/scripts/editor.js
=======================================
---
/exhibit/trunk/src/webapp/api/extensions/data-editor/data-editor-extension-bundle-debug.js
Fri Jan 6 08:39:42 2012
+++
/exhibit/trunk/src/webapp/api/extensions/data-editor/data-editor-extension-bundle-debug.js
Fri Jan 6 09:53:29 2012
@@ -62,7 +62,8 @@
}else{var xy=$(this).offset();
var w=$(this).outerWidth(true);
var h=$(this).outerHeight(true);
-var overlay='<div id="__MARKER__'+id+'"
class="'+Exhibit.DataEdit.EDIT_INJECT_MARKER+'"
onMouseOver="Exhibit.DataEdit._rollIn_(this)"
onMouseOut="Exhibit.DataEdit._rollOut_(this)" style="position:Absolute ;
top:'+xy.top+"px ; left:"+xy.left+"px ; width:"+w+"px ; height:"+h+'px ;
cursor:Help ; border:2px #dddddd Dotted;"><div
onclick="Exhibit.DataEdit.edit(\''+id+'\')" style="width:'+w+"px ;
height:"+h+'px ; background:Black; opacity:0.0; filter:alpha(opacity=0);
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0);"></div><div
class="__buttonBar__" style="position:Absolute ; top:4px ; right: 2px ;
display:None; background:Red ; color:White ; padding:0.25em 0.5em"><span
onclick="Exhibit.DataEdit.create(\''+id+'\')"
style="text-decoration:Underline ; cursor:Pointer ;">New</span> |
<span onclick="Exhibit.DataEdit.clone(\''+id+'\')"
style="text-decoration:Underline ; cursor:Pointer ;">Clone</span> |
<span onclick="Exhibit.DataEdit.de1ete(\''+id+'\')"
style="text-decoration:Underline ;
cursor:Pointer ;">Delete</span></div></div>';
+var markerId="__MARKER__"+Exhibit.DataEdit.Editor._escapeString(id);
+var overlay='<div id="'+markerId+'"
class="'+Exhibit.DataEdit.EDIT_INJECT_MARKER+'"
onMouseOver="Exhibit.DataEdit._rollIn_(this)"
onMouseOut="Exhibit.DataEdit._rollOut_(this)" style="position:Absolute ;
top:'+xy.top+"px ; left:"+xy.left+"px ; width:"+w+"px ; height:"+h+'px ;
cursor:Help ; border:2px #dddddd Dotted;"><div
onclick="Exhibit.DataEdit.edit(\''+id+'\')" style="width:'+w+"px ;
height:"+h+'px ; background:Black; opacity:0.0; filter:alpha(opacity=0);
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0);"></div><div
class="__buttonBar__" style="position:Absolute ; top:4px ; right: 2px ;
display:None; background:Red ; color:White ; padding:0.25em 0.5em"><span
onclick="Exhibit.DataEdit.create(\''+id+'\')"
style="text-decoration:Underline ; cursor:Pointer ;">New</span> |
<span onclick="Exhibit.DataEdit.clone(\''+id+'\')"
style="text-decoration:Underline ; cursor:Pointer ;">Clone</span> |
<span onclick="Exhibit.DataEdit.de1ete(\''+id+'\')"
style="text-decoration:Underline ;
cursor:Pointer ;">Delete</span></div></div>';
$(this).append(overlay);
}});
Exhibit.DataEdit._invokeEventHandlers("onActivate");
@@ -78,7 +79,7 @@
var filter=function(idx){return($(this).attr("ex:itemid"));
};
$("*").filter(filter).each(function(idx){var id=$(this).attr("ex:itemid");
-var markerId="__MARKER__"+id;
+var markerId="__MARKER__"+Exhibit.DataEdit.Editor._escapeString(id);
if(id==itemId){var filterEdit=function(idx){return
$(this).attr("_ex:role")==Exhibit.DataEdit.EDIT_ROLE_EDIT;
};
$("*",this).filter(filterEdit).css("display","None");
@@ -110,14 +111,20 @@
}while(database.containsItem(base+n));
_id=base+n;
}else{_id=_id+"2";
-}var item=database._spo[itemId];
-item[keyProp]=_id;
+}var srcItem=database._spo[itemId];
+var destItem={};
+for(var p in srcItem){var sa=srcItem[p];
+if(typeof sa=="object"){var da=[];
+for(var i in sa){da.push(sa[i]);
+}destItem[p]=da;
+}else{destItem[p]=sa;
+}}destItem[keyProp]=[_id];
var hType="onCloning";
for(var i=0;
i<Exhibit.DataEdit._lifeCycleEventHandlers_.length;
i++){var handler=Exhibit.DataEdit._lifeCycleEventHandlers_[i];
-item=(handler[hType])?handler[hType](itemId,_id,item):item;
-}database.loadData({items:[item]});
+destItem=(handler[hType])?handler[hType](itemId,_id,destItem):destItem;
+}database.loadData({items:[destItem]});
}else{return ;
}database._listeners.fire("onAfterLoadingItems",[]);
Exhibit.DataEdit._setEditLock(false);
@@ -377,7 +384,7 @@
var h=f.getHTML(onShow);
var srcDim={width:$(jq).width(),height:$(jq).height()};
var prefDim=f["_prefDimensions"];
-if(!usingLens&&prefDim&&((srcDim.width<prefDim.width)||
(srcDim.height<prefDim.height))){h='<span style="display:Inline-Block;
position:Relative; width:'+srcDim.width+"px;
height:"+srcDim.height+'px;">'+h+"</span>";
+if(false&&!usingLens&&prefDim&&((srcDim.width<prefDim.width)||
(srcDim.height<prefDim.height))){h='<span style="display:Inline-Block;
position:Relative; width:'+srcDim.width+"px;
height:"+srcDim.height+'px;">'+h+"</span>";
$(jq).replaceWith(h);
$("#"+f._divId).mouseenter(function(ev){var
pos=$(this).parent().position();
$(this).width(prefDim.width).height(prefDim.height).css("z-index","1000");
@@ -446,6 +453,15 @@
Exhibit.DataEdit.Editor._getUID=function(){Exhibit.DataEdit.Editor._uid++;
return Exhibit.DataEdit.Editor._uid;
};
+Exhibit.DataEdit.Editor._escapeString=function(str){var r="";
+for(var i=0;
+i<str.length;
+i++){var c=str.charCodeAt(i);
+var isAlpha=((c>=97&&c<=122)||(c>=65&&c<=90));
+if(isAlpha){r=r+str.charAt(i);
+}else{r=r+((c<16)?"0":"")+c.toString(16);
+}}return r;
+};
Exhibit.DataEdit.Editor.matchExactStringFromList=function(str,list){var
lstr=str.toLowerCase();
for(var i=0;
i<list.length;
=======================================
---
/exhibit/trunk/src/webapp/api/extensions/data-editor/data-editor-extension-bundle.js
Fri Jan 6 08:39:42 2012
+++
/exhibit/trunk/src/webapp/api/extensions/data-editor/data-editor-extension-bundle.js
Fri Jan 6 09:53:29 2012
@@ -33,36 +33,37 @@
Exhibit.DataEdit._editors_={};
var B=function(C){return $(this).attr("ex:itemid");
};
-$("*").filter(B).each(function(L){var D=$(this).attr("ex:itemid");
-var E=function(N){return
$(this).attr("_ex:role")==Exhibit.DataEdit.EDIT_ROLE_EDIT;
+$("*").filter(B).each(function(M){var D=$(this).attr("ex:itemid");
+var E=function(O){return
$(this).attr("_ex:role")==Exhibit.DataEdit.EDIT_ROLE_EDIT;
};
var F=$("*",this).filter(E);
-if(F.length>0){F.each(function(N){$(this).css("display","Block");
+if(F.length>0){F.each(function(O){$(this).css("display","Block");
$(this).click(function(){Exhibit.DataEdit.edit(D);
});
});
-var C=function(N){return
$(this).attr("_ex:role")==Exhibit.DataEdit.EDIT_ROLE_DELETE;
+var C=function(O){return
$(this).attr("_ex:role")==Exhibit.DataEdit.EDIT_ROLE_DELETE;
};
-$("*",this).filter(C).each(function(N){$(this).css("display","Block");
+$("*",this).filter(C).each(function(O){$(this).css("display","Block");
$(this).click(function(){Exhibit.DataEdit.de1ete(D);
});
});
-var I=function(N){return
$(this).attr("_ex:role")==Exhibit.DataEdit.EDIT_ROLE_CLONE;
+var J=function(O){return
$(this).attr("_ex:role")==Exhibit.DataEdit.EDIT_ROLE_CLONE;
};
-$("*",this).filter(I).each(function(N){$(this).css("display","Block");
+$("*",this).filter(J).each(function(O){$(this).css("display","Block");
$(this).click(function(){Exhibit.DataEdit.clone(D);
});
});
-var J=function(N){return
$(this).attr("_ex:role")==Exhibit.DataEdit.EDIT_ROLE_CREATE;
+var K=function(O){return
$(this).attr("_ex:role")==Exhibit.DataEdit.EDIT_ROLE_CREATE;
};
-$("*",this).filter(J).each(function(N){$(this).css("display","Block");
+$("*",this).filter(K).each(function(O){$(this).css("display","Block");
$(this).click(function(){Exhibit.DataEdit.create(D);
});
});
-}else{var M=$(this).offset();
-var K=$(this).outerWidth(true);
+}else{var N=$(this).offset();
+var L=$(this).outerWidth(true);
var H=$(this).outerHeight(true);
-var G='<div id="__MARKER__'+D+'"
class="'+Exhibit.DataEdit.EDIT_INJECT_MARKER+'"
onMouseOver="Exhibit.DataEdit._rollIn_(this)"
onMouseOut="Exhibit.DataEdit._rollOut_(this)" style="position:Absolute ;
top:'+M.top+"px ; left:"+M.left+"px ; width:"+K+"px ; height:"+H+'px ;
cursor:Help ; border:2px #dddddd Dotted;"><div
onclick="Exhibit.DataEdit.edit(\''+D+'\')" style="width:'+K+"px ;
height:"+H+'px ; background:Black; opacity:0.0; filter:alpha(opacity=0);
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0);"></div><div
class="__buttonBar__" style="position:Absolute ; top:4px ; right: 2px ;
display:None; background:Red ; color:White ; padding:0.25em 0.5em"><span
onclick="Exhibit.DataEdit.create(\''+D+'\')"
style="text-decoration:Underline ; cursor:Pointer ;">New</span> |
<span onclick="Exhibit.DataEdit.clone(\''+D+'\')"
style="text-decoration:Underline ; cursor:Pointer ;">Clone</span> |
<span onclick="Exhibit.DataEdit.de1ete(\''+D+'\')"
style="text-decoration:Underline ;
cursor:Pointer ;">Delete</span></div></div>';
+var I="__MARKER__"+Exhibit.DataEdit.Editor._escapeString(D);
+var G='<div id="'+I+'" class="'+Exhibit.DataEdit.EDIT_INJECT_MARKER+'"
onMouseOver="Exhibit.DataEdit._rollIn_(this)"
onMouseOut="Exhibit.DataEdit._rollOut_(this)" style="position:Absolute ;
top:'+N.top+"px ; left:"+N.left+"px ; width:"+L+"px ; height:"+H+'px ;
cursor:Help ; border:2px #dddddd Dotted;"><div
onclick="Exhibit.DataEdit.edit(\''+D+'\')" style="width:'+L+"px ;
height:"+H+'px ; background:Black; opacity:0.0; filter:alpha(opacity=0);
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0);"></div><div
class="__buttonBar__" style="position:Absolute ; top:4px ; right: 2px ;
display:None; background:Red ; color:White ; padding:0.25em 0.5em"><span
onclick="Exhibit.DataEdit.create(\''+D+'\')"
style="text-decoration:Underline ; cursor:Pointer ;">New</span> |
<span onclick="Exhibit.DataEdit.clone(\''+D+'\')"
style="text-decoration:Underline ; cursor:Pointer ;">Clone</span> |
<span onclick="Exhibit.DataEdit.de1ete(\''+D+'\')"
style="text-decoration:Underline ;
cursor:Pointer ;">Delete</span></div></div>';
$(this).append(G);
}});
Exhibit.DataEdit._invokeEventHandlers("onActivate");
@@ -78,7 +79,7 @@
var B=function(D){return($(this).attr("ex:itemid"));
};
$("*").filter(B).each(function(D){var I=$(this).attr("ex:itemid");
-var F="__MARKER__"+I;
+var F="__MARKER__"+Exhibit.DataEdit.Editor._escapeString(I);
if(I==C){var G=function(J){return
$(this).attr("_ex:role")==Exhibit.DataEdit.EDIT_ROLE_EDIT;
};
$("*",this).filter(G).css("display","None");
@@ -99,29 +100,35 @@
Exhibit.DataEdit._setEditLock(false);
Exhibit.DataEdit._invokeEventHandlers("onDelete",B);
};
-Exhibit.DataEdit.clone=function(E){if(!Exhibit.DataEdit._invokeEventHandlers("onBeforeClone",E)){return ;
-}if(confirm("Do you really want to clone this item?\nItem: "+E)){var
G=(database.getObject(E,"id"))?"id":"label";
-var F=database.getObject(E,G);
-if(!F||F!=E){return ;
-}if(F.match(/\d+$/)){var C=F.match(/(.*?)(\d*)$/);
-var A=C[1];
-var B=(C[2].length)?parseInt(C[2]):0;
-do{B++;
-}while(database.containsItem(A+B));
-F=A+B;
-}else{F=F+"2";
-}var I=database._spo[E];
-I[G]=F;
-var J="onCloning";
-for(var D=0;
-D<Exhibit.DataEdit._lifeCycleEventHandlers_.length;
-D++){var H=Exhibit.DataEdit._lifeCycleEventHandlers_[D];
-I=(H[J])?H[J](E,F,I):I;
-}database.loadData({items:[I]});
+Exhibit.DataEdit.clone=function(H){if(!Exhibit.DataEdit._invokeEventHandlers("onBeforeClone",H)){return ;
+}if(confirm("Do you really want to clone this item?\nItem: "+H)){var
K=(database.getObject(H,"id"))?"id":"label";
+var J=database.getObject(H,K);
+if(!J||J!=H){return ;
+}if(J.match(/\d+$/)){var E=J.match(/(.*?)(\d*)$/);
+var B=E[1];
+var D=(E[2].length)?parseInt(E[2]):0;
+do{D++;
+}while(database.containsItem(B+D));
+J=B+D;
+}else{J=J+"2";
+}var C=database._spo[H];
+var F={};
+for(var A in C){var I=C[A];
+if(typeof I=="object"){var N=[];
+for(var G in I){N.push(I[G]);
+}F[A]=N;
+}else{F[A]=I;
+}}F[K]=[J];
+var M="onCloning";
+for(var G=0;
+G<Exhibit.DataEdit._lifeCycleEventHandlers_.length;
+G++){var L=Exhibit.DataEdit._lifeCycleEventHandlers_[G];
+F=(L[M])?L[M](H,J,F):F;
+}database.loadData({items:[F]});
}else{return ;
}database._listeners.fire("onAfterLoadingItems",[]);
Exhibit.DataEdit._setEditLock(false);
-Exhibit.DataEdit._invokeEventHandlers("onClone",E);
+Exhibit.DataEdit._invokeEventHandlers("onClone",H);
};
Exhibit.DataEdit.create=function(E){if(!Exhibit.DataEdit._invokeEventHandlers("onBeforeCreate",E)){return ;
}var H={};
@@ -377,7 +384,7 @@
var D=E.getHTML(F);
var C={width:$(H).width(),height:$(H).height()};
var B=E["_prefDimensions"];
-if(!A&&B&&((C.width<B.width)||(C.height<B.height))){D='<span
style="display:Inline-Block; position:Relative; width:'+C.width+"px;
height:"+C.height+'px;">'+D+"</span>";
+if(false&&!A&&B&&((C.width<B.width)||(C.height<B.height))){D='<span
style="display:Inline-Block; position:Relative; width:'+C.width+"px;
height:"+C.height+'px;">'+D+"</span>";
$(H).replaceWith(D);
$("#"+E._divId).mouseenter(function(I){var J=$(this).parent().position();
$(this).width(B.width).height(B.height).css("z-index","1000");
@@ -446,6 +453,15 @@
Exhibit.DataEdit.Editor._getUID=function(){Exhibit.DataEdit.Editor._uid++;
return Exhibit.DataEdit.Editor._uid;
};
+Exhibit.DataEdit.Editor._escapeString=function(C){var B="";
+for(var A=0;
+A<C.length;
+A++){var E=C.charCodeAt(A);
+var D=((E>=97&&E<=122)||(E>=65&&E<=90));
+if(D){B=B+C.charAt(A);
+}else{B=B+((E<16)?"0":"")+E.toString(16);
+}}return B;
+};
Exhibit.DataEdit.Editor.matchExactStringFromList=function(D,C){var
B=D.toLowerCase();
for(var A=0;
A<C.length;
=======================================
---
/exhibit/trunk/src/webapp/api/extensions/data-editor/scripts/data-editor.js
Fri Jan 6 08:39:42 2012
+++
/exhibit/trunk/src/webapp/api/extensions/data-editor/scripts/data-editor.js
Fri Jan 6 09:53:29 2012
@@ -162,8 +162,9 @@
var h = $(this).outerHeight(true);
// Due to limitations with the way IE7/8 handles mouse events, we need
to create
// an invisible (but 'painted', as in it is filled with a bg col) inner
<div>
+ var markerId = '__MARKER__'+Exhibit.DataEdit.Editor._escapeString(id);
var overlay =
- '<div id="__MARKER__'+id+'" '+
+ '<div id="'+markerId+'" '+
'class="'+Exhibit.DataEdit.EDIT_INJECT_MARKER+'" '+
'onMouseOver="Exhibit.DataEdit._rollIn_(this)"
onMouseOut="Exhibit.DataEdit._rollOut_(this)" '+
'style="position:Absolute ; top:'+xy.top+'px ; left:'+xy.left+'px ;
width:'+w+'px ; height:'+h+'px ; '+
@@ -209,7 +210,7 @@
// FIXME: Can we be more efficient than '*' ?
$('*').filter(filter).each(function(idx) {
var id = $(this).attr("ex:itemid");
- var markerId = '__MARKER__'+id;
+ var markerId = '__MARKER__'+Exhibit.DataEdit.Editor._escapeString(id);
// If this is the item/lens selected for editing, change to editor
if(id == itemId) {
// Hide user defined <div ex:role="editorEditButton"> (if they exist)
@@ -276,16 +277,28 @@
// Doesn't end in digit, so add one
_id = _id+'2';
}
- // Clone item, change id/label, call cloning callback
- var item = database._spo[itemId];
- item[keyProp] = _id;
+ // Deep clone item
+ var srcItem = database._spo[itemId];
+ var destItem = {};
+ for(var p in srcItem) {
+ var sa = srcItem[p];
+ if(typeof sa == 'object') {
+ var da = [];
+ for(var i in sa) { da.push(sa[i]); }
+ destItem[p] = da;
+ } else {
+ destItem[p] = sa;
+ }
+ }
+ // Change id/label, call cloning callback
+ destItem[keyProp] = [_id];
var hType = 'onCloning';
for(var i=0;i<Exhibit.DataEdit._lifeCycleEventHandlers_.length;i++) {
var handler = Exhibit.DataEdit._lifeCycleEventHandlers_[i];
- item = (handler[hType]) ? handler[hType](itemId,_id,item) : item;
+ destItem = (handler[hType]) ? handler[hType](itemId,_id,destItem) :
destItem;
}
// Save cloned item
- database.loadData( { items:[item] } );
+ database.loadData( { items:[destItem] } );
} else {
return; // confirm() == false
}
=======================================
--- /exhibit/trunk/src/webapp/api/extensions/data-editor/scripts/editor.js
Fri Jan 6 08:39:42 2012
+++ /exhibit/trunk/src/webapp/api/extensions/data-editor/scripts/editor.js
Fri Jan 6 09:53:29 2012
@@ -221,7 +221,8 @@
// Auto-resize?
var srcDim = { width:$(jq).width() , height:$(jq).height() };
var prefDim = f['_prefDimensions']; // Has _prefDimensions..?
- if(!usingLens && prefDim && ((srcDim.width<prefDim.width) ||
(srcDim.height<prefDim.height))) {
+ // Disabled auto-resized (see false) for now
+ if(false && !usingLens && prefDim && ((srcDim.width<prefDim.width) ||
(srcDim.height<prefDim.height))) {
h = '<span style="display:Inline-Block; position:Relative;
width:'+srcDim.width+'px; height:'+srcDim.height+'px;">'+h+'</span>';
$(jq).replaceWith(h);
$('#'+f._divId)
@@ -341,6 +342,20 @@
Exhibit.DataEdit.Editor._uid++;
return Exhibit.DataEdit.Editor._uid;
}
+/** Escape string */
+Exhibit.DataEdit.Editor._escapeString = function(str) {
+ var r = '';
+ for(var i=0;i<str.length;i++) {
+ var c = str.charCodeAt(i);
+ var isAlpha = ((c>=97&&c<=122) || (c>=65&&c<=90));
+ if(isAlpha) {
+ r = r + str.charAt(i);
+ } else {
+ r = r + ((c<16)?'0':'') + c.toString(16);
+ }
+ }
+ return r;
+}
/** Return match, or closest match. */
Exhibit.DataEdit.Editor.matchExactStringFromList = function(str,list) {