new static files.

Signed-off-by: rscnt <rascnt@gmail.com>
This commit is contained in:
rascencio 2015-06-08 23:26:27 -06:00
commit fe4f6c97d5
778 changed files with 71557 additions and 0 deletions

View file

@ -0,0 +1,159 @@
// all, but without jquery !! (modified by Peter Cicman)
// css.js
function get_css(rule_name,stylesheet,delete_flag){if(!document.styleSheets)return false;rule_name=rule_name.toLowerCase();stylesheet=stylesheet||0;for(var i=stylesheet;i<document.styleSheets.length;i++){var styleSheet=document.styleSheets[i];css_rules=document.styleSheets[i].cssRules||document.styleSheets[i].rules;if(!css_rules)continue;var j=0;do{if(css_rules[j].selectorText.toLowerCase()==rule_name){if(delete_flag==true){if(document.styleSheets[i].removeRule)document.styleSheets[i].removeRule(j);if(document.styleSheets[i].deleteRule)document.styleSheets[i].deleteRule(j);return true;}
else return css_rules[j];}}
while(css_rules[++j]);}
return false;}
function add_css(rule_name,stylesheet){rule_name=rule_name.toLowerCase();stylesheet=stylesheet||0;if(!document.styleSheets||get_css(rule_name,stylesheet))return false;(document.styleSheets[stylesheet].addRule)?document.styleSheets[stylesheet].addRule(rule_name,null,0):document.styleSheets[stylesheet].insertRule(rule_name+' { }',0);return get_css(rule_name);}
function get_sheet_num(href_name){if(!document.styleSheets)return false;for(var i=0;i<document.styleSheets.length;i++){if(document.styleSheets[i].href&&document.styleSheets[i].href.toString().match(href_name))return i;}
return false;}
function remove_css(rule_name,stylesheet){return get_css(rule_name,stylesheet,true);}
function add_sheet(url){if(document.createStyleSheet){document.createStyleSheet(url);}
else{var styles="@import url(' "+url+" ');";var newSS=document.createElement('link');newSS.rel='stylesheet';newSS.href='data:text/css,'+escape(styles);document.getElementsByTagName("head")[0].appendChild(newSS);}}
// jquery.listen.js
;(function($){var a='indexer',h=$.event,j=h.special,k=$.listen=function(c,d,e,f){if(typeof d!='object'){f=e;e=d;d=document}o(c.split(/\s+/),function(a){a=k.fixes[a]||a;var b=m(d,a)||m(d,a,new n(a,d));b.append(e,f);b.start()})},m=function(b,c,d){return $.data(b,c+'.'+a,d)};$.fn[a]=function(a){return this[0]&&m(this[0],a)||null};$[a]=function(a){return m(document,a)};$.extend(k,{regex:/^((?:\w*?|\*))(?:([#.])([\w-]+))?$/,fixes:{focus:'focusin',blur:'focusout'},cache:function(a){this.caching=a}});$.each(k.fixes,function(a,b){j[b]={setup:function(){if($.browser.msie)return!1;this.addEventListener(a,j[b].handler,!0)},teardown:function(){if($.browser.msie)return!1;this.removeEventListener(a,j[b].handler,!0)},handler:function(e){arguments[0]=e=h.fix(e);e.type=b;return h.handle.apply(this,arguments)}}});$.fn.listen=function(a,b,c){return this.each(function(){k(a,this,b,c)})};function n(a,b){$.extend(this,{ids:{},tags:{},listener:b,event:a});this.id=n.instances.push(this)};n.instances=[];n.prototype={constructor:n,handle:function(e){var a=e.stopPropagation;e.stopPropagation=function(){e.stopped=1;a.apply(this,arguments)};m(this,e.type).parse(e);e.stopPropagation=a;a=e.data=null},on:0,bubbles:0,start:function(){var a=this;if(!a.on){h.add(a.listener,a.event,a.handle);a.on=1}},stop:function(){var a=this;if(a.on){h.remove(a.listener,a.event,a.handle);a.on=0}},cache:function(a,b){return $.data(a,'listenCache_'+this.id,b)},parse:function(e){var z=this,c=e.data||e.target,d=arguments,f;if(!k.caching||!(f=z.cache(c))){f=[];if(c.id&&z.ids[c.id])p(f,z.ids[c.id]);o([c.nodeName,'*'],function(a){var b=z.tags[a];if(b)o((c.className+' *').split(' '),function(a){if(a&&b[a])p(f,b[a])})});if(k.caching)z.cache(c,f)}if(f[0]){o(f,function(a){if(a.apply(c,d)===!1){e.preventDefault();e.stopPropagation()}})}if(!e.stopped&&(c=c.parentNode)&&(c.nodeName=='A'||z.bubbles&&c!=z.listener)){e.data=c;z.parse(e)}f=d=c=null},append:function(f,g){var z=this;o(f.split(/\s*,\s*/),function(a){var b=k.regex.exec(a);if(!b)throw'$.listen > "'+a+'" is not a supported selector.';var c=b[2]=='#'&&b[3],d=b[1].toUpperCase()||'*',e=b[3]||'*';if(c)(z.ids[c]||(z.ids[c]=[])).push(g);else if(d){d=z.tags[d]=z.tags[d]||{};(d[e]||(d[e]=[])).push(g)}})}};function o(a,b,c){for(var i=0,l=a.length;i<l;i++)b.call(c,a[i],i)};function p(a,b){a.push.apply(a,b);return a};$(window).unload(function(){if(typeof n=='function')o(n.instances,function(b){b.stop();$.removeData(b.listener,b.event+'.'+a);b.ids=b.names=b.listener=null})})})(jQuery);
// sarissa.js
function Sarissa(){}
Sarissa.VERSION="0.9.9.4";Sarissa.PARSED_OK="Document contains no parsing errors";Sarissa.PARSED_EMPTY="Document is empty";Sarissa.PARSED_UNKNOWN_ERROR="Not well-formed or other error";Sarissa.IS_ENABLED_TRANSFORM_NODE=false;Sarissa.REMOTE_CALL_FLAG="gr.abiss.sarissa.REMOTE_CALL_FLAG";Sarissa._lastUniqueSuffix=0;Sarissa._getUniqueSuffix=function(){return Sarissa._lastUniqueSuffix++;};Sarissa._SARISSA_IEPREFIX4XSLPARAM="";Sarissa._SARISSA_HAS_DOM_IMPLEMENTATION=document.implementation&&true;Sarissa._SARISSA_HAS_DOM_CREATE_DOCUMENT=Sarissa._SARISSA_HAS_DOM_IMPLEMENTATION&&document.implementation.createDocument;Sarissa._SARISSA_HAS_DOM_FEATURE=Sarissa._SARISSA_HAS_DOM_IMPLEMENTATION&&document.implementation.hasFeature;Sarissa._SARISSA_IS_MOZ=Sarissa._SARISSA_HAS_DOM_CREATE_DOCUMENT&&Sarissa._SARISSA_HAS_DOM_FEATURE;Sarissa._SARISSA_IS_SAFARI=navigator.userAgent.toLowerCase().indexOf("safari")!=-1||navigator.userAgent.toLowerCase().indexOf("konqueror")!=-1;Sarissa._SARISSA_IS_SAFARI_OLD=Sarissa._SARISSA_IS_SAFARI&&(parseInt((navigator.userAgent.match(/AppleWebKit\/(\d+)/)||{})[1],10)<420);Sarissa._SARISSA_IS_IE=document.all&&window.ActiveXObject&&navigator.userAgent.toLowerCase().indexOf("msie")>-1&&navigator.userAgent.toLowerCase().indexOf("opera")==-1;Sarissa._SARISSA_IS_OPERA=navigator.userAgent.toLowerCase().indexOf("opera")!=-1;if(!window.Node||!Node.ELEMENT_NODE){Node={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12};}
if(Sarissa._SARISSA_IS_SAFARI_OLD){HTMLHtmlElement=document.createElement("html").constructor;Node=HTMLElement={};HTMLElement.prototype=HTMLHtmlElement.__proto__.__proto__;HTMLDocument=Document=document.constructor;var x=new DOMParser();XMLDocument=x.constructor;Element=x.parseFromString("<Single />","text/xml").documentElement.constructor;x=null;}
if(typeof XMLDocument=="undefined"&&typeof Document!="undefined"){XMLDocument=Document;}
if(Sarissa._SARISSA_IS_IE){Sarissa._SARISSA_IEPREFIX4XSLPARAM="xsl:";var _SARISSA_DOM_PROGID="";var _SARISSA_XMLHTTP_PROGID="";var _SARISSA_DOM_XMLWRITER="";Sarissa.pickRecentProgID=function(idList){var bFound=false,e;var o2Store;for(var i=0;i<idList.length&&!bFound;i++){try{var oDoc=new ActiveXObject(idList[i]);o2Store=idList[i];bFound=true;}catch(objException){e=objException;}}
if(!bFound){throw"Could not retrieve a valid progID of Class: "+idList[idList.length-1]+". (original exception: "+e+")";}
idList=null;return o2Store;};_SARISSA_DOM_PROGID=null;_SARISSA_THREADEDDOM_PROGID=null;_SARISSA_XSLTEMPLATE_PROGID=null;_SARISSA_XMLHTTP_PROGID=null;XMLHttpRequest=function(){if(!_SARISSA_XMLHTTP_PROGID){_SARISSA_XMLHTTP_PROGID=Sarissa.pickRecentProgID(["Msxml2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"]);}
return new ActiveXObject(_SARISSA_XMLHTTP_PROGID);};Sarissa.getDomDocument=function(sUri,sName){if(!_SARISSA_DOM_PROGID){_SARISSA_DOM_PROGID=Sarissa.pickRecentProgID(["Msxml2.DOMDocument.6.0","Msxml2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XMLDOM"]);}
var oDoc=new ActiveXObject(_SARISSA_DOM_PROGID);if(sName){var prefix="";if(sUri){if(sName.indexOf(":")>1){prefix=sName.substring(0,sName.indexOf(":"));sName=sName.substring(sName.indexOf(":")+1);}else{prefix="a"+Sarissa._getUniqueSuffix();}}
if(sUri){oDoc.loadXML('<'+prefix+':'+sName+" xmlns:"+prefix+"=\""+sUri+"\""+" />");}else{oDoc.loadXML('<'+sName+" />");}}
return oDoc;};Sarissa.getParseErrorText=function(oDoc){var parseErrorText=Sarissa.PARSED_OK;if(oDoc&&oDoc.parseError&&oDoc.parseError.errorCode&&oDoc.parseError.errorCode!=0){parseErrorText="XML Parsing Error: "+oDoc.parseError.reason+"\nLocation: "+oDoc.parseError.url+"\nLine Number "+oDoc.parseError.line+", Column "+
oDoc.parseError.linepos+":\n"+oDoc.parseError.srcText+"\n";for(var i=0;i<oDoc.parseError.linepos;i++){parseErrorText+="-";}
parseErrorText+="^\n";}
else if(oDoc.documentElement===null){parseErrorText=Sarissa.PARSED_EMPTY;}
return parseErrorText;};Sarissa.setXpathNamespaces=function(oDoc,sNsSet){oDoc.setProperty("SelectionLanguage","XPath");oDoc.setProperty("SelectionNamespaces",sNsSet);};XSLTProcessor=function(){if(!_SARISSA_XSLTEMPLATE_PROGID){_SARISSA_XSLTEMPLATE_PROGID=Sarissa.pickRecentProgID(["Msxml2.XSLTemplate.6.0","MSXML2.XSLTemplate.3.0"]);}
this.template=new ActiveXObject(_SARISSA_XSLTEMPLATE_PROGID);this.processor=null;};XSLTProcessor.prototype.importStylesheet=function(xslDoc){if(!_SARISSA_THREADEDDOM_PROGID){_SARISSA_THREADEDDOM_PROGID=Sarissa.pickRecentProgID(["MSXML2.FreeThreadedDOMDocument.6.0","MSXML2.FreeThreadedDOMDocument.3.0"]);}
xslDoc.setProperty("SelectionLanguage","XPath");xslDoc.setProperty("SelectionNamespaces","xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");var converted=new ActiveXObject(_SARISSA_THREADEDDOM_PROGID);try{converted.resolveExternals=true;converted.setProperty("AllowDocumentFunction",true);}
catch(e){}
if(xslDoc.url&&xslDoc.selectSingleNode("//xsl:*[local-name() = 'import' or local-name() = 'include']")!=null){converted.async=false;converted.load(xslDoc.url);}
else{converted.loadXML(xslDoc.xml);}
converted.setProperty("SelectionNamespaces","xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");var output=converted.selectSingleNode("//xsl:output");if(output){this.outputMethod=output.getAttribute("method");}
else{delete this.outputMethod;}
this.template.stylesheet=converted;this.processor=this.template.createProcessor();this.paramsSet=[];};XSLTProcessor.prototype.transformToDocument=function(sourceDoc){var outDoc;if(_SARISSA_THREADEDDOM_PROGID){this.processor.input=sourceDoc;outDoc=new ActiveXObject(_SARISSA_DOM_PROGID);this.processor.output=outDoc;this.processor.transform();return outDoc;}
else{if(!_SARISSA_DOM_XMLWRITER){_SARISSA_DOM_XMLWRITER=Sarissa.pickRecentProgID(["Msxml2.MXXMLWriter.6.0","Msxml2.MXXMLWriter.3.0","MSXML2.MXXMLWriter","MSXML.MXXMLWriter","Microsoft.XMLDOM"]);}
this.processor.input=sourceDoc;outDoc=new ActiveXObject(_SARISSA_DOM_XMLWRITER);this.processor.output=outDoc;this.processor.transform();var oDoc=new ActiveXObject(_SARISSA_DOM_PROGID);oDoc.loadXML(outDoc.output+"");return oDoc;}};XSLTProcessor.prototype.transformToFragment=function(sourceDoc,ownerDoc){this.processor.input=sourceDoc;this.processor.transform();var s=this.processor.output;var f=ownerDoc.createDocumentFragment();var container;if(this.outputMethod=='text'){f.appendChild(ownerDoc.createTextNode(s));}else if(ownerDoc.body&&ownerDoc.body.innerHTML){container=ownerDoc.createElement('div');container.innerHTML=s;while(container.hasChildNodes()){f.appendChild(container.firstChild);}}
else{var oDoc=new ActiveXObject(_SARISSA_DOM_PROGID);if(s.substring(0,5)=='<?xml'){s=s.substring(s.indexOf('?>')+2);}
var xml=''.concat('<my>',s,'</my>');oDoc.loadXML(xml);container=oDoc.documentElement;while(container.hasChildNodes()){f.appendChild(container.firstChild);}}
return f;};XSLTProcessor.prototype.setParameter=function(nsURI,name,value){value=value?value:"";if(nsURI){this.processor.addParameter(name,value,nsURI);}else{this.processor.addParameter(name,value);}
nsURI=""+(nsURI||"");if(!this.paramsSet[nsURI]){this.paramsSet[nsURI]=[];}
this.paramsSet[nsURI][name]=value;};XSLTProcessor.prototype.getParameter=function(nsURI,name){nsURI=""+(nsURI||"");if(this.paramsSet[nsURI]&&this.paramsSet[nsURI][name]){return this.paramsSet[nsURI][name];}else{return null;}};XSLTProcessor.prototype.clearParameters=function(){for(var nsURI in this.paramsSet){for(var name in this.paramsSet[nsURI]){if(nsURI!=""){this.processor.addParameter(name,"",nsURI);}else{this.processor.addParameter(name,"");}}}
this.paramsSet=[];};}else{if(Sarissa._SARISSA_HAS_DOM_CREATE_DOCUMENT){Sarissa.__handleLoad__=function(oDoc){Sarissa.__setReadyState__(oDoc,4);};_sarissa_XMLDocument_onload=function(){Sarissa.__handleLoad__(this);};Sarissa.__setReadyState__=function(oDoc,iReadyState){oDoc.readyState=iReadyState;oDoc.readystate=iReadyState;if(oDoc.onreadystatechange!=null&&typeof oDoc.onreadystatechange=="function"){oDoc.onreadystatechange();}};Sarissa.getDomDocument=function(sUri,sName){var oDoc=document.implementation.createDocument(sUri?sUri:null,sName?sName:null,null);if(!oDoc.onreadystatechange){oDoc.onreadystatechange=null;}
if(!oDoc.readyState){oDoc.readyState=0;}
oDoc.addEventListener("load",_sarissa_XMLDocument_onload,false);return oDoc;};if(window.XMLDocument){}
else if(Sarissa._SARISSA_HAS_DOM_FEATURE&&window.Document&&!Document.prototype.load&&document.implementation.hasFeature('LS','3.0')){Sarissa.getDomDocument=function(sUri,sName){var oDoc=document.implementation.createDocument(sUri?sUri:null,sName?sName:null,null);return oDoc;};}
else{Sarissa.getDomDocument=function(sUri,sName){var oDoc=document.implementation.createDocument(sUri?sUri:null,sName?sName:null,null);if(oDoc&&(sUri||sName)&&!oDoc.documentElement){oDoc.appendChild(oDoc.createElementNS(sUri,sName));}
return oDoc;};}}}
if(!window.DOMParser){if(Sarissa._SARISSA_IS_SAFARI){DOMParser=function(){};DOMParser.prototype.parseFromString=function(sXml,contentType){var xmlhttp=new XMLHttpRequest();xmlhttp.open("GET","data:text/xml;charset=utf-8,"+encodeURIComponent(sXml),false);xmlhttp.send(null);return xmlhttp.responseXML;};}else if(Sarissa.getDomDocument&&Sarissa.getDomDocument()&&Sarissa.getDomDocument(null,"bar").xml){DOMParser=function(){};DOMParser.prototype.parseFromString=function(sXml,contentType){var doc=Sarissa.getDomDocument();doc.loadXML(sXml);return doc;};}}
if((typeof(document.importNode)=="undefined")&&Sarissa._SARISSA_IS_IE){try{document.importNode=function(oNode,bChildren){var tmp;if(oNode.nodeName=='#text'){return document.createTextNode(oNode.data);}
else{if(oNode.nodeName=="tbody"||oNode.nodeName=="tr"){tmp=document.createElement("table");}
else if(oNode.nodeName=="td"){tmp=document.createElement("tr");}
else if(oNode.nodeName=="option"){tmp=document.createElement("select");}
else{tmp=document.createElement("div");}
if(bChildren){tmp.innerHTML=oNode.xml?oNode.xml:oNode.outerHTML;}else{tmp.innerHTML=oNode.xml?oNode.cloneNode(false).xml:oNode.cloneNode(false).outerHTML;}
return tmp.getElementsByTagName("*")[0];}};}catch(e){}}
if(!Sarissa.getParseErrorText){Sarissa.getParseErrorText=function(oDoc){var parseErrorText=Sarissa.PARSED_OK;if((!oDoc)||(!oDoc.documentElement)){parseErrorText=Sarissa.PARSED_EMPTY;}else if(oDoc.documentElement.tagName=="parsererror"){parseErrorText=oDoc.documentElement.firstChild.data;parseErrorText+="\n"+oDoc.documentElement.firstChild.nextSibling.firstChild.data;}else if(oDoc.getElementsByTagName("parsererror").length>0){var parsererror=oDoc.getElementsByTagName("parsererror")[0];parseErrorText=Sarissa.getText(parsererror,true)+"\n";}else if(oDoc.parseError&&oDoc.parseError.errorCode!=0){parseErrorText=Sarissa.PARSED_UNKNOWN_ERROR;}
return parseErrorText;};}
Sarissa.getText=function(oNode,deep){var s="";var nodes=oNode.childNodes;for(var i=0;i<nodes.length;i++){var node=nodes[i];var nodeType=node.nodeType;if(nodeType==Node.TEXT_NODE||nodeType==Node.CDATA_SECTION_NODE){s+=node.data;}else if(deep===true&&(nodeType==Node.ELEMENT_NODE||nodeType==Node.DOCUMENT_NODE||nodeType==Node.DOCUMENT_FRAGMENT_NODE)){s+=Sarissa.getText(node,true);}}
return s;};if(!window.XMLSerializer&&Sarissa.getDomDocument&&Sarissa.getDomDocument("","foo",null).xml){XMLSerializer=function(){};XMLSerializer.prototype.serializeToString=function(oNode){return oNode.xml;};}
Sarissa.stripTags=function(s){return s?s.replace(/<[^>]+>/g,""):s;};Sarissa.clearChildNodes=function(oNode){while(oNode.firstChild){oNode.removeChild(oNode.firstChild);}};Sarissa.copyChildNodes=function(nodeFrom,nodeTo,bPreserveExisting){if(Sarissa._SARISSA_IS_SAFARI&&nodeTo.nodeType==Node.DOCUMENT_NODE){nodeTo=nodeTo.documentElement;}
if((!nodeFrom)||(!nodeTo)){throw"Both source and destination nodes must be provided";}
if(!bPreserveExisting){Sarissa.clearChildNodes(nodeTo);}
var ownerDoc=nodeTo.nodeType==Node.DOCUMENT_NODE?nodeTo:nodeTo.ownerDocument;var nodes=nodeFrom.childNodes;var i;if(typeof(ownerDoc.importNode)!="undefined"){for(i=0;i<nodes.length;i++){nodeTo.appendChild(ownerDoc.importNode(nodes[i],true));}}else{for(i=0;i<nodes.length;i++){nodeTo.appendChild(nodes[i].cloneNode(true));}}};Sarissa.moveChildNodes=function(nodeFrom,nodeTo,bPreserveExisting){if((!nodeFrom)||(!nodeTo)){throw"Both source and destination nodes must be provided";}
if(!bPreserveExisting){Sarissa.clearChildNodes(nodeTo);}
var nodes=nodeFrom.childNodes;if(nodeFrom.ownerDocument==nodeTo.ownerDocument){while(nodeFrom.firstChild){nodeTo.appendChild(nodeFrom.firstChild);}}else{var ownerDoc=nodeTo.nodeType==Node.DOCUMENT_NODE?nodeTo:nodeTo.ownerDocument;var i;if(typeof(ownerDoc.importNode)!="undefined"){for(i=0;i<nodes.length;i++){nodeTo.appendChild(ownerDoc.importNode(nodes[i],true));}}else{for(i=0;i<nodes.length;i++){nodeTo.appendChild(nodes[i].cloneNode(true));}}
Sarissa.clearChildNodes(nodeFrom);}};Sarissa.xmlize=function(anyObject,objectName,indentSpace){indentSpace=indentSpace?indentSpace:'';var s=indentSpace+'<'+objectName+'>';var isLeaf=false;if(!(anyObject instanceof Object)||anyObject instanceof Number||anyObject instanceof String||anyObject instanceof Boolean||anyObject instanceof Date){s+=Sarissa.escape(""+anyObject);isLeaf=true;}else{s+="\n";var isArrayItem=anyObject instanceof Array;for(var name in anyObject){s+=Sarissa.xmlize(anyObject[name],(isArrayItem?"array-item key=\""+name+"\"":name),indentSpace+" ");}
s+=indentSpace;}
return(s+=(objectName.indexOf(' ')!=-1?"</array-item>\n":"</"+objectName+">\n"));};Sarissa.escape=function(sXml){return sXml.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;");};Sarissa.unescape=function(sXml){return sXml.replace(/&apos;/g,"'").replace(/&quot;/g,"\"").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&");};Sarissa.updateCursor=function(oTargetElement,sValue){if(oTargetElement&&oTargetElement.style&&oTargetElement.style.cursor!=undefined){oTargetElement.style.cursor=sValue;}};Sarissa.updateContentFromURI=function(sFromUrl,oTargetElement,xsltproc,callback,skipCache){try{Sarissa.updateCursor(oTargetElement,"wait");var xmlhttp=new XMLHttpRequest();xmlhttp.open("GET",sFromUrl,true);xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState==4){try{var oDomDoc=xmlhttp.responseXML;if(oDomDoc&&Sarissa.getParseErrorText(oDomDoc)==Sarissa.PARSED_OK){Sarissa.updateContentFromNode(xmlhttp.responseXML,oTargetElement,xsltproc);if(callback){callback(sFromUrl,oTargetElement);}}
else{throw Sarissa.getParseErrorText(oDomDoc);}}
catch(e){if(callback){callback(sFromUrl,oTargetElement,e);}
else{throw e;}}}};if(skipCache){var oldage="Sat, 1 Jan 2000 00:00:00 GMT";xmlhttp.setRequestHeader("If-Modified-Since",oldage);}
xmlhttp.send("");}
catch(e){Sarissa.updateCursor(oTargetElement,"auto");if(callback){callback(sFromUrl,oTargetElement,e);}
else{throw e;}}};Sarissa.updateContentFromNode=function(oNode,oTargetElement,xsltproc){try{Sarissa.updateCursor(oTargetElement,"wait");Sarissa.clearChildNodes(oTargetElement);var ownerDoc=oNode.nodeType==Node.DOCUMENT_NODE?oNode:oNode.ownerDocument;if(ownerDoc.parseError&&ownerDoc.parseError.errorCode!=0){var pre=document.createElement("pre");pre.appendChild(document.createTextNode(Sarissa.getParseErrorText(ownerDoc)));oTargetElement.appendChild(pre);}
else{if(xsltproc){oNode=xsltproc.transformToDocument(oNode);}
if(oTargetElement.tagName.toLowerCase()=="textarea"||oTargetElement.tagName.toLowerCase()=="input"){oTargetElement.value=new XMLSerializer().serializeToString(oNode);}
else{try{oTargetElement.appendChild(oTargetElement.ownerDocument.importNode(oNode,true));}
catch(e){oTargetElement.innerHTML=new XMLSerializer().serializeToString(oNode);}}}}
catch(e){throw e;}
finally{Sarissa.updateCursor(oTargetElement,"auto");}};Sarissa.formToQueryString=function(oForm){var qs="";for(var i=0;i<oForm.elements.length;i++){var oField=oForm.elements[i];var sFieldName=oField.getAttribute("name")?oField.getAttribute("name"):oField.getAttribute("id");if(sFieldName&&((!oField.disabled)||oField.type=="hidden")){switch(oField.type){case"hidden":case"text":case"textarea":case"password":qs+=sFieldName+"="+encodeURIComponent(oField.value)+"&";break;case"select-one":qs+=sFieldName+"="+encodeURIComponent(oField.options[oField.selectedIndex].value)+"&";break;case"select-multiple":for(var j=0;j<oField.length;j++){var optElem=oField.options[j];if(optElem.selected===true){qs+=sFieldName+"[]"+"="+encodeURIComponent(optElem.value)+"&";}}
break;case"checkbox":case"radio":if(oField.checked){qs+=sFieldName+"="+encodeURIComponent(oField.value)+"&";}
break;}}}
return qs.substr(0,qs.length-1);};Sarissa.updateContentFromForm=function(oForm,oTargetElement,xsltproc,callback){try{Sarissa.updateCursor(oTargetElement,"wait");var params=Sarissa.formToQueryString(oForm)+"&"+Sarissa.REMOTE_CALL_FLAG+"=true";var xmlhttp=new XMLHttpRequest();var bUseGet=oForm.getAttribute("method")&&oForm.getAttribute("method").toLowerCase()=="get";if(bUseGet){xmlhttp.open("GET",oForm.getAttribute("action")+"?"+params,true);}
else{xmlhttp.open('POST',oForm.getAttribute("action"),true);xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Content-length",params.length);xmlhttp.setRequestHeader("Connection","close");}
xmlhttp.onreadystatechange=function(){try{if(xmlhttp.readyState==4){var oDomDoc=xmlhttp.responseXML;if(oDomDoc&&Sarissa.getParseErrorText(oDomDoc)==Sarissa.PARSED_OK){Sarissa.updateContentFromNode(xmlhttp.responseXML,oTargetElement,xsltproc);if(callback){callback(oForm,oTargetElement);}}
else{throw Sarissa.getParseErrorText(oDomDoc);}}}
catch(e){if(callback){callback(oForm,oTargetElement,e);}
else{throw e;}}};xmlhttp.send(bUseGet?"":params);}
catch(e){Sarissa.updateCursor(oTargetElement,"auto");if(callback){callback(oForm,oTargetElement,e);}
else{throw e;}}
return false;};Sarissa.FUNCTION_NAME_REGEXP=new RegExp("");Sarissa.getFunctionName=function(oFunc,bForce){var name;if(!name){if(bForce){name="SarissaAnonymous"+Sarissa._getUniqueSuffix();window[name]=oFunc;}
else{name=null;}}
if(name){window[name]=oFunc;}
return name;};Sarissa.setRemoteJsonCallback=function(url,callback,callbackParam){if(!callbackParam){callbackParam="callback";}
var callbackFunctionName=Sarissa.getFunctionName(callback,true);var id="sarissa_json_script_id_"+Sarissa._getUniqueSuffix();var oHead=document.getElementsByTagName("head")[0];var scriptTag=document.createElement('script');scriptTag.type='text/javascript';scriptTag.id=id;scriptTag.onload=function(){};if(url.indexOf("?")!=-1){url+=("&"+callbackParam+"="+callbackFunctionName);}
else{url+=("?"+callbackParam+"="+callbackFunctionName);}
scriptTag.src=url;oHead.appendChild(scriptTag);return id;};
// sarissa_ieemu_xpath.js
if(Sarissa._SARISSA_HAS_DOM_FEATURE&&document.implementation.hasFeature("XPath","3.0")){SarissaNodeList=function(i){this.length=i;};SarissaNodeList.prototype=[];SarissaNodeList.prototype.constructor=Array;SarissaNodeList.prototype.item=function(i){return(i<0||i>=this.length)?null:this[i];};SarissaNodeList.prototype.expr="";if(window.XMLDocument&&(!XMLDocument.prototype.setProperty)){XMLDocument.prototype.setProperty=function(x,y){};}
Sarissa.setXpathNamespaces=function(oDoc,sNsSet){oDoc._sarissa_useCustomResolver=true;var namespaces=sNsSet.indexOf(" ")>-1?sNsSet.split(" "):[sNsSet];oDoc._sarissa_xpathNamespaces=[];for(var i=0;i<namespaces.length;i++){var ns=namespaces[i];var colonPos=ns.indexOf(":");var assignPos=ns.indexOf("=");if(colonPos>0&&assignPos>colonPos+1){var prefix=ns.substring(colonPos+1,assignPos);var uri=ns.substring(assignPos+2,ns.length-1);oDoc._sarissa_xpathNamespaces[prefix]=uri;}else{throw"Bad format on namespace declaration(s) given";}}};XMLDocument.prototype._sarissa_useCustomResolver=false;XMLDocument.prototype._sarissa_xpathNamespaces=[];XMLDocument.prototype.selectNodes=function(sExpr,contextNode,returnSingle){var nsDoc=this;var nsresolver;if(this._sarissa_useCustomResolver){nsresolver=function(prefix){var s=nsDoc._sarissa_xpathNamespaces[prefix];if(s){return s;}
else{throw"No namespace URI found for prefix: '"+prefix+"'";}};}
else{nsresolver=this.createNSResolver(this.documentElement);}
var result=null;if(!returnSingle){var oResult=this.evaluate(sExpr,(contextNode?contextNode:this),nsresolver,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);var nodeList=new SarissaNodeList(oResult.snapshotLength);nodeList.expr=sExpr;for(var i=0;i<nodeList.length;i++){nodeList[i]=oResult.snapshotItem(i);}
result=nodeList;}
else{result=this.evaluate(sExpr,(contextNode?contextNode:this),nsresolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;}
return result;};Element.prototype.selectNodes=function(sExpr){var doc=this.ownerDocument;if(doc.selectNodes){return doc.selectNodes(sExpr,this);}
else{throw"Method selectNodes is only supported by XML Elements";}};XMLDocument.prototype.selectSingleNode=function(sExpr,contextNode){var ctx=contextNode?contextNode:null;return this.selectNodes(sExpr,ctx,true);};Element.prototype.selectSingleNode=function(sExpr){var doc=this.ownerDocument;if(doc.selectSingleNode){return doc.selectSingleNode(sExpr,this);}
else{throw"Method selectNodes is only supported by XML Elements";}};Sarissa.IS_ENABLED_SELECT_NODES=true;}
// jquery.xslt.js
var xslTransform={version:20071203,debug:false,init:function(){try{parseFloat(jQuery.fn.jquery)>=1;}catch(e){alert('xslTransform requires jQuery 1.0.4 or greater ... please load it prior to xslTransform');}
try{Sarissa;}catch(e){alert('Missing Sarissa ... please load it prior to xslTransform');}
if(!jQuery.log){jQuery.log=function(){};jQuery.fn.debug=function(){};}
if(this.debug)jQuery.log('xslTransform:init(): version '+xslTransform.version);},XMLSerializer:new XMLSerializer(),serialize:function(data){if(this.debug)jQuery.log('serialize(): received '+typeof(data));if(typeof(data)=='string'){return data;}
return this.XMLSerializer.serializeToString(data);},load:function(xml,meth){if(this.debug)jQuery.log('load(): received '+typeof(xml));var r;if(typeof(xml)=='object'){return xml;}
if(xml.substring(0,1)=='<'){r=this.loadString(xml);}else{r=this.loadFile(xml,meth);}
if(r){r.setProperty('SelectionNamespaces','xmlns:xsl="http://www.w3.org/1999/XSL/Transform"');r.setProperty('SelectionLanguage','XPath');return r;}else{if(this.debug)$.log('Unable to load '+xml);return false;}},loadString:function(str){if(this.debug)jQuery.log('loadString(): '+str+'::'+typeof(str));var p=new DOMParser();var xml=p.parseFromString(str,'text/xml');if(!xml){if(this.debug)jQuery.log('loadString(): parseFromString() failed');return false;}
return xml;},loadFile:function(url,meth){if(this.debug)jQuery.log('loadFile(): '+url+'::'+typeof(url));if(!url){if(this.debug)jQuery.log('ERROR: loadFile() missing url');return false;}
var doc;this.xhrsuccess=function(data,str){if(this.debug)jQuery.log('loadFile() completed successfully ('+str+')');doc=data;return true;};this.xhrerror=function(xhr,err){window.DEBUG=true;if(this.debug)jQuery.log('loadFile() failed to load the requested file: ('+err+') - xml: '+xhr.responseXML+' - text: '+xhr.responseText);doc=null;return false;};if(!meth)meth="GET";$.ajax({type:meth,url:url,async:false,success:this.xhrsuccess,error:this.xhrerror});if(!doc){if(this.debug)jQuery.log('ERROR: document '+url+' not found (404), or unable to load');return false;}
if(doc.length==0){if(this.debug)jQuery.log('ERROR: document '+url+' loaded in loadFile() has no data');return false;}
return doc;},transform:function(xsl,xml,options){var log={'xsl':xsl,'xml':xml,'options':options};if(this.debug)jQuery.log('transform(): '+xsl+'::'+xml+'::'+options.toString());options=options||{};var xml={'request':xml,'doc':this.load(xml,options.meth)};if(options.xpath&&xml.doc&&!jQuery.browser.msie){xml.doc=xml.doc.selectSingleNode(options.xpath.toString());if(this.debug)$.log('transform(): xpath has been run...resulting doc: '+(this.serialize(xml.doc)));}
var result={'xsl':this.load(xsl,options.meth)};result.json=false;if(options.json&&xml.doc){result.json=xml.doc.selectSingleNode(options.json.toString());}
var processor=new XSLTProcessor();processor.importStylesheet(result.xsl);if(options.params&&processor){if(this.debug)jQuery.log('transform(): received xsl params: '+options.params.toString());for(key in options.params){processor.setParameter(null,key.toString(),options.params[key].toString());}}
result.doc=processor.transformToDocument(xml.doc);var errorTxt=Sarissa.getParseErrorText(result.doc);if(this.debug)jQuery.log('transform(): Sarissa parse text: '+errorTxt);if(errorTxt!=Sarissa.PARSED_OK){result.string=Sarissa.getParseErrorText(result.doc)+' :: using '+xsl+' => '+xml.request;if(this.debug)jQuery.log('transform(): error in transformation: '+Sarissa.getParseErrorText(result.doc));return result;}
result.string=this.serialize(result.doc);result.scripts=jQuery('script',result.doc).text();return result;}};xslTransform.init();jQuery.fn.getTransform=function(xsl,xml,options){var settings={append:false,params:{},xpath:'',eval:true,callback:'',json:false,meth:"GET"};jQuery.extend(settings,options);if(xslTransform.debug)jQuery.log('getTransform: '+xsl+'::'+xml+'::'+settings.toString());if(!xsl||!xml){if(xslTransform.debug)jQuery.log('getTransform: missing xsl or xml');return;}
return this.each(function(){var trans=xslTransform.transform(xsl,xml,settings);var re=trans.string.match(/<\?xml.*?\?>/);if(re){trans.string=trans.string.replace(re,'');if(xslTransform.debug)jQuery.log('getTransform(): found an xml declaration and removed it');}
try{if(settings.append)$(this).append(trans.string);else if(settings.repl)$(this).replaceWith(trans.string);else $(this).html(trans.string);}catch(e){if(xslTransform.debug)$.log('getTransform: error placing results of transform into element, falling back to innerHTML: '+e.toString());$(this)[0].innerHTML=trans.string;}
if(settings.eval&&trans.scripts){if(trans.scripts.length>0){if(xslTransform.debug)jQuery.log('Found text/javascript in transformed result');eval.call(window,trans.scripts);}}
if(settings.callback&&jQuery.isFunction(settings.callback)){var json=false;if(settings.json&&trans.json)eval("json = "+trans.json.firstChild.data);settings.callback.apply(window,[trans.string,json]);}});};
// jquery.metadata.js
(function($){$.extend({metadata:{defaults:{type:'class',name:'metadata',cre:/({.*})/,single:'metadata'},setType:function(type,name){this.defaults.type=type;this.defaults.name=name;},get:function(elem,opts){var settings=$.extend({},this.defaults,opts);if(!settings.single.length)settings.single='metadata';var data=$.data(elem,settings.single);if(data)return data;data="{}";if(settings.type=="class"){var m=settings.cre.exec(elem.className);if(m)
data=m[1];}else if(settings.type=="elem"){if(!elem.getElementsByTagName)
return undefined;var e=elem.getElementsByTagName(settings.name);if(e.length)
data=$.trim(e[0].innerHTML);}else if(elem.getAttribute!=undefined){var attr=elem.getAttribute(settings.name);if(attr)
data=attr;}
if(data.indexOf('{')<0)
data="{"+data+"}";data=eval("("+data+")");$.data(elem,settings.single,data);return data;}}});$.fn.metadata=function(opts){return $.metadata.get(this[0],opts);};})(jQuery);
// jquery.cookie.js
jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1;}
var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}
expires='; expires='+date.toUTCString();}
var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}
return cookieValue;}};

View file

@ -0,0 +1,46 @@
function get_css(rule_name, stylesheet, delete_flag) {
if (!document.styleSheets) return false;
rule_name = rule_name.toLowerCase(); stylesheet = stylesheet || 0;
for (var i = stylesheet; i < document.styleSheets.length; i++) {
var styleSheet = document.styleSheets[i]; css_rules = document.styleSheets[i].cssRules || document.styleSheets[i].rules;
if(!css_rules) continue;
var j = 0;
do {
if(css_rules[j].selectorText.toLowerCase() == rule_name) {
if(delete_flag == true) {
if(document.styleSheets[i].removeRule) document.styleSheets[i].removeRule(j);
if(document.styleSheets[i].deleteRule) document.styleSheets[i].deleteRule(j);
return true;
}
else return css_rules[j];
}
}
while (css_rules[++j]);
}
return false;
}
function add_css(rule_name, stylesheet) {
rule_name = rule_name.toLowerCase(); stylesheet = stylesheet || 0;
if (!document.styleSheets || get_css(rule_name, stylesheet)) return false;
(document.styleSheets[stylesheet].addRule) ? document.styleSheets[stylesheet].addRule(rule_name, null, 0) : document.styleSheets[stylesheet].insertRule(rule_name+' { }', 0);
return get_css(rule_name);
}
function get_sheet_num (href_name) {
if (!document.styleSheets) return false;
for (var i = 0; i < document.styleSheets.length; i++) { if(document.styleSheets[i].href && document.styleSheets[i].href.toString().match(href_name)) return i; }
return false;
}
function remove_css(rule_name, stylesheet) { return get_css(rule_name, stylesheet, true); }
function add_sheet(url) {
if(document.createStyleSheet) {
document.createStyleSheet(url);
}
else {
var styles = "@import url(' " + url + " ');";
var newSS = document.createElement('link');
newSS.rel ='stylesheet';
newSS.href ='data:text/css,'+escape(styles);
document.getElementsByTagName("head")[0].appendChild(newSS);
}
}

View file

@ -0,0 +1,96 @@
/**
* Cookie plugin
*
* Copyright (c) 2006 Klaus Hartl (stilbuero.de)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/
/**
* Create a cookie with the given name and value and other optional parameters.
*
* @example $.cookie('the_cookie', 'the_value');
* @desc Set the value of a cookie.
* @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
* @desc Create a cookie with all available options.
* @example $.cookie('the_cookie', 'the_value');
* @desc Create a session cookie.
* @example $.cookie('the_cookie', null);
* @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
* used when the cookie was set.
*
* @param String name The name of the cookie.
* @param String value The value of the cookie.
* @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
* @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
* If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
* If set to null or omitted, the cookie will be a session cookie and will not be retained
* when the the browser exits.
* @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
* @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
* @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
* require a secure protocol (like HTTPS).
* @type undefined
*
* @name $.cookie
* @cat Plugins/Cookie
* @author Klaus Hartl/klaus.hartl@stilbuero.de
*/
/**
* Get the value of a cookie with the given name.
*
* @example $.cookie('the_cookie');
* @desc Get the value of a cookie.
*
* @param String name The name of the cookie.
* @return The value of the cookie.
* @type String
*
* @name $.cookie
* @cat Plugins/Cookie
* @author Klaus Hartl/klaus.hartl@stilbuero.de
*/
jQuery.cookie = function(name, value, options) {
if (typeof value != 'undefined') { // name and value given, set cookie
options = options || {};
if (value === null) {
value = '';
options.expires = -1;
}
var expires = '';
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
var date;
if (typeof options.expires == 'number') {
date = new Date();
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
} else {
date = options.expires;
}
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
}
// CAUTION: Needed to parenthesize options.path and options.domain
// in the following expressions, otherwise they evaluate to undefined
// in the packed version for some reason...
var path = options.path ? '; path=' + (options.path) : '';
var domain = options.domain ? '; domain=' + (options.domain) : '';
var secure = options.secure ? '; secure' : '';
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
} else { // only name given, get cookie
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
};

View file

@ -0,0 +1,121 @@
/**
* @ Original code by by Binny V A, Original version: 2.00.A
* @ http://www.openjs.com/scripts/events/keyboard_shortcuts/
* @ Original License : BSD
* @ jQuery Plugin by Tzury Bar Yochay
tzury.by@gmail.com
evalinux.wordpress.com
facebook.com/profile.php?id=513676303
* @ jQuery Plugin version Beta (0.0.2)
* @ License: Whatever feats in between jQuery-License + BSD-License
TODO:
add queue support (as in gmail) e.g. 'x' then 'y', etc.
add mouse + mouse wheel events.
Usage:
jQuery.hotkeys.add('Ctrl+c', function(){ alert('copy anyone?');});
jQuery.hotkeys.add('Ctrl+c', {target:'div#editor', type:'keyup', propagate: true},function(){ alert('copy anyone?');});
jQuery.hotkeys.remove('Ctrl+c');
*/
(function (jQuery){
this.version = '(beta)(0.0.2)';
this.all = {};
this.special_keys = {
27: 'esc', 9: 'tab', 32:'space', 13: 'return', 8:'backspace', 145: 'scroll', 20: 'capslock',
144: 'numlock', 19:'pause', 45:'insert', 36:'home', 46:'del',35:'end', 33: 'pageup',
34:'pagedown', 37:'left', 38:'up', 39:'right',40:'down', 112:'f1',113:'f2', 114:'f3',
115:'f4', 116:'f5', 117:'f6', 118:'f7', 119:'f8', 120:'f9', 121:'f10', 122:'f11', 123:'f12'};
this.shift_nums = { "`":"~", "1":"!", "2":"@", "3":"#", "4":"$", "5":"%", "6":"^", "7":"&",
"8":"*", "9":"(", "0":")", "-":"_", "=":"+", ";":":", "'":"\"", ",":"<",
".":">", "/":"?", "\\":"|" };
this.add = function(combi, options, callback) {
if (jQuery.isFunction(options)){
callback = options;
options = {};
}
var opt = {},
defaults = {type: 'keydown', propagate: false, disableInInput: false, target: jQuery('html')[0]},
that = this;
opt = jQuery.extend( opt , defaults, options || {} );
combi = combi.toLowerCase();
// inspect if key keystroke matches
var inspector = function(event) {
event = jQuery.event.fix(event); // jQuery event normalization.
var element = event.target;
// @ TextNode -> nodeType == 3
element = (element.nodeType==3) ? element.parentNode : element;
if(opt['disableInInput']) { // Disable shortcut keys in Input, Textarea fields
var target = jQuery(element);
if( target.is("input") || target.is("textarea")){
return;
}
}
var code = event.which,
type = event.type,
character = String.fromCharCode(code).toLowerCase(),
special = that.special_keys[code],
shift = event.shiftKey,
ctrl = event.ctrlKey,
alt= event.altKey,
propagate = true, // default behaivour
mapPoint = null;
// in opera + safari, the event.target is unpredictable.
// for example: 'keydown' might be associated with HtmlBodyElement
// or the element where you last clicked with your mouse.
if (jQuery.browser.opera || jQuery.browser.safari){
while (!that.all[element] && element.parentNode){
element = element.parentNode;
}
}
var cbMap = that.all[element].events[type].callbackMap;
if(!shift && !ctrl && !alt) { // No Modifiers
mapPoint = cbMap[special] || cbMap[character]
}
// deals with combinaitons (alt|ctrl|shift+anything)
else{
var modif = '';
if(alt) modif +='alt+';
if(ctrl) modif+= 'ctrl+';
if(shift) modif += 'shift+';
// modifiers + special keys or modifiers + characters or modifiers + shift characters
mapPoint = cbMap[modif+special] || cbMap[modif+character] || cbMap[modif+that.shift_nums[character]]
}
if (mapPoint){
mapPoint.cb(event);
if(!mapPoint.propagate) {
event.stopPropagation();
event.preventDefault();
return false;
}
}
};
// first hook for this element
if (!this.all[opt.target]){
this.all[opt.target] = {events:{}};
}
if (!this.all[opt.target].events[opt.type]){
this.all[opt.target].events[opt.type] = {callbackMap: {}}
jQuery.event.add(opt.target, opt.type, inspector);
}
this.all[opt.target].events[opt.type].callbackMap[combi] = {cb: callback, propagate:opt.propagate};
return jQuery;
};
this.remove = function(exp, opt) {
opt = opt || {};
target = opt.target || jQuery('html')[0];
type = opt.type || 'keydown';
exp = exp.toLowerCase();
delete this.all[target].events[type].callbackMap[exp]
return jQuery;
};
jQuery.hotkeys = this;
return jQuery;
})(jQuery);

32
static/cms/js/jstree/_lib/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,9 @@
/**
* jQuery.Listen - Light and fast event handling, using event delegation.
* Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
* Dual licensed under MIT and GPL.
* Date: 3/7/2008
* http://flesler.blogspot.com/2007/10/jquerylisten.html
* @version 1.0.3
*/
;(function($){var a='indexer',h=$.event,j=h.special,k=$.listen=function(c,d,e,f){if(typeof d!='object'){f=e;e=d;d=document}o(c.split(/\s+/),function(a){a=k.fixes[a]||a;var b=m(d,a)||m(d,a,new n(a,d));b.append(e,f);b.start()})},m=function(b,c,d){return $.data(b,c+'.'+a,d)};$.fn[a]=function(a){return this[0]&&m(this[0],a)||null};$[a]=function(a){return m(document,a)};$.extend(k,{regex:/^((?:\w*?|\*))(?:([#.])([\w-]+))?$/,fixes:{focus:'focusin',blur:'focusout'},cache:function(a){this.caching=a}});$.each(k.fixes,function(a,b){j[b]={setup:function(){if($.browser.msie)return!1;this.addEventListener(a,j[b].handler,!0)},teardown:function(){if($.browser.msie)return!1;this.removeEventListener(a,j[b].handler,!0)},handler:function(e){arguments[0]=e=h.fix(e);e.type=b;return h.handle.apply(this,arguments)}}});$.fn.listen=function(a,b,c){return this.each(function(){k(a,this,b,c)})};function n(a,b){$.extend(this,{ids:{},tags:{},listener:b,event:a});this.id=n.instances.push(this)};n.instances=[];n.prototype={constructor:n,handle:function(e){var a=e.stopPropagation;e.stopPropagation=function(){e.stopped=1;a.apply(this,arguments)};m(this,e.type).parse(e);e.stopPropagation=a;a=e.data=null},on:0,bubbles:0,start:function(){var a=this;if(!a.on){h.add(a.listener,a.event,a.handle);a.on=1}},stop:function(){var a=this;if(a.on){h.remove(a.listener,a.event,a.handle);a.on=0}},cache:function(a,b){return $.data(a,'listenCache_'+this.id,b)},parse:function(e){var z=this,c=e.data||e.target,d=arguments,f;if(!k.caching||!(f=z.cache(c))){f=[];if(c.id&&z.ids[c.id])p(f,z.ids[c.id]);o([c.nodeName,'*'],function(a){var b=z.tags[a];if(b)o((c.className+' *').split(' '),function(a){if(a&&b[a])p(f,b[a])})});if(k.caching)z.cache(c,f)}if(f[0]){o(f,function(a){if(a.apply(c,d)===!1){e.preventDefault();e.stopPropagation()}})}if(!e.stopped&&(c=c.parentNode)&&(c.nodeName=='A'||z.bubbles&&c!=z.listener)){e.data=c;z.parse(e)}f=d=c=null},append:function(f,g){var z=this;o(f.split(/\s*,\s*/),function(a){var b=k.regex.exec(a);if(!b)throw'$.listen > "'+a+'" is not a supported selector.';var c=b[2]=='#'&&b[3],d=b[1].toUpperCase()||'*',e=b[3]||'*';if(c)(z.ids[c]||(z.ids[c]=[])).push(g);else if(d){d=z.tags[d]=z.tags[d]||{};(d[e]||(d[e]=[])).push(g)}})}};function o(a,b,c){for(var i=0,l=a.length;i<l;i++)b.call(c,a[i],i)};function p(a,b){a.push.apply(a,b);return a};$(window).unload(function(){if(typeof n=='function')o(n.instances,function(b){b.stop();$.removeData(b.listener,b.event+'.'+a);b.ids=b.names=b.listener=null})})})(jQuery);

View file

@ -0,0 +1,19 @@
(function($){ // block scope
jQuery.fn.log = function (msg) {
if (!window.console || !console) return;
if (window.console || console.firebug){
msg = msg || '';
if(msg !== '') msg += ': ';
console.log("%s%o", msg, this);
}
return this;
};
$.extend({
log : function (msg) {
if (!window.console || !console) return;
if (window.console || console.firebug) {
console.log("%s", msg);
}
}
});
})(jQuery);

View file

@ -0,0 +1,122 @@
/*
* Metadata - jQuery plugin for parsing metadata from elements
*
* Copyright (c) 2006 John Resig, Yehuda Katz, J<EFBFBD>örn Zaefferer, Paul McLanahan
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Revision: $Id: jquery.metadata.js 4187 2007-12-16 17:15:27Z joern.zaefferer $
*
*/
/**
* Sets the type of metadata to use. Metadata is encoded in JSON, and each property
* in the JSON will become a property of the element itself.
*
* There are three supported types of metadata storage:
*
* attr: Inside an attribute. The name parameter indicates *which* attribute.
*
* class: Inside the class attribute, wrapped in curly braces: { }
*
* elem: Inside a child element (e.g. a script tag). The
* name parameter indicates *which* element.
*
* The metadata for an element is loaded the first time the element is accessed via jQuery.
*
* As a result, you can define the metadata type, use $(expr) to load the metadata into the elements
* matched by expr, then redefine the metadata type and run another $(expr) for other elements.
*
* @name $.metadata.setType
*
* @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p>
* @before $.metadata.setType("class")
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
* @desc Reads metadata from the class attribute
*
* @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p>
* @before $.metadata.setType("attr", "data")
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
* @desc Reads metadata from a "data" attribute
*
* @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p>
* @before $.metadata.setType("elem", "script")
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
* @desc Reads metadata from a nested script element
*
* @param String type The encoding type
* @param String name The name of the attribute to be used to get metadata (optional)
* @cat Plugins/Metadata
* @descr Sets the type of encoding to be used when loading metadata for the first time
* @type undefined
* @see metadata()
*/
(function($) {
$.extend({
metadata : {
defaults : {
type: 'class',
name: 'metadata',
cre: /({.*})/,
single: 'metadata'
},
setType: function( type, name ){
this.defaults.type = type;
this.defaults.name = name;
},
get: function( elem, opts ){
var settings = $.extend({},this.defaults,opts);
// check for empty string in single property
if ( !settings.single.length ) settings.single = 'metadata';
var data = $.data(elem, settings.single);
// returned cached data if it already exists
if ( data ) return data;
data = "{}";
if ( settings.type == "class" ) {
var m = settings.cre.exec( elem.className );
if ( m )
data = m[1];
} else if ( settings.type == "elem" ) {
if( !elem.getElementsByTagName )
return undefined;
var e = elem.getElementsByTagName(settings.name);
if ( e.length )
data = $.trim(e[0].innerHTML);
} else if ( elem.getAttribute != undefined ) {
var attr = elem.getAttribute( settings.name );
if ( attr )
data = attr;
}
if ( data.indexOf( '{' ) <0 )
data = "{" + data + "}";
data = eval("(" + data + ")");
$.data( elem, settings.single, data );
return data;
}
}
});
/**
* Returns the metadata object for the first member of the jQuery object.
*
* @name metadata
* @descr Returns element's metadata object
* @param Object opts An object contianing settings to override the defaults
* @type jQuery
* @cat Plugins/Metadata
*/
$.fn.metadata = function( opts ){
return $.metadata.get( this[0], opts );
};
})(jQuery);

View file

@ -0,0 +1,352 @@
/**
* xslTransform
* Tools for XSLT transformations; jQuery wrapper for Sarissa <http://sarissa.sourceforge.net/>.
* See jQuery.fn.log below for documentation on $.log().
* See jQuery.fn.getTransform below for documention on the $.getTransform().
* See var DEBUG below for turning debugging/logging on and off.
*
* @version 20071203
* @since 2006-07-05
* @copyright Copyright (c) 2006 Glyphix Studio, Inc. http://www.glyphix.com
* @author Brad Brizendine <brizbane@gmail.com>, Matt Antone <antone@glyphix.com>
* @license MIT http://www.opensource.org/licenses/mit-license.php
* @requires >= jQuery 1.0.3 http://jquery.com/
* @requires jquery.debug.js http://jquery.glyphix.com/
* @requires >= sarissa.js 0.9.7.6 http://sarissa.sourceforge.net/
*
* @example
* var r = xslTransform.transform('path-to-xsl.xsl','path-to-xml.xml');
* @desc Perform a transformation and place the results in var r
*
* @example
* var r = xslTransform.transform('path-to-xsl.xsl','path-to-xml.xml');
* var str = xslTransform.serialize( r );
* @desc Perform a transformation, then turn the result into a string
*
* @example
* var doc = xslTransform.load('path-to-xml.xml');
* @desc Load an xml file and return a parsed xml object
*
* @example
* var xml = '<xmldoc><foo>bar</foo></xmldoc>';
* var doc = xslTransform.load(xml);
* @desc Load an xml string and return a parsed xml object
*/
var xslTransform = {
version: 20071203,
debug: false,
// init ... test for requirements
init: function(){
// check for v1.0.4 / v1.1 or later of jQuery
try{
parseFloat(jQuery.fn.jquery) >= 1;
}catch(e){
alert('xslTransform requires jQuery 1.0.4 or greater ... please load it prior to xslTransform');
}
// check for Sarissa
try{
Sarissa;
}catch(e){
alert('Missing Sarissa ... please load it prior to xslTransform');
}
// if no log function, create a blank one
if( !jQuery.log ){
jQuery.log = function(){};
jQuery.fn.debug = function(){};
}
// log the version
if(this.debug) jQuery.log( 'xslTransform:init(): version ' + xslTransform.version );
},
// initialize Sarissa's serializer
XMLSerializer: new XMLSerializer(),
/*
* serialize
* Turns the provided object into a string and returns it.
*
* @param data Mixed
* @returns String
*/
serialize: function( data ){
if(this.debug) jQuery.log( 'serialize(): received ' + typeof(data) );
// if it's already a string, no further processing required
if( typeof(data) == 'string' ){
return data;
}
return this.XMLSerializer.serializeToString( data );
},
/*
* load
* Attempts to load xml data by automatically sensing the type of the provided data.
*
* @param xml Mixed the xml data
* @returns Object
*/
load: function( xml, meth ){
if(this.debug) jQuery.log( 'load(): received ' + typeof(xml) );
// the result
var r;
// if it's an object, assume it's already an XML object, so just return it
if( typeof(xml) == 'object' ){
return xml;
}
// if it's a string, determine if it's xml data or a path
// assume that the first character is an opening caret if it's XML data
if( xml.substring(0,1) == '<' ){
r = this.loadString( xml );
}else{
r = this.loadFile( xml , meth );
}
if( r ){
// the following two lines are needed to get IE (msxml3) to run xpath ... set it on all xml data
r.setProperty( 'SelectionNamespaces', 'xmlns:xsl="http://www.w3.org/1999/XSL/Transform"' );
r.setProperty( 'SelectionLanguage', 'XPath' );
return r;
}else{
if(this.debug) $.log( 'Unable to load ' + xml );
return false;
}
},
/*
* loadString
* Parses an XML string and returns the result.
*
* @param str String the xml string to turn into a parsed XML object
* @returns Object
*/
loadString: function( str ){
if(this.debug) jQuery.log( 'loadString(): ' + str + '::' + typeof(str) );
// use Sarissa to generate an XML doc
var p = new DOMParser();
var xml = p.parseFromString( str, 'text/xml' );
if( !xml ){
if(this.debug) jQuery.log( 'loadString(): parseFromString() failed' );
return false;
}
return xml;
},
/*
* loadFile
* Attempts to retrieve the requested path, specified by url.
* If url is an object, it's assumed it's already loaded, and just returns it.
*
* @param url Mixed
* @returns Object
*/
loadFile: function( url, meth ){
if(this.debug) jQuery.log( 'loadFile(): ' + url + '::' + typeof(url) );
if( !url ){
if(this.debug) jQuery.log( 'ERROR: loadFile() missing url' );
return false;
}
// variable to hold ajax results
var doc;
// function to receive data on successful download ... semicolon after brace is necessary for packing
this.xhrsuccess = function(data,str){
if(this.debug) jQuery.log( 'loadFile() completed successfully (' + str + ')' );
doc = data;
return true;
};
// function to handle downloading error ... semicolon after brace is necessary for packing
this.xhrerror = function(xhr,err){
// set debugging to true in order to force the display of this error
window.DEBUG = true;
if(this.debug) jQuery.log( 'loadFile() failed to load the requested file: (' + err + ') - xml: ' + xhr.responseXML + ' - text: ' + xhr.responseText );
doc = null;
return false;
};
// make asynchronous ajax call and call functions defined above on success/error
if(!meth) meth = "GET";
$.ajax({
type: meth,
url: url,
async: false,
success: this.xhrsuccess,
error: this.xhrerror
});
// check for total failure
if( !doc ){
if(this.debug) jQuery.log( 'ERROR: document ' + url + ' not found (404), or unable to load' );
return false;
}
// check for success but no data
if( doc.length == 0 ){
if(this.debug) jQuery.log( 'ERROR: document ' + url + ' loaded in loadFile() has no data' );
return false;
}
return doc;
},
/*
* transform
* Central transformation function: takes an xml doc and an xsl doc.
*
* @param xsl Mixed the xsl transformation document
* @param xml Mixed the xml document to be transformed
* @param options Object various switches you can send to this function
* + params: an object of key/value pairs to be sent to xsl as parameters
* + xpath: defines the root node within the provided xml file
* @returns Object the results of the transformation
* + xsl: the raw xsl doc
* + doc: the raw results of the transform
* + string: the serialized doc
*/
transform: function( xsl, xml, options ){
var log = { 'xsl':xsl, 'xml':xml, 'options':options };
if(this.debug) jQuery.log( 'transform(): ' + xsl + '::' + xml + '::' + options.toString() );
// initialize options hash
options = options || {};
// initialize the xml object and store it in xml.doc
var xml = { 'request':xml, 'doc':this.load(xml, options.meth) };
// if we have an xpath, replace xml.doc with the results of running it
// as of 2007-12-03, IE throws a "msxml6: the parameter is incorrect" error, so removing this
if( options.xpath && xml.doc && !jQuery.browser.msie ){
// run the xpath
xml.doc = xml.doc.selectSingleNode( options.xpath.toString() );
if(this.debug) $.log( 'transform(): xpath has been run...resulting doc: ' + (this.serialize(xml.doc)) );
}
// initialize the result object ... store the primary steps of the transform in result
var result = { 'xsl':this.load(xsl, options.meth) };
result.json = false;
if( options.json && xml.doc ) {
result.json = xml.doc.selectSingleNode( options.json.toString() );
}
var processor = new XSLTProcessor();
// stylesheet must be imported before parameters can be added
processor.importStylesheet( result.xsl );
// add parameters to the processor
if( options.params && processor ){
if(this.debug) jQuery.log( 'transform(): received xsl params: ' + options.params.toString() );
for( key in options.params ){
// name and value must be strings
// first parameter is namespace
processor.setParameter( null, key.toString(), options.params[key].toString() );
}
}
// perform the transformation
result.doc = processor.transformToDocument( xml.doc );
// handle transform error
var errorTxt = Sarissa.getParseErrorText(result.doc);
if(this.debug) jQuery.log( 'transform(): Sarissa parse text: ' + errorTxt );
if( errorTxt != Sarissa.PARSED_OK ){
// return the error text as the string
result.string = Sarissa.getParseErrorText(result.doc) + ' :: using ' + xsl + ' => ' + xml.request;
if(this.debug) jQuery.log( 'transform(): error in transformation: ' + Sarissa.getParseErrorText(result.doc) );
return result;
}
// if we made it this far, the transformation was successful
result.string = this.serialize( result.doc );
// store reference to all scripts found in the doc (not result.string)
result.scripts = jQuery('script',result.doc).text();
return result;
}
};
// create the xslTransform object
// this creates a single object for the page, allowing re-use of the XSL processor
xslTransform.init();
/*
* JQuery XSLT transformation plugin.
* Replaces all matched elements with the results of an XSLT transformation.
* See xslTransform above for more documentation.
*
* @example
* @desc See the xslTransform-example/index.html
*
* @param xsl String the url to the xsl file
* @param xml String the url to the xml file
* @param options Object various switches you can send to this function
* + params: an object of key/value pairs to be sent to xsl as parameters
* + xpath: defines the root node within the provided xml file
* + eval: if true, will attempt to eval javascript found in the transformed result
* + callback: if a Function, evaluate it when transformation is complete
* @returns
*/
jQuery.fn.getTransform = function( xsl, xml, options ){
var settings = {
append: false,
params: {}, // object of key/value pairs ... parameters to send to the XSL stylesheet
xpath: '', // xpath, used to send only a portion of the XML file to the XSL stylesheet
eval: true, // evaluate <script> blocks found in the transformed result
callback: '', // callback function, to be run on completion of the transformation
json: false,
meth : "GET"
};
// initialize options hash; override the defaults with supplied options
jQuery.extend( settings, options );
if(xslTransform.debug) jQuery.log( 'getTransform: ' + xsl + '::' + xml + '::' + settings.toString() );
// must have both xsl and xml
if( !xsl || !xml ){
if(xslTransform.debug) jQuery.log( 'getTransform: missing xsl or xml' );
return;
}
// run the jquery magic on all matched elements
return this.each( function(){
// perform the transformation
var trans = xslTransform.transform( xsl, xml, settings );
// ie can fail if there's an xml declaration line in the returned result
var re = trans.string.match(/<\?xml.*?\?>/);
if( re ){
trans.string = trans.string.replace( re, '' );
if(xslTransform.debug) jQuery.log( 'getTransform(): found an xml declaration and removed it' );
}
// place the result in the element
// 20070202: jquery 1.1.1 can get a "a.appendChild is not a function" error using html() sometimes ...
// no idea why yet, so adding a fallback to innerHTML
// ::warning:: ie6 has trouble with javascript events such as onclick assigned statically within the html when using innerHTML
try {
if(settings.append) $(this).append( trans.string );
else if(settings.repl) $(this).replaceWith( trans.string );
else $(this).html( trans.string );
} catch(e) {
if(xslTransform.debug) $.log( 'getTransform: error placing results of transform into element, falling back to innerHTML: ' + e.toString() );
$(this)[0].innerHTML = trans.string;
}
// there might not be a scripts property
if( settings.eval && trans.scripts ){
if( trans.scripts.length > 0 ){
if(xslTransform.debug) jQuery.log( 'Found text/javascript in transformed result' );
eval.call( window, trans.scripts );
}
}
// run the callback if it's a native function
if( settings.callback && jQuery.isFunction(settings.callback) ){
var json = false;
if(settings.json && trans.json) eval("json = " + trans.json.firstChild.data);
settings.callback.apply(window, [trans.string, json]);
}
});
};

View file

@ -0,0 +1,110 @@
/* * ====================================================================
* About: This a a compressed JS file from the Sarissa library.
* see http://dev.abiss.gr/sarissa
*
* Copyright: Manos Batsis, http://dev.abiss.gr
*
* Licence:
* Sarissa is free software distributed under the GNU GPL version 2
* or higher, GNU LGPL version 2.1 or higher and Apache Software
* License 2.0 or higher. The licenses are available online see:
* http://www.gnu.org
* http://www.apache.org
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
* KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE
* AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* ====================================================================*/
function Sarissa(){}
Sarissa.VERSION="0.9.9.4";Sarissa.PARSED_OK="Document contains no parsing errors";Sarissa.PARSED_EMPTY="Document is empty";Sarissa.PARSED_UNKNOWN_ERROR="Not well-formed or other error";Sarissa.IS_ENABLED_TRANSFORM_NODE=false;Sarissa.REMOTE_CALL_FLAG="gr.abiss.sarissa.REMOTE_CALL_FLAG";Sarissa._lastUniqueSuffix=0;Sarissa._getUniqueSuffix=function(){return Sarissa._lastUniqueSuffix++;};Sarissa._SARISSA_IEPREFIX4XSLPARAM="";Sarissa._SARISSA_HAS_DOM_IMPLEMENTATION=document.implementation&&true;Sarissa._SARISSA_HAS_DOM_CREATE_DOCUMENT=Sarissa._SARISSA_HAS_DOM_IMPLEMENTATION&&document.implementation.createDocument;Sarissa._SARISSA_HAS_DOM_FEATURE=Sarissa._SARISSA_HAS_DOM_IMPLEMENTATION&&document.implementation.hasFeature;Sarissa._SARISSA_IS_MOZ=Sarissa._SARISSA_HAS_DOM_CREATE_DOCUMENT&&Sarissa._SARISSA_HAS_DOM_FEATURE;Sarissa._SARISSA_IS_SAFARI=navigator.userAgent.toLowerCase().indexOf("safari")!=-1||navigator.userAgent.toLowerCase().indexOf("konqueror")!=-1;Sarissa._SARISSA_IS_SAFARI_OLD=Sarissa._SARISSA_IS_SAFARI&&(parseInt((navigator.userAgent.match(/AppleWebKit\/(\d+)/)||{})[1],10)<420);Sarissa._SARISSA_IS_IE=document.all&&window.ActiveXObject&&navigator.userAgent.toLowerCase().indexOf("msie")>-1&&navigator.userAgent.toLowerCase().indexOf("opera")==-1;Sarissa._SARISSA_IS_OPERA=navigator.userAgent.toLowerCase().indexOf("opera")!=-1;if(!window.Node||!Node.ELEMENT_NODE){Node={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12};}
if(Sarissa._SARISSA_IS_SAFARI_OLD){HTMLHtmlElement=document.createElement("html").constructor;Node=HTMLElement={};HTMLElement.prototype=HTMLHtmlElement.__proto__.__proto__;HTMLDocument=Document=document.constructor;var x=new DOMParser();XMLDocument=x.constructor;Element=x.parseFromString("<Single />","text/xml").documentElement.constructor;x=null;}
if(typeof XMLDocument=="undefined"&&typeof Document!="undefined"){XMLDocument=Document;}
if(Sarissa._SARISSA_IS_IE){Sarissa._SARISSA_IEPREFIX4XSLPARAM="xsl:";var _SARISSA_DOM_PROGID="";var _SARISSA_XMLHTTP_PROGID="";var _SARISSA_DOM_XMLWRITER="";Sarissa.pickRecentProgID=function(idList){var bFound=false,e;var o2Store;for(var i=0;i<idList.length&&!bFound;i++){try{var oDoc=new ActiveXObject(idList[i]);o2Store=idList[i];bFound=true;}catch(objException){e=objException;}}
if(!bFound){throw"Could not retrieve a valid progID of Class: "+idList[idList.length-1]+". (original exception: "+e+")";}
idList=null;return o2Store;};_SARISSA_DOM_PROGID=null;_SARISSA_THREADEDDOM_PROGID=null;_SARISSA_XSLTEMPLATE_PROGID=null;_SARISSA_XMLHTTP_PROGID=null;XMLHttpRequest=function(){if(!_SARISSA_XMLHTTP_PROGID){_SARISSA_XMLHTTP_PROGID=Sarissa.pickRecentProgID(["Msxml2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"]);}
return new ActiveXObject(_SARISSA_XMLHTTP_PROGID);};Sarissa.getDomDocument=function(sUri,sName){if(!_SARISSA_DOM_PROGID){_SARISSA_DOM_PROGID=Sarissa.pickRecentProgID(["Msxml2.DOMDocument.6.0","Msxml2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XMLDOM"]);}
var oDoc=new ActiveXObject(_SARISSA_DOM_PROGID);if(sName){var prefix="";if(sUri){if(sName.indexOf(":")>1){prefix=sName.substring(0,sName.indexOf(":"));sName=sName.substring(sName.indexOf(":")+1);}else{prefix="a"+Sarissa._getUniqueSuffix();}}
if(sUri){oDoc.loadXML('<'+prefix+':'+sName+" xmlns:"+prefix+"=\""+sUri+"\""+" />");}else{oDoc.loadXML('<'+sName+" />");}}
return oDoc;};Sarissa.getParseErrorText=function(oDoc){var parseErrorText=Sarissa.PARSED_OK;if(oDoc&&oDoc.parseError&&oDoc.parseError.errorCode&&oDoc.parseError.errorCode!=0){parseErrorText="XML Parsing Error: "+oDoc.parseError.reason+"\nLocation: "+oDoc.parseError.url+"\nLine Number "+oDoc.parseError.line+", Column "+
oDoc.parseError.linepos+":\n"+oDoc.parseError.srcText+"\n";for(var i=0;i<oDoc.parseError.linepos;i++){parseErrorText+="-";}
parseErrorText+="^\n";}
else if(oDoc.documentElement===null){parseErrorText=Sarissa.PARSED_EMPTY;}
return parseErrorText;};Sarissa.setXpathNamespaces=function(oDoc,sNsSet){oDoc.setProperty("SelectionLanguage","XPath");oDoc.setProperty("SelectionNamespaces",sNsSet);};XSLTProcessor=function(){if(!_SARISSA_XSLTEMPLATE_PROGID){_SARISSA_XSLTEMPLATE_PROGID=Sarissa.pickRecentProgID(["Msxml2.XSLTemplate.6.0","MSXML2.XSLTemplate.3.0"]);}
this.template=new ActiveXObject(_SARISSA_XSLTEMPLATE_PROGID);this.processor=null;};XSLTProcessor.prototype.importStylesheet=function(xslDoc){if(!_SARISSA_THREADEDDOM_PROGID){_SARISSA_THREADEDDOM_PROGID=Sarissa.pickRecentProgID(["MSXML2.FreeThreadedDOMDocument.6.0","MSXML2.FreeThreadedDOMDocument.3.0"]);}
xslDoc.setProperty("SelectionLanguage","XPath");xslDoc.setProperty("SelectionNamespaces","xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");var converted=new ActiveXObject(_SARISSA_THREADEDDOM_PROGID);try{converted.resolveExternals=true;converted.setProperty("AllowDocumentFunction",true);}
catch(e){}
if(xslDoc.url&&xslDoc.selectSingleNode("//xsl:*[local-name() = 'import' or local-name() = 'include']")!=null){converted.async=false;converted.load(xslDoc.url);}
else{converted.loadXML(xslDoc.xml);}
converted.setProperty("SelectionNamespaces","xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");var output=converted.selectSingleNode("//xsl:output");if(output){this.outputMethod=output.getAttribute("method");}
else{delete this.outputMethod;}
this.template.stylesheet=converted;this.processor=this.template.createProcessor();this.paramsSet=[];};XSLTProcessor.prototype.transformToDocument=function(sourceDoc){var outDoc;if(_SARISSA_THREADEDDOM_PROGID){this.processor.input=sourceDoc;outDoc=new ActiveXObject(_SARISSA_DOM_PROGID);this.processor.output=outDoc;this.processor.transform();return outDoc;}
else{if(!_SARISSA_DOM_XMLWRITER){_SARISSA_DOM_XMLWRITER=Sarissa.pickRecentProgID(["Msxml2.MXXMLWriter.6.0","Msxml2.MXXMLWriter.3.0","MSXML2.MXXMLWriter","MSXML.MXXMLWriter","Microsoft.XMLDOM"]);}
this.processor.input=sourceDoc;outDoc=new ActiveXObject(_SARISSA_DOM_XMLWRITER);this.processor.output=outDoc;this.processor.transform();var oDoc=new ActiveXObject(_SARISSA_DOM_PROGID);oDoc.loadXML(outDoc.output+"");return oDoc;}};XSLTProcessor.prototype.transformToFragment=function(sourceDoc,ownerDoc){this.processor.input=sourceDoc;this.processor.transform();var s=this.processor.output;var f=ownerDoc.createDocumentFragment();var container;if(this.outputMethod=='text'){f.appendChild(ownerDoc.createTextNode(s));}else if(ownerDoc.body&&ownerDoc.body.innerHTML){container=ownerDoc.createElement('div');container.innerHTML=s;while(container.hasChildNodes()){f.appendChild(container.firstChild);}}
else{var oDoc=new ActiveXObject(_SARISSA_DOM_PROGID);if(s.substring(0,5)=='<?xml'){s=s.substring(s.indexOf('?>')+2);}
var xml=''.concat('<my>',s,'</my>');oDoc.loadXML(xml);container=oDoc.documentElement;while(container.hasChildNodes()){f.appendChild(container.firstChild);}}
return f;};XSLTProcessor.prototype.setParameter=function(nsURI,name,value){value=value?value:"";if(nsURI){this.processor.addParameter(name,value,nsURI);}else{this.processor.addParameter(name,value);}
nsURI=""+(nsURI||"");if(!this.paramsSet[nsURI]){this.paramsSet[nsURI]=[];}
this.paramsSet[nsURI][name]=value;};XSLTProcessor.prototype.getParameter=function(nsURI,name){nsURI=""+(nsURI||"");if(this.paramsSet[nsURI]&&this.paramsSet[nsURI][name]){return this.paramsSet[nsURI][name];}else{return null;}};XSLTProcessor.prototype.clearParameters=function(){for(var nsURI in this.paramsSet){for(var name in this.paramsSet[nsURI]){if(nsURI!=""){this.processor.addParameter(name,"",nsURI);}else{this.processor.addParameter(name,"");}}}
this.paramsSet=[];};}else{if(Sarissa._SARISSA_HAS_DOM_CREATE_DOCUMENT){Sarissa.__handleLoad__=function(oDoc){Sarissa.__setReadyState__(oDoc,4);};_sarissa_XMLDocument_onload=function(){Sarissa.__handleLoad__(this);};Sarissa.__setReadyState__=function(oDoc,iReadyState){oDoc.readyState=iReadyState;oDoc.readystate=iReadyState;if(oDoc.onreadystatechange!=null&&typeof oDoc.onreadystatechange=="function"){oDoc.onreadystatechange();}};Sarissa.getDomDocument=function(sUri,sName){var oDoc=document.implementation.createDocument(sUri?sUri:null,sName?sName:null,null);if(!oDoc.onreadystatechange){oDoc.onreadystatechange=null;}
if(!oDoc.readyState){oDoc.readyState=0;}
oDoc.addEventListener("load",_sarissa_XMLDocument_onload,false);return oDoc;};if(window.XMLDocument){}
else if(Sarissa._SARISSA_HAS_DOM_FEATURE&&window.Document&&!Document.prototype.load&&document.implementation.hasFeature('LS','3.0')){Sarissa.getDomDocument=function(sUri,sName){var oDoc=document.implementation.createDocument(sUri?sUri:null,sName?sName:null,null);return oDoc;};}
else{Sarissa.getDomDocument=function(sUri,sName){var oDoc=document.implementation.createDocument(sUri?sUri:null,sName?sName:null,null);if(oDoc&&(sUri||sName)&&!oDoc.documentElement){oDoc.appendChild(oDoc.createElementNS(sUri,sName));}
return oDoc;};}}}
if(!window.DOMParser){if(Sarissa._SARISSA_IS_SAFARI){DOMParser=function(){};DOMParser.prototype.parseFromString=function(sXml,contentType){var xmlhttp=new XMLHttpRequest();xmlhttp.open("GET","data:text/xml;charset=utf-8,"+encodeURIComponent(sXml),false);xmlhttp.send(null);return xmlhttp.responseXML;};}else if(Sarissa.getDomDocument&&Sarissa.getDomDocument()&&Sarissa.getDomDocument(null,"bar").xml){DOMParser=function(){};DOMParser.prototype.parseFromString=function(sXml,contentType){var doc=Sarissa.getDomDocument();doc.loadXML(sXml);return doc;};}}
if((typeof(document.importNode)=="undefined")&&Sarissa._SARISSA_IS_IE){try{document.importNode=function(oNode,bChildren){var tmp;if(oNode.nodeName=='#text'){return document.createTextNode(oNode.data);}
else{if(oNode.nodeName=="tbody"||oNode.nodeName=="tr"){tmp=document.createElement("table");}
else if(oNode.nodeName=="td"){tmp=document.createElement("tr");}
else if(oNode.nodeName=="option"){tmp=document.createElement("select");}
else{tmp=document.createElement("div");}
if(bChildren){tmp.innerHTML=oNode.xml?oNode.xml:oNode.outerHTML;}else{tmp.innerHTML=oNode.xml?oNode.cloneNode(false).xml:oNode.cloneNode(false).outerHTML;}
return tmp.getElementsByTagName("*")[0];}};}catch(e){}}
if(!Sarissa.getParseErrorText){Sarissa.getParseErrorText=function(oDoc){var parseErrorText=Sarissa.PARSED_OK;if((!oDoc)||(!oDoc.documentElement)){parseErrorText=Sarissa.PARSED_EMPTY;}else if(oDoc.documentElement.tagName=="parsererror"){parseErrorText=oDoc.documentElement.firstChild.data;parseErrorText+="\n"+oDoc.documentElement.firstChild.nextSibling.firstChild.data;}else if(oDoc.getElementsByTagName("parsererror").length>0){var parsererror=oDoc.getElementsByTagName("parsererror")[0];parseErrorText=Sarissa.getText(parsererror,true)+"\n";}else if(oDoc.parseError&&oDoc.parseError.errorCode!=0){parseErrorText=Sarissa.PARSED_UNKNOWN_ERROR;}
return parseErrorText;};}
Sarissa.getText=function(oNode,deep){var s="";var nodes=oNode.childNodes;for(var i=0;i<nodes.length;i++){var node=nodes[i];var nodeType=node.nodeType;if(nodeType==Node.TEXT_NODE||nodeType==Node.CDATA_SECTION_NODE){s+=node.data;}else if(deep===true&&(nodeType==Node.ELEMENT_NODE||nodeType==Node.DOCUMENT_NODE||nodeType==Node.DOCUMENT_FRAGMENT_NODE)){s+=Sarissa.getText(node,true);}}
return s;};if(!window.XMLSerializer&&Sarissa.getDomDocument&&Sarissa.getDomDocument("","foo",null).xml){XMLSerializer=function(){};XMLSerializer.prototype.serializeToString=function(oNode){return oNode.xml;};}
Sarissa.stripTags=function(s){return s?s.replace(/<[^>]+>/g,""):s;};Sarissa.clearChildNodes=function(oNode){while(oNode.firstChild){oNode.removeChild(oNode.firstChild);}};Sarissa.copyChildNodes=function(nodeFrom,nodeTo,bPreserveExisting){if(Sarissa._SARISSA_IS_SAFARI&&nodeTo.nodeType==Node.DOCUMENT_NODE){nodeTo=nodeTo.documentElement;}
if((!nodeFrom)||(!nodeTo)){throw"Both source and destination nodes must be provided";}
if(!bPreserveExisting){Sarissa.clearChildNodes(nodeTo);}
var ownerDoc=nodeTo.nodeType==Node.DOCUMENT_NODE?nodeTo:nodeTo.ownerDocument;var nodes=nodeFrom.childNodes;var i;if(typeof(ownerDoc.importNode)!="undefined"){for(i=0;i<nodes.length;i++){nodeTo.appendChild(ownerDoc.importNode(nodes[i],true));}}else{for(i=0;i<nodes.length;i++){nodeTo.appendChild(nodes[i].cloneNode(true));}}};Sarissa.moveChildNodes=function(nodeFrom,nodeTo,bPreserveExisting){if((!nodeFrom)||(!nodeTo)){throw"Both source and destination nodes must be provided";}
if(!bPreserveExisting){Sarissa.clearChildNodes(nodeTo);}
var nodes=nodeFrom.childNodes;if(nodeFrom.ownerDocument==nodeTo.ownerDocument){while(nodeFrom.firstChild){nodeTo.appendChild(nodeFrom.firstChild);}}else{var ownerDoc=nodeTo.nodeType==Node.DOCUMENT_NODE?nodeTo:nodeTo.ownerDocument;var i;if(typeof(ownerDoc.importNode)!="undefined"){for(i=0;i<nodes.length;i++){nodeTo.appendChild(ownerDoc.importNode(nodes[i],true));}}else{for(i=0;i<nodes.length;i++){nodeTo.appendChild(nodes[i].cloneNode(true));}}
Sarissa.clearChildNodes(nodeFrom);}};Sarissa.xmlize=function(anyObject,objectName,indentSpace){indentSpace=indentSpace?indentSpace:'';var s=indentSpace+'<'+objectName+'>';var isLeaf=false;if(!(anyObject instanceof Object)||anyObject instanceof Number||anyObject instanceof String||anyObject instanceof Boolean||anyObject instanceof Date){s+=Sarissa.escape(""+anyObject);isLeaf=true;}else{s+="\n";var isArrayItem=anyObject instanceof Array;for(var name in anyObject){s+=Sarissa.xmlize(anyObject[name],(isArrayItem?"array-item key=\""+name+"\"":name),indentSpace+" ");}
s+=indentSpace;}
return(s+=(objectName.indexOf(' ')!=-1?"</array-item>\n":"</"+objectName+">\n"));};Sarissa.escape=function(sXml){return sXml.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;");};Sarissa.unescape=function(sXml){return sXml.replace(/&apos;/g,"'").replace(/&quot;/g,"\"").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&");};Sarissa.updateCursor=function(oTargetElement,sValue){if(oTargetElement&&oTargetElement.style&&oTargetElement.style.cursor!=undefined){oTargetElement.style.cursor=sValue;}};Sarissa.updateContentFromURI=function(sFromUrl,oTargetElement,xsltproc,callback,skipCache){try{Sarissa.updateCursor(oTargetElement,"wait");var xmlhttp=new XMLHttpRequest();xmlhttp.open("GET",sFromUrl,true);xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState==4){try{var oDomDoc=xmlhttp.responseXML;if(oDomDoc&&Sarissa.getParseErrorText(oDomDoc)==Sarissa.PARSED_OK){Sarissa.updateContentFromNode(xmlhttp.responseXML,oTargetElement,xsltproc);if(callback){callback(sFromUrl,oTargetElement);}}
else{throw Sarissa.getParseErrorText(oDomDoc);}}
catch(e){if(callback){callback(sFromUrl,oTargetElement,e);}
else{throw e;}}}};if(skipCache){var oldage="Sat, 1 Jan 2000 00:00:00 GMT";xmlhttp.setRequestHeader("If-Modified-Since",oldage);}
xmlhttp.send("");}
catch(e){Sarissa.updateCursor(oTargetElement,"auto");if(callback){callback(sFromUrl,oTargetElement,e);}
else{throw e;}}};Sarissa.updateContentFromNode=function(oNode,oTargetElement,xsltproc){try{Sarissa.updateCursor(oTargetElement,"wait");Sarissa.clearChildNodes(oTargetElement);var ownerDoc=oNode.nodeType==Node.DOCUMENT_NODE?oNode:oNode.ownerDocument;if(ownerDoc.parseError&&ownerDoc.parseError.errorCode!=0){var pre=document.createElement("pre");pre.appendChild(document.createTextNode(Sarissa.getParseErrorText(ownerDoc)));oTargetElement.appendChild(pre);}
else{if(xsltproc){oNode=xsltproc.transformToDocument(oNode);}
if(oTargetElement.tagName.toLowerCase()=="textarea"||oTargetElement.tagName.toLowerCase()=="input"){oTargetElement.value=new XMLSerializer().serializeToString(oNode);}
else{try{oTargetElement.appendChild(oTargetElement.ownerDocument.importNode(oNode,true));}
catch(e){oTargetElement.innerHTML=new XMLSerializer().serializeToString(oNode);}}}}
catch(e){throw e;}
finally{Sarissa.updateCursor(oTargetElement,"auto");}};Sarissa.formToQueryString=function(oForm){var qs="";for(var i=0;i<oForm.elements.length;i++){var oField=oForm.elements[i];var sFieldName=oField.getAttribute("name")?oField.getAttribute("name"):oField.getAttribute("id");if(sFieldName&&((!oField.disabled)||oField.type=="hidden")){switch(oField.type){case"hidden":case"text":case"textarea":case"password":qs+=sFieldName+"="+encodeURIComponent(oField.value)+"&";break;case"select-one":qs+=sFieldName+"="+encodeURIComponent(oField.options[oField.selectedIndex].value)+"&";break;case"select-multiple":for(var j=0;j<oField.length;j++){var optElem=oField.options[j];if(optElem.selected===true){qs+=sFieldName+"[]"+"="+encodeURIComponent(optElem.value)+"&";}}
break;case"checkbox":case"radio":if(oField.checked){qs+=sFieldName+"="+encodeURIComponent(oField.value)+"&";}
break;}}}
return qs.substr(0,qs.length-1);};Sarissa.updateContentFromForm=function(oForm,oTargetElement,xsltproc,callback){try{Sarissa.updateCursor(oTargetElement,"wait");var params=Sarissa.formToQueryString(oForm)+"&"+Sarissa.REMOTE_CALL_FLAG+"=true";var xmlhttp=new XMLHttpRequest();var bUseGet=oForm.getAttribute("method")&&oForm.getAttribute("method").toLowerCase()=="get";if(bUseGet){xmlhttp.open("GET",oForm.getAttribute("action")+"?"+params,true);}
else{xmlhttp.open('POST',oForm.getAttribute("action"),true);xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Content-length",params.length);xmlhttp.setRequestHeader("Connection","close");}
xmlhttp.onreadystatechange=function(){try{if(xmlhttp.readyState==4){var oDomDoc=xmlhttp.responseXML;if(oDomDoc&&Sarissa.getParseErrorText(oDomDoc)==Sarissa.PARSED_OK){Sarissa.updateContentFromNode(xmlhttp.responseXML,oTargetElement,xsltproc);if(callback){callback(oForm,oTargetElement);}}
else{throw Sarissa.getParseErrorText(oDomDoc);}}}
catch(e){if(callback){callback(oForm,oTargetElement,e);}
else{throw e;}}};xmlhttp.send(bUseGet?"":params);}
catch(e){Sarissa.updateCursor(oTargetElement,"auto");if(callback){callback(oForm,oTargetElement,e);}
else{throw e;}}
return false;};Sarissa.FUNCTION_NAME_REGEXP=new RegExp("");Sarissa.getFunctionName=function(oFunc,bForce){var name;if(!name){if(bForce){name="SarissaAnonymous"+Sarissa._getUniqueSuffix();window[name]=oFunc;}
else{name=null;}}
if(name){window[name]=oFunc;}
return name;};Sarissa.setRemoteJsonCallback=function(url,callback,callbackParam){if(!callbackParam){callbackParam="callback";}
var callbackFunctionName=Sarissa.getFunctionName(callback,true);var id="sarissa_json_script_id_"+Sarissa._getUniqueSuffix();var oHead=document.getElementsByTagName("head")[0];var scriptTag=document.createElement('script');scriptTag.type='text/javascript';scriptTag.id=id;scriptTag.onload=function(){};if(url.indexOf("?")!=-1){url+=("&"+callbackParam+"="+callbackFunctionName);}
else{url+=("?"+callbackParam+"="+callbackFunctionName);}
scriptTag.src=url;oHead.appendChild(scriptTag);return id;};

View file

@ -0,0 +1,34 @@
/* * ====================================================================
* About: This a a compressed JS file from the Sarissa library.
* see http://dev.abiss.gr/sarissa
*
* Copyright: Manos Batsis, http://dev.abiss.gr
*
* Licence:
* Sarissa is free software distributed under the GNU GPL version 2
* or higher, GNU LGPL version 2.1 or higher and Apache Software
* License 2.0 or higher. The licenses are available online see:
* http://www.gnu.org
* http://www.apache.org
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
* KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE
* AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* ====================================================================*/
if(Sarissa._SARISSA_HAS_DOM_FEATURE&&document.implementation.hasFeature("XPath","3.0")){SarissaNodeList=function(i){this.length=i;};SarissaNodeList.prototype=[];SarissaNodeList.prototype.constructor=Array;SarissaNodeList.prototype.item=function(i){return(i<0||i>=this.length)?null:this[i];};SarissaNodeList.prototype.expr="";if(window.XMLDocument&&(!XMLDocument.prototype.setProperty)){XMLDocument.prototype.setProperty=function(x,y){};}
Sarissa.setXpathNamespaces=function(oDoc,sNsSet){oDoc._sarissa_useCustomResolver=true;var namespaces=sNsSet.indexOf(" ")>-1?sNsSet.split(" "):[sNsSet];oDoc._sarissa_xpathNamespaces=[];for(var i=0;i<namespaces.length;i++){var ns=namespaces[i];var colonPos=ns.indexOf(":");var assignPos=ns.indexOf("=");if(colonPos>0&&assignPos>colonPos+1){var prefix=ns.substring(colonPos+1,assignPos);var uri=ns.substring(assignPos+2,ns.length-1);oDoc._sarissa_xpathNamespaces[prefix]=uri;}else{throw"Bad format on namespace declaration(s) given";}}};XMLDocument.prototype._sarissa_useCustomResolver=false;XMLDocument.prototype._sarissa_xpathNamespaces=[];XMLDocument.prototype.selectNodes=function(sExpr,contextNode,returnSingle){var nsDoc=this;var nsresolver;if(this._sarissa_useCustomResolver){nsresolver=function(prefix){var s=nsDoc._sarissa_xpathNamespaces[prefix];if(s){return s;}
else{throw"No namespace URI found for prefix: '"+prefix+"'";}};}
else{nsresolver=this.createNSResolver(this.documentElement);}
var result=null;if(!returnSingle){var oResult=this.evaluate(sExpr,(contextNode?contextNode:this),nsresolver,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);var nodeList=new SarissaNodeList(oResult.snapshotLength);nodeList.expr=sExpr;for(var i=0;i<nodeList.length;i++){nodeList[i]=oResult.snapshotItem(i);}
result=nodeList;}
else{result=this.evaluate(sExpr,(contextNode?contextNode:this),nsresolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;}
return result;};Element.prototype.selectNodes=function(sExpr){var doc=this.ownerDocument;if(doc.selectNodes){return doc.selectNodes(sExpr,this);}
else{throw"Method selectNodes is only supported by XML Elements";}};XMLDocument.prototype.selectSingleNode=function(sExpr,contextNode){var ctx=contextNode?contextNode:null;return this.selectNodes(sExpr,ctx,true);};Element.prototype.selectSingleNode=function(sExpr){var doc=this.ownerDocument;if(doc.selectSingleNode){return doc.selectSingleNode(sExpr,this);}
else{throw"Method selectNodes is only supported by XML Elements";}};Sarissa.IS_ENABLED_SELECT_NODES=true;}

View file

@ -0,0 +1,80 @@
<?xml
version="1.0"
encoding="utf-8"
?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output
method="html"
encoding="utf-8"
omit-xml-declaration="yes"
standalone="no"
indent="no"
media-type="text/xml"
/>
<xsl:param name="theme_name" />
<xsl:param name="theme_path" />
<xsl:template match="/">
<ul>
<xsl:if test="$theme_name"><xsl:attribute name="class"><xsl:value-of select="$theme_name" /></xsl:attribute></xsl:if>
<xsl:for-each select="//item[not(@parent_id) or @parent_id=0]">
<xsl:call-template name="nodes">
<xsl:with-param name="node" select="." />
<xsl:with-param name="theme_path" select="$theme_path" />
</xsl:call-template>
</xsl:for-each>
</ul>
</xsl:template>
<xsl:template name="nodes">
<xsl:param name="node" />
<xsl:param name="theme_path" />
<xsl:variable name="children" select="count(//item[@parent_id=$node/attribute::id]) &gt; 0" />
<li>
<xsl:attribute name="class">
<xsl:if test="position() = last()"> last </xsl:if>
<xsl:choose>
<xsl:when test="@state = 'open'"> open </xsl:when>
<xsl:when test="$children or @hasChildren"> closed </xsl:when>
<xsl:otherwise> leaf </xsl:otherwise>
</xsl:choose>
<xsl:value-of select="@class" />
</xsl:attribute>
<xsl:for-each select="@*">
<xsl:if test="name() != 'parent_id' and name() != 'hasChildren' and name() != 'class' and name() != 'state'">
<xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="content/name">
<a href="#">
<xsl:attribute name="class"><xsl:value-of select="@lang" /> <xsl:value-of select="@class" /></xsl:attribute>
<xsl:attribute name="style">
<xsl:value-of select="@style" />
<xsl:if test="string-length(attribute::icon) > 0">background-image:url(<xsl:if test="not(contains(@icon,'/'))"><xsl:value-of select="$theme_path" /></xsl:if><xsl:value-of select="@icon" />);</xsl:if>
</xsl:attribute>
<xsl:for-each select="@*">
<xsl:if test="name() != 'style' and name() != 'class'">
<xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="." /></a>
</xsl:for-each>
<xsl:if test="$children or @hasChildren">
<ul>
<xsl:for-each select="//item[@parent_id=$node/attribute::id]">
<xsl:call-template name="nodes">
<xsl:with-param name="node" select="." />
<xsl:with-param name="theme_path" select="$theme_path" />
</xsl:call-template>
</xsl:for-each>
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,79 @@
<?xml
version="1.0"
encoding="utf-8"
?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output
method="html"
encoding="utf-8"
omit-xml-declaration="yes"
standalone="no"
indent="no"
media-type="text/html"
/>
<xsl:param name="theme_name" />
<xsl:param name="theme_path" />
<xsl:template match="/">
<xsl:call-template name="nodes">
<xsl:with-param name="node" select="/root" />
<xsl:with-param name="theme_name" select="$theme_name" />
<xsl:with-param name="theme_path" select="$theme_path" />
</xsl:call-template>
</xsl:template>
<xsl:template name="nodes">
<xsl:param name="node" />
<xsl:param name="theme_name" />
<xsl:param name="theme_path" />
<ul>
<xsl:if test="$theme_name"><xsl:attribute name="class"><xsl:value-of select="$theme_name" /></xsl:attribute></xsl:if>
<xsl:for-each select="$node/item">
<xsl:variable name="children" select="count(./item) &gt; 0" />
<li>
<xsl:attribute name="class">
<xsl:if test="position() = last()"> last </xsl:if>
<xsl:choose>
<xsl:when test="@state = 'open'"> open </xsl:when>
<xsl:when test="$children or @hasChildren"> closed </xsl:when>
<xsl:otherwise> leaf </xsl:otherwise>
</xsl:choose>
<xsl:value-of select="@class" />
</xsl:attribute>
<xsl:for-each select="@*">
<xsl:if test="name() != 'class' and name() != 'state' and name() != 'hasChildren'">
<xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="content/name">
<a href="#">
<xsl:attribute name="class"><xsl:value-of select="@lang" /> <xsl:value-of select="@class" /></xsl:attribute>
<xsl:attribute name="style">
<xsl:value-of select="@style" />
<xsl:if test="string-length(attribute::icon) > 0">background-image:url(<xsl:if test="not(contains(@icon,'/'))"><xsl:value-of select="$theme_path" /></xsl:if><xsl:value-of select="@icon" />);</xsl:if>
</xsl:attribute>
<xsl:for-each select="@*">
<xsl:if test="name() != 'style' and name() != 'class'">
<xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="current()" /></a>
</xsl:for-each>
<xsl:if test="$children or @hasChildren">
<xsl:call-template name="nodes">
<xsl:with-param name="node" select="current()" />
<xsl:with-param name="theme_path" select="$theme_path" />
</xsl:call-template>
</xsl:if>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 B

View file

@ -0,0 +1,48 @@
.tree .tree-classic li.open {
background:url("minus.gif") 2px 5px no-repeat;
}
.tree .tree-classic li.closed {
background:url("plus.gif") 2px 5px no-repeat;
}
.tree .tree-classic #dragged li.open {
background:url("plus.gif") 2px 5px no-repeat;
}
.tree .tree-classic li.open a {
background-image:url("folderopen.gif");
}
.tree .tree-classic li.closed a {
background-image:url("folder.gif");
}
.tree .tree-classic li.leaf a {
background-image:url("folder.gif");
}
.tree .tree-classic li a {
-moz-border-radius:0;
}
.tree .tree-classic li a:hover {
background-color:white;
border-color:white;
}
.tree .tree-classic li a.clicked,
.tree .tree-classic li span.clicked {
background-color:navy;
border-color:navy;
color:white;
}
.rtl .tree-classic li.open {
background-position:right 5px;
margin-right:-3px;
padding-right:19px;
}
.rtl .tree-classic li.closed {
background-position:right 5px;
margin-right:-3px;
padding-right:19px;
}
.rtl .tree-classic #dragged li.open {
background-position: right 5px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -0,0 +1,112 @@
/* DOTS */
.tree .tree-default,
.tree .tree-default ul {
background-image:url("dot.gif");
}
.tree .tree-default li {
background-image:url("li.gif");
}
.tree .tree-default li.last {
background-image:url("lastli.gif");
}
/* OPEN or CLOSED */
.tree .tree-default li.open {
background:url("fminus.gif") 0px 0px no-repeat;
}
.tree .tree-default li.closed {
background:url("fplus.gif") 0px 0px no-repeat;
}
.tree .tree-default #dragged li.open {
background:url("fplus.gif") 5px 5px no-repeat;
}
/* RIGHT TO LEFT SUPPORT */
.rtl .tree-default li {
margin-right:1px;
}
.rtl .tree-default li.last {
background-image:url("lastli_rtl.gif");
margin-right:0;
padding-right:16px;
}
.rtl .tree-default li.open {
background:url("fminus_rtl.gif") right 6px no-repeat;
margin-right:0;
padding-right:16px;
}
.rtl .tree-default li.closed {
background:url("fplus_rtl.gif") right 4px no-repeat;
margin-right:0;
padding-right:16px;
}
.rtl .tree-default #dragged li.open {
background-position: right 5px;
}
/* DEFAULT ICON */
.tree .tree-default li a.title{
background-image:url("f.png");
}
/* CONTEXT MENU
.tree .tree-default .context {
width:160px;
background:#F0F0F0 url("context.gif") 22px 0 repeat-y;
border:1px solid silver;
}
.tree .tree-default .context a,
.tree .tree-default .context a:hover {
text-decoration:none;
color:black;
text-indent:26px;
line-height:20px;
background-repeat: no-repeat;
background-position: 3px center;
padding:1px 0;
}
.tree .tree-default .context a:hover {
background-color: #e7f4f9;
border:1px solid #d8f0fa;
background-position: 2px center;
padding:0;
text-indent:25px;
}
.tree .tree-default .context .separator {
background:#FFFFFF;;
border-top:1px solid #E0E0E0;
font-size:1px;
height:1px;
line-height:1px;
margin:0 2px 0 24px;
min-height:1px;
display:block;
}
*/
/*
.tree .tree-default a:hover{
background-color:transparent;
border-color:#fff;
}*/
#sitemap li div{display:inline;}
#sitemap li .cont{
display:block;
height:28px;
border:1px solid #DEDEDC;
border-top:none;
border-right:none;
overflow:hidden;
}
#sitemap li .col1{
float:left;
}
#sitemap li .col2{
float:right;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,236 @@
/* TREE LAYOUT */
.tree ul {
margin:0 0 0 5px;
padding:0;
list-style-type:none;
}
.tree li {
display:block;
min-height:18px;
line-height:18px;
padding:0 0 0 15px;
margin:0 0 0 0;
clear:both;
}
.tree li ul {
display:none;
clear:both;
}
/*
.tree li a,
.tree li span {
display:inline;
float:left;
line-height:16px;
height:16px;
padding:1px 4px 1px 23px !important;
color:black;
white-space:nowrap;
text-decoration:none;
background-color:transparent;
background-repeat:no-repeat;
background-position:4px 1px;
-moz-border-radius:3px;
border:0;
margin:0;
}*/
/*
.tree li a:hover,
.tree li a.hover {
background-color: #e7f4f9;
border:1px solid #d8f0fa;
padding:0px 3px 0px 22px !important;
background-position:3px 0px;
}
*/
/*
.tree li a.clicked,
.tree li a.clicked:hover,
.tree li span.clicked {
background-color: #beebff;
border:1px solid #99defd;
padding:0px 3px 0px 22px !important;
background-position:3px 0px;
}*/
.tree li span.clicked {
padding:0px 3px 0px 20px !important;
}
.tree li a input,
.tree li span input {
margin:0;
padding:0 0;
display:block;
height:12px !important;
border:1px solid white;
background:white;
font-size:10px;
font-family:Verdana;
}
.tree li a input:not([class="xxx"]),
.tree li span input:not([class="xxx"]) {
padding:1px 0;
}
.locked li a {
color:gray;
}
/* FOR DOTS */
.tree ul {
background-position:6px 1px;
background-repeat:repeat-y;
}
.tree li {
background-position:7px center;
background-repeat:no-repeat;
}
.tree li.last {
background-position:5px top;
background-repeat:no-repeat;
}
/* NO DOTS */
.no_dots ul {
background:transparent;
}
.no_dots li {
background:transparent;
}
.no_dots li.last {
background:transparent;
background-color:transparent !important;
}
/* OPEN OR CLOSE */
.tree li.open ul {
display:block;
clear:both;
}
.tree li.closed ul {
display:none !important;
}
/* FOR DRAGGING */
.tree #dragged {
padding:0 3px;
margin:0;
background:white;
opacity: .85;
filter: alpha(opacity=85);
position:absolute;
top:-10px;
left:-10px;
}
.tree #dragged.last,
.tree #dragged:last-child {
background:white;
}
.tree #dragged ul ul {
display:none;
}
/* HACKY-HACKY */
/* EXPLORER 7 */
*:first-child+html .tree li {
margin-bottom:-2px;
}
*:first-child+html .tree li ul {
padding-bottom:2px;
}
/* EXPLORER 6 */
.tree li {
/*_width:50%;*/
_margin-bottom:-2px;
}
.tree li ul {
_padding-bottom:2px;
}
/*
* FF & OPERA FIXES
.tree li:not([class="xxx"]) {
margin-bottom:0px;
}
html:first-child .tree li {
margin-bottom:0px;
}
.tree li ul:not([class="xxx"]) {
padding-bottom:0;
}
html:first-child .tree ul {
padding-bottom:0;
}
*/
/* RTL modification */
.rtl * {
direction:rtl;
}
.rtl ul {
margin:0 5px 0 0;
}
.rtl li {
padding:0 15px 0 0;
}
.rtl li.last {
background-position:right top;
}
.rtl li a,
.rtl li span {
float:right;
padding:1px 23px 1px 4px !important;
background-position:right 1px;
margin-right:1px;
}
.rtl li a:hover,
.rtl li a.hover {
background-color: #e7f4f9;
border:1px solid #d8f0fa;
padding:0px 23px 0px 3px !important;
background-position:right 0px;
margin-right:0px;
}
.rtl li a.clicked,
.rtl li a.clicked:hover,
.rtl li span.clicked {
background-color: #beebff;
border:1px solid #99defd;
padding:0px 23px 0px 3px !important;
background-position:right 0px;
margin-right:0px;
}
.rtl li span.clicked {
padding:0px 21px 0px 3px !important;
}
.rtl ul {
background-position:right 1px;
}
.rtl li {
background-position:right center;
}
.rtl #dragged li.open {
background-position: right 5px;
}
/* CONTEXT MENU */
.tree .context {
display:none;
position:absolute;
list-style-type:none;
margin:0;
padding:0;
}
.tree .context .separator {
display:none;
}
.tree .context a {
display:block;
margin:0;
padding:0;
}

File diff suppressed because it is too large Load diff

6
static/cms/js/libs/class.min.js vendored Normal file
View file

@ -0,0 +1,6 @@
/*!
* @author Angelo Dini
* @version 1.0
* @copyright Distributed under the BSD License.
*/
(function(){var d="1.0";var c=window.Class;var b=window.Class=function(n){n=n||{};var m=function(){return(this.initialize)?this.initialize.apply(this,arguments):j};if(n.implement){var j=window===this?g(m.prototype):this;var l=n.implement;a(n,"implement");n=f(n,e(l))}m.prototype=g(n);m.constructor=m;m._parent=g(n);for(var k=0,h=["extend","implement","getOptions","setOptions"];k<h.length;k++){m[h[k]]=b[h[k]]}return m};b.extend=function(j){var h=this;if(j.implement){this.prototype=f(this.prototype,e(j.implement));a(j,"implement")}for(var i in j){j[i]=typeof j[i]==="function"&&/parent/.test(j[i].toString())?(function(l,k){return function(){this.parent=h._parent[k];return l.apply(this,arguments)}})(j[i],i):j[i]}this._parent=f(this._parent,j,true);this.prototype=f(this.prototype,j);return this};b.implement=function(h){return this.prototype=f(this.prototype,e(h))};b.getOptions=function(){return this.prototype.options||{}};b.setOptions=function(h){return this.prototype.options=f(this.prototype.options,h)};b.noConflict=function(){window.Class=c;return b};b.version=d;function g(i){var h=function(){};h.prototype=i.prototype||i;return new h()}function a(l,i,k){if(k){var h={};for(var j in l){if(j!==i){h[j]=l[j]}}}else{delete l[i]}return h||l}function f(h,i,k){if(!h||!i){return h||i||{}}h=g(h);i=g(i);for(var j in i){if(Object.prototype.toString.call(i[j])==="[object Object]"){f(h[j],i[j])}else{h[j]=(k&&h[j])?h[j]:i[j]}}return h}function e(l){var k={};for(var h=0;h<l.length;h++){if(typeof(l[h])==="function"){l[h]=l[h].prototype}var j=a(l[h],"initialize",true);if(j.implement){k=e(j.implement)}else{k=f(k,j)}}return k}})();

4
static/cms/js/libs/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

4
static/cms/js/libs/swfobject.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,79 @@
/*##################################################|*/
/* #CMS.API# */
/* global apphooks_configuration */
(function($) {
// CMS.$ will be passed for $
$(document).ready(function () {
var appHooks = $('#application_urls'),
selected = appHooks.find('option:selected'),
appNsRow = $('.form-row.application_namespace'),
appNs = appNsRow.find('#id_application_namespace'),
appCfgsRow = $('.form-row.application_configs'),
appCfgs = appCfgsRow.find('#application_configs'),
appCfgsAdd = appCfgsRow.find('#add_application_configs'),
original_ns = appNs.val();
// Shows / hides namespace / config selection widgets depending on the user input
appHooks.setupNamespaces = function() {
var opt = $(this).find('option:selected');
if($(appCfgs).length > 0 && apphooks_configuration[opt.val()]){
appCfgs.html('');
for(var i=0; i < apphooks_configuration[opt.val()].length; i++) {
selectedCfgs = '';
if(apphooks_configuration[opt.val()][i][0] == apphooks_configuration_value) {
selectedCfgs = 'selected="selected"';
}
appCfgs.append('<option ' + selectedCfgs + ' value="' + apphooks_configuration[opt.val()][i][0] + '">' + apphooks_configuration[opt.val()][i][1] + '</option>')
}
appCfgsAdd.attr('href', apphooks_configuration_url[opt.val()]);
appCfgsRow.removeClass('hidden');
appNsRow.addClass('hidden');
}
else {
appCfgsRow.addClass('hidden');
if(opt.data('namespace')) {
appNsRow.removeClass('hidden');
}
else {
appNsRow.addClass('hidden');
}
}
};
// Hide the namespace widgets if its not required.
appHooks.setupNamespaces();
// Show it if we change to an app_hook that requires a namespace
appHooks.on('change', function(){
var self = $(this),
opt = self.find('option:selected');
appHooks.setupNamespaces();
// If we clear the app_hook, clear out the app_namespace too
if (!self.val()) {
appNs.val('');
appNs.removeAttr('value');
}
// When selecting back the original apphook we try
// to restore the original configuration
if(selected.val() == opt.val()) {
if(original_ns) {
appNs.val(original_ns);
}
}
// If new apphook has a namespace, suggest the default
else if (opt.data('namespace')) {
appNs.val(opt.data('namespace'));
}
// Cleanup the whole thing
else {
appNs.val('');
appNs.removeAttr('value');
}
});
});
})(CMS.$);

View file

@ -0,0 +1,242 @@
/*##################################################|*/
/* #CMS# */
// ensuring django namespace is set correctly
window.django = window.django || undefined;
// ensuring jQuery namespace is set correctly
window.jQuery = (django && django.jQuery) ? django.jQuery : window.jQuery || undefined;
// ensuring Class namespace is set correctly
window.Class = window.Class || undefined;
// ensuring CMS namespace is set correctly
var CMS = {
'$': (typeof jQuery === 'function') ? jQuery : undefined,
'Class': (typeof Class === 'function') ? Class : undefined,
'API': {}
};
/*##################################################|*/
/* #CMS.API# */
(function($) {
// CMS.$ will be passed for $
$(document).ready(function () {
/*!
* CNS.API.Helpers
* Multiple helpers used accross all CMS features
*/
CMS.API.Helpers = {
// redirects to a specific url or reloads browser
reloadBrowser: function (url, timeout, ajax) {
var that = this;
// is there a parent window?
var parent = (window.parent) ? window.parent : window;
// if there is an ajax reload, prioritize
if(ajax) {
parent.CMS.API.locked = true;
// check if the url has changed, if true redirect to the new path
// this requires an ajax request
$.ajax({
'async': false,
'type': 'GET',
'url': parent.CMS.config.request.url,
'data': {
'model': parent.CMS.config.request.model,
'pk': parent.CMS.config.request.pk
},
'success': function (response) {
parent.CMS.API.locked = false;
if(response === '' && !url) {
// cancel if response is empty
return false;
} else if(parent.location.pathname !== response) {
// api call to the backend to check if the current path is still the same
that.reloadBrowser(response);
} else if(url === 'REFRESH_PAGE') {
// if on_close provides REFRESH_PAGE, only do a reload
that.reloadBrowser();
} else if(url) {
// on_close can also provide a url, reload to the new destination
that.reloadBrowser(url);
}
}
});
// cancel further operations
return false;
}
// add timeout if provided
parent.setTimeout(function () {
if (url && url != parent.location.href) {
// location.reload() takes precedence over this, so we
// don't want to reload the page if we need a redirect
parent.location.href = url;
}
else {
// ensure page is always reloaded #3413
parent.location.reload()
}
}, timeout || 0);
},
// disable multiple form submissions
preventSubmit: function () {
var forms = $('#cms_toolbar').find('form');
forms.submit(function () {
// show loader
CMS.API.Toolbar._loader(true);
// we cannot use disabled as the name action will be ignored
$('input[type="submit"]').bind('click', function (e) {
e.preventDefault();
}).css('opacity', 0.5);
});
},
// fixes csrf behaviour
csrf: function (csrf_token) {
$.ajaxSetup({
beforeSend: function (xhr) {
// set csrf_token
xhr.setRequestHeader("X-CSRFToken", csrf_token);
}
});
},
// handles the tooltip for the plugins
showTooltip: function (name, id) {
var tooltip = $('.cms_tooltip');
// change css and attributes
tooltip.css('visibility', 'visible')
.data('plugin_id', id || null)
.show()
.find('span').html(name);
// attaches move event
// this sets the correct position for the edit tooltip
$('body').bind('mousemove.cms', function (e) {
// so lets figure out where we are
var offset = 20;
var relX = e.pageX - $(tooltip).offsetParent().offset().left;
var relY = e.pageY - $(tooltip).offsetParent().offset().top;
var bound = $(tooltip).offsetParent().width();
var pos = relX + tooltip.outerWidth(true) + offset;
tooltip.css({
'left': (pos >= bound) ? relX - tooltip.outerWidth(true) - offset : relX + offset,
'top': relY - 12
});
});
// attach tooltip event for touch devices
tooltip.bind('touchstart.cms', function () {
$('.cms_plugin-' + $(this).data('plugin_id')).trigger('dblclick');
});
},
hideTooltip: function () {
var tooltip = $('.cms_tooltip');
// change css
tooltip.css('visibility', 'hidden').hide();
// unbind events
$('body').unbind('mousemove.cms');
tooltip.unbind('touchstart.cms');
},
// sends or retrieves a JSON from localStorage or the session if local storage is not available
setSettings: function (settings) {
var that = this;
// merge settings
settings = JSON.stringify($.extend({}, CMS.config.settings, settings));
// set loader
if(CMS.API.Toolbar) CMS.API.Toolbar._loader(true);
// use local storage or session
if(window.localStorage) {
// save within local storage
localStorage.setItem('cms_cookie', settings);
if(CMS.API.Toolbar) CMS.API.Toolbar._loader(false);
} else {
// save within session
CMS.API.locked = true;
$.ajax({
'async': false,
'type': 'POST',
'url': CMS.config.urls.settings,
'data': {
'csrfmiddlewaretoken': this.config.csrf,
'settings': settings
},
'success': function (data) {
CMS.API.locked = false;
// determine if logged in or not
settings = (data) ? JSON.parse(data) : CMS.config.settings;
if(CMS.API.Toolbar) CMS.API.Toolbar._loader(false);
},
'error': function (jqXHR) {
that.showError(jqXHR.response + ' | ' + jqXHR.status + ' ' + jqXHR.statusText);
}
});
}
// save settings
CMS.settings = JSON.parse(settings);
// ensure new settings are returned
return CMS.settings;
},
getSettings: function () {
var that = this;
var settings;
// set loader
if(CMS.API.Toolbar) CMS.API.Toolbar._loader(true);
// use local storage or session
if(window.localStorage) {
// get from local storage
settings = JSON.parse(localStorage.getItem('cms_cookie'));
if(CMS.API.Toolbar) CMS.API.Toolbar._loader(false);
} else {
CMS.API.locked = true;
// get from session
$.ajax({
'async': false,
'type': 'GET',
'url': CMS.config.urls.settings,
'success': function (data) {
CMS.API.locked = false;
// determine if logged in or not
settings = (data) ? JSON.parse(data) : CMS.config.settings;
if(CMS.API.Toolbar) CMS.API.Toolbar._loader(false);
},
'error': function (jqXHR) {
that.showError(jqXHR.response + ' | ' + jqXHR.status + ' ' + jqXHR.statusText);
}
});
}
if(settings === null) settings = this.setSettings(CMS.config.settings);
// save settings
CMS.settings = settings;
// ensure new settings are returned
return CMS.settings;
}
};
// autoinits
CMS.API.Helpers.preventSubmit();
});
})(CMS.$);

View file

@ -0,0 +1,67 @@
/*##################################################|*/
/* #CMS# */
(function($) {
// CMS.$ will be passed for $
$(document).ready(function () {
// set local variables
var title= $('#id_title');
var slug = $('#id_slug');
var changed = false;
var prefill = false;
// hide rows when hidden input fields are added
$('input[type="hidden"]').each(function () {
$(this).parent('.form-row').hide()
});
// determine if slug is empty
if(slug.val() === '') prefill = true;
// always bind the title > slug generation and do the validation inside for better ux
title.bind('keyup', function() {
var value = title.val();
// international language handling
if(window.UNIHANDECODER) value = UNIHANDECODER.decode(value);
// if slug is empty, prefill again
if(prefill === false && slug.val() === '') prefill = true;
// urlify
var urlified = URLify(value, 64);
if(prefill) slug.val(urlified);
});
// autocall
title.trigger('keyup');
// set focus to title
title.focus();
// all permissions and page states loader
$('div.loading').each(function () {
$(this).load($(this).attr('rel'));
});
// add changed data bindings to elements
slug.add(title).bind('change', function () {
$(this).data('changed', true);
});
// public api for changing the language tabs
// used in admin/cms/page/change_form.html
CMS.API.changeLanguage = function (url) {
// also make sure that we will display the confirm dialog
// in case users switch tabs while editing plugins
var answer = true;
if(slug.length) {
// check if the slug has the changed attribute
if(slug.data('changed') || title.data('changed')) changed = true;
}
if(changed) {
var question = gettext("Are you sure you want to change tabs without saving the page first?");
answer = confirm(question);
}
if(answer) window.location.href = url;
};
});
})(CMS.$);

View file

@ -0,0 +1,779 @@
/*##################################################|*/
/* #CMS# */
(function($) {
// CMS.$ will be passed for $
$(document).ready(function () {
/*!
* TreeManager
* Handles treeview
* TODO this will be refactored in 3.1
*/
CMS.TreeManager = new CMS.Class({
options: {
'lang': {}
},
initialize: function (options) {
this.options = $.extend(true, {}, this.options, options);
// load internal functions
if(!this.options.settings.filtered) {
this.setupFunctions();
this.setupTreePublishing();
this.setupUIHacks();
this.setupGlobals();
this.setupTree();
// init tree component
initTree();
} else {
// when filtered is active, prevent tree actions
this.setupUIHacks();
}
},
setupFunctions: function () {
var that = this;
$.syncCols = function(){
$('#sitemap .col-softroot').syncWidth(0);
$('#sitemap .col-apphook').syncWidth(0);
$('#sitemap .col-language').syncWidth(0);
$('#sitemap .col-navigation').syncWidth(0);
$('#sitemap .col-actions').syncWidth(0);
$('#sitemap .col-info').syncWidth(0);
that.refreshColumns.call($('ul.tree-default li'));
};
/* Colums width sync */
$.fn.syncWidth = function(max) {
var visible = false;
$(this).each(function() {
if($(this).is(':visible')) {
visible = true;
var val= $(this).width();
if(val > max){
max = val;
}
}
});
if (visible && max > 0) {
$(this).each(function() {
$(this).css('width', max);
});
}
};
// jquery.functional
$.curry = function(fn) {
if (arguments.length < 2) return fn;
args = $.makeArray(arguments).slice(1, arguments.length);
return function() {
return fn.apply(this, args.concat($.makeArray(arguments)));
}
};
$.__callbackPool = {};
$.callbackRegister = function(name, fn /*, arg0, arg1, ..*/){
if (arguments.length > 2) {
// create curried function
fn = $.curry.apply(this, $.makeArray(arguments).slice(1, arguments.length));
}
$.__callbackPool[name] = fn;
return name;
};
$.callbackCall = function(name/*, extra arg0, extra arg1, ..*/){
if (!name || !name in $.__callbackPool) {
throw "No callback registered with name: " + name;
}
$.__callbackPool[name].apply(this, $.makeArray(arguments).slice(1, arguments.length));
$.callbackRemove(name);
return name;
};
$.callbackRemove = function(name) {
delete $.__callbackPool[name];
};
// very simple yellow fade plugin..
$.fn.yft = function(){
this.effect("highlight", {}, 1000);
};
// jquery replace plugin :)
$.fn.replace = function(o) {
return this.after(o).remove().end();
};
},
setupTreePublishing: function () {
// ADD DIRECT PUBLISHING
var that = this;
var tree = $('.tree');
var langTrigger = '.col-language .trigger-tooltip span';
var langTooltips = '.language-tooltip';
var langTimer = function () {};
var langDelay = 100;
var langFadeDuration = 200;
// show the tooltip
tree.delegate(langTrigger, 'mouseenter', function () {
var el = $(this).closest('.col-language').find('.language-tooltip');
var anchors = el.find('a');
var span = $(this);
// clear timer
clearTimeout(langTimer);
// cancel if tooltip already visible
if(el.is(':visible')) return false;
// set correct position
el.css('right', 20 + $(this).position().left);
// figure out what should be shown
anchors.hide();
if(span.hasClass('unpublished') || span.hasClass('unpublishedparent')) anchors.eq(1).show();
if(span.hasClass('published')) anchors.eq(0).show();
if(span.hasClass('dirty')) anchors.show().parent().addClass('language-tooltip-multiple');
// hide all elements
$(langTooltips).fadeOut(langDelay);
// use a timeout to display the tooltip
langTimer = setTimeout(function () {
el.stop(true, true).fadeIn(langFadeDuration);
}, langDelay);
});
// hide the tooltip when leaving the area
tree.delegate(langTrigger, 'mouseleave', function () {
// clear timer
clearTimeout(langTimer);
// hide all elements
langTimer = setTimeout(function () {
$(langTooltips).fadeOut(langFadeDuration);
}, langDelay * 2);
});
// reset hiding when entering the tooltip itself
tree.delegate(langTooltips, 'mouseover', function () {
// clear timer
clearTimeout(langTimer);
});
tree.delegate(langTooltips, 'mouseleave', function () {
// hide all elements
langTimer = setTimeout(function () {
$(langTooltips).fadeOut(langFadeDuration);
}, langDelay * 2);
});
// attach double check event if publish or unpublish should be triggered
tree.delegate('.language-tooltip a', 'click', function (e) {
e.preventDefault();
// cancel if not confirmed
if(!confirm(that.options.lang.publish.replace('§', $(this).text().toLowerCase()))) return false;
// publish page and update
window.location.href = $(this).attr('href');
});
},
setupUIHacks: function () {
// enables tab click on title entry to open in new window
$('.tree').delegate('.col1 .title', 'click', function (e) {
if(!e.metaKey) {
window.top.location.href = $(this).attr('href');
} else {
window.open($(this).attr('href'), '_blank');
}
});
// adds functionality to the filter
$('#changelist-filter-button').bind('click', function () {
$("#changelist-filter").toggle();
});
// set correct active entry
if(window.parent && window.parent.CMS && window.parent.CMS.config) {
var page_id = window.parent.CMS.config.request.page_id;
$('div[data-page_id="'+page_id+'"]').addClass('cont-active');
}
},
setupGlobals: function () {
var that = this;
var msg = '';
var parent = null;
window.moveSuccess = function(node){
$.syncCols();
msg = $('<span class="success">'+that.options.lang.success+'</span>');
parent = window.parent;
node.after(msg);
node.parent().find('.col2').hide();
msg.fadeOut(1000, function () {
node.parent().find('.col2').show()
});
// check for reload changes
if(window.self !== window.top) {
window.parent.CMS.API.Helpers.reloadBrowser(false, false, true);
window.parent.CMS.API.Toolbar.openMessage(that.options.lang.changes, false, 0);
}
};
window.moveError = function(node,message){
if(message && message !== 'error') {
msg = $('<span class="success">'+message+'</span>');
}
else {
msg = $('<span class="success">'+that.options.lang.error+'</span>');
}
node.parent().find('.col2').hide();
node.after(msg);
};
},
setupTree: function () {
var that = this;
var tree;
// global initTree function
initTree = function(){
tree = new tree_component();
var options = {
rules: {
clickable: "all",
renameable: "none",
deletable: "all",
creatable: "all",
draggable: "all",
dragrules: "all",
droppable: "all",
metadata : "mdata",
use_inline: true
//droppable : ["tree_drop"]
},
path: false,
ui: {
dots: true,
rtl: false,
animation: 0,
hover_mode: true,
//theme_path: script_url_path() + "/../jstree/themes/",
a_class: "title"
},
cookies : {
prefix: "djangocms_nodes"
},
callback: {
beforemove : function(what, where, position) {
item_id = what.id.split("page_")[1];
target_id = where.id.split("page_")[1];
old_node = what;
if($(what).parent().children("li").length > 1){
if($(what).next("li").length){
old_target = $(what).next("li")[0];
old_position = "right";
}
if($(what).prev("li").length){
old_target = $(what).prev("li")[0];
old_position = "left";
}
}else{
if($(what).attr("rel") != "topnode"){
old_target = $(what).parent().parent()[0];
old_position = "inside";
}
}
addUndo(what, where, position);
return true;
},
onmove: function(what, where, position){
item_id = what.id.split("page_")[1];
target_id = where.id.split("page_")[1];
if (position == "before") {
position = "left";
}else if (position == "after") {
position = "right";
}else if(position == "inside"){
position = "last-child";
}
moveTreeItem(what, item_id, target_id, position, false);
},
onload: function () {
setTimeout(function () {
reCalc();
}, 250);
}
}
};
if (!$($("div.tree").get(0)).hasClass('root_allow_children')){
// disalow possibility for adding subnodes to main tree, user doesn't
// have permissions for this
options.rules.dragrules = ["node inside topnode", "topnode inside topnode", "node * node"];
}
tree.init($("div.tree"), options);
};
selected_page = false;
action = false;
var _oldAjax = $.ajax;
$.ajax = function(s){
// just override ajax function, so the loader message gets displayed
// always
$('#loader-message').show();
callback = s.success || false;
s.success = function(data, status){
if (callback) {
callback(data, status);
}
$('#loader-message').hide();
};
// just for debuging!!
/*s.complete = function(xhr, status) {
if (status == "error" && that.options.settings.debug) {
$('body').before(xhr.responseText);
}
}*/
// end just for debuging
// TODO: add error state!
return _oldAjax(s);
};
function refresh(){
window.location = window.location.href;
}
function refreshIfChildren(pageId){
return $('#page_' + pageId).find('li[id^=page_]').length ? refresh : function(){ return true; };
}
/**
* Loads remote dialog to dialogs div.
*
* @param {String} url
* @param {Object} data Data to be send over post
* @param {Function} noDialogCallback Gets called when response is empty.
* @param {Function} callback Standard callback function.
*/
function loadDialog(url, data, noDialogCallback, callback){
if (data === undefined) data = {};
$.post(url, data, function(response) {
if (response == '' && noDialogCallback) noDialogCallback();
$('#dialogs').empty().append(response);
if (callback) callback(response);
});
}
// let's start event delegation
$('#changelist li').click(function(e) {
// I want a link to check the class
if(e.target.tagName == 'IMG' || e.target.tagName == 'SPAN') {
target = e.target.parentNode;
} else {
target = e.target;
}
var jtarget = $(target);
if(jtarget.hasClass("move")) {
// prepare tree for move / cut paste
var id = e.target.id.split("move-link-")[1];
if(id==null){
id = e.target.parentNode.id.split("move-link-")[1];
}
var page_id = id;
selected_page = page_id;
action = "move";
$('span.move-target-container, span.line, a.move-target').show();
$('#page_'+page_id).addClass("selected");
$('#page_'+page_id+' span.move-target-container').hide();
e.stopPropagation();
return false;
}
if(jtarget.hasClass("copy")) {
// prepare tree for copy
id = e.target.id.split("copy-link-")[1];
if(id==null){
id = e.target.parentNode.id.split("copy-link-")[1];
}
selected_page = id;
action = mark_copy_node(id);
e.stopPropagation();
return false;
}
if(jtarget.hasClass("viewpage")) {
var view_page_url = $('#' + target.id + '-select').val();
if(view_page_url){
window.open(view_page_url);
}
}
if(jtarget.hasClass("addlink")) {
if (!/#$/g.test(jtarget.attr('href'))) {
// if there is url instead of # inside href, follow this url
// used if user haves add_page
return true;
}
$("tr").removeClass("target");
$("#changelist table").removeClass("table-selected");
page_id = target.id.split("add-link-")[1];
selected_page = page_id;
action = "add";
$('tr').removeClass("selected");
$('#page-row-'+page_id).addClass("selected");
$('.move-target-container').hide();
$('a.move-target, span.line, #move-target-'+page_id).show();
e.stopPropagation();
return false;
}
// don't assume admin site is root-level
// grab base url to construct full absolute URLs
admin_base_url = document.URL.split("/cms/page/")[0] + "/";
// in navigation
if(jtarget.hasClass('navigation-checkbox')) {
e.stopPropagation();
var pageId = jtarget.attr('name').split('navigation-')[1];
var language = jtarget.closest('.cont').find('a[lang]').attr('lang') || '';
// if I don't put data in the post, django doesn't get it
reloadItem(jtarget, admin_base_url + 'cms/page/' + pageId + '/change-navigation/?language=' + language, { 1:1 });
}
// lazy load descendants on tree open
if(jtarget.hasClass("closed")) {
// only load them once
if(jtarget.find('ul > li').length == 0 && !jtarget.hasClass("loading")) {
// keeps this event from firing multiple times before
// the dom as changed. it still needs to propagate for
// the other click event on this element to fire
jtarget.addClass("loading");
var pageId = $(jtarget).attr("id").split("page_")[1];
var language = $(jtarget).children('div.cont').children('div.col1').children('.title').attr('lang')
$.get(admin_base_url + "cms/page/" + pageId + "/" + language + "/descendants/", {}, function(r, status) {
jtarget.children('ul').append(r);
// show move targets if needed
if($('span.move-target-container:visible').length > 0) {
jtarget.children('ul').find('a.move-target, span.move-target-container, span.line').show();
}
reCalc();
});
} else{
reCalc();
}
}
if(jtarget.hasClass("move-target")) {
if(jtarget.hasClass("left")){
position = "left";
}
if(jtarget.hasClass("right")){
position = "right";
}
if(jtarget.hasClass("last-child")){
position = "last-child";
}
target_id = target.parentNode.id.split("move-target-")[1];
if(action=="move") {
moveTreeItem(null, selected_page, target_id, position, tree);
$('.move-target-container').hide();
}else if(action=="copy") {
site = $('#site-select')[0].value;
copyTreeItem(selected_page, target_id, position, site);
$('.move-target-container').hide();
}else if(action=="add") {
site = $('#site-select')[0].value;
window.location.href = window.location.href.split("?")[0].split("#")[0] + 'add/?target='+target_id+"&amp;position="+position+"&amp;site="+site;
}
e.stopPropagation();
return false;
}
return true;
});
$("div#sitemap").show();
function reCalc(){
$.syncCols();
}
$(window).bind('resize', reCalc);
/* Site Selector */
$('#site-select').change(function(){
var form = $(this).closest('form');
// add correct value for copy
if(action === 'copy') $('#site-copy').val(selected_page);
// submit form
form.submit();
});
//
// If an A element has a data-attribute 'alt-class'. At this time,
// this is only the edit button in the page-tree, but could be
// more in future. It is important that the CSS be written in such
// a manner that the alt-class is defined after the normal class,
// so that it can be overridden when the alt-key is depressed.
//
// NOTE: This 'preview' part of the 'alt-click to [alternative
// function]' feature may not work in some environments (Windows
// in a some virtual machine environments, notably), but is only a
// nice-'extra', not a requirement for the feature.
//
$(document).on('keydown keyup', function(evt){
if (evt.which === 18) {
$('a[data-alt-class]').each(function(){
var self = $(this);
self.toggleClass(self.data('alt-class'), evt.type === 'keydown');
})
}
});
//
// If the A-element has a data-attribute 'alt-href', then this
// click-handler uses that instead of the normal href attribute as
// the click-destination. Again, currently this is only on the
// edit button, but could be more in future.
//
$('a[data-alt-href]').on('click', function(evt){
var href;
evt.preventDefault();
if (evt.shiftKey) {
href = $(this).data('alt-href');
}
else {
href = $(this).attr('href');
}
window.location = href;
});
var copy_splits = window.location.href.split("copy=");
if(copy_splits.length > 1){
var id = copy_splits[1].split("&")[0];
var action = mark_copy_node(id);
selected_page = id;
}
function copyTreeItem(item_id, target_id, position, site){
if (that.options.settings.permission) {
return loadDialog('./' + item_id + '/dialog/copy/', {
position:position,
target:target_id,
site:site,
callback: $.callbackRegister("_copyTreeItem", _copyTreeItem, item_id, target_id, position, site)
});
}
return _copyTreeItem(item_id, target_id, position, site);
}
function _copyTreeItem(item_id, target_id, position, site, options) {
var data = {
position:position,
target:target_id,
site:site
};
data = $.extend(data, options);
$.post("./" + item_id + "/copy-page/", data, function(decoded) {
response = decoded.content;
status = decoded.status;
if(status==200) {
// reload tree
window.location = window.location.href;
}else{
alert(response);
moveError($('#page_'+item_id + " div.col1:eq(0)"),response);
}
});
}
function mark_copy_node(id){
$('a.move-target, span.move-target-container, span.line').show();
$('#page_'+id).addClass("selected");
$('#page_'+id).parent().parent().children('div.cont').find('a.move-target.first-child, span.second').hide();
$('#page_'+id).parent().parent().children('ul').children('li').children('div.cont').find('a.move-target.left, a.move-target.right, span.first, span.second').hide();
return "copy";
}
/**
* Reloads tree item (one line). If some filtering is found, adds
* filtered variable into posted data.
*
* @param {HTMLElement} el Any child element of tree item
* @param {String} url Requested url
* @param {Object} data Optional posted data
* @param {Function} callback Optional calback function
*/
function reloadItem(el, url, data, callback, errorCallback) {
if (data === undefined) data = {};
if (/\/\?/ig.test(window.location.href)) {
// probably some filter here, tell backend, we need a filtered
// version of item
data['fitlered'] = 1;
}
function onSuccess(response, textStatus) {
var status = true;
var target = null;
if(callback) status = callback(response, textStatus);
if(status) {
if (/page_\d+/.test($(el).attr('id'))) {
// one level higher
target = $(el).find('div.cont:first');
} else {
target = $(el).parents('div.cont:first');
}
var parent = target.parent();
// remove the element if something went wrong
if(response == 'NotFound') return parent.remove();
var origin = $('.messagelist');
target.replace(response);
var messages = $(parent).find('.messagelist');
if(messages.length) {
origin.remove();
messages.insertAfter('.breadcrumbs');
}
parent.find('div.cont:first').yft();
// ensure after removal everything is aligned again
$(window).trigger('resize');
}
}
$.ajax({
'type': 'POST',
'data': data,
'url': url,
'success': onSuccess,
'error': function (XMLHttpRequest, textStatus, errorThrown) {
// errorCallback is passed through the reloadItem function
if(errorCallback) errorCallback(XMLHttpRequest, textStatus, errorThrown);
},
'xhr': (window.ActiveXObject) ? function(){try {return new window.ActiveXObject("Microsoft.XMLHTTP");} catch(e) {}} : function() {return new window.XMLHttpRequest();}
});
}
function moveTreeItem(jtarget, item_id, target_id, position, tree){
reloadItem(
jtarget, "./" + item_id + "/move-page/",
{ position: position, target: target_id },
// on success
function(decoded,textStatus){
response = decoded.content;
status = decoded.status;
if(status==200) {
if (tree) {
var tree_pos = {'left': 'before', 'right': 'after'}[position] || 'inside';
tree.moved("#page_" + item_id, $("#page_" + target_id + " a.title")[0], tree_pos, false, false);
} else {
moveSuccess($('#page_'+item_id + " div.col1:eq(0)"));
}
return false;
}
else {
moveError($('#page_'+item_id + " div.col1:eq(0)"),response);
return false;
}
}
);
}
var undos = [];
function addUndo(node, target, position){
undos.push({node:node, target:target, position:position});
}
},
refreshColumns: function () {
$('div.col2').children('div').each(function(index, item){
$(item).css('display', 'block');
});
var min_width = 100000;
var max_col2_width = 0;
var max_col2 = null;
$(this).each(function() {
var cont = $(this).children('div.cont');
if (!cont.is(':visible')) {
return;
}
var col1 = cont.children('div.col1');
var col2 = cont.children('div.col2');
var col1_width = col1.outerWidth(true);
var col2_width = col2.outerWidth(true);
var total_width = cont.outerWidth(true);
var dif = total_width - col1_width;
if(dif < min_width){
min_width = dif;
}
if(col2_width > max_col2_width){
max_col2_width = col2_width;
max_col2 = col2
}
});
var offset = 50;
var w = 0;
var hidden_count = 0;
var max_reached = false;
if(max_col2){
max_col2.children('div').each(function(){
if(!max_reached){
w += $(this).outerWidth(true);
}
if(max_reached || w > (min_width - offset)){
hidden_count = hidden_count + 1;
max_reached = true
}
});
if(hidden_count){
$(this).each(function() {
$(this).children('div.cont').children('div.col2').children('div').slice(-hidden_count).each(function(){
$(this).css('display', 'none');
})
});
$('div#sitemap ul.header div.col2').children().slice(-hidden_count).each(function(){
$(this).css('display','none');
})
}
}
}
});
});
})(CMS.$);

View file

@ -0,0 +1,107 @@
/*##################################################|*/
/* #CMS# */
(function($) {
// CMS.$ will be passed for $
$(document).ready(function () {
/*!
* Clipboard
* Handles copy & paste
*/
CMS.Clipboard = new CMS.Class({
implement: [CMS.API.Helpers],
options: {
'position': 220, // offset to top
'speed': 100,
'id': null,
'url': ''
},
initialize: function (options) {
this.clipboard = $('.cms_clipboard');
this.options = $.extend(true, {}, this.options, options);
this.config = CMS.config;
this.settings = CMS.settings;
// elements
this.containers = this.clipboard.find('.cms_clipboard-containers > .cms_draggable');
this.triggers = this.clipboard.find('.cms_clipboard-triggers a');
this.triggerRemove = this.clipboard.find('.cms_clipboard-empty a');
// states
this.click = (document.ontouchstart !== null) ? 'click.cms' : 'touchend.cms click.cms';
this.timer = function () {};
// setup initial stuff
this._setup();
// setup events
this._events();
},
// initial methods
_setup: function () {
var that = this;
// attach visual events
this.triggers.bind('mouseenter mouseleave', function (e) {
e.preventDefault();
// clear timeout
clearTimeout(that.timer);
if(e.type === 'mouseleave' && !that.containers.has(e.toElement).length) hide();
var index = that.clipboard.find('.cms_clipboard-triggers a').index(this);
var el = that.containers.eq(index);
// cancel if element is already open
if(el.data('open') === true) return false;
// show element
that.containers.stop().css({ 'margin-left': -that.options.position }).data('open', false);
el.stop().animate({ 'margin-left': 0 }, that.options.speed);
el.data('open', true);
});
that.containers.bind('mouseover mouseleave', function (e) {
// clear timeout
clearTimeout(that.timer);
// cancel if we trigger mouseover
if(e.type === 'mouseover') return false;
// we need a little timer to detect if we should hide the menu
hide();
});
function hide() {
that.timer = setTimeout(function () {
that.containers.stop().css({ 'margin-left': -that.options.position }).data('open', false);
}, that.options.speed);
}
},
_events: function () {
var that = this;
// add remove event
this.triggerRemove.bind(this.click, function (e) {
e.preventDefault();
that.clear(function () {
// remove element on success
that.clipboard.hide();
});
});
},
// public methods
clear: function (callback) {
// post needs to be a string, it will be converted using JSON.parse
var post = '{ "csrfmiddlewaretoken": "' + this.config.csrf + '" }';
// redirect to ajax
CMS.API.Toolbar.openAjax(this.config.clipboard.url, post, '', callback);
}
});
});
})(CMS.$);

View file

@ -0,0 +1,638 @@
/*##################################################|*/
/* #CMS# */
(function($) {
// CMS.$ will be passed for $
$(document).ready(function () {
/*!
* Modal
* Controls a cms specific modal
*/
CMS.Modal = new CMS.Class({
implement: [CMS.API.Helpers],
options: {
'onClose': false,
'minHeight': 400,
'minWidth': 800,
'modalDuration': 300,
'newPlugin': false,
'urls': {
'css_modal': 'cms/css/cms.toolbar.modal.css'
}
},
initialize: function (options) {
this.options = $.extend(true, {}, this.options, options);
this.config = CMS.config;
// elements
this.body = $('html');
this.modal = $('.cms_modal');
this.toolbar = $('.cms_toolbar');
// states
this.click = (document.ontouchstart !== null) ? 'click.cms' : 'touchend.cms click.cms';
this.maximized = false;
this.minimized = false;
this.triggerMaximized = false;
this.saved = false;
// if the modal is initialized the first time, set the events
if(!this.modal.data('ready')) this._events();
// ready modal
this.modal.data('ready', true);
},
// initial methods
_events: function () {
var that = this;
// attach events to window
this.modal.find('.cms_modal-collapse').bind(this.click, function (e) {
e.preventDefault();
that._minimize();
});
this.modal.find('.cms_modal-title').bind('mousedown.cms', function (e) {
e.preventDefault();
that._startMove(e);
});
this.modal.find('.cms_modal-title').bind('dblclick.cms', function () {
that._maximize();
});
this.modal.find('.cms_modal-resize').bind('mousedown.cms', function (e) {
e.preventDefault();
that._startResize(e);
});
this.modal.find('.cms_modal-maximize').bind(this.click, function (e) {
e.preventDefault();
that._maximize();
});
this.modal.find('.cms_modal-breadcrumb-items').on(this.click, 'a', function (e) {
e.preventDefault();
that._changeContent($(this));
});
this.modal.find('.cms_modal-close, .cms_modal-cancel').bind(this.click, function (e) {
that.options.onClose = null;
e.preventDefault();
that.close();
});
// stopper events
$(document).bind('mouseup.cms', function (e) {
that._endMove(e);
that._endResize(e);
});
},
// public methods
open: function (url, name, breadcrumb) {
// cancel if another lightbox is already being opened
if(CMS.API.locked) {
CMS.API.locked = false;
return false
} else {
CMS.API.locked = true;
}
// because a new instance is called, we have to ensure minimized state is removed #3620
if(this.modal.is(':visible') && this.modal.find('.cms_modal-collapsed').length) {
this.minimized = true;
this._minimize();
}
// show loader
CMS.API.Toolbar._loader(true);
// hide tooltip
this.hideTooltip();
// reset breadcrumb
this.modal.find('.cms_modal-breadcrumb').hide();
this.modal.find('.cms_modal-breadcrumb-items').html('');
// empty buttons
this.modal.find('.cms_modal-buttons').html('');
var contents = this.modal.find('.cms_modal-body, .cms_modal-foot');
contents.show();
this._loadContent(url, name);
// insure modal is not maximized
if(this.modal.find('.cms_modal-collapsed').length) this._minimize();
// reset styles
this.modal.css({
'left': '50%',
'top': '50%',
'mergin-left': 0,
'margin-right': 0
});
// lets set the modal width and height to the size of the browser
var widthOffset = 300; // adds margin left and right
var heightOffset = 350; // adds margin top and bottom;
var screenWidth = $(window).width(); // it has to be the height of the window not computer screen
var screenHeight = $(window).height(); // it has to be the height of the window and not computer screen
var width = (screenWidth >= this.options.minWidth + widthOffset) ? screenWidth - widthOffset : this.options.minWidth;
var height = (screenHeight >= this.options.minHeight + heightOffset) ? screenHeight - heightOffset : this.options.minHeight;
this.modal.find('.cms_modal-body').css({
'width': width,
'height': height
});
this.modal.find('.cms_modal-body').removeClass('cms_loader');
this.modal.find('.cms_modal-maximize').removeClass('cms_modal-maximize-active');
this.maximized = false;
// in case, the window is larger than the windows height, we trigger fullscreen mode
if(height >= screenHeight) this.triggerMaximized = true;
// we need to render the breadcrumb
this._setBreadcrumb(breadcrumb);
// display modal
this._show(this.options.modalDuration);
},
close: function () {
var that = this;
// handle remove option when plugin is new
if(this.options.newPlugin) {
var data = this.options.newPlugin;
var post = '{ "csrfmiddlewaretoken": "' + this.config.csrf + '" }';
var text = this.config.lang.confirm;
// trigger an ajax request
CMS.API.Toolbar.openAjax(data['delete'], post, text, function () {
that._hide(100);
});
} else {
this._hide(100);
}
// handle refresh option
if(this.options.onClose) this.reloadBrowser(this.options.onClose, false, true);
// reset maximize or minimize states for #3111
setTimeout(function () {
if(that.minimized) { that._minimize(); }
if(that.maximized) { that._maximize(); }
}, 300);
},
// private methods
_show: function (speed) {
// we need to position the modal in the center
var that = this;
var width = this.modal.width();
var height = this.modal.height();
// animates and sets the modal
this.modal.show().css({
'width': 0,
'height': 0,
'margin-left': 0,
'margin-top': 0
}).stop(true, true).animate({
'width': width,
'height': height,
'margin-left': -(width / 2),
'margin-top': -(height / 2)
}, speed, function () {
$(this).removeAttr('style');
that.modal.css({
'margin-left': -(width / 2),
'margin-top': -(height / 2)
});
// fade in modal window
that.modal.show();
// hide loader
CMS.API.Toolbar._loader(false);
// check if we should maximize
if(that.triggerMaximized) that._maximize();
// changed locked status to allow other modals again
CMS.API.locked = false;
});
// add esc close event
$(document).bind('keydown.cms', function (e) {
if(e.keyCode === 27) that.close();
});
// set focus to modal
this.modal.focus();
},
_hide: function (speed) {
this.modal.fadeOut(speed);
this.modal.find('.cms_modal-frame iframe').remove();
this.modal.find('.cms_modal-body').removeClass('cms_loader');
},
_minimize: function () {
var trigger = this.modal.find('.cms_modal-collapse');
var maximize = this.modal.find('.cms_modal-maximize');
var contents = this.modal.find('.cms_modal-body, .cms_modal-foot');
var title = this.modal.find('.cms_modal-title');
// cancel action if maximized
if(this.maximized) return false;
if(this.minimized === false) {
// ensure toolbar is shown
CMS.API.Toolbar.toggleToolbar(true);
// minimize
trigger.addClass('cms_modal-collapsed');
contents.hide();
// save initial state
this.modal.data('css', {
'left': this.modal.css('left'),
'top': this.modal.css('top'),
'margin': this.modal.css('margin')
});
this.modal.css({
'left': this.toolbar.find('.cms_toolbar-left').outerWidth(true) + 50,
'top': (this.config.debug) ? 6 : 1,
'margin': 0
});
// enable scrolling
this.body.css('overflow', '');
// ensure maximize element is hidden #3111
maximize.hide();
// set correct cursor when maximized #3111
title.css('cursor', 'default');
this.minimized = true;
} else {
// minimize
trigger.removeClass('cms_modal-collapsed');
contents.show();
// reattach css
this.modal.css(this.modal.data('css'));
// disable scrolling
this.body.css('overflow', 'hidden');
// ensure maximize element is shown #3111
maximize.show();
// set correct cursor when maximized #3111
title.css('cursor', 'move');
this.minimized = false;
}
},
_maximize: function () {
var debug = (this.config.debug) ? 5 : 0;
var container = this.modal.find('.cms_modal-body');
var minimize = this.modal.find('.cms_modal-collapse');
var trigger = this.modal.find('.cms_modal-maximize');
var title = this.modal.find('.cms_modal-title');
// cancel action when minimized
if(this.minimized) return false;
if(this.maximized === false) {
// maximize
this.maximized = true;
trigger.addClass('cms_modal-maximize-active');
this.modal.data('css', {
'left': this.modal.css('left'),
'top': this.modal.css('top'),
'margin-left': this.modal.css('margin-left'),
'margin-top': this.modal.css('margin-top')
});
container.data('css', {
'width': container.width(),
'height': container.height()
});
// reset
this.modal.css({
'left': 0,
'top': debug,
'margin': 0
});
// bind resize event
$(window).bind('resize.cms.modal', function () {
container.css({
'width': $(window).width(),
'height': $(window).height() - 60 - debug
});
});
$(window).trigger('resize.cms.modal');
// ensure maximize element is hidden #3111
minimize.hide();
// set correct cursor when maximized #3111
title.css('cursor', 'default');
} else {
// minimize
this.maximized = false;
trigger.removeClass('cms_modal-maximize-active');
$(window).unbind('resize.cms.modal');
// reattach css
this.modal.css(this.modal.data('css'));
container.css(container.data('css'));
// ensure maximize element is shown #3111
minimize.show();
// set correct cursor when maximized #3111
title.css('cursor', 'move');
}
},
_startMove: function (initial) {
// cancel if maximized
if(this.maximized) return false;
// cancel action when minimized
if(this.minimized) return false;
var that = this;
var position = that.modal.position();
this.modal.find('.cms_modal-shim').show();
$(document).bind('mousemove.cms', function (e) {
var left = position.left - (initial.pageX - e.pageX);
var top = position.top - (initial.pageY - e.pageY);
that.modal.css({
'left': left,
'top': top
});
});
},
_endMove: function () {
this.modal.find('.cms_modal-shim').hide();
$(document).unbind('mousemove.cms');
},
_startResize: function (initial) {
// cancel if in fullscreen
if(this.maximized) return false;
// continue
var that = this;
var container = this.modal.find('.cms_modal-body');
var width = container.width();
var height = container.height();
var modalLeft = this.modal.position().left;
var modalTop = this.modal.position().top;
this.modal.find('.cms_modal-shim').show();
$(document).bind('mousemove.cms', function (e) {
var mvX = initial.pageX - e.pageX;
var mvY = initial.pageY - e.pageY;
var w = width - (mvX * 2);
var h = height - (mvY * 2);
var max = 680;
// add some limits
if(w <= max || h <= 100) return false;
// set centered animation
container.css({
'width': width - (mvX * 2),
'height': height - (mvY * 2)
});
that.modal.css({
'left': modalLeft + mvX,
'top': modalTop + mvY
});
});
},
_endResize: function () {
this.modal.find('.cms_modal-shim').hide();
$(document).unbind('mousemove.cms');
},
_setBreadcrumb: function (breadcrumb) {
var bread = this.modal.find('.cms_modal-breadcrumb');
var crumb = '';
// cancel if there is no breadcrumb)
if(!breadcrumb || breadcrumb.length <= 0) return false;
if(!breadcrumb[0].title) return false;
// load breadcrumb
$.each(breadcrumb, function (index, item) {
// check if the item is the last one
var last = (index >= breadcrumb.length - 1) ? 'cms_modal-breadcrumb-last' : '';
// render breadcrumb
crumb += '<a href="' + item.url + '" class="' + last + '"><span>' + item.title + '</span></a>';
});
// attach elements
bread.find('.cms_modal-breadcrumb-items').html(crumb);
// show breadcrumb
bread.show();
},
_setButtons: function (iframe) {
var djangoSuit = iframe.contents().find('.suit-columns').length > 0;
var that = this;
var row;
if (!djangoSuit) {
row = iframe.contents().find('.submit-row:eq(0)');
} else {
row = iframe.contents().find('.save-box:eq(0)');
}
// hide all submit-rows
iframe.contents().find('.submit-row').hide();
var buttons = row.find('input, a, button');
var render = $('<span />'); // seriously jquery...
// if there are no given buttons within the submit-row area
// scan deeper within the form itself
if(!buttons.length) {
row = iframe.contents().find('body:not(.change-list) #content form:eq(0)');
buttons = row.find('input[type="submit"], button[type="submit"]');
buttons.addClass('deletelink')
.hide();
}
// attach relation id
buttons.each(function (index, item) {
$(item).attr('data-rel', '_' + index);
});
// loop over input buttons
buttons.each(function (index, item) {
item = $(item);
// cancel if item is a hidden input
if(item.attr('type') === 'hidden') return false;
// create helper variables
var title = item.attr('value') || item.text();
var cls = 'cms_btn';
// set additional special css classes
if(item.hasClass('default')) cls = 'cms_btn cms_btn-action';
if(item.hasClass('deletelink')) cls = 'cms_btn cms_btn-caution';
// create the element and attach events
var el = $('<div class="'+cls+' '+item.attr('class')+'">'+title+'</div>');
el.bind(that.click, function () {
if(item.is('input') || item.is('button')) item[0].click();
if(item.is('a')) that._loadContent(item.prop('href'), title);
// trigger only when blue action buttons are triggered
if(item.hasClass('default') || item.hasClass('deletelink')) {
that.options.newPlugin = null;
// reset onClose when delete is triggered
if(item.hasClass('deletelink')) that.options.onClose = null;
// hide iframe
that.modal.find('.cms_modal-frame iframe').hide();
// page has been saved or deleted, run checkup
that.saved = true;
}
});
// append element
render.append(el);
});
// manually add cancel button at the end
var cancel = $('<div class="cms_btn">'+that.config.lang.cancel+'</div>');
cancel.bind(that.click, function () {
that.options.onClose = false;
that.close();
});
render.append(cancel);
// render buttons
this.modal.find('.cms_modal-buttons').html(render);
},
_loadContent: function (url, name) {
var that = this;
// FIXME: A better fix is needed for '&' being interpreted as the
// start of en entity by jQuery. See #3404
url = url.replace('&', '&amp;');
// now refresh the content
var iframe = $('<iframe src="'+url+'" class="" frameborder="0" />');
iframe.css('visibility', 'hidden');
var holder = this.modal.find('.cms_modal-frame');
// set correct title
var title = this.modal.find('.cms_modal-title');
title.html(name || '&nbsp;');
// ensure previous iframe is hidden
holder.find('iframe').css('visibility', 'hidden');
// attach load event for iframe to prevent flicker effects
iframe.bind('load', function () {
// check if iframe can be accessed
try {
iframe.contents();
} catch (error) {
CMS.API.Toolbar.showError('<strong>' + error + '</strong>');
that.close();
}
// show messages in toolbar if provided
var messages = iframe.contents().find('.messagelist li');
if(messages.length) CMS.API.Toolbar.openMessage(messages.eq(0).text());
messages.remove();
var contents = iframe.contents();
// determine if we should close the modal or reload
if(messages.length && that.enforceReload) that.reloadBrowser();
if(messages.length && that.enforceClose) {
that.close();
return false;
}
// after iframe is loaded append css
contents.find('head').append($('<link rel="stylesheet" type="text/css" href="' + that.config.urls.static + that.options.urls.css_modal + '" />'));
// adding django hacks
contents.find('.viewsitelink').attr('target', '_top');
// set modal buttons
that._setButtons($(this));
// when an error occurs, reset the saved status so the form can be checked and validated again
if(iframe.contents().find('.errornote').length || iframe.contents().find('.errorlist').length) {
that.saved = false;
}
// when the window has been changed pressing the blue or red button, we need to run a reload check
// also check that no delete-confirmation is required
if(that.saved && !contents.find('.delete-confirmation').length) {
that.reloadBrowser(window.location.href, false, true);
} else {
iframe.show();
// set title of not provided
var innerTitle = iframe.contents().find('#content h1:eq(0)');
if(name === undefined) title.html(innerTitle.text());
innerTitle.remove();
// than show
iframe.css('visibility', 'visible');
// append ready state
iframe.data('ready', true);
// attach close event
contents.find('body').bind('keydown.cms', function (e) {
if(e.keyCode === 27) that.close();
});
contents.find('body').addClass('cms_modal-window');
// figure out if .object-tools is available
if(contents.find('.object-tools').length) {
contents.find('#content').css('padding-top', 38);
}
}
});
// inject
setTimeout(function () {
that.modal.find('.cms_modal-body').addClass('cms_loader');
holder.html(iframe);
}, this.options.modalDuration);
},
_changeContent: function (el) {
if(el.hasClass('cms_modal-breadcrumb-last')) return false;
var parents = el.parent().find('a');
parents.removeClass('cms_modal-breadcrumb-last');
el.addClass('cms_modal-breadcrumb-last');
this._loadContent(el.attr('href'));
// update title
this.modal.find('.cms_modal-title').text(el.text());
}
});
});
})(CMS.$);

View file

@ -0,0 +1,775 @@
/*##################################################|*/
/* #CMS# */
(function($) {
// CMS.$ will be passed for $
$(document).ready(function () {
/*!
* Plugins
* for created plugins or generics (static content)
*/
CMS.Plugin = new CMS.Class({
implement: [CMS.API.Helpers],
options: {
'type': '', // bar, plugin or generic
'placeholder_id': null,
'plugin_type': '',
'plugin_id': null,
'plugin_language': '',
'plugin_parent': null,
'plugin_order': null,
'plugin_breadcrumb': [],
'plugin_restriction': [],
'urls': {
'add_plugin': '',
'edit_plugin': '',
'move_plugin': '',
'copy_plugin': '',
'delete_plugin': ''
}
},
initialize: function (container, options) {
this.container = $('.' + container);
this.options = $.extend(true, {}, this.options, options);
// elements
this.body = $(document);
// states
this.csrf = CMS.config.csrf;
this.timer = function () {};
this.timeout = 250;
this.focused = false;
this.click = (document.ontouchstart !== null) ? 'click.cms' : 'tap.cms click.cms';
// bind data element to the container
this.container.data('settings', this.options);
// determine type of plugin
switch(this.options.type) {
case 'placeholder': // handler for placeholder bars
this._setPlaceholder();
this._collapsables();
break;
case 'plugin': // handler for all plugins
this._setPlugin();
this._collapsables();
break;
default: // handler for static content
this._setGeneric();
}
},
// initial methods
_setPlaceholder: function () {
var that = this;
var title = '.cms_dragbar-title';
var expanded = 'cms_dragbar-title-expanded';
var dragbar = $('.cms_dragbar-' + this.options.placeholder_id);
// register the subnav on the placeholder
this._setSubnav(dragbar.find('.cms_submenu'));
// enable expanding/collapsing globally within the placeholder
dragbar.find(title).bind(this.click, function () {
($(this).hasClass(expanded)) ? that._collapseAll($(this)) : that._expandAll($(this));
});
},
_setPlugin: function () {
var that = this;
var timer = function () {};
// adds double click to edit
this.container.bind('dblclick', function (e) {
e.preventDefault();
e.stopPropagation();
that.editPlugin(that.options.urls.edit_plugin, that.options.plugin_name, that.options.plugin_breadcrumb);
});
// adds edit tooltip
this.container.bind('mouseover.cms mouseout.cms', function (e) {
e.stopPropagation();
var name = that.options.plugin_name;
var id = that.options.plugin_id;
(e.type === 'mouseover') ? that.showTooltip(name, id) : that.hideTooltip();
});
// adds listener for all plugin updates
this.container.bind('cms.plugins.update', function (e) {
e.stopPropagation();
that.movePlugin();
});
// adds listener for copy/paste updates
this.container.bind('cms.plugin.update', function (e) {
e.stopPropagation();
var el = $(e.delegateTarget);
var dragitem = $('.cms_draggable-' + el.data('settings').plugin_id);
var placeholder_id = that._getId(dragitem.parents('.cms_draggables').last().prevAll('.cms_dragbar').first());
// if placeholder_id is empty, cancel
if(!placeholder_id) return false;
var data = el.data('settings');
data.target = placeholder_id;
data.parent= that._getId(dragitem.parent().closest('.cms_draggable'));
that.copyPlugin(data);
});
// variables for dragitems
var draggable = $('.cms_draggable-' + this.options.plugin_id);
var dragitem = draggable.find('> .cms_dragitem');
var submenu = draggable.find('.cms_submenu:eq(0)');
var submenus = $('.cms_draggables').find('.cms_submenu');
// attach event to the plugin menu
this._setSubnav(draggable.find('> .cms_dragitem .cms_submenu'));
// adds event for hiding the subnav
draggable.bind('mouseenter mouseleave mouseover', function (e) {
e.preventDefault();
e.stopPropagation();
if(that.focused) return false;
if(e.type === 'mouseenter' || e.type === 'mouseover') $(this).data('active', true);
if(e.type === 'mouseleave') {
$(this).data('active', false);
submenus.hide();
}
// add timeout to determine if we should hide the element
setTimeout(function () {
if(!$(e.currentTarget).data('active')) {
$(e.currentTarget).find('.cms_submenu:eq(0)').hide();
}
}, 100);
});
// adds event for showing the subnav
dragitem.bind('mouseenter', function (e) {
e.preventDefault();
e.stopPropagation();
submenus.hide();
submenu.show();
});
// adds double click to edit
dragitem.bind('dblclick', function (e) {
e.preventDefault();
e.stopPropagation();
that.editPlugin(that.options.urls.edit_plugin, that.options.plugin_name, that.options.plugin_breadcrumb);
});
},
_setGeneric: function () {
var that = this;
// adds double click to edit
this.container.bind('dblclick', function (e) {
e.preventDefault();
e.stopPropagation();
that.editPlugin(that.options.urls.edit_plugin, that.options.plugin_name, []);
});
// adds edit tooltip
this.container.bind('mouseover.cms mouseout.cms', function (e) {
e.stopPropagation();
var name = that.options.plugin_name;
var id = that.options.plugin_id;
(e.type === 'mouseover') ? that.showTooltip(name, id) : that.hideTooltip();
});
},
// public methods
addPlugin: function (type, name, parent) {
// cancel request if already in progress
if(CMS.API.locked) return false;
CMS.API.locked = true;
var that = this;
var data = {
'placeholder_id': this.options.placeholder_id,
'plugin_type': type,
'plugin_parent': parent || '',
'plugin_language': this.options.plugin_language,
'csrfmiddlewaretoken': this.csrf
};
$.ajax({
'type': 'POST',
'url': this.options.urls.add_plugin,
'data': data,
'success': function (data) {
CMS.API.locked = false;
that.newPlugin = data;
that.editPlugin(data.url, name, data.breadcrumb);
},
'error': function (jqXHR) {
CMS.API.locked = false;
var msg = CMS.config.lang.error;
// trigger error
that._showError(msg + jqXHR.responseText || jqXHR.status + ' ' + jqXHR.statusText);
}
});
},
editPlugin: function (url, name, breadcrumb) {
// trigger modal window
var modal = new CMS.Modal({
'newPlugin': this.newPlugin || false,
'onClose': this.options.onClose || false,
'redirectOnClose': this.options.redirectOnClose || false
});
modal.open(url, name, breadcrumb);
},
copyPlugin: function (options, source_language) {
// cancel request if already in progress
if(CMS.API.locked) return false;
CMS.API.locked = true;
var that = this;
var move = (options || source_language) ? true : false;
// set correct options
options = options || this.options;
if(source_language) {
options.target = options.placeholder_id;
options.plugin_id = '';
options.parent = '';
}
else {
source_language = options.plugin_language
}
var data = {
'source_placeholder_id': options.placeholder_id,
'source_plugin_id': options.plugin_id || '',
'source_language': source_language,
'target_plugin_id': options.parent || '',
'target_placeholder_id': options.target || CMS.config.clipboard.id,
'target_language': options.page_language || source_language,
'csrfmiddlewaretoken': this.csrf
};
var request = {
'type': 'POST',
'url': options.urls.copy_plugin,
'data': data,
'success': function () {
CMS.API.Toolbar.openMessage(CMS.config.lang.success);
// reload
CMS.API.Helpers.reloadBrowser();
},
'error': function (jqXHR) {
CMS.API.locked = false;
var msg = CMS.config.lang.error;
// trigger error
that._showError(msg + jqXHR.responseText || jqXHR.status + ' ' + jqXHR.statusText);
}
};
if(move) {
$.ajax(request);
} else {
// ensure clipboard is cleaned
CMS.API.Clipboard.clear(function () {
$.ajax(request);
});
}
},
cutPlugin: function () {
// if cut is once triggered, prevend additional actions
if(CMS.API.locked) return false;
CMS.API.locked = true;
var that = this;
var data = {
'placeholder_id': CMS.config.clipboard.id,
'plugin_id': this.options.plugin_id,
'plugin_parent': '',
'plugin_language': this.options.page_language,
'plugin_order': [this.options.plugin_id],
'csrfmiddlewaretoken': this.csrf
};
// ensure clipboard is cleaned
CMS.API.Clipboard.clear(function () {
// cancel request if already in progress
if(CMS.API.locked) return false;
CMS.API.locked = true;
// move plugin
$.ajax({
'type': 'POST',
'url': that.options.urls.move_plugin,
'data': data,
'success': function (response) {
CMS.API.Toolbar.openMessage(CMS.config.lang.success);
// if response is reload
CMS.API.Helpers.reloadBrowser();
},
'error': function (jqXHR) {
CMS.API.locked = false;
var msg = CMS.config.lang.error;
// trigger error
that._showError(msg + jqXHR.responseText || jqXHR.status + ' ' + jqXHR.statusText);
}
});
});
},
movePlugin: function (options) {
// cancel request if already in progress
if(CMS.API.locked) return false;
CMS.API.locked = true;
var that = this;
// set correct options
options = options || this.options;
var plugin = $('.cms_plugin-' + options.plugin_id);
var dragitem = $('.cms_draggable-' + options.plugin_id);
// SETTING POSITION
this._setPosition(options.plugin_id, plugin, dragitem);
// SAVING POSITION
var placeholder_id = this._getId(dragitem.parents('.cms_draggables').last().prevAll('.cms_dragbar').first());
var plugin_parent = this._getId(dragitem.parent().closest('.cms_draggable'));
var plugin_order = this._getIds(dragitem.siblings('.cms_draggable').andSelf());
// cancel here if we have no placeholder id
if(placeholder_id === false) return false;
// gather the data for ajax request
var data = {
'placeholder_id': placeholder_id,
'plugin_id': options.plugin_id,
'plugin_parent': plugin_parent || '',
// this is a hack: when moving to different languages use the global language
'plugin_language': options.page_language,
'plugin_order': plugin_order,
'csrfmiddlewaretoken': this.csrf
};
$.ajax({
'type': 'POST',
'url': options.urls.move_plugin,
'data': data,
'success': function (response) {
// if response is reload
if(response.reload) CMS.API.Helpers.reloadBrowser();
// enable actions again
CMS.API.locked = false;
// TODO: show only if(response.status)
that._showSuccess(dragitem);
},
'error': function (jqXHR) {
CMS.API.locked = false;
var msg = CMS.config.lang.error;
// trigger error
that._showError(msg + jqXHR.responseText || jqXHR.status + ' ' + jqXHR.statusText);
}
});
// show publish button
$('.cms_btn-publish').addClass('cms_btn-publish-active').parent().show();
// enable revert to live
$('.cms_toolbar-revert').removeClass('cms_toolbar-item-navigation-disabled');
},
deletePlugin: function (url, name, breadcrumb) {
// trigger modal window
var modal = new CMS.Modal({
'newPlugin': this.newPlugin || false,
'onClose': this.options.onClose || false,
'redirectOnClose': this.options.redirectOnClose || false
});
modal.open(url, name, breadcrumb);
},
// private methods
_setPosition: function (id, plugin, dragitem) {
// after we insert the plugin onto its new place, we need to figure out where to position it
var prevItem = dragitem.prev('.cms_draggable');
var nextItem = dragitem.next('.cms_draggable');
var parent = dragitem.parent().closest('.cms_draggable');
var child = $('.cms_plugin-' + this._getId(parent));
var placeholder = dragitem.closest('.cms_dragarea');
// determine if there are other plugins within the same level, this makes the move easier
if(prevItem.length) {
plugin.insertAfter($('.cms_plugin-' + this._getId(prevItem)));
} else if(nextItem.length) {
plugin.insertBefore($('.cms_plugin-' + this._getId(nextItem)));
} else if(parent.length) {
// if we can't find a plugin on the same level, we need to travel higher
// for this we need to find the deepest child
while(child.children().length) {
child = child.children();
}
child.append(plugin);
} else if(placeholder.length) {
// we also need to cover the case if we move the plugin to an empty placeholder
plugin.append($('.cms_plugin-' + this._getId(placeholder)));
} else {
// if we did not found a match, reload
CMS.API.Helpers.reloadBrowser();
}
},
editPluginPostAjax: function(caller, toolbar, response){
if (typeof toolbar == 'undefined' || typeof response == 'undefined') {
return function(toolbar, response) {
var that = caller;
that.editPlugin(response['url'], that.options.plugin_name, response['breadcrumb']);
}
}
that.editPlugin(response['url'], that.options.plugin_name, response['breadcrumb']);
},
_setSubnav: function (nav) {
var that = this;
nav.bind('mouseenter mouseleave tap.cms', function (e) {
e.preventDefault();
e.stopPropagation();
(e.type === 'mouseenter') ? that._showSubnav($(this)) : that._hideSubnav($(this));
});
nav.find('a').bind('click.cms tap.cms', function (e) {
e.preventDefault();
e.stopPropagation();
// show loader and make sure scroll doesn't jump
CMS.API.Toolbar._loader(true);
var el = $(this);
// set switch for subnav entries
switch(el.attr('data-rel')) {
case 'add':
that.addPlugin(el.attr('href').replace('#', ''), el.text(), that._getId(el.closest('.cms_draggable')));
break;
case 'ajax_add':
CMS.API.Toolbar.openAjax(el.attr('href'), JSON.stringify(el.data('post')), el.data('text'), that.editPluginPostAjax(that), el.data('on-success'));
break;
case 'edit':
that.editPlugin(that.options.urls.edit_plugin, that.options.plugin_name, that.options.plugin_breadcrumb);
break;
case 'copy-lang':
that.copyPlugin(this.options, el.attr('data-language'));
break;
case 'copy':
that.copyPlugin();
break;
case 'cut':
that.cutPlugin();
break;
case 'delete':
that.deletePlugin(that.options.urls.delete_plugin, that.options.plugin_name, that.options.plugin_breadcrumb);
break;
default:
CMS.API.Toolbar._loader(false);
CMS.API.Toolbar._delegate(el);
}
});
nav.find('input').bind('keyup keydown focus blur click', function (e) {
if(e.type === 'focus') that.focused = true;
if(e.type === 'blur' && !that.traverse) {
that.focused = false;
that._hideSubnav(nav);
}
if(e.type === 'keyup') {
clearTimeout(that.timer);
// keybound is not required
that.timer = setTimeout(function () {
that._searchSubnav(nav, $(e.currentTarget).val());
}, 100);
}
});
// set data attributes for original top positioning
nav.find('.cms_submenu-dropdown').each(function () {
$(this).data('top', $(this).css('top'))
});
// prevent propagnation
nav.bind(this.click, function (e) {
e.stopPropagation();
});
},
_showSubnav: function (nav) {
var that = this;
var dropdown = nav.find('.cms_submenu-dropdown');
var offset = parseInt(dropdown.data('top'));
// clearing
clearTimeout(this.timer);
// add small delay before showing submenu
this.timer = setTimeout(function () {
// reset z indexes
var reset = $('.cms_submenu').parentsUntil('.cms_dragarea');
var scrollHint = nav.find('.cms_submenu-scroll-hint');
reset.css('z-index', 0);
var parents = nav.parentsUntil('.cms_dragarea');
parents.css('z-index', 999);
// show subnav
nav.find('.cms_submenu-quicksearch').show();
// set visible states
nav.find('> .cms_submenu-dropdown').show().on('scroll', function () {
scrollHint.fadeOut(100);
$(this).off('scroll');
});
// show scrollHint for FF on OSX
window.console.log(nav[0], nav[0].scrollHeight);
if(nav[0].scrollHeight > 245) scrollHint.show();
}, 100);
// add key events
$(document).unbind('keydown.cms');
$(document).bind('keydown.cms', function (e) {
var anchors = nav.find('.cms_submenu-item:visible a');
var index = anchors.index(anchors.filter(':focus'));
// bind arrow down and tab keys
if(e.keyCode === 40 || e.keyCode === 9) {
that.traverse = true;
e.preventDefault();
if(index >= 0 && index < anchors.length - 1) {
anchors.eq(index + 1).focus();
} else {
anchors.eq(0).focus();
}
}
// bind arrow up keys
if(e.keyCode === 38) {
e.preventDefault();
if(anchors.is(':focus')) {
anchors.eq(index - 1).focus();
} else {
anchors.eq(anchors.length).focus();
}
}
// hide subnav when hitting enter or escape
if(e.keyCode === 13 || e.keyCode === 27) {
that.traverse = false;
nav.find('input').blur();
that._hideSubnav(nav);
}
});
// calculate subnav bounds
if($(window).height() + $(window).scrollTop() - nav.offset().top - dropdown.height() <= 10 && nav.offset().top - dropdown.height() >= 0) {
dropdown.css('top', 'auto');
dropdown.css('bottom', offset);
// if parent is within a plugin, add additional offset
if(dropdown.closest('.cms_draggable').length) dropdown.css('bottom', offset - 1);
} else {
dropdown.css('top', offset);
dropdown.css('bottom', 'auto');
}
},
_hideSubnav: function (nav) {
clearTimeout(this.timer);
var that = this;
// cancel if quicksearch is focues
if(this.focused) return false;
// set correct active state
nav.closest('.cms_draggable').data('active', false);
this.timer = setTimeout(function () {
// set visible states
nav.find('> .cms_submenu-dropdown').hide();
nav.find('.cms_submenu-quicksearch').hide();
// reset search
nav.find('input').val('');
that._searchSubnav(nav, '');
}, this.timeout);
// reset relativity
$('.cms_dragbar').css('position', '');
},
_searchSubnav: function (nav, value) {
var items = nav.find('.cms_submenu-item');
var titles = nav.find('.cms_submenu-item-title');
// cancel if value is zero
if(value === '') {
items.add(titles).show();
return false;
}
// loop through items and figure out if we need to hide items
items.find('a, span').each(function (index, item) {
item = $(item);
var text = item.text().toLowerCase();
var search = value.toLowerCase();
(text.indexOf(search) >= 0) ? item.parent().show() : item.parent().hide();
});
// check if a title is matching
titles.filter(':visible').each(function (index, item) {
titles.hide();
$(item).nextUntil('.cms_submenu-item-title').show();
});
// always display title of a category
items.filter(':visible').each(function (index, item) {
if($(item).prev().hasClass('cms_submenu-item-title')) {
$(item).prev().show();
} else {
$(item).prevUntil('.cms_submenu-item-title').last().prev().show();
}
});
// if there is no element visible, show only first categoriy
nav.find('.cms_submenu-dropdown').show();
if(items.add(titles).filter(':visible').length <= 0) {
nav.find('.cms_submenu-dropdown').hide();
}
// hide scrollHint
nav.find('.cms_submenu-scroll-hint').hide();
},
_collapsables: function () {
// one time setup
var that = this;
var settings = CMS.settings;
var draggable = $('.cms_draggable-' + this.options.plugin_id);
// check which button should be shown for collapsemenu
this.container.each(function (index, item) {
var els = $(item).find('.cms_dragitem-collapsable');
var open = els.filter('.cms_dragitem-expanded');
if(els.length === open.length && (els.length + open.length !== 0)) {
$(item).find('.cms_dragbar-title').addClass('cms_dragbar-title-expanded');
}
});
// cancel here if its not a draggable
if(!draggable.length) return false;
// attach events to draggable
draggable.find('> .cms_dragitem-collapsable').bind(this.click, function () {
var el = $(this);
var id = that._getId($(this).parent());
var settings = CMS.settings;
settings.states = settings.states || [];
// collapsable function and save states
if(el.hasClass('cms_dragitem-expanded')) {
settings.states.splice($.inArray(id, settings.states), 1);
el.removeClass('cms_dragitem-expanded').parent().find('> .cms_draggables').hide();
} else {
settings.states.push(id);
el.addClass('cms_dragitem-expanded').parent().find('> .cms_draggables').show();
}
// save settings
CMS.API.Toolbar.setSettings(settings);
});
// adds double click event
draggable.bind('dblclick', function (e) {
e.stopPropagation();
$('.cms_plugin-' + that._getId($(this))).trigger('dblclick');
});
// only needs to be excecuted once
if(CMS.Toolbar.ready) return false;
// removing dublicate entries
var sortedArr = settings.states.sort();
var filteredArray = [];
for(var i = 0; i < sortedArr.length; i++) {
if(sortedArr[i] !== sortedArr[i + 1]) {
filteredArray.push(sortedArr[i]);
}
}
settings.states = filteredArray;
// loop through the items
$.each(CMS.settings.states, function (index, id) {
var el = $('.cms_draggable-' + id);
// only add this class to elements which have a draggable area
if(el.find('.cms_draggables').length) {
el.find('> .cms_draggables').show();
el.find('> .cms_dragitem').addClass('cms_dragitem-expanded');
}
});
// set global setup
CMS.Toolbar.ready = true;
},
_expandAll: function (el) {
var items = el.closest('.cms_dragarea').find('.cms_dragitem-collapsable');
// cancel if there are no items
if(!items.length) return false;
items.each(function () {
if(!$(this).hasClass('cms_dragitem-expanded')) $(this).trigger('click.cms');
});
el.addClass('cms_dragbar-title-expanded');
},
_collapseAll: function (el) {
var items = el.closest('.cms_dragarea').find('.cms_dragitem-collapsable');
items.each(function () {
if($(this).hasClass('cms_dragitem-expanded')) $(this).trigger('click.cms');
});
el.removeClass('cms_dragbar-title-expanded');
},
_getId: function (el) {
return CMS.API.StructureBoard.getId(el);
},
_getIds: function (els) {
return CMS.API.StructureBoard.getIds(els);
},
_showError: function (msg) {
return CMS.API.Toolbar.showError(msg, true);
},
_showSuccess: function (el) {
var tpl = $('<div class="cms_dragitem-success"></div>');
el.append(tpl);
// start animation
tpl.fadeOut(function () {
$(this).remove()
});
}
});
});
})(CMS.$);

View file

@ -0,0 +1,366 @@
/*##################################################|*/
/* #CMS# */
(function($) {
// CMS.$ will be passed for $
$(document).ready(function () {
/*!
* Sideframe
* Controls a cms specific sideframe
*/
CMS.Sideframe = new CMS.Class({
implement: [CMS.API.Helpers],
options: {
'onClose': false,
'sideframeDuration': 300,
'sideframeWidth': 320,
'urls': {
'css_sideframe': 'cms/css/cms.toolbar.sideframe.css'
}
},
initialize: function (options) {
this.options = $.extend(true, {}, this.options, options);
this.config = CMS.config;
this.settings = CMS.settings;
// elements
this.sideframe = $('.cms_sideframe');
this.body = $('html');
// states
this.click = (document.ontouchstart !== null) ? 'click.cms' : 'touchend.cms click.cms';
this.enforceReload = false;
// if the modal is initialized the first time, set the events
if(!this.sideframe.data('ready')) this._events();
// ready sideframe
this.sideframe.data('ready', true);
},
// initial methods
_events: function () {
var that = this;
// attach close event
this.sideframe.find('.cms_sideframe-close').bind(this.click, function () {
that.close(true);
});
// attach hide event
this.sideframe.find('.cms_sideframe-hide').bind(this.click, function () {
if($(this).hasClass('cms_sideframe-hidden')) {
that.settings.sideframe.hidden = false;
that._show(that.settings.sideframe.position || that.options.sideframeWidth, true);
} else {
that.settings.sideframe.hidden = true;
that._hide();
}
that.settings = that.setSettings(that.settings);
});
// attach maximize event
this.sideframe.find('.cms_sideframe-maximize').bind(this.click, function () {
if($(this).hasClass('cms_sideframe-minimize')) {
that.settings.sideframe.maximized = false;
that._minimize();
} else {
that.settings.sideframe.maximized = true;
that.settings.sideframe.hidden = false;
that._maximize();
}
that.settings = that.setSettings(that.settings);
});
this.sideframe.find('.cms_sideframe-resize').bind('mousedown', function (e) {
e.preventDefault();
that._startResize();
});
// stopper events
$(document).bind('mouseup.cms', function () {
that._stopResize();
});
},
// public methods
open: function (url, animate) {
// prepare iframe
var that = this;
var language = 'language=' + CMS.config.request.language;
var page_id = 'page_id=' + CMS.config.request.page_id;
var holder = this.sideframe.find('.cms_sideframe-frame');
var initialized = false;
// push required params if defined
// only apply params on tree view
if(url.indexOf(CMS.config.request.tree) >= 0) {
var params = [];
if(CMS.config.request.language) params.push(language);
if(CMS.config.request.page_id) params.push(page_id);
url = this._url(url, params);
}
var iframe = $('<iframe src="'+url+'" class="" frameborder="0" />');
iframe.hide();
var width = this.settings.sideframe.position || this.options.sideframeWidth;
// attach load event to iframe
iframe.bind('load', function () {
var contents = iframe.contents();
// after iframe is loaded append css
contents.find('head').append($('<link rel="stylesheet" type="text/css" href="' + that.config.urls.static + that.options.urls.css_sideframe + '" />'));
// remove loader
that.sideframe.find('.cms_sideframe-frame').removeClass('cms_loader');
// than show
iframe.show();
// add debug infos
if(that.config.debug) iframe.contents().find('body').addClass('cms_debug');
// save url in settings
that.settings.sideframe.url = iframe.get(0).contentWindow.location.href;
that.settings = that.setSettings(that.settings);
// bind extra events
contents.find('body').bind(that.click, function () {
$(document).trigger(that.click);
});
// attach reload event
if(initialized) that.reloadBrowser(false, false, true);
initialized = true;
// adding django hacks
contents.find('.viewsitelink').attr('target', '_top');
});
// cancel animation if sideframe is already shown
if(this.sideframe.is(':visible')) {
// sideframe is already open
insertHolder(iframe);
// reanimate the frame
if(this.sideframe.outerWidth() < width) {
// The user has performed an action that requires the
// sideframe to be shown, this intent outweighs any
// previous intent to minimize the frame.
this.settings.sideframe.hidden = false;
this._show(width, animate);
}
} else {
// load iframe after frame animation is done
setTimeout(function () {
insertHolder(iframe);
}, this.options.sideframeDuration);
// display the frame
this._show(width, animate);
}
function insertHolder(iframe) {
// show iframe after animation
that.sideframe.find('.cms_sideframe-frame').addClass('cms_loader');
holder.html(iframe);
}
},
close: function () {
this._hide(true);
// remove url in settings
this.settings.sideframe = {
'url': null,
'hidden': false,
'maximized': false,
'width': this.options.sideframeWidth
};
// resets
this.sideframe.find('.cms_sideframe-maximize').removeClass('cms_sideframe-minimize');
this.sideframe.find('.cms_sideframe-hide').show();
// update settings
this.settings = this.setSettings(this.settings);
// handle refresh option
this.reloadBrowser(this.options.onClose, false, true);
},
// private methods
_show: function (width, animate) {
// add class
this.sideframe.find('.cms_sideframe-hide').removeClass('cms_sideframe-hidden');
// make sure the close / hide / maximize controls appear, regardless of hidden / maximized state
this.sideframe.show();
// check if sideframe should be hidden
if(this.settings.sideframe.hidden) this._hide();
// check if sideframe should be maximized
if(this.settings.sideframe.maximized) this._maximize();
// otherwise do normal behaviour
if(!this.settings.sideframe.hidden && !this.settings.sideframe.maximized) {
if(animate) {
this.sideframe.animate({ 'width': width }, this.options.sideframeDuration);
this.body.animate({ 'margin-left': width }, this.options.sideframeDuration);
} else {
this.sideframe.animate({ 'width': width }, 0);
this.body.animate({ 'margin-left': width }, 0);
// reset width if larger than available space
if(width >= $(window).width()) {
this.sideframe.animate({ 'width': $(window).width() - 20 }, 0);
this.body.animate({ 'margin-left': $(window).width() - 20 }, 0);
}
}
this.sideframe.find('.cms_sideframe-btn').css('right', -20);
}
// lock toolbar, set timeout to make sure CMS.API is ready
setTimeout(function () {
CMS.API.Toolbar._lock(true);
CMS.API.Toolbar._showToolbar(true);
}, 100);
},
_hide: function (close) {
// add class
this.sideframe.find('.cms_sideframe-hide').addClass('cms_sideframe-hidden');
var duration = this.options.sideframeDuration;
// remove the iframe
if(close && this.sideframe.width() <= 0) duration = 0;
if(close) this.sideframe.find('iframe').remove();
this.sideframe.animate({ 'width': 0 }, duration, function () {
if(close) $(this).hide();
});
this.body.animate({ 'margin-left': 0 }, duration);
this.sideframe.find('.cms_sideframe-frame').removeClass('cms_loader');
// lock toolbar, set timeout to make sure CMS.API is ready
setTimeout(function () {
CMS.API.Toolbar._lock(false);
}, 100);
},
_minimize: function (noPositionReset) {
this.sideframe.find('.cms_sideframe-maximize').removeClass('cms_sideframe-minimize');
this.sideframe.find('.cms_sideframe-hide').show();
// reset to first state
if(!noPositionReset) {
this._show(this.settings.sideframe.position || this.options.sideframeWidth, true);
}
// remove event
$(window).unbind('resize.cms.sideframe');
},
_maximize: function () {
var that = this;
this.sideframe.find('.cms_sideframe-maximize').addClass('cms_sideframe-minimize');
this.sideframe.find('.cms_sideframe-hide').hide();
this.sideframe.find('.cms_sideframe-hide').removeClass('cms_sideframe-hidden').hide();
// do custom animation
this.sideframe.animate({ 'width': $(window).width() }, 0);
this.body.animate({ 'margin-left': 0 }, 0);
// invert icon position
this.sideframe.find('.cms_sideframe-btn').css('right', -2);
// attach resize event
$(window).bind('resize.cms.sideframe', function () {
that.sideframe.css('width', $(window).width());
});
},
_startResize: function () {
var that = this;
var outerOffset = 20;
var timer = function () {};
// this prevents the iframe from being focusable
this.sideframe.find('.cms_sideframe-shim').css('z-index', 20);
this._minimize(true);
$(document).bind('mousemove.cms', function (e) {
if(e.clientX <= 320) e.clientX = 320;
if(e.clientX >= $(window).width() - outerOffset) e.clientX = $(window).width() - outerOffset;
that.sideframe.css('width', e.clientX);
that.body.css('margin-left', e.clientX);
// update settings
that.settings.sideframe.position = e.clientX;
// trigger the resize event
$(window).trigger('resize.sideframe');
// save position
clearTimeout(timer);
timer = setTimeout(function () {
that.settings = that.setSettings(that.settings);
}, 500);
});
},
_stopResize: function () {
this.sideframe.find('.cms_sideframe-shim').css('z-index', 1);
$(document).unbind('mousemove.cms');
},
_url: function (url, params) {
var arr = [];
var keys = [];
var values = [];
var tmp = '';
var urlArray = [];
var urlParams = [];
var origin = url;
// return url if there is no param
if(!(url.split('?').length <= 1 || window.JSON === undefined)) {
// setup local vars
urlArray = url.split('?');
urlParams = urlArray[1].split('&');
origin = urlArray[0];
}
// loop through the available params
$.each(urlParams, function (index, param) {
arr.push({ 'param': param.split('=')[0], 'value': param.split('=')[1] });
});
// loop through the new params
$.each(params, function (index, param) {
arr.push({ 'param': param.split('=')[0], 'value': param.split('=')[1] });
});
// merge manually because jquery...
$.each(arr, function (index, item) {
var i = $.inArray(item.param, keys);
if(i === -1) {
keys.push(item.param);
values.push(item.value);
} else {
values[i] = item.value;
}
});
// merge new url
$.each(keys, function (index, key) {
tmp += '&' + key + '=' + values[index];
});
tmp = tmp.replace('&', '?');
url = origin + tmp;
return url;
}
});
});
})(CMS.$);

View file

@ -0,0 +1,493 @@
/*##################################################|*/
/* #CMS# */
(function($) {
// CMS.$ will be passed for $
$(document).ready(function () {
/*!
* StructureBoard
* handles drag & drop, mode switching and
*/
CMS.StructureBoard = new CMS.Class({
implement: [CMS.API.Helpers],
options: {
'speed': 300
},
initialize: function (options) {
this.container = $('.cms_structure');
this.options = $.extend(true, {}, this.options, options);
this.config = CMS.config;
this.settings = CMS.settings;
// elements
this.toolbar = $('#cms_toolbar');
this.sortables = $('.cms_draggables'); // use global scope
this.plugins = $('.cms_plugin');
this.render_model = $('.cms_render_model');
this.placeholders = $('.cms_placeholder');
this.dragitems = $('.cms_draggable');
this.dragareas = $('.cms_dragarea');
this.dropareas = $('.cms_droppable');
this.dimmer = this.container.find('.cms_structure-dimmer');
this.clipboard = $('.cms_clipboard');
// states
this.click = (document.ontouchstart !== null) ? 'click.cms' : 'tap.cms click.cms';
this.timer = function () {};
this.interval = function () {};
this.state = false;
this.dragging = false;
// setup initial stuff
this._setup();
// setup events
this._events();
},
// initial methods
_setup: function () {
var that = this;
// cancel if there are no dragareas
if(!this.dragareas.length) return false;
// cancel if there is no structure / content switcher
if(!this.toolbar.find('.cms_toolbar-item-cms-mode-switcher').length) return false;
// setup toolbar mode
if(this.settings.mode === 'structure') setTimeout(function () { that.show(true); }, 100);
// check if modes should be visible
if(this.placeholders.length) {
this.toolbar.find('.cms_toolbar-item-cms-mode-switcher').show();
}
// add drag & drop functionality
this._drag();
// prevent click events to detect double click
// this.preventEvents(this.plugins);
},
_events: function () {
var that = this;
var modes = this.toolbar.find('.cms_toolbar-item-cms-mode-switcher a');
// show edit mode
modes.eq(1).bind(this.click, function (e) {
e.preventDefault();
// cancel if already active
if(that.settings.mode === 'edit') return false;
// otherwise hide
that.hide();
});
// show structure mode
modes.eq(0).bind(this.click, function (e) {
e.preventDefault();
// cancel if already active
if(that.settings.mode === 'structure') return false;
// otherwise show
that.show();
});
// keyboard handling
$(document).bind('keydown', function (e) {
// check if we have an important focus
var fields = $('*:focus');
// 32 = space
if(e.keyCode === 32 && that.settings.mode === 'structure' && !fields.length) {
// cancel if there is no structure / content switcher
if(!that.toolbar.find('.cms_toolbar-item-cms-mode-switcher').length) return false;
e.preventDefault();
that.hide();
} else if(e.keyCode === 32 && that.settings.mode === 'edit' && !fields.length) {
// cancel if there is no structure / content switcher
if(!that.toolbar.find('.cms_toolbar-item-cms-mode-switcher').length) return false;
e.preventDefault();
that.show();
}
});
},
// public methods
show: function (init) {
// cancel show if live modus is active
if(CMS.config.mode === 'live') return false;
// set active item
var modes = this.toolbar.find('.cms_toolbar-item-cms-mode-switcher a');
modes.removeClass('cms_btn-active').eq(0).addClass('cms_btn-active');
// show clipboard
this.clipboard.css('opacity', 1).fadeIn(this.options.speed);
// apply new settings
this.settings.mode = 'structure';
if(!init) this.settings = this.setSettings(this.settings);
// ensure all elements are visible
this.dragareas.show();
// show canvas
this._showBoard();
},
hide: function (init) {
// cancel show if live modus is active
if(CMS.config.mode === 'live') return false;
// set active item
var modes = this.toolbar.find('.cms_toolbar-item-cms-mode-switcher a');
modes.removeClass('cms_btn-active').eq(1).addClass('cms_btn-active');
// hide clipboard if in edit mode
this.container.find('.cms_clipboard').hide();
// hide clipboard
this.clipboard.hide();
this.settings.mode = 'edit';
if(!init) this.settings = this.setSettings(this.settings);
// hide canvas
this._hideBoard();
},
getId: function (el) {
// cancel if no element is defined
if(el === undefined || el === null || el.length <= 0) return false;
var id = null;
var cls = el.attr('class').split(' ')[1];
if(el.hasClass('cms_plugin')) {
id = cls.replace('cms_plugin-', '');
} else if(el.hasClass('cms_draggable')) {
id = cls.replace('cms_draggable-', '');
} else if(el.hasClass('cms_placeholder')) {
id = cls.replace('cms_placeholder-', '');
} else if(el.hasClass('cms_dragbar')) {
id = cls.replace('cms_dragbar-', '');
} else if(el.hasClass('cms_dragarea')) {
id = cls.replace('cms_dragarea-', '');
}
return id;
},
getIds: function (els) {
var that = this;
var array = [];
els.each(function () {
array.push(that.getId($(this)));
});
return array;
},
setActive: function (id, state) {
var that = this;
// resets
this.dragitems.removeClass('cms_draggable-selected');
this.plugins.removeClass('cms_plugin-active');
// only reset if no id is provided
if(id === false) return false;
// attach active class to current element
var dragitem = $('.cms_draggable-' + id);
var plugin = $('.cms_plugin-' + id);
// if we switch from content to edit, show only a single plcaeholder
if(state) {
// quick show
this._showBoard();
// show clipboard
this.clipboard.show().css('opacity', 0.2);
// prevent default visibility
this.dragareas.css('opacity', 0.2);
// show single placeholder
dragitem.closest('.cms_dragarea').show().css('opacity', 1);
// otherwise hide and reset the board
} else {
this.hide();
}
// collapse all previous elements
var collapsed = dragitem.parentsUntil('.cms_dragarea').siblings().not('.cms_dragitem-expanded');
collapsed.trigger(this.click);
// set new classes
dragitem.addClass('cms_draggable-selected');
plugin.addClass('cms_plugin-active');
},
preventEvents: function (elements) {
var clicks = 0;
var delay = 500;
var timer = function () {};
// unbind click event if already initialized
elements.find('a').bind(this.click, function (e) {
e.preventDefault();
// increment
clicks++;
// single click
if(clicks === 1) {
timer = setTimeout(function () {
clicks = 0;
// cancel if link contains a hash
if($(e.currentTarget).attr('href').indexOf('#') === 0) return false;
// we need to redirect to the default behaviours
// all events will be lost in edit mode, use '#' if href should not be triggered
window.location.href = $(e.currentTarget).attr('href');
}, delay);
}
// double click
if(clicks === 2) {
clearTimeout(timer);
clicks = 0;
}
});
},
// private methods
_showBoard: function () {
var that = this;
var timer = function () {};
// show container
this.container.show();
this.dimmer.fadeIn(100);
this.dragareas.css('opacity', 1);
// add dimmer close
this.dimmer.bind('mousedown mouseup', function (e) {
// cancel on rightclick
if(e.which === 3 || e.button === 2) return false;
// proceed
clearTimeout(timer);
timer = setTimeout(function () {
that.hide();
}, 500);
if(e.type === 'mouseup') clearTimeout(timer);
});
this.plugins.not(this.render_model).hide();
this.placeholders.show();
// attach event
$(window).bind('resize.sideframe', function () {
that._resizeBoard();
}).trigger('resize.sideframe');
},
_hideBoard: function () {
// hide elements
this.container.hide();
this.plugins.show();
this.placeholders.hide();
this.dimmer.hide();
// detach event
$(window).unbind('resize.sideframe');
// clear interval
clearInterval(this.interval);
$(window).trigger('structureboard_hidden.sideframe');
},
_resizeBoard: function () {
// calculate placeholder position
var id = null;
var area = null;
var min = null;
var areaParentOffset = null;
// start calculating
this.placeholders.each(function (index, item) {
item = $(item);
id = item.data('settings').placeholder_id;
area = $('.cms_dragarea-' + id);
// to calculate the correct offset, we need to set the
// placeholders correct heights and than set the according position
item.height(area.outerHeight(true));
// set min width
min = (item.width()) ? 0 : 150;
// as area is "css positioned" and jquery offset function is relative to the
// document (not the first relative/absolute parent) we need to substract
// first relative/absolute parent offset.
areaParentOffset = $(area).offsetParent().offset();
area.css({
'top': item.offset().top - areaParentOffset.top - 5,
'left': item.offset().left - areaParentOffset.left - min,
'width': item.width() + min
});
});
},
_drag: function () {
var that = this;
var dropped = false;
var droparea = null;
var dropzone = null;
this.sortables.nestedSortable({
'items': '.cms_draggable',
'handle': '.cms_dragitem',
'placeholder': 'cms_droppable',
'connectWith': this.sortables,
'tolerance': 'pointer',
'toleranceElement': '> div',
'dropOnEmpty': true,
'forcePlaceholderSize': true,
'helper': 'clone',
'appendTo': 'body',
'cursor': 'move',
'opacity': 0.4,
'zIndex': 9999999,
'delay': 100,
'refreshPositions': true,
// nestedSortable
'listType': 'div.cms_draggables',
'doNotClear': true,
//'disableNestingClass': 'cms_draggable-disabled',
//'errorClass': 'cms_draggable-disallowed',
//'hoveringClass': 'cms_draggable-hover',
// methods
'start': function (e, ui) {
that.dragging = true;
// show empty
$('.cms_dragbar-empty-wrapper').show();
// ensure all menus are closed
$('.cms_dragitem .cms_submenu').hide();
// remove classes from empty dropzones
$('.cms_dragbar-empty').removeClass('cms_draggable-disallowed');
// fixes placeholder height
ui.placeholder.height(ui.item.height());
// show placeholder without entries
$('.cms_draggables').each(function () {
if($(this).children().length === 0) {
$(this).show();
}
});
},
'stop': function (event, ui) {
that.dragging = false;
// hide empty
$('.cms_dragbar-empty-wrapper').hide();
// cancel if isAllowed returns false
if(!that.state) return false;
// handle dropped event
if(dropped) {
droparea.prepend(ui.item);
dropped = false;
}
// we pass the id to the updater which checks within the backend the correct place
//var id = ui.item.attr('class').replace('cms_draggable cms_draggable-', '');
var id = that.getId(ui.item);
var plugin = $('.cms_plugin-' + id);
// check if we copy/paste a plugin or not
if(plugin.closest('.cms_clipboard').length) {
plugin.trigger('cms.plugin.update');
} else {
plugin.trigger('cms.plugins.update');
}
// reset placeholder without entries
$('.cms_draggables').each(function () {
if($(this).children().length === 0) {
$(this).hide();
}
});
},
'isAllowed': function(placeholder, placeholderParent, originalItem) {
// cancel if action is excecuted
if(CMS.API.locked) return false;
// getting restriction array
var bounds = [];
// save original state events
var original = $('.cms_plugin-' + that.getId(originalItem));
// cancel if item has no settings
if(original.length === 0 || original.data('settings') === null) return false;
var type = original.data('settings').plugin_type;
// prepare variables for bound
var holderId = that.getId(placeholder.closest('.cms_dragarea'));
var holder = $('.cms_placeholder-' + holderId);
var plugin = $('.cms_plugin-' + that.getId(placeholder.closest('.cms_draggable')));
// now set the correct bounds
if(holder.length) bounds = holder.data('settings').plugin_restriction;
if(plugin.length) bounds = plugin.data('settings').plugin_restriction;
if(dropzone) bounds = dropzone.data('settings').plugin_restriction;
// if parent has class disabled, dissalow drop
if(placeholder.parent().hasClass('cms_draggable-disabled')) return false;
// if restrictions is still empty, proceed
that.state = (bounds.length <= 0 || $.inArray(type, bounds) !== -1) ? true : false;
return that.state;
}
});
// attach escape event to cancel dragging
$(document).bind('keyup.cms', function(e, cancel){
if(e.keyCode === 27 || cancel) {
that.state = false;
that.sortables.sortable('cancel');
}
});
// define droppable helpers
this.dropareas.droppable({
'greedy': true,
'accept': '.cms_draggable',
'tolerance': 'pointer',
'activeClass': 'cms_draggable-allowed',
'hoverClass': 'cms_draggable-hover-allowed',
'over': function (event) {
dropzone = $('.cms_placeholder-' + that.getId($(event.target).parent().prev()));
timer = setInterval(function () {
// reset other empty placeholders
$('.cms_dragbar-empty').removeClass('cms_draggable-disallowed');
if(that.state) {
$(event.target).removeClass('cms_draggable-disallowed');
} else {
$(event.target).addClass('cms_draggable-disallowed');
}
}, 10);
},
'out': function (event) {
dropzone = null;
$(event.target).removeClass('cms_draggable-disallowed');
clearInterval(timer);
},
'drop': function (event) {
dropped = true;
droparea = $(event.target).parent().nextAll('.cms_draggables').first();
clearInterval(timer);
}
});
}
});
});
})(CMS.$);

View file

@ -0,0 +1,512 @@
/*##################################################|*/
/* #CMS# */
(function($) {
// CMS.$ will be passed for $
$(document).ready(function () {
/*!
* Toolbar
* Handles all features related to the toolbar
*/
CMS.Toolbar = new CMS.Class({
implement: [CMS.API.Helpers],
options: {
'preventSwitch': false,
'preventSwitchMessage': 'Switching is disabled.',
'messageDelay': 2000
},
initialize: function (options) {
this.container = $('#cms_toolbar');
this.options = $.extend(true, {}, this.options, options);
this.config = CMS.config;
this.settings = CMS.settings;
// elements
this.body = $('html');
this.toolbar = this.container.find('.cms_toolbar').hide();
this.toolbarTrigger = this.container.find('.cms_toolbar-trigger');
this.navigations = this.container.find('.cms_toolbar-item-navigation');
this.buttons = this.container.find('.cms_toolbar-item-buttons');
this.switcher = this.container.find('.cms_toolbar-item_switch');
this.messages = this.container.find('.cms_messages');
this.screenBlock = this.container.find('.cms_screenblock');
// states
this.click = 'click.cms';
this.timer = function () {};
this.lockToolbar = false;
// setup initial stuff
this._setup();
// setup events
this._events();
},
// initial methods
_setup: function () {
// setup toolbar visibility, we need to reverse the options to set the correct state
(this.settings.toolbar === 'expanded') ? this._showToolbar(0, true) : this._hideToolbar(0, true);
// hide publish button
var publishBtn = $('.cms_btn-publish').parent();
publishBtn.hide();
if($('.cms_btn-publish-active').length) publishBtn.show();
// check if debug is true
if(CMS.config.debug) this._debug();
// check if there are messages and display them
if(CMS.config.messages) this.openMessage(CMS.config.messages);
// check if there are error messages and display them
if(CMS.config.error) this.showError(CMS.config.error);
// enforce open state if user is not logged in but requests the toolbar
if(!CMS.config.auth || CMS.config.settings.version !== this.settings.version) {
this.toggleToolbar(true);
this.settings = this.setSettings(CMS.config.settings);
}
// should switcher indicate that there is an unpublished page?
if(CMS.config.publisher) {
this.openMessage(CMS.config.publisher, 'right');
setInterval(function () {
CMS.$('.cms_toolbar-item_switch').toggleClass('cms_toolbar-item_switch-highlight');
}, this.options.messageDelay);
}
// open sideframe if it was previously opened
if(this.settings.sideframe.url) {
var sideframe = new CMS.Sideframe();
sideframe.open(this.settings.sideframe.url, false);
}
// if there is a screenblock, do some resize magic
if(this.screenBlock.length) this._screenBlock();
// add toolbar ready class to body and fire event
this.body.addClass('cms-ready');
$(document).trigger('cms-ready');
},
_events: function () {
var that = this;
// attach event to the trigger handler
this.toolbarTrigger.bind(this.click, function (e) {
e.preventDefault();
that.toggleToolbar();
});
// attach event to the navigation elements
this.navigations.each(function () {
var item = $(this);
var lists = item.find('li');
var root = 'cms_toolbar-item-navigation';
var hover = 'cms_toolbar-item-navigation-hover';
var disabled = 'cms_toolbar-item-navigation-disabled';
var children = 'cms_toolbar-item-navigation-children';
// remove events from first level
item.find('a').bind(that.click, function (e) {
e.preventDefault();
if($(this).attr('href') !== ''
&& $(this).attr('href') !== '#'
&& !$(this).parent().hasClass(disabled)
&& !$(this).parent().hasClass(disabled)) {
that._delegate($(this));
reset();
return false;
}
});
// handle click states
lists.bind(that.click, function (e) {
e.stopPropagation();
var el = $(this);
// close if el is first item
if(el.parent().hasClass(root) && el.hasClass(hover) || el.hasClass(disabled)) {
reset();
return false;
} else {
reset();
el.addClass(hover);
}
// activate hover selection
item.find('> li').bind('mouseenter', function () {
// cancel if item is already active
if($(this).hasClass(hover)) return false;
$(this).trigger(that.click);
});
// create the document event
$(document).bind(that.click, reset);
});
// attach hover
lists.find('li').bind('mouseenter mouseleave', function () {
var el = $(this);
var parent = el.closest('.cms_toolbar-item-navigation-children').add(el.parents('.cms_toolbar-item-navigation-children'));
var hasChildren = el.hasClass(children) || parent.length;
// do not attach hover effect if disabled
// cancel event if element has already hover class
if(el.hasClass(disabled) || el.hasClass(hover)) return false;
// reset
lists.find('li').removeClass(hover);
// add hover effect
el.addClass(hover);
// handle children elements
if(hasChildren) {
el.find('> ul').show();
// add parent class
parent.addClass(hover);
} else {
lists.find('ul ul').hide();
}
// Remove stale submenus
el.siblings().find('> ul').hide();
});
// fix leave event
lists.find('> ul').bind('mouseleave', function () {
lists.find('li').removeClass(hover);
});
// removes classes and events
function reset() {
lists.removeClass(hover);
lists.find('ul ul').hide();
item.find('> li').unbind('mouseenter');
$(document).unbind(that.click);
}
});
// attach event to the switcher elements
this.switcher.each(function () {
$(this).bind(that.click, function (e) {
e.preventDefault();
that._setSwitcher($(e.currentTarget));
});
});
// attach event for first page publish
this.buttons.each(function () {
var btn = $(this);
// in case the button has a data-rel attribute
if(btn.find('a').attr('data-rel')) {
btn.on('click', function (e) {
e.preventDefault();
that._delegate($(this).find('a'));
})
}
// in case of the publish button
btn.find('.cms_publish-page').bind(that.click, function (e) {
if(!confirm(that.config.lang.publish)) e.preventDefault();
});
});
},
// public methods
toggleToolbar: function (show) {
// overwrite state when provided
if(show) this.settings.toolbar = 'collapsed';
// toggle bar
(this.settings.toolbar === 'collapsed') ? this._showToolbar(200) : this._hideToolbar(200);
},
openMessage: function (msg, dir, delay, error) {
// set toolbar freeze
this._lock(true);
// add content to element
this.messages.find('.cms_messages-inner').html(msg);
// clear timeout
clearTimeout(this.timer);
// determine width
var that = this;
var width = 320;
var height = this.messages.outerHeight(true);
var top = this.toolbar.outerHeight(true);
var close = this.messages.find('.cms_messages-close');
close.hide();
close.bind(this.click, function () {
that.closeMessage();
});
// set top to 0 if toolbar is collapsed
if(this.settings.toolbar === 'collapsed') top = 0;
// do we need to add debug styles?
if(this.config.debug) top = top + 5;
// set correct position and show
this.messages.css('top', -height).show();
// error handling
this.messages.removeClass('cms_messages-error');
if(error) this.messages.addClass('cms_messages-error');
// dir should be left, center, right
dir = dir || 'center';
// set correct direction and animation
switch(dir) {
case 'left':
this.messages.css({
'top': top,
'left': -width,
'right': 'auto',
'margin-left': 0
});
this.messages.animate({ 'left': 0 });
break;
case 'right':
this.messages.css({
'top': top,
'right': -width,
'left': 'auto',
'margin-left': 0
});
this.messages.animate({ 'right': 0 });
break;
default:
this.messages.css({
'left': '50%',
'right': 'auto',
'margin-left': -(width / 2)
});
this.messages.animate({ 'top': top });
}
// cancel autohide if delay is 0
if(delay === 0) {
close.show();
return false
}
// add delay to hide
this.timer = setTimeout(function () {
that.closeMessage();
}, delay || this.options.messageDelay);
},
closeMessage: function () {
this.messages.fadeOut(300);
// unlock toolbar
this._lock(false);
},
openAjax: function (url, post, text, callback, onSuccess) {
var that = this;
// check if we have a confirmation text
var question = (text) ? confirm(text) : true;
// cancel if question has been denied
if(!question) return false;
// set loader
this._loader(true);
$.ajax({
'type': 'POST',
'url': url,
'data': (post) ? JSON.parse(post) : {},
'success': function (response) {
CMS.API.locked = false;
if(callback) {
callback(that, response);
that._loader(false);
} else if(onSuccess) {
CMS.API.Helpers.reloadBrowser(onSuccess, false, true);
} else {
// reload
CMS.API.Helpers.reloadBrowser(false, false, true);
}
},
'error': function (jqXHR) {
CMS.API.locked = false;
that.showError(jqXHR.response + ' | ' + jqXHR.status + ' ' + jqXHR.statusText);
}
});
},
showError: function (msg, reload) {
this.openMessage(msg, 'center', 0, true);
// force reload if param is passed
if(reload) CMS.API.Helpers.reloadBrowser(false, this.options.messageDelay);
},
// private methods
_showToolbar: function (speed, init) {
this.toolbarTrigger.addClass('cms_toolbar-trigger-expanded');
this.toolbar.slideDown(speed);
// animate html
this.body.animate({ 'margin-top': (this.config.debug) ? 35 : 30 }, (init) ? 0 : speed, function () {
$(this).addClass('cms-toolbar-expanded')
});
// set messages top to toolbar height
this.messages.css('top', 31);
// set new settings
this.settings.toolbar = 'expanded';
if(!init) this.settings = this.setSettings(this.settings);
},
_hideToolbar: function (speed, init) {
// cancel if sideframe is active
if(this.lockToolbar) return false;
this.toolbarTrigger.removeClass('cms_toolbar-trigger-expanded');
this.toolbar.slideUp(speed);
// animate html
this.body.removeClass('cms-toolbar-expanded').animate({ 'margin-top': (this.config.debug) ? 5 : 0 }, speed);
// set messages top to 0
this.messages.css('top', 0);
// set new settings
this.settings.toolbar = 'collapsed';
if(!init) this.settings = this.setSettings(this.settings);
},
_setSwitcher: function (el) {
// save local vars
var active = el.hasClass('cms_toolbar-item_switch-active');
var anchor = el.find('a');
var knob = el.find('.cms_toolbar-item_switch-knob');
var duration = 300;
// prevent if switchopstion is passed
if(this.options.preventSwitch) {
this.openMessage(this.options.preventSwitchMessage, 'right');
return false;
}
// determin what to trigger
if(active) {
knob.animate({
'right': anchor.outerWidth(true) - (knob.outerWidth(true) + 2)
}, duration);
// move anchor behind the knob
anchor.css('z-index', 1).animate({
'padding-top': 6,
'padding-right': 14,
'padding-bottom': 4,
'padding-left': 28
}, duration);
} else {
knob.animate({
'left': anchor.outerWidth(true) - (knob.outerWidth(true) + 2)
}, duration);
// move anchor behind the knob
anchor.css('z-index', 1).animate({
'padding-top': 6,
'padding-right': 28,
'padding-bottom': 4,
'padding-left': 14
}, duration);
}
// reload
setTimeout(function () {
window.location.href = anchor.attr('href');
}, duration);
},
_delegate: function (el) {
// save local vars
var target = el.data('rel');
switch(target) {
case 'modal':
var modal = new CMS.Modal({'onClose': el.data('on-close')});
modal.open(el.attr('href'), el.data('name'));
break;
case 'message':
this.openMessage(el.data('text'));
break;
case 'sideframe':
var sideframe = new CMS.Sideframe({'onClose': el.data('on-close')});
sideframe.open(el.attr('href'), true);
break;
case 'ajax':
this.openAjax(el.attr('href'), JSON.stringify(el.data('post')), el.data('text'), null, el.data('on-success'));
break;
default:
window.location.href = el.attr('href');
}
},
_lock: function (lock) {
if(lock) {
this.lockToolbar = true;
// make button look disabled
this.toolbarTrigger.css('opacity', 0.2);
} else {
this.lockToolbar = false;
// make button look disabled
this.toolbarTrigger.css('opacity', 1);
}
},
_loader: function (loader) {
if(loader) {
this.toolbarTrigger.addClass('cms_toolbar-loader');
} else {
this.toolbarTrigger.removeClass('cms_toolbar-loader');
}
},
_debug: function () {
var that = this;
var timeout = 1000;
var timer = function () {};
// bind message event
var debug = this.container.find('.cms_debug-bar');
debug.bind('mouseenter mouseleave', function (e) {
clearTimeout(timer);
if(e.type === 'mouseenter') {
timer = setTimeout(function () {
that.openMessage(that.config.lang.debug);
}, timeout);
}
});
},
_screenBlock: function () {
var interval = 20;
var blocker = this.screenBlock;
var sideframe = $('.cms_sideframe');
// automatically resize screenblock window according to given attributes
$(window).on('resize.cms.screenblock', function () {
var width = $(this).width() - sideframe.width();
blocker.css({
'width': width,
'height': $(window).height()
});
}).trigger('resize');
// set update interval
setInterval(function () {
$(window).trigger('resize.cms.screenblock');
}, interval);
}
});
});
})(CMS.$);

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,613 @@
/*
* jQuery UI Nested Sortable
* v 2.0 / 29 oct 2012
* http://mjsarfatti.com/sandbox/nestedSortable
*
* Depends on:
* jquery.ui.sortable.js 1.10+
*
* Copyright (c) 2010-2013 Manuele J Sarfatti
* Licensed under the MIT License
* http://www.opensource.org/licenses/mit-license.php
*/
(function($) {
function isOverAxis( x, reference, size ) {
return ( x > reference ) && ( x < ( reference + size ) );
}
$.widget("mjs.nestedSortable", $.extend({}, $.ui.sortable.prototype, {
options: {
doNotClear: false,
expandOnHover: 700,
isAllowed: function(placeholder, placeholderParent, originalItem) { return true; },
isTree: false,
listType: 'ol',
maxLevels: 0,
protectRoot: false,
rootID: null,
rtl: false,
startCollapsed: false,
tabSize: 20,
branchClass: 'mjs-nestedSortable-branch',
collapsedClass: 'mjs-nestedSortable-collapsed',
disableNestingClass: 'mjs-nestedSortable-no-nesting',
errorClass: 'mjs-nestedSortable-error',
expandedClass: 'mjs-nestedSortable-expanded',
hoveringClass: 'mjs-nestedSortable-hovering',
leafClass: 'mjs-nestedSortable-leaf'
},
_create: function() {
this.element.data('ui-sortable', this.element.data('mjs-nestedSortable'));
// mjs - prevent browser from freezing if the HTML is not correct
if (!this.element.is(this.options.listType))
throw new Error('nestedSortable: Please check that the listType option is set to your actual list type');
// mjs - force 'intersect' tolerance method if we have a tree with expanding/collapsing functionality
if (this.options.isTree && this.options.expandOnHover) {
this.options.tolerance = 'intersect';
}
$.ui.sortable.prototype._create.apply(this, arguments);
// mjs - prepare the tree by applying the right classes (the CSS is responsible for actual hide/show functionality)
if (this.options.isTree) {
var self = this;
$(this.items).each(function() {
var $li = this.item;
if ($li.children(self.options.listType).length) {
$li.addClass(self.options.branchClass);
// expand/collapse class only if they have children
if (self.options.startCollapsed) $li.addClass(self.options.collapsedClass);
else $li.addClass(self.options.expandedClass);
} else {
$li.addClass(self.options.leafClass);
}
})
}
},
_destroy: function() {
this.element
.removeData("mjs-nestedSortable")
.removeData("ui-sortable");
return $.ui.sortable.prototype._destroy.apply(this, arguments);
},
_mouseDrag: function(event) {
var i, item, itemElement, intersection,
o = this.options,
scrolled = false;
//Compute the helpers position
this.position = this._generatePosition(event);
this.positionAbs = this._convertPositionTo("absolute");
if (!this.lastPositionAbs) {
this.lastPositionAbs = this.positionAbs;
}
//Do scrolling
if(this.options.scroll) {
if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
}
if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
}
} else {
if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
}
if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
}
}
if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
$.ui.ddmanager.prepareOffsets(this, event);
}
//Regenerate the absolute position used for position checks
this.positionAbs = this._convertPositionTo("absolute");
// mjs - find the top offset before rearrangement,
var previousTopOffset = this.placeholder.offset().top;
//Set the helper position
if(!this.options.axis || this.options.axis !== "y") {
this.helper[0].style.left = this.position.left+"px";
}
if(!this.options.axis || this.options.axis !== "x") {
this.helper[0].style.top = this.position.top+"px";
}
// mjs - check and reset hovering state at each cycle
this.hovering = this.hovering ? this.hovering : null;
this.mouseentered = this.mouseentered ? this.mouseentered : false;
// mjs - let's start caching some variables
var parentItem = (this.placeholder[0].parentNode.parentNode &&
$(this.placeholder[0].parentNode.parentNode).closest('.ui-sortable').length)
? $(this.placeholder[0].parentNode.parentNode)
: null,
level = this._getLevel(this.placeholder),
childLevels = this._getChildLevels(this.helper);
var newList = document.createElement(o.listType);
//Rearrange
for (i = this.items.length - 1; i >= 0; i--) {
//Cache variables and intersection, continue if no intersection
item = this.items[i];
itemElement = item.item[0];
intersection = this._intersectsWithPointer(item);
if (!intersection) {
continue;
}
// Only put the placeholder inside the current Container, skip all
// items form other containers. This works because when moving
// an item from one container to another the
// currentContainer is switched before the placeholder is moved.
//
// Without this moving items in "sub-sortables" can cause the placeholder to jitter
// beetween the outer and inner container.
if (item.instance !== this.currentContainer) {
continue;
}
// cannot intersect with itself
// no useless actions that have been done before
// no action if the item moved is the parent of the item checked
if (itemElement !== this.currentItem[0] &&
this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
!$.contains(this.placeholder[0], itemElement) &&
(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
) {
// mjs - we are intersecting an element: trigger the mouseenter event and store this state
if (!this.mouseentered) {
$(itemElement).mouseenter();
this.mouseentered = true;
}
// mjs - if the element has children and they are hidden, show them after a delay (CSS responsible)
if (o.isTree && $(itemElement).hasClass(o.collapsedClass) && o.expandOnHover) {
if (!this.hovering) {
$(itemElement).addClass(o.hoveringClass);
var self = this;
this.hovering = window.setTimeout(function() {
$(itemElement).removeClass(o.collapsedClass).addClass(o.expandedClass);
self.refreshPositions();
self._trigger("expand", event, self._uiHash());
}, o.expandOnHover);
}
}
this.direction = intersection == 1 ? "down" : "up";
// mjs - rearrange the elements and reset timeouts and hovering state
if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
$(itemElement).mouseleave();
this.mouseentered = false;
$(itemElement).removeClass(o.hoveringClass);
this.hovering && window.clearTimeout(this.hovering);
this.hovering = null;
// mjs - do not switch container if it's a root item and 'protectRoot' is true
// or if it's not a root item but we are trying to make it root
if (o.protectRoot
&& ! (this.currentItem[0].parentNode == this.element[0] // it's a root item
&& itemElement.parentNode != this.element[0]) // it's intersecting a non-root item
) {
if (this.currentItem[0].parentNode != this.element[0]
&& itemElement.parentNode == this.element[0]
) {
if ( ! $(itemElement).children(o.listType).length) {
itemElement.appendChild(newList);
o.isTree && $(itemElement).removeClass(o.leafClass).addClass(o.branchClass + ' ' + o.expandedClass);
}
var a = this.direction === "down" ? $(itemElement).prev().children(o.listType) : $(itemElement).children(o.listType);
if (a[0] !== undefined) {
this._rearrange(event, null, a);
}
} else {
this._rearrange(event, item);
}
} else if ( ! o.protectRoot) {
this._rearrange(event, item);
}
} else {
break;
}
// Clear emtpy ul's/ol's
this._clearEmpty(itemElement);
this._trigger("change", event, this._uiHash());
break;
}
}
// mjs - to find the previous sibling in the list, keep backtracking until we hit a valid list item.
var previousItem = this.placeholder[0].previousSibling ? $(this.placeholder[0].previousSibling) : null;
if (previousItem != null) {
while (previousItem[0].nodeName.toLowerCase() != $(o.listType)[0].nodeName.toLowerCase() || previousItem[0] == this.currentItem[0] || previousItem[0] == this.helper[0]) {
if (previousItem[0].previousSibling) {
previousItem = $(previousItem[0].previousSibling);
} else {
previousItem = null;
break;
}
}
}
// mjs - to find the next sibling in the list, keep stepping forward until we hit a valid list item.
var nextItem = this.placeholder[0].nextSibling ? $(this.placeholder[0].nextSibling) : null;
if (nextItem != null) {
while (nextItem[0].nodeName.toLowerCase() != $(o.listType)[0].nodeName.toLowerCase() || nextItem[0] == this.currentItem[0] || nextItem[0] == this.helper[0]) {
if (nextItem[0].nextSibling) {
nextItem = $(nextItem[0].nextSibling);
} else {
nextItem = null;
break;
}
}
}
this.beyondMaxLevels = 0;
// mjs - if the item is moved to the left, send it one level up but only if it's at the bottom of the list
if (parentItem != null
&& nextItem == null
&& ! (o.protectRoot && parentItem[0].parentNode == this.element[0])
&&
(o.rtl && (this.positionAbs.left + this.helper.outerWidth() > parentItem.offset().left + parentItem.outerWidth())
|| ! o.rtl && (this.positionAbs.left < parentItem.offset().left))
) {
parentItem.after(this.placeholder[0]);
if (o.isTree && parentItem.children(o.listItem).children(o.listItem + ':visible:not(.ui-sortable-helper)').length < 1) {
parentItem.removeClass(this.options.branchClass + ' ' + this.options.expandedClass)
.addClass(this.options.leafClass);
}
this._clearEmpty(parentItem[0]);
this._trigger("change", event, this._uiHash());
}
// mjs - if the item is below a sibling and is moved to the right, make it a child of that sibling
else if (previousItem != null
&& ! previousItem.hasClass(o.disableNestingClass)
&&
(previousItem.children(o.listType).length && previousItem.children(o.listType).is(':visible')
|| ! previousItem.children(o.listType).length)
&& ! (o.protectRoot && this.currentItem[0].parentNode == this.element[0])
&&
(o.rtl && (this.positionAbs.left + this.helper.outerWidth() < previousItem.offset().left + previousItem.outerWidth() - o.tabSize)
|| ! o.rtl && (this.positionAbs.left > previousItem.offset().left + o.tabSize))
) {
this._isAllowed(previousItem, level, level+childLevels+1);
if (!previousItem.children(o.listType).length) {
previousItem[0].appendChild(newList);
o.isTree && previousItem.removeClass(o.leafClass).addClass(o.branchClass + ' ' + o.expandedClass);
}
// mjs - if this item is being moved from the top, add it to the top of the list.
if (previousTopOffset && (previousTopOffset <= previousItem.offset().top)) {
previousItem.children(o.listType).prepend(this.placeholder);
}
// mjs - otherwise, add it to the bottom of the list.
else if(previousItem.children(o.listType).length) {
previousItem.children(o.listType)[0].appendChild(this.placeholder[0]);
}
this._trigger("change", event, this._uiHash());
}
else {
this._isAllowed(parentItem, level, level+childLevels);
}
//Post events to containers
this._contactContainers(event);
//Interconnect with droppables
if($.ui.ddmanager) {
$.ui.ddmanager.drag(this, event);
}
//Call callbacks
this._trigger('sort', event, this._uiHash());
this.lastPositionAbs = this.positionAbs;
return false;
},
_mouseStop: function(event, noPropagation) {
// mjs - if the item is in a position not allowed, send it back
if (this.beyondMaxLevels) {
this.placeholder.removeClass(this.options.errorClass);
if (this.domPosition.prev) {
$(this.domPosition.prev).after(this.placeholder);
} else {
$(this.domPosition.parent).prepend(this.placeholder);
}
this._trigger("revert", event, this._uiHash());
}
// mjs - clear the hovering timeout, just to be sure
$('.'+this.options.hoveringClass).mouseleave().removeClass(this.options.hoveringClass);
this.mouseentered = false;
this.hovering && window.clearTimeout(this.hovering);
this.hovering = null;
$.ui.sortable.prototype._mouseStop.apply(this, arguments);
},
// mjs - this function is slightly modified to make it easier to hover over a collapsed element and have it expand
_intersectsWithSides: function(item) {
var half = this.options.isTree ? .8 : .5;
var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height*half), item.height),
isOverTopHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top - (item.height*half), item.height),
isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
verticalDirection = this._getDragVerticalDirection(),
horizontalDirection = this._getDragHorizontalDirection();
if (this.floating && horizontalDirection) {
return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf));
} else {
return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && isOverTopHalf));
}
},
_contactContainers: function(event) {
if (this.options.protectRoot && this.currentItem[0].parentNode == this.element[0] ) {
return;
}
$.ui.sortable.prototype._contactContainers.apply(this, arguments);
},
_clear: function(event, noPropagation) {
$.ui.sortable.prototype._clear.apply(this, arguments);
// mjs - clean last empty ul/ol
for (var i = this.items.length - 1; i >= 0; i--) {
var item = this.items[i].item[0];
this._clearEmpty(item);
}
},
serialize: function(options) {
var o = $.extend({}, this.options, options),
items = this._getItemsAsjQuery(o && o.connected),
str = [];
$(items).each(function() {
var res = ($(o.item || this).attr(o.attribute || 'id') || '')
.match(o.expression || (/(.+)[-=_](.+)/)),
pid = ($(o.item || this).parent(o.listType)
.parent(o.items)
.attr(o.attribute || 'id') || '')
.match(o.expression || (/(.+)[-=_](.+)/));
if (res) {
str.push(((o.key || res[1]) + '[' + (o.key && o.expression ? res[1] : res[2]) + ']')
+ '='
+ (pid ? (o.key && o.expression ? pid[1] : pid[2]) : o.rootID));
}
});
if(!str.length && o.key) {
str.push(o.key + '=');
}
return str.join('&');
},
toHierarchy: function(options) {
var o = $.extend({}, this.options, options),
sDepth = o.startDepthCount || 0,
ret = [];
$(this.element).children(o.items).each(function () {
var level = _recursiveItems(this);
ret.push(level);
});
return ret;
function _recursiveItems(item) {
var id = ($(item).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
if (id) {
var currentItem = {"id" : id[2]};
if ($(item).children(o.listType).children(o.items).length > 0) {
currentItem.children = [];
$(item).children(o.listType).children(o.items).each(function() {
var level = _recursiveItems(this);
currentItem.children.push(level);
});
}
return currentItem;
}
}
},
toArray: function(options) {
var o = $.extend({}, this.options, options),
sDepth = o.startDepthCount || 0,
ret = [],
left = 1;
if (!o.excludeRoot) {
ret.push({
"item_id": o.rootID,
"parent_id": null,
"depth": sDepth,
"left": left,
"right": ($(o.items, this.element).length + 1) * 2
});
left++
}
$(this.element).children(o.items).each(function () {
left = _recursiveArray(this, sDepth + 1, left);
});
ret = ret.sort(function(a,b){ return (a.left - b.left); });
return ret;
function _recursiveArray(item, depth, left) {
var right = left + 1,
id,
pid;
if ($(item).children(o.listType).children(o.items).length > 0) {
depth ++;
$(item).children(o.listType).children(o.items).each(function () {
right = _recursiveArray($(this), depth, right);
});
depth --;
}
id = ($(item).attr(o.attribute || 'id')).match(o.expression || (/(.+)[-=_](.+)/));
if (depth === sDepth + 1) {
pid = o.rootID;
} else {
var parentItem = ($(item).parent(o.listType)
.parent(o.items)
.attr(o.attribute || 'id'))
.match(o.expression || (/(.+)[-=_](.+)/));
pid = parentItem[2];
}
if (id) {
ret.push({"item_id": id[2], "parent_id": pid, "depth": depth, "left": left, "right": right});
}
left = right + 1;
return left;
}
},
_clearEmpty: function(item) {
var o = this.options;
var emptyList = $(item).children(o.listType);
if (emptyList.length && !emptyList.children().length && !o.doNotClear) {
o.isTree && $(item).removeClass(o.branchClass + ' ' + o.expandedClass).addClass(o.leafClass);
emptyList.remove();
} else if (o.isTree && emptyList.length && emptyList.children().length && emptyList.is(':visible')) {
$(item).removeClass(o.leafClass).addClass(o.branchClass + ' ' + o.expandedClass);
} else if (o.isTree && emptyList.length && emptyList.children().length && !emptyList.is(':visible')) {
$(item).removeClass(o.leafClass).addClass(o.branchClass + ' ' + o.collapsedClass);
}
},
_getLevel: function(item) {
var level = 1;
if (this.options.listType) {
var list = item.closest(this.options.listType);
while (list && list.length > 0 &&
!list.is('.ui-sortable')) {
level++;
list = list.parent().closest(this.options.listType);
}
}
return level;
},
_getChildLevels: function(parent, depth) {
var self = this,
o = this.options,
result = 0;
depth = depth || 0;
$(parent).children(o.listType).children(o.items).each(function (index, child) {
result = Math.max(self._getChildLevels(child, depth + 1), result);
});
return depth ? result + 1 : result;
},
_isAllowed: function(parentItem, level, levels) {
var o = this.options,
maxLevels = this.placeholder.closest('.ui-sortable').nestedSortable('option', 'maxLevels'); // this takes into account the maxLevels set to the recipient list
// mjs - is the root protected?
// mjs - are we nesting too deep?
if ( ! o.isAllowed(this.placeholder, parentItem, this.currentItem)) {
this.placeholder.addClass(o.errorClass);
if (maxLevels < levels && maxLevels != 0) {
this.beyondMaxLevels = levels - maxLevels;
} else {
this.beyondMaxLevels = 1;
}
} else {
if (maxLevels < levels && maxLevels != 0) {
this.placeholder.addClass(o.errorClass);
this.beyondMaxLevels = levels - maxLevels;
} else {
this.placeholder.removeClass(o.errorClass);
this.beyondMaxLevels = 0;
}
}
}
}));
$.mjs.nestedSortable.prototype.options = $.extend({}, $.ui.sortable.prototype.options, $.mjs.nestedSortable.prototype.options);
})(jQuery);

View file

@ -0,0 +1,18 @@
Copyright 2014 Igor Vaynberg
Version: @@ver@@ Timestamp: @@timestamp@@
This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
General Public License version 2 (the "GPL License"). You may choose either license to govern your
use of this software only upon the condition that you accept all of the terms of either the Apache
License or the GPL License.
You may obtain a copy of the Apache License and the GPL License at:
http://www.apache.org/licenses/LICENSE-2.0
http://www.gnu.org/licenses/gpl-2.0.html
Unless required by applicable law or agreed to in writing, software distributed under the Apache License
or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the Apache License and the GPL License for the specific language governing
permissions and limitations under the Apache License and the GPL License.

View file

@ -0,0 +1,99 @@
Select2
=======
Select2 is a jQuery-based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.
To get started, checkout examples and documentation at http://ivaynberg.github.com/select2
Use cases
---------
* Enhancing native selects with search.
* Enhancing native selects with a better multi-select interface.
* Loading data from JavaScript: easily load items via ajax and have them searchable.
* Nesting optgroups: native selects only support one level of nested. Select2 does not have this restriction.
* Tagging: ability to add new items on the fly.
* Working with large, remote datasets: ability to partially load a dataset based on the search term.
* Paging of large datasets: easy support for loading more pages when the results are scrolled to the end.
* Templating: support for custom rendering of results and selections.
Browser compatibility
---------------------
* IE 8+
* Chrome 8+
* Firefox 10+
* Safari 3+
* Opera 10.6+
Usage
-----
You can source Select2 directly from a [CDN like JSDliver](http://www.jsdelivr.com/#!select2), [download it from this GitHub repo](https://github.com/ivaynberg/select2/tags), or use one of the integrations below.
Integrations
------------
* [Wicket-Select2](https://github.com/ivaynberg/wicket-select2) (Java / [Apache Wicket](http://wicket.apache.org))
* [select2-rails](https://github.com/argerim/select2-rails) (Ruby on Rails)
* [AngularUI](http://angular-ui.github.com/#directives-select2) ([AngularJS](http://angularjs.org))
* [Django](https://github.com/applegrew/django-select2)
* [Symfony](https://github.com/19Gerhard85/sfSelect2WidgetsPlugin)
* [Symfony2](https://github.com/avocode/FormExtensions)
* [Bootstrap 2](https://github.com/t0m/select2-bootstrap-css) and [Bootstrap 3](https://github.com/t0m/select2-bootstrap-css/tree/bootstrap3) (CSS skins)
* [Meteor](https://github.com/nate-strauser/meteor-select2) (modern reactive JavaScript framework; + [Bootstrap 3 skin](https://github.com/esperadomedia/meteor-select2-bootstrap3-css/))
* [Meteor](https://jquery-select2.meteor.com)
* [Yii 2.x](http://demos.krajee.com/widgets#select2)
* [Yii 1.x](https://github.com/tonybolzan/yii-select2)
* [AtmosphereJS](https://atmospherejs.com/package/jquery-select2)
### Example Integrations
* [Knockout.js](https://github.com/ivaynberg/select2/wiki/Knockout.js-Integration)
* [Socket.IO](https://github.com/ivaynberg/select2/wiki/Socket.IO-Integration)
* [PHP](https://github.com/ivaynberg/select2/wiki/PHP-Example)
* [.Net MVC] (https://github.com/ivaynberg/select2/wiki/.Net-MVC-Example)
Internationalization (i18n)
---------------------------
Select2 supports multiple languages by simply including the right language JS
file (`select2_locale_it.js`, `select2_locale_nl.js`, etc.) after `select2.js`.
Missing a language? Just copy `select2_locale_en.js.template`, translate
it, and make a pull request back to Select2 here on GitHub.
Bug tracker
-----------
Have a bug? Please create an issue here on GitHub!
https://github.com/ivaynberg/select2/issues
Mailing list
------------
Have a question? Ask on our mailing list!
select2@googlegroups.com
https://groups.google.com/d/forum/select2
Copyright and license
---------------------
Copyright 2012 Igor Vaynberg
This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
General Public License version 2 (the "GPL License"). You may choose either license to govern your
use of this software only upon the condition that you accept all of the terms of either the Apache
License or the GPL License.
You may obtain a copy of the Apache License and the GPL License in the LICENSE file, or at:
http://www.apache.org/licenses/LICENSE-2.0
http://www.gnu.org/licenses/gpl-2.0.html
Unless required by applicable law or agreed to in writing, software distributed under the Apache License
or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the Apache License and the GPL License for the specific language governing
permissions and limitations under the Apache License and the GPL License.

View file

@ -0,0 +1,87 @@
.form-control .select2-choice {
border: 0;
border-radius: 2px;
}
.form-control .select2-choice .select2-arrow {
border-radius: 0 2px 2px 0;
}
.form-control.select2-container {
height: auto !important;
padding: 0;
}
.form-control.select2-container.select2-dropdown-open {
border-color: #5897FB;
border-radius: 3px 3px 0 0;
}
.form-control .select2-container.select2-dropdown-open .select2-choices {
border-radius: 3px 3px 0 0;
}
.form-control.select2-container .select2-choices {
border: 0 !important;
border-radius: 3px;
}
.control-group.warning .select2-container .select2-choice,
.control-group.warning .select2-container .select2-choices,
.control-group.warning .select2-container-active .select2-choice,
.control-group.warning .select2-container-active .select2-choices,
.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choice,
.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choices,
.control-group.warning .select2-container-multi.select2-container-active .select2-choices {
border: 1px solid #C09853 !important;
}
.control-group.warning .select2-container .select2-choice div {
border-left: 1px solid #C09853 !important;
background: #FCF8E3 !important;
}
.control-group.error .select2-container .select2-choice,
.control-group.error .select2-container .select2-choices,
.control-group.error .select2-container-active .select2-choice,
.control-group.error .select2-container-active .select2-choices,
.control-group.error .select2-dropdown-open.select2-drop-above .select2-choice,
.control-group.error .select2-dropdown-open.select2-drop-above .select2-choices,
.control-group.error .select2-container-multi.select2-container-active .select2-choices {
border: 1px solid #B94A48 !important;
}
.control-group.error .select2-container .select2-choice div {
border-left: 1px solid #B94A48 !important;
background: #F2DEDE !important;
}
.control-group.info .select2-container .select2-choice,
.control-group.info .select2-container .select2-choices,
.control-group.info .select2-container-active .select2-choice,
.control-group.info .select2-container-active .select2-choices,
.control-group.info .select2-dropdown-open.select2-drop-above .select2-choice,
.control-group.info .select2-dropdown-open.select2-drop-above .select2-choices,
.control-group.info .select2-container-multi.select2-container-active .select2-choices {
border: 1px solid #3A87AD !important;
}
.control-group.info .select2-container .select2-choice div {
border-left: 1px solid #3A87AD !important;
background: #D9EDF7 !important;
}
.control-group.success .select2-container .select2-choice,
.control-group.success .select2-container .select2-choices,
.control-group.success .select2-container-active .select2-choice,
.control-group.success .select2-container-active .select2-choices,
.control-group.success .select2-dropdown-open.select2-drop-above .select2-choice,
.control-group.success .select2-dropdown-open.select2-drop-above .select2-choices,
.control-group.success .select2-container-multi.select2-container-active .select2-choices {
border: 1px solid #468847 !important;
}
.control-group.success .select2-container .select2-choice div {
border-left: 1px solid #468847 !important;
background: #DFF0D8 !important;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

704
static/cms/js/select2/select2.css vendored Normal file
View file

@ -0,0 +1,704 @@
/*
Version: @@ver@@ Timestamp: @@timestamp@@
*/
.select2-container {
margin: 0;
position: relative;
display: inline-block;
/* inline-block for ie7 */
zoom: 1;
*display: inline;
vertical-align: middle;
}
.select2-container,
.select2-drop,
.select2-search,
.select2-search input {
/*
Force border-box so that % widths fit the parent
container without overlap because of margin/padding.
More Info : http://www.quirksmode.org/css/box.html
*/
-webkit-box-sizing: border-box; /* webkit */
-moz-box-sizing: border-box; /* firefox */
box-sizing: border-box; /* css3 */
}
.select2-container .select2-choice {
display: block;
height: 26px;
padding: 0 0 0 8px;
overflow: hidden;
position: relative;
border: 1px solid #aaa;
white-space: nowrap;
line-height: 26px;
color: #444;
text-decoration: none;
border-radius: 4px;
background-clip: padding-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-color: #fff;
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);
background-image: linear-gradient(to top, #eee 0%, #fff 50%);
}
html[dir="rtl"] .select2-container .select2-choice {
padding: 0 8px 0 0;
}
.select2-container.select2-drop-above .select2-choice {
border-bottom-color: #aaa;
border-radius: 0 0 4px 4px;
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);
background-image: linear-gradient(to bottom, #eee 0%, #fff 90%);
}
.select2-container.select2-allowclear .select2-choice .select2-chosen {
margin-right: 42px;
}
.select2-container .select2-choice > .select2-chosen {
margin-right: 26px;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
float: none;
width: auto;
}
html[dir="rtl"] .select2-container .select2-choice > .select2-chosen {
margin-left: 26px;
margin-right: 0;
}
.select2-container .select2-choice abbr {
display: none;
width: 12px;
height: 12px;
position: absolute;
right: 24px;
top: 8px;
font-size: 1px;
text-decoration: none;
border: 0;
background: url('select2.png') right top no-repeat;
cursor: pointer;
outline: 0;
}
.select2-container.select2-allowclear .select2-choice abbr {
display: inline-block;
}
.select2-container .select2-choice abbr:hover {
background-position: right -11px;
cursor: pointer;
}
.select2-drop-mask {
border: 0;
margin: 0;
padding: 0;
position: fixed;
left: 0;
top: 0;
min-height: 100%;
min-width: 100%;
height: auto;
width: auto;
opacity: 0;
z-index: 9998;
/* styles required for IE to work */
background-color: #fff;
filter: alpha(opacity=0);
}
.select2-drop {
width: 100%;
margin-top: -1px;
position: absolute;
z-index: 9999;
top: 100%;
background: #fff;
color: #000;
border: 1px solid #aaa;
border-top: 0;
border-radius: 0 0 4px 4px;
-webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
}
.select2-drop.select2-drop-above {
margin-top: 1px;
border-top: 1px solid #aaa;
border-bottom: 0;
border-radius: 4px 4px 0 0;
-webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
}
.select2-drop-active {
border: 1px solid #5897fb;
border-top: none;
}
.select2-drop.select2-drop-above.select2-drop-active {
border-top: 1px solid #5897fb;
}
.select2-drop-auto-width {
border-top: 1px solid #aaa;
width: auto;
}
.select2-drop-auto-width .select2-search {
padding-top: 4px;
}
.select2-container .select2-choice .select2-arrow {
display: inline-block;
width: 18px;
height: 100%;
position: absolute;
right: 0;
top: 0;
border-left: 1px solid #aaa;
border-radius: 0 4px 4px 0;
background-clip: padding-box;
background: #ccc;
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);
background-image: linear-gradient(to top, #ccc 0%, #eee 60%);
}
html[dir="rtl"] .select2-container .select2-choice .select2-arrow {
left: 0;
right: auto;
border-left: none;
border-right: 1px solid #aaa;
border-radius: 4px 0 0 4px;
}
.select2-container .select2-choice .select2-arrow b {
display: block;
width: 100%;
height: 100%;
background: url('select2.png') no-repeat 0 1px;
}
html[dir="rtl"] .select2-container .select2-choice .select2-arrow b {
background-position: 2px 1px;
}
.select2-search {
display: inline-block;
width: 100%;
min-height: 26px;
margin: 0;
padding-left: 4px;
padding-right: 4px;
position: relative;
z-index: 10000;
white-space: nowrap;
}
.select2-search input {
width: 100%;
height: auto !important;
min-height: 26px;
padding: 4px 20px 4px 5px;
margin: 0;
outline: 0;
font-family: sans-serif;
font-size: 1em;
border: 1px solid #aaa;
border-radius: 0;
-webkit-box-shadow: none;
box-shadow: none;
background: #fff url('select2.png') no-repeat 100% -22px;
background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
}
html[dir="rtl"] .select2-search input {
padding: 4px 5px 4px 20px;
background: #fff url('select2.png') no-repeat -37px -22px;
background: url('select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
background: url('select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
}
.select2-drop.select2-drop-above .select2-search input {
margin-top: 4px;
}
.select2-search input.select2-active {
background: #fff url('select2-spinner.gif') no-repeat 100%;
background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
}
.select2-container-active .select2-choice,
.select2-container-active .select2-choices {
border: 1px solid #5897fb;
outline: none;
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
}
.select2-dropdown-open .select2-choice {
border-bottom-color: transparent;
-webkit-box-shadow: 0 1px 0 #fff inset;
box-shadow: 0 1px 0 #fff inset;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
background-color: #eee;
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));
background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);
background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
background-image: linear-gradient(to top, #fff 0%, #eee 50%);
}
.select2-dropdown-open.select2-drop-above .select2-choice,
.select2-dropdown-open.select2-drop-above .select2-choices {
border: 1px solid #5897fb;
border-top-color: transparent;
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));
background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);
background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
background-image: linear-gradient(to bottom, #fff 0%, #eee 50%);
}
.select2-dropdown-open .select2-choice .select2-arrow {
background: transparent;
border-left: none;
filter: none;
}
html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow {
border-right: none;
}
.select2-dropdown-open .select2-choice .select2-arrow b {
background-position: -18px 1px;
}
html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b {
background-position: -16px 1px;
}
.select2-hidden-accessible {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
/* results */
.select2-results {
max-height: 200px;
padding: 0 0 0 4px;
margin: 4px 4px 4px 0;
position: relative;
overflow-x: hidden;
overflow-y: auto;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
html[dir="rtl"] .select2-results {
padding: 0 4px 0 0;
margin: 4px 0 4px 4px;
}
.select2-results ul.select2-result-sub {
margin: 0;
padding-left: 0;
}
.select2-results li {
list-style: none;
display: list-item;
background-image: none;
}
.select2-results li.select2-result-with-children > .select2-result-label {
font-weight: bold;
}
.select2-results .select2-result-label {
padding: 3px 7px 4px;
margin: 0;
cursor: pointer;
min-height: 1em;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.select2-results-dept-1 .select2-result-label { padding-left: 20px }
.select2-results-dept-2 .select2-result-label { padding-left: 40px }
.select2-results-dept-3 .select2-result-label { padding-left: 60px }
.select2-results-dept-4 .select2-result-label { padding-left: 80px }
.select2-results-dept-5 .select2-result-label { padding-left: 100px }
.select2-results-dept-6 .select2-result-label { padding-left: 110px }
.select2-results-dept-7 .select2-result-label { padding-left: 120px }
.select2-results .select2-highlighted {
background: #3875d7;
color: #fff;
}
.select2-results li em {
background: #feffde;
font-style: normal;
}
.select2-results .select2-highlighted em {
background: transparent;
}
.select2-results .select2-highlighted ul {
background: #fff;
color: #000;
}
.select2-results .select2-no-results,
.select2-results .select2-searching,
.select2-results .select2-ajax-error,
.select2-results .select2-selection-limit {
background: #f4f4f4;
display: list-item;
padding-left: 5px;
}
/*
disabled look for disabled choices in the results dropdown
*/
.select2-results .select2-disabled.select2-highlighted {
color: #666;
background: #f4f4f4;
display: list-item;
cursor: default;
}
.select2-results .select2-disabled {
background: #f4f4f4;
display: list-item;
cursor: default;
}
.select2-results .select2-selected {
display: none;
}
.select2-more-results.select2-active {
background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;
}
.select2-results .select2-ajax-error {
background: rgba(255, 50, 50, .2);
}
.select2-more-results {
background: #f4f4f4;
display: list-item;
}
/* disabled styles */
.select2-container.select2-container-disabled .select2-choice {
background-color: #f4f4f4;
background-image: none;
border: 1px solid #ddd;
cursor: default;
}
.select2-container.select2-container-disabled .select2-choice .select2-arrow {
background-color: #f4f4f4;
background-image: none;
border-left: 0;
}
.select2-container.select2-container-disabled .select2-choice abbr {
display: none;
}
/* multiselect */
.select2-container-multi .select2-choices {
height: auto !important;
height: 1%;
margin: 0;
padding: 0 5px 0 0;
position: relative;
border: 1px solid #aaa;
cursor: text;
overflow: hidden;
background-color: #fff;
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));
background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);
background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);
background-image: linear-gradient(to bottom, #eee 1%, #fff 15%);
}
html[dir="rtl"] .select2-container-multi .select2-choices {
padding: 0 0 0 5px;
}
.select2-locked {
padding: 3px 5px 3px 5px !important;
}
.select2-container-multi .select2-choices {
min-height: 26px;
}
.select2-container-multi.select2-container-active .select2-choices {
border: 1px solid #5897fb;
outline: none;
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
}
.select2-container-multi .select2-choices li {
float: left;
list-style: none;
}
html[dir="rtl"] .select2-container-multi .select2-choices li
{
float: right;
}
.select2-container-multi .select2-choices .select2-search-field {
margin: 0;
padding: 0;
white-space: nowrap;
}
.select2-container-multi .select2-choices .select2-search-field input {
padding: 5px;
margin: 1px 0;
font-family: sans-serif;
font-size: 100%;
color: #666;
outline: 0;
border: 0;
-webkit-box-shadow: none;
box-shadow: none;
background: transparent !important;
}
.select2-container-multi .select2-choices .select2-search-field input.select2-active {
background: #fff url('select2-spinner.gif') no-repeat 100% !important;
}
.select2-default {
color: #999 !important;
}
.select2-container-multi .select2-choices .select2-search-choice {
padding: 3px 5px 3px 18px;
margin: 3px 0 3px 5px;
position: relative;
line-height: 13px;
color: #333;
cursor: default;
border: 1px solid #aaaaaa;
border-radius: 3px;
-webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
background-clip: padding-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-color: #e4e4e4;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
}
html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice
{
margin: 3px 5px 3px 0;
padding: 3px 18px 3px 5px;
}
.select2-container-multi .select2-choices .select2-search-choice .select2-chosen {
cursor: default;
}
.select2-container-multi .select2-choices .select2-search-choice-focus {
background: #d4d4d4;
}
.select2-search-choice-close {
display: block;
width: 12px;
height: 13px;
position: absolute;
right: 3px;
top: 4px;
font-size: 1px;
outline: none;
background: url('select2.png') right top no-repeat;
}
html[dir="rtl"] .select2-search-choice-close {
right: auto;
left: 3px;
}
.select2-container-multi .select2-search-choice-close {
left: 3px;
}
html[dir="rtl"] .select2-container-multi .select2-search-choice-close {
left: auto;
right: 2px;
}
.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
background-position: right -11px;
}
.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
background-position: right -11px;
}
/* disabled styles */
.select2-container-multi.select2-container-disabled .select2-choices {
background-color: #f4f4f4;
background-image: none;
border: 1px solid #ddd;
cursor: default;
}
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
padding: 3px 5px 3px 5px;
border: 1px solid #ddd;
background-image: none;
background-color: #f4f4f4;
}
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none;
background: none;
}
/* end multiselect */
.select2-result-selectable .select2-match,
.select2-result-unselectable .select2-match {
text-decoration: underline;
}
.select2-offscreen, .select2-offscreen:focus {
clip: rect(0 0 0 0) !important;
width: 1px !important;
height: 1px !important;
border: 0 !important;
margin: 0 !important;
padding: 0 !important;
overflow: hidden !important;
position: absolute !important;
outline: 0 !important;
left: 0px !important;
top: 0px !important;
}
.select2-display-none {
display: none;
}
.select2-measure-scrollbar {
position: absolute;
top: -10000px;
left: -10000px;
width: 100px;
height: 100px;
overflow: scroll;
}
/* Retina-ize icons */
@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx) {
.select2-search input,
.select2-search-choice-close,
.select2-container .select2-choice abbr,
.select2-container .select2-choice .select2-arrow b {
background-image: url('select2x2.png') !important;
background-repeat: no-repeat !important;
background-size: 60px 40px !important;
}
.select2-search input {
background-position: 100% -21px !important;
}
}

3508
static/cms/js/select2/select2.js vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 B

View file

@ -0,0 +1,19 @@
/**
* Select2 Arabic translation.
*
* Author: Adel KEDJOUR <adel@kedjour.com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['ar'] = {
formatNoMatches: function () { return "لم يتم العثور على مطابقات"; },
formatInputTooShort: function (input, min) { var n = min - input.length; if (n == 1){ return "الرجاء إدخال حرف واحد على الأكثر"; } return n == 2 ? "الرجاء إدخال حرفين على الأكثر" : "الرجاء إدخال " + n + " على الأكثر"; },
formatInputTooLong: function (input, max) { var n = input.length - max; if (n == 1){ return "الرجاء إدخال حرف واحد على الأقل"; } return n == 2 ? "الرجاء إدخال حرفين على الأقل" : "الرجاء إدخال " + n + " على الأقل "; },
formatSelectionTooBig: function (limit) { if (n == 1){ return "يمكنك أن تختار إختيار واحد فقط"; } return n == 2 ? "يمكنك أن تختار إختيارين فقط" : "يمكنك أن تختار " + n + " إختيارات فقط"; },
formatLoadMore: function (pageNumber) { return "تحميل المزيد من النتائج…"; },
formatSearching: function () { return "البحث…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['ar']);
})(jQuery);

View file

@ -0,0 +1,20 @@
/**
* Select2 Azerbaijani translation.
*
* Author: Farhad Safarov <farhad.safarov@gmail.com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['az'] = {
formatMatches: function (matches) { return matches + " nəticə mövcuddur, hərəkət etdirmək üçün yuxarı və aşağı düymələrindən istifadə edin."; },
formatNoMatches: function () { return "Nəticə tapılmadı"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return n + " simvol daxil edin"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return n + " simvol silin"; },
formatSelectionTooBig: function (limit) { return "Sadəcə " + limit + " element seçə bilərsiniz"; },
formatLoadMore: function (pageNumber) { return "Daha çox nəticə yüklənir…"; },
formatSearching: function () { return "Axtarılır…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['az']);
})(jQuery);

View file

@ -0,0 +1,20 @@
/**
* Select2 Bulgarian translation.
*
* @author Lubomir Vikev <lubomirvikev@gmail.com>
* @author Uriy Efremochkin <efremochkin@uriy.me>
*/
(function ($) {
"use strict";
$.fn.select2.locales['bg'] = {
formatNoMatches: function () { return "Няма намерени съвпадения"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Моля въведете още " + n + " символ" + (n > 1 ? "а" : ""); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Моля въведете с " + n + " по-малко символ" + (n > 1 ? "а" : ""); },
formatSelectionTooBig: function (limit) { return "Можете да направите до " + limit + (limit > 1 ? " избора" : " избор"); },
formatLoadMore: function (pageNumber) { return "Зареждат се още…"; },
formatSearching: function () { return "Търсене…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['bg']);
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Catalan translation.
*
* Author: David Planella <david.planella@gmail.com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['ca'] = {
formatNoMatches: function () { return "No s'ha trobat cap coincidència"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduïu " + n + " caràcter" + (n == 1 ? "" : "s") + " més"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Introduïu " + n + " caràcter" + (n == 1? "" : "s") + "menys"; },
formatSelectionTooBig: function (limit) { return "Només podeu seleccionar " + limit + " element" + (limit == 1 ? "" : "s"); },
formatLoadMore: function (pageNumber) { return "S'estan carregant més resultats…"; },
formatSearching: function () { return "S'està cercant…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['ca']);
})(jQuery);

View file

@ -0,0 +1,51 @@
/**
* Select2 Czech translation.
*
* Author: Michal Marek <ahoj@michal-marek.cz>
* Author - sklonovani: David Vallner <david@vallner.net>
*/
(function ($) {
"use strict";
// use text for the numbers 2 through 4
var smallNumbers = {
2: function(masc) { return (masc ? "dva" : "dvě"); },
3: function() { return "tři"; },
4: function() { return "čtyři"; }
}
$.fn.select2.locales['cs'] = {
formatNoMatches: function () { return "Nenalezeny žádné položky"; },
formatInputTooShort: function (input, min) {
var n = min - input.length;
if (n == 1) {
return "Prosím zadejte ještě jeden znak";
} else if (n <= 4) {
return "Prosím zadejte ještě další "+smallNumbers[n](true)+" znaky";
} else {
return "Prosím zadejte ještě dalších "+n+" znaků";
}
},
formatInputTooLong: function (input, max) {
var n = input.length - max;
if (n == 1) {
return "Prosím zadejte o jeden znak méně";
} else if (n <= 4) {
return "Prosím zadejte o "+smallNumbers[n](true)+" znaky méně";
} else {
return "Prosím zadejte o "+n+" znaků méně";
}
},
formatSelectionTooBig: function (limit) {
if (limit == 1) {
return "Můžete zvolit jen jednu položku";
} else if (limit <= 4) {
return "Můžete zvolit maximálně "+smallNumbers[limit](false)+" položky";
} else {
return "Můžete zvolit maximálně "+limit+" položek";
}
},
formatLoadMore: function (pageNumber) { return "Načítají se další výsledky…"; },
formatSearching: function () { return "Vyhledávání…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['cs']);
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Danish translation.
*
* Author: Anders Jenbo <anders@jenbo.dk>
*/
(function ($) {
"use strict";
$.fn.select2.locales['da'] = {
formatNoMatches: function () { return "Ingen resultater fundet"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Angiv venligst " + n + " tegn mere"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Angiv venligst " + n + " tegn mindre"; },
formatSelectionTooBig: function (limit) { return "Du kan kun vælge " + limit + " emne" + (limit === 1 ? "" : "r"); },
formatLoadMore: function (pageNumber) { return "Indlæser flere resultater…"; },
formatSearching: function () { return "Søger…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['da']);
})(jQuery);

View file

@ -0,0 +1,18 @@
/**
* Select2 German translation
*/
(function ($) {
"use strict";
$.fn.select2.locales['de'] = {
formatNoMatches: function () { return "Keine Übereinstimmungen gefunden"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Bitte " + n + " Zeichen mehr eingeben"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Bitte " + n + " Zeichen weniger eingeben"; },
formatSelectionTooBig: function (limit) { return "Sie können nur " + limit + " Eintr" + (limit === 1 ? "ag" : "äge") + " auswählen"; },
formatLoadMore: function (pageNumber) { return "Lade mehr Ergebnisse…"; },
formatSearching: function () { return "Suche…"; },
formatMatches: function (matches) { return matches + " Ergebnis " + (matches > 1 ? "se" : "") + " verfügbar, zum Navigieren die Hoch-/Runter-Pfeiltasten verwenden."; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['de']);
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Greek translation.
*
* @author Uriy Efremochkin <efremochkin@uriy.me>
*/
(function ($) {
"use strict";
$.fn.select2.locales['el'] = {
formatNoMatches: function () { return "Δεν βρέθηκαν αποτελέσματα"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Παρακαλούμε εισάγετε " + n + " περισσότερο" + (n > 1 ? "υς" : "") + " χαρακτήρ" + (n > 1 ? "ες" : "α"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Παρακαλούμε διαγράψτε " + n + " χαρακτήρ" + (n > 1 ? "ες" : "α"); },
formatSelectionTooBig: function (limit) { return "Μπορείτε να επιλέξετε μόνο " + limit + " αντικείμεν" + (limit > 1 ? "α" : "ο"); },
formatLoadMore: function (pageNumber) { return "Φόρτωση περισσότερων…"; },
formatSearching: function () { return "Αναζήτηση…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['el']);
})(jQuery);

View file

@ -0,0 +1,20 @@
/**
* Select2 <Language> translation.
*
* Author: Your Name <your@email>
*/
(function ($) {
"use strict";
$.fn.select2.locales['en'] = {
formatMatches: function (matches) { if (matches === 1) { return "One result is available, press enter to select it."; } return matches + " results are available, use up and down arrow keys to navigate."; },
formatNoMatches: function () { return "No matches found"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " or more character" + (n == 1 ? "" : "s"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1 ? "" : "s"); },
formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); },
formatLoadMore: function (pageNumber) { return "Loading more results…"; },
formatSearching: function () { return "Searching…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['en']);
})(jQuery);

View file

@ -0,0 +1,17 @@
/**
* Select2 Spanish translation
*/
(function ($) {
"use strict";
$.fn.select2.locales['es'] = {
formatNoMatches: function () { return "No se encontraron resultados"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Por favor, introduzca " + n + " car" + (n == 1? "ácter" : "acteres"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Por favor, elimine " + n + " car" + (n == 1? "ácter" : "acteres"); },
formatSelectionTooBig: function (limit) { return "Sólo puede seleccionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
formatLoadMore: function (pageNumber) { return "Cargando más resultados…"; },
formatSearching: function () { return "Buscando…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['es']);
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Estonian translation.
*
* Author: Kuldar Kalvik <kuldar@kalvik.ee>
*/
(function ($) {
"use strict";
$.fn.select2.locales['et'] = {
formatNoMatches: function () { return "Tulemused puuduvad"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Sisesta " + n + " täht" + (n == 1 ? "" : "e") + " rohkem"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Sisesta " + n + " täht" + (n == 1? "" : "e") + " vähem"; },
formatSelectionTooBig: function (limit) { return "Saad vaid " + limit + " tulemus" + (limit == 1 ? "e" : "t") + " valida"; },
formatLoadMore: function (pageNumber) { return "Laen tulemusi.."; },
formatSearching: function () { return "Otsin.."; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['et']);
})(jQuery);

View file

@ -0,0 +1,45 @@
/**
* Select2 Basque translation.
*
* Author: Julen Ruiz Aizpuru <julenx at gmail dot com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['eu'] = {
formatNoMatches: function () {
return "Ez da bat datorrenik aurkitu";
},
formatInputTooShort: function (input, min) {
var n = min - input.length;
if (n === 1) {
return "Idatzi karaktere bat gehiago";
} else {
return "Idatzi " + n + " karaktere gehiago";
}
},
formatInputTooLong: function (input, max) {
var n = input.length - max;
if (n === 1) {
return "Idatzi karaktere bat gutxiago";
} else {
return "Idatzi " + n + " karaktere gutxiago";
}
},
formatSelectionTooBig: function (limit) {
if (limit === 1 ) {
return "Elementu bakarra hauta dezakezu";
} else {
return limit + " elementu hauta ditzakezu soilik";
}
},
formatLoadMore: function (pageNumber) {
return "Emaitza gehiago kargatzen…";
},
formatSearching: function () {
return "Bilatzen…";
}
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['eu']);
})(jQuery);

View file

@ -0,0 +1,21 @@
/**
* Select2 Persian translation.
*
* Author: Ali Choopan <choopan@arsh.co>
* Author: Ebrahim Byagowi <ebrahim@gnu.org>
*/
(function ($) {
"use strict";
$.fn.select2.locales['fa'] = {
formatMatches: function (matches) { return matches + " نتیجه موجود است، کلیدهای جهت بالا و پایین را برای گشتن استفاده کنید."; },
formatNoMatches: function () { return "نتیجه‌ای یافت نشد."; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "لطفاً " + n + " نویسه بیشتر وارد نمایید"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "لطفاً " + n + " نویسه را حذف کنید."; },
formatSelectionTooBig: function (limit) { return "شما فقط می‌توانید " + limit + " مورد را انتخاب کنید"; },
formatLoadMore: function (pageNumber) { return "در حال بارگیری موارد بیشتر…"; },
formatSearching: function () { return "در حال جستجو…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['fa']);
})(jQuery);

View file

@ -0,0 +1,30 @@
/**
* Select2 Finnish translation
*/
(function ($) {
"use strict";
$.fn.select2.locales['fi'] = {
formatNoMatches: function () {
return "Ei tuloksia";
},
formatInputTooShort: function (input, min) {
var n = min - input.length;
return "Ole hyvä ja anna " + n + " merkkiä lisää";
},
formatInputTooLong: function (input, max) {
var n = input.length - max;
return "Ole hyvä ja anna " + n + " merkkiä vähemmän";
},
formatSelectionTooBig: function (limit) {
return "Voit valita ainoastaan " + limit + " kpl";
},
formatLoadMore: function (pageNumber) {
return "Ladataan lisää tuloksia…";
},
formatSearching: function () {
return "Etsitään…";
}
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['fi']);
})(jQuery);

View file

@ -0,0 +1,18 @@
/**
* Select2 French translation
*/
(function ($) {
"use strict";
$.fn.select2.locales['fr'] = {
formatMatches: function (matches) { return matches + " résultats sont disponibles, utilisez les flèches haut et bas pour naviguer."; },
formatNoMatches: function () { return "Aucun résultat trouvé"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Saisissez " + n + " caractère" + (n == 1? "" : "s") + " supplémentaire" + (n == 1? "" : "s") ; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Supprimez " + n + " caractère" + (n == 1? "" : "s"); },
formatSelectionTooBig: function (limit) { return "Vous pouvez seulement sélectionner " + limit + " élément" + (limit == 1 ? "" : "s"); },
formatLoadMore: function (pageNumber) { return "Chargement de résultats supplémentaires…"; },
formatSearching: function () { return "Recherche en cours…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['fr']);
})(jQuery);

View file

@ -0,0 +1,45 @@
/**
* Select2 Galician translation
*
* Author: Leandro Regueiro <leandro.regueiro@gmail.com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['gl'] = {
formatNoMatches: function () {
return "Non se atoparon resultados";
},
formatInputTooShort: function (input, min) {
var n = min - input.length;
if (n === 1) {
return "Engada un carácter";
} else {
return "Engada " + n + " caracteres";
}
},
formatInputTooLong: function (input, max) {
var n = input.length - max;
if (n === 1) {
return "Elimine un carácter";
} else {
return "Elimine " + n + " caracteres";
}
},
formatSelectionTooBig: function (limit) {
if (limit === 1 ) {
return "Só pode seleccionar un elemento";
} else {
return "Só pode seleccionar " + limit + " elementos";
}
},
formatLoadMore: function (pageNumber) {
return "Cargando máis resultados…";
},
formatSearching: function () {
return "Buscando…";
}
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['gl']);
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Hebrew translation.
*
* Author: Yakir Sitbon <http://www.yakirs.net/>
*/
(function ($) {
"use strict";
$.fn.select2.locales['he'] = {
formatNoMatches: function () { return "לא נמצאו התאמות"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "נא להזין עוד " + n + " תווים נוספים"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "נא להזין פחות " + n + " תווים"; },
formatSelectionTooBig: function (limit) { return "ניתן לבחור " + limit + " פריטים"; },
formatLoadMore: function (pageNumber) { return "טוען תוצאות נוספות…"; },
formatSearching: function () { return "מחפש…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['he']);
})(jQuery);

View file

@ -0,0 +1,24 @@
/**
* Select2 Croatian translation.
*
* @author Edi Modrić <edi.modric@gmail.com>
* @author Uriy Efremochkin <efremochkin@uriy.me>
*/
(function ($) {
"use strict";
$.fn.select2.locales['hr'] = {
formatNoMatches: function () { return "Nema rezultata"; },
formatInputTooShort: function (input, min) { return "Unesite još" + character(min - input.length); },
formatInputTooLong: function (input, max) { return "Unesite" + character(input.length - max) + " manje"; },
formatSelectionTooBig: function (limit) { return "Maksimalan broj odabranih stavki je " + limit; },
formatLoadMore: function (pageNumber) { return "Učitavanje rezultata…"; },
formatSearching: function () { return "Pretraga…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['hr']);
function character (n) {
return " " + n + " znak" + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "a" : "" : "ova");
}
})(jQuery);

View file

@ -0,0 +1,17 @@
/**
* Select2 Hungarian translation
*/
(function ($) {
"use strict";
$.fn.select2.locales['hu'] = {
formatNoMatches: function () { return "Nincs találat."; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Túl rövid. Még " + n + " karakter hiányzik."; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Túl hosszú. " + n + " karakterrel több, mint kellene."; },
formatSelectionTooBig: function (limit) { return "Csak " + limit + " elemet lehet kiválasztani."; },
formatLoadMore: function (pageNumber) { return "Töltés…"; },
formatSearching: function () { return "Keresés…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['hu']);
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Indonesian translation.
*
* Author: Ibrahim Yusuf <ibrahim7usuf@gmail.com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['id'] = {
formatNoMatches: function () { return "Tidak ada data yang sesuai"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Masukkan " + n + " huruf lagi" + (n == 1 ? "" : "s"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Hapus " + n + " huruf" + (n == 1 ? "" : "s"); },
formatSelectionTooBig: function (limit) { return "Anda hanya dapat memilih " + limit + " pilihan" + (limit == 1 ? "" : "s"); },
formatLoadMore: function (pageNumber) { return "Mengambil data…"; },
formatSearching: function () { return "Mencari…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['id']);
})(jQuery);

View file

@ -0,0 +1,17 @@
/**
* Select2 Icelandic translation.
*/
(function ($) {
"use strict";
$.fn.select2.locales['is'] = {
formatNoMatches: function () { return "Ekkert fannst"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Vinsamlegast skrifið " + n + " staf" + (n > 1 ? "i" : "") + " í viðbót"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Vinsamlegast styttið texta um " + n + " staf" + (n > 1 ? "i" : ""); },
formatSelectionTooBig: function (limit) { return "Þú getur aðeins valið " + limit + " atriði"; },
formatLoadMore: function (pageNumber) { return "Sæki fleiri niðurstöður…"; },
formatSearching: function () { return "Leita…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['is']);
})(jQuery);

View file

@ -0,0 +1,17 @@
/**
* Select2 Italian translation
*/
(function ($) {
"use strict";
$.fn.select2.locales['it'] = {
formatNoMatches: function () { return "Nessuna corrispondenza trovata"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Inserisci ancora " + n + " caratter" + (n == 1? "e" : "i"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Inserisci " + n + " caratter" + (n == 1? "e" : "i") + " in meno"; },
formatSelectionTooBig: function (limit) { return "Puoi selezionare solo " + limit + " element" + (limit == 1 ? "o" : "i"); },
formatLoadMore: function (pageNumber) { return "Caricamento in corso…"; },
formatSearching: function () { return "Ricerca…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['it']);
})(jQuery);

View file

@ -0,0 +1,17 @@
/**
* Select2 Japanese translation.
*/
(function ($) {
"use strict";
$.fn.select2.locales['ja'] = {
formatNoMatches: function () { return "該当なし"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "後" + n + "文字入れてください"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "検索文字列が" + n + "文字長すぎます"; },
formatSelectionTooBig: function (limit) { return "最多で" + limit + "項目までしか選択できません"; },
formatLoadMore: function (pageNumber) { return "読込中・・・"; },
formatSearching: function () { return "検索中・・・"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['ja']);
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Georgian (Kartuli) translation.
*
* Author: Dimitri Kurashvili dimakura@gmail.com
*/
(function ($) {
"use strict";
$.fn.select2.locales['ka'] = {
formatNoMatches: function () { return "ვერ მოიძებნა"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "გთხოვთ შეიყვანოთ კიდევ " + n + " სიმბოლო"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "გთხოვთ წაშალოთ " + n + " სიმბოლო"; },
formatSelectionTooBig: function (limit) { return "თქვენ შეგიძლიათ მხოლოდ " + limit + " ჩანაწერის მონიშვნა"; },
formatLoadMore: function (pageNumber) { return "შედეგის ჩატვირთვა…"; },
formatSearching: function () { return "ძებნა…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['ka']);
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Korean translation.
*
* @author Swen Mun <longfinfunnel@gmail.com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['ko'] = {
formatNoMatches: function () { return "결과 없음"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "너무 짧습니다. "+n+"글자 더 입력해주세요."; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "너무 깁니다. "+n+"글자 지워주세요."; },
formatSelectionTooBig: function (limit) { return "최대 "+limit+"개까지만 선택하실 수 있습니다."; },
formatLoadMore: function (pageNumber) { return "불러오는 중…"; },
formatSearching: function () { return "검색 중…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['ko']);
})(jQuery);

View file

@ -0,0 +1,26 @@
/**
* Select2 Lithuanian translation.
*
* @author CRONUS Karmalakas <cronus dot karmalakas at gmail dot com>
* @author Uriy Efremochkin <efremochkin@uriy.me>
*/
(function ($) {
"use strict";
$.fn.select2.locales['lt'] = {
formatNoMatches: function () { return "Atitikmenų nerasta"; },
formatInputTooShort: function (input, min) { return "Įrašykite dar" + character(min - input.length); },
formatInputTooLong: function (input, max) { return "Pašalinkite" + character(input.length - max); },
formatSelectionTooBig: function (limit) {
return "Jūs galite pasirinkti tik " + limit + " element" + ((limit%100 > 9 && limit%100 < 21) || limit%10 == 0 ? "ų" : limit%10 > 1 ? "us" : "ą");
},
formatLoadMore: function (pageNumber) { return "Kraunama daugiau rezultatų…"; },
formatSearching: function () { return "Ieškoma…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['lt']);
function character (n) {
return " " + n + " simbol" + ((n%100 > 9 && n%100 < 21) || n%10 == 0 ? "ių" : n%10 > 1 ? "ius" : "į");
}
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Latvian translation.
*
* @author Uriy Efremochkin <efremochkin@uriy.me>
*/
(function ($) {
"use strict";
$.fn.select2.locales['lv'] = {
formatNoMatches: function () { return "Sakritību nav"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Lūdzu ievadiet vēl " + n + " simbol" + (n == 11 ? "us" : n%10 == 1 ? "u" : "us"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Lūdzu ievadiet par " + n + " simbol" + (n == 11 ? "iem" : n%10 == 1 ? "u" : "iem") + " mazāk"; },
formatSelectionTooBig: function (limit) { return "Jūs varat izvēlēties ne vairāk kā " + limit + " element" + (limit == 11 ? "us" : limit%10 == 1 ? "u" : "us"); },
formatLoadMore: function (pageNumber) { return "Datu ielāde…"; },
formatSearching: function () { return "Meklēšana…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['lv']);
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Macedonian translation.
*
* Author: Marko Aleksic <psybaron@gmail.com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['mk'] = {
formatNoMatches: function () { return "Нема пронајдено совпаѓања"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Ве молиме внесете уште " + n + " карактер" + (n == 1 ? "" : "и"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Ве молиме внесете " + n + " помалку карактер" + (n == 1? "" : "и"); },
formatSelectionTooBig: function (limit) { return "Можете да изберете само " + limit + " ставк" + (limit == 1 ? "а" : "и"); },
formatLoadMore: function (pageNumber) { return "Вчитување резултати…"; },
formatSearching: function () { return "Пребарување…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['mk']);
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Malay translation.
*
* Author: Kepoweran <kepoweran@gmail.com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['ms'] = {
formatNoMatches: function () { return "Tiada padanan yang ditemui"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Sila masukkan " + n + " aksara lagi"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Sila hapuskan " + n + " aksara"; },
formatSelectionTooBig: function (limit) { return "Anda hanya boleh memilih " + limit + " pilihan"; },
formatLoadMore: function (pageNumber) { return "Sedang memuatkan keputusan…"; },
formatSearching: function () { return "Mencari…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['ms']);
})(jQuery);

View file

@ -0,0 +1,17 @@
/**
* Select2 Dutch translation
*/
(function ($) {
"use strict";
$.fn.select2.locales['nl'] = {
formatNoMatches: function () { return "Geen resultaten gevonden"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Vul nog " + n + " karakter" + (n == 1? "" : "s") + " in"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Haal " + n + " karakter" + (n == 1? "" : "s") + " weg"; },
formatSelectionTooBig: function (limit) { return "Maximaal " + limit + " item" + (limit == 1 ? "" : "s") + " toegestaan"; },
formatLoadMore: function (pageNumber) { return "Meer resultaten laden…"; },
formatSearching: function () { return "Zoeken…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['nl']);
})(jQuery);

View file

@ -0,0 +1,20 @@
/**
* Select2 Norwegian translation.
*
* Author: Torgeir Veimo <torgeir.veimo@gmail.com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['no'] = {
formatNoMatches: function () { return "Ingen treff"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Vennligst skriv inn " + n + (n>1 ? " flere tegn" : " tegn til"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Vennligst fjern " + n + " tegn"; },
formatSelectionTooBig: function (limit) { return "Du kan velge maks " + limit + " elementer"; },
formatLoadMore: function (pageNumber) { return "Laster flere resultater…"; },
formatSearching: function () { return "Søker…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['no']);
})(jQuery);

View file

@ -0,0 +1,25 @@
/**
* Select2 Polish translation.
*
* @author Jan Kondratowicz <jan@kondratowicz.pl>
* @author Uriy Efremochkin <efremochkin@uriy.me>
* @author Michał Połtyn <mike@poltyn.com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['pl'] = {
formatNoMatches: function () { return "Brak wyników"; },
formatInputTooShort: function (input, min) { return "Wpisz co najmniej" + character(min - input.length, "znak", "i"); },
formatInputTooLong: function (input, max) { return "Wpisana fraza jest za długa o" + character(input.length - max, "znak", "i"); },
formatSelectionTooBig: function (limit) { return "Możesz zaznaczyć najwyżej" + character(limit, "element", "y"); },
formatLoadMore: function (pageNumber) { return "Ładowanie wyników…"; },
formatSearching: function () { return "Szukanie…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['pl']);
function character (n, word, pluralSuffix) {
return " " + n + " " + word + (n == 1 ? "" : n%10 < 5 && n%10 > 1 && (n%100 < 5 || n%100 > 20) ? pluralSuffix : "ów");
}
})(jQuery);

View file

@ -0,0 +1,17 @@
/**
* Select2 Brazilian Portuguese translation
*/
(function ($) {
"use strict";
$.fn.select2.locales['pt-BR'] = {
formatNoMatches: function () { return "Nenhum resultado encontrado"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Digite mais " + n + " caracter" + (n == 1? "" : "es"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " caracter" + (n == 1? "" : "es"); },
formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
formatLoadMore: function (pageNumber) { return "Carregando mais resultados…"; },
formatSearching: function () { return "Buscando…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['pt-BR']);
})(jQuery);

View file

@ -0,0 +1,17 @@
/**
* Select2 Portuguese (Portugal) translation
*/
(function ($) {
"use strict";
$.fn.select2.locales['pt-PT'] = {
formatNoMatches: function () { return "Nenhum resultado encontrado"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduza " + n + " car" + (n == 1 ? "ácter" : "acteres"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " car" + (n == 1 ? "ácter" : "acteres"); },
formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
formatLoadMore: function (pageNumber) { return "A carregar mais resultados…"; },
formatSearching: function () { return "A pesquisar…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['pt-PT']);
})(jQuery);

View file

@ -0,0 +1,17 @@
/**
* Select2 Romanian translation.
*/
(function ($) {
"use strict";
$.fn.select2.locales['ro'] = {
formatNoMatches: function () { return "Nu a fost găsit nimic"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Vă rugăm să introduceți incă " + n + " caracter" + (n == 1 ? "" : "e"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Vă rugăm să introduceți mai puțin de " + n + " caracter" + (n == 1? "" : "e"); },
formatSelectionTooBig: function (limit) { return "Aveți voie să selectați cel mult " + limit + " element" + (limit == 1 ? "" : "e"); },
formatLoadMore: function (pageNumber) { return "Se încarcă…"; },
formatSearching: function () { return "Căutare…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['ro']);
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Serbian translation.
*
* @author Limon Monte <limon.monte@gmail.com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['rs'] = {
formatNoMatches: function () { return "Ništa nije pronađeno"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Ukucajte bar još " + n + " simbol" + (n % 10 == 1 && n % 100 != 11 ? "" : "a"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Obrišite " + n + " simbol" + (n % 10 == 1 && n % 100 != 11 ? "" : "a"); },
formatSelectionTooBig: function (limit) { return "Možete izabrati samo " + limit + " stavk" + (limit % 10 == 1 && limit % 100 != 11 ? "u" : (limit % 10 >= 2 && limit % 10 <= 4 && (limit % 100 < 12 || limit % 100 > 14)? "e" : "i")); },
formatLoadMore: function (pageNumber) { return "Preuzimanje još rezultata…"; },
formatSearching: function () { return "Pretraga…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['rs']);
})(jQuery);

View file

@ -0,0 +1,23 @@
/**
* Select2 Russian translation.
*
* @author Uriy Efremochkin <efremochkin@uriy.me>
*/
(function ($) {
"use strict";
$.fn.select2.locales['ru'] = {
formatNoMatches: function () { return "Совпадений не найдено"; },
formatInputTooShort: function (input, min) { return "Пожалуйста, введите еще хотя бы" + character(min - input.length); },
formatInputTooLong: function (input, max) { return "Пожалуйста, введите на" + character(input.length - max) + " меньше"; },
formatSelectionTooBig: function (limit) { return "Вы можете выбрать не более " + limit + " элемент" + (limit%10 == 1 && limit%100 != 11 ? "а" : "ов"); },
formatLoadMore: function (pageNumber) { return "Загрузка данных…"; },
formatSearching: function () { return "Поиск…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['ru']);
function character (n) {
return " " + n + " символ" + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 20) ? n%10 > 1 ? "a" : "" : "ов");
}
})(jQuery);

View file

@ -0,0 +1,50 @@
/**
* Select2 Slovak translation.
*
* Author: David Vallner <david@vallner.net>
*/
(function ($) {
"use strict";
// use text for the numbers 2 through 4
var smallNumbers = {
2: function(masc) { return (masc ? "dva" : "dve"); },
3: function() { return "tri"; },
4: function() { return "štyri"; }
};
$.fn.select2.locales['sk'] = {
formatNoMatches: function () { return "Nenašli sa žiadne položky"; },
formatInputTooShort: function (input, min) {
var n = min - input.length;
if (n == 1) {
return "Prosím, zadajte ešte jeden znak";
} else if (n <= 4) {
return "Prosím, zadajte ešte ďalšie "+smallNumbers[n](true)+" znaky";
} else {
return "Prosím, zadajte ešte ďalších "+n+" znakov";
}
},
formatInputTooLong: function (input, max) {
var n = input.length - max;
if (n == 1) {
return "Prosím, zadajte o jeden znak menej";
} else if (n <= 4) {
return "Prosím, zadajte o "+smallNumbers[n](true)+" znaky menej";
} else {
return "Prosím, zadajte o "+n+" znakov menej";
}
},
formatSelectionTooBig: function (limit) {
if (limit == 1) {
return "Môžete zvoliť len jednu položku";
} else if (limit <= 4) {
return "Môžete zvoliť najviac "+smallNumbers[limit](false)+" položky";
} else {
return "Môžete zvoliť najviac "+limit+" položiek";
}
},
formatLoadMore: function (pageNumber) { return "Načítavajú sa ďalšie výsledky…"; },
formatSearching: function () { return "Vyhľadávanie…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['sk']);
})(jQuery);

View file

@ -0,0 +1,19 @@
/**
* Select2 Swedish translation.
*
* Author: Jens Rantil <jens.rantil@telavox.com>
*/
(function ($) {
"use strict";
$.fn.select2.locales['sv'] = {
formatNoMatches: function () { return "Inga träffar"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Var god skriv in " + n + (n>1 ? " till tecken" : " tecken till"); },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Var god sudda ut " + n + " tecken"; },
formatSelectionTooBig: function (limit) { return "Du kan max välja " + limit + " element"; },
formatLoadMore: function (pageNumber) { return "Laddar fler resultat…"; },
formatSearching: function () { return "Söker…"; }
};
$.extend($.fn.select2.defaults, $.fn.select2.locales['sv']);
})(jQuery);

Some files were not shown because too many files have changed in this diff Show more