Commit 0a597949 authored by Romain Courteaud's avatar Romain Courteaud 🐸

Upgrade renderJS UI to development version of jIO.

Ensure only jIO API is used.
Allow to access all ERP5 functionnality with getAttachment.
Improve IE support.
parent dd25d0b8
......@@ -10,6 +10,12 @@
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
......@@ -52,10 +58,7 @@
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
from zExceptions import Unauthorized\n
from AccessControl import getSecurityManager\n
from ZTUtils import make_query\n
from Products.ZSQLCatalog.SQLCatalog import Query, NegatedQuery\n
import json\n
from DateTime import DateTime\n
if REQUEST is None:\n
......@@ -66,6 +69,8 @@ if response is None:\n
\n
url_template_dict = {\n
"form_action": "%(traversed_document_url)s/%(action_id)s",\n
"traverse_generator": "%(root_url)s/%(script_id)s?mode=traverse" + \\\n
"&relative_url=%(relative_url)s&view=%(view)s",\n
"traverse_template": "%(root_url)s/%(script_id)s?mode=traverse" + \\\n
"{&relative_url,view}",\n
"search_template": "%(root_url)s/%(script_id)s?mode=search" + \\\n
......@@ -269,7 +274,6 @@ def renderForm(form, response_dict):\n
\'name\': form.id\n
}\n
\n
group_list = []\n
for group in form.Form_getGroupTitleAndId():\n
\n
if group[\'gid\'].find(\'hidden\') < 0:\n
......@@ -379,8 +383,10 @@ is_web_mode = (context.REQUEST.get(\'current_web_section\', None) is not None) o
# is_web_mode = traversed_document.isWebMode()\n
if is_web_mode:\n
site_root = context.getWebSectionValue()\n
view_action_type = site_root.getLayoutProperty("view_action_category", default=\'object_view\')\n
else:\n
site_root = portal\n
view_action_type = "object_view"\n
\n
# Check if traversed_document is the site_root\n
if relative_url:\n
......@@ -471,7 +477,6 @@ elif (mode == \'root\') or (mode == \'traverse\'):\n
portal.portal_actions.listFilteredActionsFor(traversed_document))\n
\n
embedded_url = None\n
embedded_action_key = None\n
# XXX See ERP5Type.getDefaultViewFor\n
for erp5_action_key in erp5_action_dict.keys():\n
erp5_action_list = []\n
......@@ -485,11 +490,23 @@ elif (mode == \'root\') or (mode == \'traverse\'):\n
# Try to embed the form in the result\n
if (view == view_action[\'id\']):\n
embedded_url = \'%s\' % view_action[\'url\']\n
embedded_action_key = "action_" + erp5_action_key\n
\n
if (erp5_action_key in (view_action_type, "view", "workflow", "object_new_content_action")):\n
erp5_action_list[-1][\'href\'] = url_template_dict["traverse_generator"] % {\n
"root_url": site_root.absolute_url(),\n
"script_id": script.id,\n
"relative_url": traversed_document.getRelativeUrl().replace("/", "%2F"),\n
"view": erp5_action_list[-1][\'name\']\n
}\n
\n
if erp5_action_list:\n
if len(erp5_action_list) == 1:\n
erp5_action_list = erp5_action_list[0]\n
\n
if erp5_action_key == view_action_type:\n
# Configure view tabs on server level\n
result_dict[\'_links\']["view"] = erp5_action_list\n
\n
# XXX Put a prefix to prevent conflict\n
result_dict[\'_links\']["action_" + erp5_action_key] = erp5_action_list\n
\n
......@@ -564,6 +581,7 @@ elif (mode == \'root\') or (mode == \'traverse\'):\n
##############\n
if is_site_root:\n
\n
result_dict[\'default_view\'] = \'view\'\n
# XXX Hardcoded cache for 30 minutes. Should only bother developers but speed up Jio access\n
response.setHeader("Cache-Control", "public, max-age=1800")\n
response.setHeader("Vary", "Cookie")\n
......@@ -773,7 +791,7 @@ elif mode == \'form\':\n
# renderFormDefinition(form, result_dict)\n
\n
else:\n
raise NotImplementedError, "Unsupported mode %s" % mode\n
raise NotImplementedError("Unsupported mode %s" % mode)\n
\n
response.setHeader(\'Content-Type\', mime_type)\n
return json.dumps(result_dict, indent=2)\n
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Web Script" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>URI.js</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>/*! URI.js v1.12.0 http://medialize.github.com/URI.js/ */\n
/* build contains: IPv6.js, punycode.js, SecondLevelDomains.js, URI.js, URI.fragmentQuery.js */</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>rjs_URI_js</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Web Script</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*! URI.js v1.12.0 http://medialize.github.com/URI.js/ */\n
/* build contains: IPv6.js, punycode.js, SecondLevelDomains.js, URI.js, URI.fragmentQuery.js */\n
(function(e,k){"object"===typeof exports?module.exports=k():"function"===typeof define&&define.amd?define(k):e.IPv6=k(e)})(this,function(e){var k=e&&e.IPv6;return{best:function(e){e=e.toLowerCase().split(":");var k=e.length,d=8;""===e[0]&&""===e[1]&&""===e[2]?(e.shift(),e.shift()):""===e[0]&&""===e[1]?e.shift():""===e[k-1]&&""===e[k-2]&&e.pop();k=e.length;-1!==e[k-1].indexOf(".")&&(d=7);var g;for(g=0;g<k&&""!==e[g];g++);if(g<d)for(e.splice(g,1,"0000");e.length<d;)e.splice(g,0,"0000");for(g=0;g<d;g++){for(var k=\n
e[g].split(""),q=0;3>q;q++)if("0"===k[0]&&1<k.length)k.splice(0,1);else break;e[g]=k.join("")}var k=-1,l=q=0,r=-1,z=!1;for(g=0;g<d;g++)z?"0"===e[g]?l+=1:(z=!1,l>q&&(k=r,q=l)):"0"==e[g]&&(z=!0,r=g,l=1);l>q&&(k=r,q=l);1<q&&e.splice(k,q,"");k=e.length;d="";""===e[0]&&(beststr=":");for(g=0;g<k;g++){d+=e[g];if(g===k-1)break;d+=":"}""===e[k-1]&&(d+=":");return d},noConflict:function(){e.IPv6===this&&(e.IPv6=k);return this}}});\n
(function(e){function k(a){throw RangeError(p[a]);}function u(a,b){for(var c=a.length;c--;)a[c]=b(a[c]);return a}function m(a,b){return u(a.split(h),b).join(".")}function d(a){for(var b=[],c=0,d=a.length,h,p;c<d;)h=a.charCodeAt(c++),55296<=h&&56319>=h&&c<d?(p=a.charCodeAt(c++),56320==(p&64512)?b.push(((h&1023)<<10)+(p&1023)+65536):(b.push(h),c--)):b.push(h);return b}function g(a){return u(a,function(a){var b="";65535<a&&(a-=65536,b+=x(a>>>10&1023|55296),a=56320|a&1023);return b+=x(a)}).join("")}function q(a,\n
b){return a+22+75*(26>a)-((0!=b)<<5)}function l(a,b,c){var d=0;a=c?A(a/H):a>>1;for(a+=A(a/b);a>n*y>>1;d+=s)a=A(a/n);return A(d+(n+1)*a/(a+I))}function r(b){var c=[],d=b.length,h,p=0,e=F,f=G,n,x,q,t,m;n=b.lastIndexOf(a);0>n&&(n=0);for(x=0;x<n;++x)128<=b.charCodeAt(x)&&k("not-basic"),c.push(b.charCodeAt(x));for(n=0<n?n+1:0;n<d;){x=p;h=1;for(q=s;;q+=s){n>=d&&k("invalid-input");t=b.charCodeAt(n++);t=10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:s;(t>=s||t>A((w-p)/h))&&k("overflow");p+=t*h;m=q<=f?v:q>=f+y?y:\n
q-f;if(t<m)break;t=s-m;h>A(w/t)&&k("overflow");h*=t}h=c.length+1;f=l(p-x,h,0==x);A(p/h)>w-e&&k("overflow");e+=A(p/h);p%=h;c.splice(p++,0,e)}return g(c)}function z(b){var c,h,p,e,f,n,g,m,r,t=[],B,u,z;b=d(b);B=b.length;c=F;h=0;f=G;for(n=0;n<B;++n)r=b[n],128>r&&t.push(x(r));for((p=e=t.length)&&t.push(a);p<B;){g=w;for(n=0;n<B;++n)r=b[n],r>=c&&r<g&&(g=r);u=p+1;g-c>A((w-h)/u)&&k("overflow");h+=(g-c)*u;c=g;for(n=0;n<B;++n)if(r=b[n],r<c&&++h>w&&k("overflow"),r==c){m=h;for(g=s;;g+=s){r=g<=f?v:g>=f+y?y:g-f;\n
if(m<r)break;z=m-r;m=s-r;t.push(x(q(r+z%m,0)));m=A(z/m)}t.push(x(q(m,0)));f=l(h,u,p==e);h=0;++p}++h;++c}return t.join("")}var D="object"==typeof exports&&exports,E="object"==typeof module&&module&&module.exports==D&&module,C="object"==typeof global&&global;if(C.global===C||C.window===C)e=C;var f,w=2147483647,s=36,v=1,y=26,I=38,H=700,G=72,F=128,a="-",b=/^xn--/,c=/[^ -~]/,h=/\\x2E|\\u3002|\\uFF0E|\\uFF61/g,p={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)",\n
"invalid-input":"Invalid input"},n=s-v,A=Math.floor,x=String.fromCharCode,B;f={version:"1.2.3",ucs2:{decode:d,encode:g},decode:r,encode:z,toASCII:function(a){return m(a,function(a){return c.test(a)?"xn--"+z(a):a})},toUnicode:function(a){return m(a,function(a){return b.test(a)?r(a.slice(4).toLowerCase()):a})}};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return f});else if(D&&!D.nodeType)if(E)E.exports=f;else for(B in f)f.hasOwnProperty(B)&&(D[B]=f[B]);else e.punycode=\n
f})(this);\n
(function(e,k){"object"===typeof exports?module.exports=k():"function"===typeof define&&define.amd?define(k):e.SecondLevelDomains=k(e)})(this,function(e){var k=e&&e.SecondLevelDomains,u=Object.prototype.hasOwnProperty,m={list:{ac:"com|gov|mil|net|org",ae:"ac|co|gov|mil|name|net|org|pro|sch",af:"com|edu|gov|net|org",al:"com|edu|gov|mil|net|org",ao:"co|ed|gv|it|og|pb",ar:"com|edu|gob|gov|int|mil|net|org|tur",at:"ac|co|gv|or",au:"asn|com|csiro|edu|gov|id|net|org",ba:"co|com|edu|gov|mil|net|org|rs|unbi|unmo|unsa|untz|unze",bb:"biz|co|com|edu|gov|info|net|org|store|tv",\n
bh:"biz|cc|com|edu|gov|info|net|org",bn:"com|edu|gov|net|org",bo:"com|edu|gob|gov|int|mil|net|org|tv",br:"adm|adv|agr|am|arq|art|ato|b|bio|blog|bmd|cim|cng|cnt|com|coop|ecn|edu|eng|esp|etc|eti|far|flog|fm|fnd|fot|fst|g12|ggf|gov|imb|ind|inf|jor|jus|lel|mat|med|mil|mus|net|nom|not|ntr|odo|org|ppg|pro|psc|psi|qsl|rec|slg|srv|tmp|trd|tur|tv|vet|vlog|wiki|zlg",bs:"com|edu|gov|net|org",bz:"du|et|om|ov|rg",ca:"ab|bc|mb|nb|nf|nl|ns|nt|nu|on|pe|qc|sk|yk",ck:"biz|co|edu|gen|gov|info|net|org",cn:"ac|ah|bj|com|cq|edu|fj|gd|gov|gs|gx|gz|ha|hb|he|hi|hl|hn|jl|js|jx|ln|mil|net|nm|nx|org|qh|sc|sd|sh|sn|sx|tj|tw|xj|xz|yn|zj",\n
co:"com|edu|gov|mil|net|nom|org",cr:"ac|c|co|ed|fi|go|or|sa",cy:"ac|biz|com|ekloges|gov|ltd|name|net|org|parliament|press|pro|tm","do":"art|com|edu|gob|gov|mil|net|org|sld|web",dz:"art|asso|com|edu|gov|net|org|pol",ec:"com|edu|fin|gov|info|med|mil|net|org|pro",eg:"com|edu|eun|gov|mil|name|net|org|sci",er:"com|edu|gov|ind|mil|net|org|rochest|w",es:"com|edu|gob|nom|org",et:"biz|com|edu|gov|info|name|net|org",fj:"ac|biz|com|info|mil|name|net|org|pro",fk:"ac|co|gov|net|nom|org",fr:"asso|com|f|gouv|nom|prd|presse|tm",\n
gg:"co|net|org",gh:"com|edu|gov|mil|org",gn:"ac|com|gov|net|org",gr:"com|edu|gov|mil|net|org",gt:"com|edu|gob|ind|mil|net|org",gu:"com|edu|gov|net|org",hk:"com|edu|gov|idv|net|org",id:"ac|co|go|mil|net|or|sch|web",il:"ac|co|gov|idf|k12|muni|net|org","in":"ac|co|edu|ernet|firm|gen|gov|i|ind|mil|net|nic|org|res",iq:"com|edu|gov|i|mil|net|org",ir:"ac|co|dnssec|gov|i|id|net|org|sch",it:"edu|gov",je:"co|net|org",jo:"com|edu|gov|mil|name|net|org|sch",jp:"ac|ad|co|ed|go|gr|lg|ne|or",ke:"ac|co|go|info|me|mobi|ne|or|sc",\n
kh:"com|edu|gov|mil|net|org|per",ki:"biz|com|de|edu|gov|info|mob|net|org|tel",km:"asso|com|coop|edu|gouv|k|medecin|mil|nom|notaires|pharmaciens|presse|tm|veterinaire",kn:"edu|gov|net|org",kr:"ac|busan|chungbuk|chungnam|co|daegu|daejeon|es|gangwon|go|gwangju|gyeongbuk|gyeonggi|gyeongnam|hs|incheon|jeju|jeonbuk|jeonnam|k|kg|mil|ms|ne|or|pe|re|sc|seoul|ulsan",kw:"com|edu|gov|net|org",ky:"com|edu|gov|net|org",kz:"com|edu|gov|mil|net|org",lb:"com|edu|gov|net|org",lk:"assn|com|edu|gov|grp|hotel|int|ltd|net|ngo|org|sch|soc|web",\n
lr:"com|edu|gov|net|org",lv:"asn|com|conf|edu|gov|id|mil|net|org",ly:"com|edu|gov|id|med|net|org|plc|sch",ma:"ac|co|gov|m|net|org|press",mc:"asso|tm",me:"ac|co|edu|gov|its|net|org|priv",mg:"com|edu|gov|mil|nom|org|prd|tm",mk:"com|edu|gov|inf|name|net|org|pro",ml:"com|edu|gov|net|org|presse",mn:"edu|gov|org",mo:"com|edu|gov|net|org",mt:"com|edu|gov|net|org",mv:"aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro",mw:"ac|co|com|coop|edu|gov|int|museum|net|org",mx:"com|edu|gob|net|org",my:"com|edu|gov|mil|name|net|org|sch",\n
nf:"arts|com|firm|info|net|other|per|rec|store|web",ng:"biz|com|edu|gov|mil|mobi|name|net|org|sch",ni:"ac|co|com|edu|gob|mil|net|nom|org",np:"com|edu|gov|mil|net|org",nr:"biz|com|edu|gov|info|net|org",om:"ac|biz|co|com|edu|gov|med|mil|museum|net|org|pro|sch",pe:"com|edu|gob|mil|net|nom|org|sld",ph:"com|edu|gov|i|mil|net|ngo|org",pk:"biz|com|edu|fam|gob|gok|gon|gop|gos|gov|net|org|web",pl:"art|bialystok|biz|com|edu|gda|gdansk|gorzow|gov|info|katowice|krakow|lodz|lublin|mil|net|ngo|olsztyn|org|poznan|pwr|radom|slupsk|szczecin|torun|warszawa|waw|wroc|wroclaw|zgora",\n
pr:"ac|biz|com|edu|est|gov|info|isla|name|net|org|pro|prof",ps:"com|edu|gov|net|org|plo|sec",pw:"belau|co|ed|go|ne|or",ro:"arts|com|firm|info|nom|nt|org|rec|store|tm|www",rs:"ac|co|edu|gov|in|org",sb:"com|edu|gov|net|org",sc:"com|edu|gov|net|org",sh:"co|com|edu|gov|net|nom|org",sl:"com|edu|gov|net|org",st:"co|com|consulado|edu|embaixada|gov|mil|net|org|principe|saotome|store",sv:"com|edu|gob|org|red",sz:"ac|co|org",tr:"av|bbs|bel|biz|com|dr|edu|gen|gov|info|k12|name|net|org|pol|tel|tsk|tv|web",tt:"aero|biz|cat|co|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel",\n
tw:"club|com|ebiz|edu|game|gov|idv|mil|net|org",mu:"ac|co|com|gov|net|or|org",mz:"ac|co|edu|gov|org",na:"co|com",nz:"ac|co|cri|geek|gen|govt|health|iwi|maori|mil|net|org|parliament|school",pa:"abo|ac|com|edu|gob|ing|med|net|nom|org|sld",pt:"com|edu|gov|int|net|nome|org|publ",py:"com|edu|gov|mil|net|org",qa:"com|edu|gov|mil|net|org",re:"asso|com|nom",ru:"ac|adygeya|altai|amur|arkhangelsk|astrakhan|bashkiria|belgorod|bir|bryansk|buryatia|cbg|chel|chelyabinsk|chita|chukotka|chuvashia|com|dagestan|e-burg|edu|gov|grozny|int|irkutsk|ivanovo|izhevsk|jar|joshkar-ola|kalmykia|kaluga|kamchatka|karelia|kazan|kchr|kemerovo|khabarovsk|khakassia|khv|kirov|koenig|komi|kostroma|kranoyarsk|kuban|kurgan|kursk|lipetsk|magadan|mari|mari-el|marine|mil|mordovia|mosreg|msk|murmansk|nalchik|net|nnov|nov|novosibirsk|nsk|omsk|orenburg|org|oryol|penza|perm|pp|pskov|ptz|rnd|ryazan|sakhalin|samara|saratov|simbirsk|smolensk|spb|stavropol|stv|surgut|tambov|tatarstan|tom|tomsk|tsaritsyn|tsk|tula|tuva|tver|tyumen|udm|udmurtia|ulan-ude|vladikavkaz|vladimir|vladivostok|volgograd|vologda|voronezh|vrn|vyatka|yakutia|yamal|yekaterinburg|yuzhno-sakhalinsk",\n
rw:"ac|co|com|edu|gouv|gov|int|mil|net",sa:"com|edu|gov|med|net|org|pub|sch",sd:"com|edu|gov|info|med|net|org|tv",se:"a|ac|b|bd|c|d|e|f|g|h|i|k|l|m|n|o|org|p|parti|pp|press|r|s|t|tm|u|w|x|y|z",sg:"com|edu|gov|idn|net|org|per",sn:"art|com|edu|gouv|org|perso|univ",sy:"com|edu|gov|mil|net|news|org",th:"ac|co|go|in|mi|net|or",tj:"ac|biz|co|com|edu|go|gov|info|int|mil|name|net|nic|org|test|web",tn:"agrinet|com|defense|edunet|ens|fin|gov|ind|info|intl|mincom|nat|net|org|perso|rnrt|rns|rnu|tourism",tz:"ac|co|go|ne|or",\n
ua:"biz|cherkassy|chernigov|chernovtsy|ck|cn|co|com|crimea|cv|dn|dnepropetrovsk|donetsk|dp|edu|gov|if|in|ivano-frankivsk|kh|kharkov|kherson|khmelnitskiy|kiev|kirovograd|km|kr|ks|kv|lg|lugansk|lutsk|lviv|me|mk|net|nikolaev|od|odessa|org|pl|poltava|pp|rovno|rv|sebastopol|sumy|te|ternopil|uzhgorod|vinnica|vn|zaporizhzhe|zhitomir|zp|zt",ug:"ac|co|go|ne|or|org|sc",uk:"ac|bl|british-library|co|cym|gov|govt|icnet|jet|lea|ltd|me|mil|mod|national-library-scotland|nel|net|nhs|nic|nls|org|orgn|parliament|plc|police|sch|scot|soc",\n
us:"dni|fed|isa|kids|nsn",uy:"com|edu|gub|mil|net|org",ve:"co|com|edu|gob|info|mil|net|org|web",vi:"co|com|k12|net|org",vn:"ac|biz|com|edu|gov|health|info|int|name|net|org|pro",ye:"co|com|gov|ltd|me|net|org|plc",yu:"ac|co|edu|gov|org",za:"ac|agric|alt|bourse|city|co|cybernet|db|edu|gov|grondar|iaccess|imt|inca|landesign|law|mil|net|ngo|nis|nom|olivetti|org|pix|school|tm|web",zm:"ac|co|com|edu|gov|net|org|sch"},has_expression:null,is_expression:null,has:function(d){return!!d.match(m.has_expression)},\n
is:function(d){return!!d.match(m.is_expression)},get:function(d){return(d=d.match(m.has_expression))&&d[1]||null},noConflict:function(){e.SecondLevelDomains===this&&(e.SecondLevelDomains=k);return this},init:function(){var d="",e;for(e in m.list)u.call(m.list,e)&&(d+="|("+("("+m.list[e]+")."+e)+")");m.has_expression=RegExp("\\\\.("+d.substr(1)+")$","i");m.is_expression=RegExp("^("+d.substr(1)+")$","i")}};m.init();return m});\n
(function(e,k){"object"===typeof exports?module.exports=k(require("./punycode"),require("./IPv6"),require("./SecondLevelDomains")):"function"===typeof define&&define.amd?define(["./punycode","./IPv6","./SecondLevelDomains"],k):e.URI=k(e.punycode,e.IPv6,e.SecondLevelDomains,e)})(this,function(e,k,u,m){function d(a,b){if(!(this instanceof d))return new d(a,b);void 0===a&&(a="undefined"!==typeof location?location.href+"":"");this.href(a);return void 0!==b?this.absoluteTo(b):this}function g(a){return a.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g,\n
"\\\\$1")}function q(a){return void 0===a?"Undefined":String(Object.prototype.toString.call(a)).slice(8,-1)}function l(a){return"Array"===q(a)}function r(a,b){var c,d;if(l(b)){c=0;for(d=b.length;c<d;c++)if(!r(a,b[c]))return!1;return!0}var p=q(b);c=0;for(d=a.length;c<d;c++)if("RegExp"===p){if("string"===typeof a[c]&&a[c].match(b))return!0}else if(a[c]===b)return!0;return!1}function z(a,b){if(!l(a)||!l(b)||a.length!==b.length)return!1;a.sort();b.sort();for(var c=0,d=a.length;c<d;c++)if(a[c]!==b[c])return!1;\n
return!0}function D(a){return escape(a)}function E(a){return encodeURIComponent(a).replace(/[!\'()*]/g,D).replace(/\\*/g,"%2A")}var C=m&&m.URI;d.version="1.12.0";var f=d.prototype,w=Object.prototype.hasOwnProperty;d._parts=function(){return{protocol:null,username:null,password:null,hostname:null,urn:null,port:null,path:null,query:null,fragment:null,duplicateQueryParameters:d.duplicateQueryParameters,escapeQuerySpace:d.escapeQuerySpace}};d.duplicateQueryParameters=!1;d.escapeQuerySpace=!0;d.protocol_expression=\n
/^[a-z][a-z0-9.+-]*$/i;d.idn_expression=/[^a-z0-9\\.-]/i;d.punycode_expression=/(xn--)/i;d.ip4_expression=/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;d.ip6_expression=/^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/;\n
d.find_uri_expression=/\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'".,<>?\\u00ab\\u00bb\\u201c\\u201d\\u2018\\u2019]))/ig;d.findUri={start:/\\b(?:([a-z][a-z0-9.+-]*:\\/\\/)|www\\.)/gi,end:/[\\s\\r\\n]|$/,trim:/[`!()\\[\\]{};:\'".,<>?\\u00ab\\u00bb\\u201c\\u201d\\u201e\\u2018\\u2019]+$/};d.defaultPorts={http:"80",https:"443",ftp:"21",gopher:"70",ws:"80",wss:"443"};d.invalid_hostname_characters=\n
/[^a-zA-Z0-9\\.-]/;d.domAttributes={a:"href",blockquote:"cite",link:"href",base:"href",script:"src",form:"action",img:"src",area:"href",iframe:"src",embed:"src",source:"src",track:"src",input:"src"};d.getDomAttribute=function(a){if(a&&a.nodeName){var b=a.nodeName.toLowerCase();return"input"===b&&"image"!==a.type?void 0:d.domAttributes[b]}};d.encode=E;d.decode=decodeURIComponent;d.iso8859=function(){d.encode=escape;d.decode=unescape};d.unicode=function(){d.encode=E;d.decode=decodeURIComponent};d.characters=\n
{pathname:{encode:{expression:/%(24|26|2B|2C|3B|3D|3A|40)/ig,map:{"%24":"$","%26":"&","%2B":"+","%2C":",","%3B":";","%3D":"=","%3A":":","%40":"@"}},decode:{expression:/[\\/\\?#]/g,map:{"/":"%2F","?":"%3F","#":"%23"}}},reserved:{encode:{expression:/%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,map:{"%3A":":","%2F":"/","%3F":"?","%23":"#","%5B":"[","%5D":"]","%40":"@","%21":"!","%24":"$","%26":"&","%27":"\'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"="}}}};d.encodeQuery=\n
function(a,b){var c=d.encode(a+"");return b?c.replace(/%20/g,"+"):c};d.decodeQuery=function(a,b){a+="";try{return d.decode(b?a.replace(/\\+/g,"%20"):a)}catch(c){return a}};d.recodePath=function(a){a=(a+"").split("/");for(var b=0,c=a.length;b<c;b++)a[b]=d.encodePathSegment(d.decode(a[b]));return a.join("/")};d.decodePath=function(a){a=(a+"").split("/");for(var b=0,c=a.length;b<c;b++)a[b]=d.decodePathSegment(a[b]);return a.join("/")};var s={encode:"encode",decode:"decode"},v,y=function(a,b){return function(c){return d[b](c+\n
"").replace(d.characters[a][b].expression,function(c){return d.characters[a][b].map[c]})}};for(v in s)d[v+"PathSegment"]=y("pathname",s[v]);d.encodeReserved=y("reserved","encode");d.parse=function(a,b){var c;b||(b={});c=a.indexOf("#");-1<c&&(b.fragment=a.substring(c+1)||null,a=a.substring(0,c));c=a.indexOf("?");-1<c&&(b.query=a.substring(c+1)||null,a=a.substring(0,c));"//"===a.substring(0,2)?(b.protocol=null,a=a.substring(2),a=d.parseAuthority(a,b)):(c=a.indexOf(":"),-1<c&&(b.protocol=a.substring(0,\n
c)||null,b.protocol&&!b.protocol.match(d.protocol_expression)?b.protocol=void 0:"file"===b.protocol?a=a.substring(c+3):"//"===a.substring(c+1,c+3)?(a=a.substring(c+3),a=d.parseAuthority(a,b)):(a=a.substring(c+1),b.urn=!0)));b.path=a;return b};d.parseHost=function(a,b){var c=a.indexOf("/"),d;-1===c&&(c=a.length);"["===a.charAt(0)?(d=a.indexOf("]"),b.hostname=a.substring(1,d)||null,b.port=a.substring(d+2,c)||null):a.indexOf(":")!==a.lastIndexOf(":")?(b.hostname=a.substring(0,c)||null,b.port=null):(d=\n
a.substring(0,c).split(":"),b.hostname=d[0]||null,b.port=d[1]||null);b.hostname&&"/"!==a.substring(c).charAt(0)&&(c++,a="/"+a);return a.substring(c)||"/"};d.parseAuthority=function(a,b){a=d.parseUserinfo(a,b);return d.parseHost(a,b)};d.parseUserinfo=function(a,b){var c=a.indexOf("/"),h=-1<c?a.lastIndexOf("@",c):a.indexOf("@");-1<h&&(-1===c||h<c)?(c=a.substring(0,h).split(":"),b.username=c[0]?d.decode(c[0]):null,c.shift(),b.password=c[0]?d.decode(c.join(":")):null,a=a.substring(h+1)):(b.username=null,\n
b.password=null);return a};d.parseQuery=function(a,b){if(!a)return{};a=a.replace(/&+/g,"&").replace(/^\\?*&*|&+$/g,"");if(!a)return{};for(var c={},h=a.split("&"),p=h.length,n,e,f=0;f<p;f++)n=h[f].split("="),e=d.decodeQuery(n.shift(),b),n=n.length?d.decodeQuery(n.join("="),b):null,c[e]?("string"===typeof c[e]&&(c[e]=[c[e]]),c[e].push(n)):c[e]=n;return c};d.build=function(a){var b="";a.protocol&&(b+=a.protocol+":");a.urn||!b&&!a.hostname||(b+="//");b+=d.buildAuthority(a)||"";"string"===typeof a.path&&\n
("/"!==a.path.charAt(0)&&"string"===typeof a.hostname&&(b+="/"),b+=a.path);"string"===typeof a.query&&a.query&&(b+="?"+a.query);"string"===typeof a.fragment&&a.fragment&&(b+="#"+a.fragment);return b};d.buildHost=function(a){var b="";if(a.hostname)d.ip6_expression.test(a.hostname)?b=a.port?b+("["+a.hostname+"]:"+a.port):b+a.hostname:(b+=a.hostname,a.port&&(b+=":"+a.port));else return"";return b};d.buildAuthority=function(a){return d.buildUserinfo(a)+d.buildHost(a)};d.buildUserinfo=function(a){var b=\n
"";a.username&&(b+=d.encode(a.username),a.password&&(b+=":"+d.encode(a.password)),b+="@");return b};d.buildQuery=function(a,b,c){var h="",p,e,f,k;for(e in a)if(w.call(a,e)&&e)if(l(a[e]))for(p={},f=0,k=a[e].length;f<k;f++)void 0!==a[e][f]&&void 0===p[a[e][f]+""]&&(h+="&"+d.buildQueryParameter(e,a[e][f],c),!0!==b&&(p[a[e][f]+""]=!0));else void 0!==a[e]&&(h+="&"+d.buildQueryParameter(e,a[e],c));return h.substring(1)};d.buildQueryParameter=function(a,b,c){return d.encodeQuery(a,c)+(null!==b?"="+d.encodeQuery(b,\n
c):"")};d.addQuery=function(a,b,c){if("object"===typeof b)for(var h in b)w.call(b,h)&&d.addQuery(a,h,b[h]);else if("string"===typeof b)void 0===a[b]?a[b]=c:("string"===typeof a[b]&&(a[b]=[a[b]]),l(c)||(c=[c]),a[b]=a[b].concat(c));else throw new TypeError("URI.addQuery() accepts an object, string as the name parameter");};d.removeQuery=function(a,b,c){var h;if(l(b))for(c=0,h=b.length;c<h;c++)a[b[c]]=void 0;else if("object"===typeof b)for(h in b)w.call(b,h)&&d.removeQuery(a,h,b[h]);else if("string"===\n
typeof b)if(void 0!==c)if(a[b]===c)a[b]=void 0;else{if(l(a[b])){h=a[b];var p={},e,f;if(l(c))for(e=0,f=c.length;e<f;e++)p[c[e]]=!0;else p[c]=!0;e=0;for(f=h.length;e<f;e++)void 0!==p[h[e]]&&(h.splice(e,1),f--,e--);a[b]=h}}else a[b]=void 0;else throw new TypeError("URI.addQuery() accepts an object, string as the first parameter");};d.hasQuery=function(a,b,c,h){if("object"===typeof b){for(var e in b)if(w.call(b,e)&&!d.hasQuery(a,e,b[e]))return!1;return!0}if("string"!==typeof b)throw new TypeError("URI.hasQuery() accepts an object, string as the name parameter");\n
switch(q(c)){case "Undefined":return b in a;case "Boolean":return a=Boolean(l(a[b])?a[b].length:a[b]),c===a;case "Function":return!!c(a[b],b,a);case "Array":return l(a[b])?(h?r:z)(a[b],c):!1;case "RegExp":return l(a[b])?h?r(a[b],c):!1:Boolean(a[b]&&a[b].match(c));case "Number":c=String(c);case "String":return l(a[b])?h?r(a[b],c):!1:a[b]===c;default:throw new TypeError("URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter");}};d.commonPath=function(a,b){var c=\n
Math.min(a.length,b.length),d;for(d=0;d<c;d++)if(a.charAt(d)!==b.charAt(d)){d--;break}if(1>d)return a.charAt(0)===b.charAt(0)&&"/"===a.charAt(0)?"/":"";if("/"!==a.charAt(d)||"/"!==b.charAt(d))d=a.substring(0,d).lastIndexOf("/");return a.substring(0,d+1)};d.withinString=function(a,b,c){c||(c={});var h=c.start||d.findUri.start,e=c.end||d.findUri.end,f=c.trim||d.findUri.trim,k=/[a-z0-9-]=["\']?$/i;for(h.lastIndex=0;;){var g=h.exec(a);if(!g)break;g=g.index;if(c.ignoreHtml){var l=a.slice(Math.max(g-3,0),\n
g);if(l&&k.test(l))continue}var l=g+a.slice(g).search(e),q=a.slice(g,l).replace(f,"");c.ignore&&c.ignore.test(q)||(l=g+q.length,q=b(q,g,l,a),a=a.slice(0,g)+q+a.slice(l),h.lastIndex=g+q.length)}h.lastIndex=0;return a};d.ensureValidHostname=function(a){if(a.match(d.invalid_hostname_characters)){if(!e)throw new TypeError("Hostname \'"+a+"\' contains characters other than [A-Z0-9.-] and Punycode.js is not available");if(e.toASCII(a).match(d.invalid_hostname_characters))throw new TypeError("Hostname \'"+\n
a+"\' contains characters other than [A-Z0-9.-]");}};d.noConflict=function(a){if(a)return a={URI:this.noConflict()},URITemplate&&"function"==typeof URITemplate.noConflict&&(a.URITemplate=URITemplate.noConflict()),k&&"function"==typeof k.noConflict&&(a.IPv6=k.noConflict()),SecondLevelDomains&&"function"==typeof SecondLevelDomains.noConflict&&(a.SecondLevelDomains=SecondLevelDomains.noConflict()),a;m.URI===this&&(m.URI=C);return this};f.build=function(a){if(!0===a)this._deferred_build=!0;else if(void 0===\n
a||this._deferred_build)this._string=d.build(this._parts),this._deferred_build=!1;return this};f.clone=function(){return new d(this)};f.valueOf=f.toString=function(){return this.build(!1)._string};s={protocol:"protocol",username:"username",password:"password",hostname:"hostname",port:"port"};y=function(a){return function(b,c){if(void 0===b)return this._parts[a]||"";this._parts[a]=b||null;this.build(!c);return this}};for(v in s)f[v]=y(s[v]);s={query:"?",fragment:"#"};y=function(a,b){return function(c,\n
d){if(void 0===c)return this._parts[a]||"";null!==c&&(c+="",c.charAt(0)===b&&(c=c.substring(1)));this._parts[a]=c;this.build(!d);return this}};for(v in s)f[v]=y(v,s[v]);s={search:["?","query"],hash:["#","fragment"]};y=function(a,b){return function(c,d){var e=this[a](c,d);return"string"===typeof e&&e.length?b+e:e}};for(v in s)f[v]=y(s[v][1],s[v][0]);f.pathname=function(a,b){if(void 0===a||!0===a){var c=this._parts.path||(this._parts.hostname?"/":"");return a?d.decodePath(c):c}this._parts.path=a?d.recodePath(a):\n
"/";this.build(!b);return this};f.path=f.pathname;f.href=function(a,b){var c;if(void 0===a)return this.toString();this._string="";this._parts=d._parts();var h=a instanceof d,e="object"===typeof a&&(a.hostname||a.path||a.pathname);a.nodeName&&(e=d.getDomAttribute(a),a=a[e]||"",e=!1);!h&&e&&void 0!==a.pathname&&(a=a.toString());if("string"===typeof a)this._parts=d.parse(a,this._parts);else if(h||e)for(c in h=h?a._parts:a,h)w.call(this._parts,c)&&(this._parts[c]=h[c]);else throw new TypeError("invalid input");\n
this.build(!b);return this};f.is=function(a){var b=!1,c=!1,h=!1,e=!1,f=!1,g=!1,k=!1,l=!this._parts.urn;this._parts.hostname&&(l=!1,c=d.ip4_expression.test(this._parts.hostname),h=d.ip6_expression.test(this._parts.hostname),b=c||h,f=(e=!b)&&u&&u.has(this._parts.hostname),g=e&&d.idn_expression.test(this._parts.hostname),k=e&&d.punycode_expression.test(this._parts.hostname));switch(a.toLowerCase()){case "relative":return l;case "absolute":return!l;case "domain":case "name":return e;case "sld":return f;\n
case "ip":return b;case "ip4":case "ipv4":case "inet4":return c;case "ip6":case "ipv6":case "inet6":return h;case "idn":return g;case "url":return!this._parts.urn;case "urn":return!!this._parts.urn;case "punycode":return k}return null};var I=f.protocol,H=f.port,G=f.hostname;f.protocol=function(a,b){if(void 0!==a&&a&&(a=a.replace(/:(\\/\\/)?$/,""),!a.match(d.protocol_expression)))throw new TypeError("Protocol \'"+a+"\' contains characters other than [A-Z0-9.+-] or doesn\'t start with [A-Z]");return I.call(this,\n
a,b)};f.scheme=f.protocol;f.port=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0!==a&&(0===a&&(a=null),a&&(a+="",":"===a.charAt(0)&&(a=a.substring(1)),a.match(/[^0-9]/))))throw new TypeError("Port \'"+a+"\' contains characters other than [0-9]");return H.call(this,a,b)};f.hostname=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0!==a){var c={};d.parseHost(a,c);a=c.hostname}return G.call(this,a,b)};f.host=function(a,b){if(this._parts.urn)return void 0===a?"":this;\n
if(void 0===a)return this._parts.hostname?d.buildHost(this._parts):"";d.parseHost(a,this._parts);this.build(!b);return this};f.authority=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0===a)return this._parts.hostname?d.buildAuthority(this._parts):"";d.parseAuthority(a,this._parts);this.build(!b);return this};f.userinfo=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0===a){if(!this._parts.username)return"";var c=d.buildUserinfo(this._parts);return c.substring(0,\n
c.length-1)}"@"!==a[a.length-1]&&(a+="@");d.parseUserinfo(a,this._parts);this.build(!b);return this};f.resource=function(a,b){var c;if(void 0===a)return this.path()+this.search()+this.hash();c=d.parse(a);this._parts.path=c.path;this._parts.query=c.query;this._parts.fragment=c.fragment;this.build(!b);return this};f.subdomain=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0===a){if(!this._parts.hostname||this.is("IP"))return"";var c=this._parts.hostname.length-this.domain().length-\n
1;return this._parts.hostname.substring(0,c)||""}c=this._parts.hostname.length-this.domain().length;c=this._parts.hostname.substring(0,c);c=RegExp("^"+g(c));a&&"."!==a.charAt(a.length-1)&&(a+=".");a&&d.ensureValidHostname(a);this._parts.hostname=this._parts.hostname.replace(c,a);this.build(!b);return this};f.domain=function(a,b){if(this._parts.urn)return void 0===a?"":this;"boolean"===typeof a&&(b=a,a=void 0);if(void 0===a){if(!this._parts.hostname||this.is("IP"))return"";var c=this._parts.hostname.match(/\\./g);\n
if(c&&2>c.length)return this._parts.hostname;c=this._parts.hostname.length-this.tld(b).length-1;c=this._parts.hostname.lastIndexOf(".",c-1)+1;return this._parts.hostname.substring(c)||""}if(!a)throw new TypeError("cannot set domain empty");d.ensureValidHostname(a);!this._parts.hostname||this.is("IP")?this._parts.hostname=a:(c=RegExp(g(this.domain())+"$"),this._parts.hostname=this._parts.hostname.replace(c,a));this.build(!b);return this};f.tld=function(a,b){if(this._parts.urn)return void 0===a?"":\n
this;"boolean"===typeof a&&(b=a,a=void 0);if(void 0===a){if(!this._parts.hostname||this.is("IP"))return"";var c=this._parts.hostname.lastIndexOf("."),c=this._parts.hostname.substring(c+1);return!0!==b&&u&&u.list[c.toLowerCase()]?u.get(this._parts.hostname)||c:c}if(a)if(a.match(/[^a-zA-Z0-9-]/))if(u&&u.is(a))c=RegExp(g(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(c,a);else throw new TypeError("TLD \'"+a+"\' contains characters other than [A-Z0-9]");else{if(!this._parts.hostname||\n
this.is("IP"))throw new ReferenceError("cannot set TLD on non-domain host");c=RegExp(g(this.tld())+"$");this._parts.hostname=this._parts.hostname.replace(c,a)}else throw new TypeError("cannot set TLD empty");this.build(!b);return this};f.directory=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0===a||!0===a){if(!this._parts.path&&!this._parts.hostname)return"";if("/"===this._parts.path)return"/";var c=this._parts.path.length-this.filename().length-1,c=this._parts.path.substring(0,\n
c)||(this._parts.hostname?"/":"");return a?d.decodePath(c):c}c=this._parts.path.length-this.filename().length;c=this._parts.path.substring(0,c);c=RegExp("^"+g(c));this.is("relative")||(a||(a="/"),"/"!==a.charAt(0)&&(a="/"+a));a&&"/"!==a.charAt(a.length-1)&&(a+="/");a=d.recodePath(a);this._parts.path=this._parts.path.replace(c,a);this.build(!b);return this};f.filename=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0===a||!0===a){if(!this._parts.path||"/"===this._parts.path)return"";\n
var c=this._parts.path.lastIndexOf("/"),c=this._parts.path.substring(c+1);return a?d.decodePathSegment(c):c}c=!1;"/"===a.charAt(0)&&(a=a.substring(1));a.match(/\\.?\\//)&&(c=!0);var h=RegExp(g(this.filename())+"$");a=d.recodePath(a);this._parts.path=this._parts.path.replace(h,a);c?this.normalizePath(b):this.build(!b);return this};f.suffix=function(a,b){if(this._parts.urn)return void 0===a?"":this;if(void 0===a||!0===a){if(!this._parts.path||"/"===this._parts.path)return"";var c=this.filename(),h=c.lastIndexOf(".");\n
if(-1===h)return"";c=c.substring(h+1);c=/^[a-z0-9%]+$/i.test(c)?c:"";return a?d.decodePathSegment(c):c}"."===a.charAt(0)&&(a=a.substring(1));if(c=this.suffix())h=a?RegExp(g(c)+"$"):RegExp(g("."+c)+"$");else{if(!a)return this;this._parts.path+="."+d.recodePath(a)}h&&(a=d.recodePath(a),this._parts.path=this._parts.path.replace(h,a));this.build(!b);return this};f.segment=function(a,b,c){var d=this._parts.urn?":":"/",e=this.path(),f="/"===e.substring(0,1),e=e.split(d);void 0!==a&&"number"!==typeof a&&\n
(c=b,b=a,a=void 0);if(void 0!==a&&"number"!==typeof a)throw Error("Bad segment \'"+a+"\', must be 0-based integer");f&&e.shift();0>a&&(a=Math.max(e.length+a,0));if(void 0===b)return void 0===a?e:e[a];if(null===a||void 0===e[a])if(l(b)){e=[];a=0;for(var g=b.length;a<g;a++)if(b[a].length||e.length&&e[e.length-1].length)e.length&&!e[e.length-1].length&&e.pop(),e.push(b[a])}else{if(b||"string"===typeof b)""===e[e.length-1]?e[e.length-1]=b:e.push(b)}else b||"string"===typeof b&&b.length?e[a]=b:e.splice(a,\n
1);f&&e.unshift("");return this.path(e.join(d),c)};f.segmentCoded=function(a,b,c){var e,f;"number"!==typeof a&&(c=b,b=a,a=void 0);if(void 0===b){a=this.segment(a,b,c);if(l(a))for(e=0,f=a.length;e<f;e++)a[e]=d.decode(a[e]);else a=void 0!==a?d.decode(a):void 0;return a}if(l(b))for(e=0,f=b.length;e<f;e++)b[e]=d.decode(b[e]);else b="string"===typeof b?d.encode(b):b;return this.segment(a,b,c)};var F=f.query;f.query=function(a,b){if(!0===a)return d.parseQuery(this._parts.query,this._parts.escapeQuerySpace);\n
if("function"===typeof a){var c=d.parseQuery(this._parts.query,this._parts.escapeQuerySpace),e=a.call(this,c);this._parts.query=d.buildQuery(e||c,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace);this.build(!b);return this}return void 0!==a&&"string"!==typeof a?(this._parts.query=d.buildQuery(a,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),this.build(!b),this):F.call(this,a,b)};f.setQuery=function(a,b,c){var e=d.parseQuery(this._parts.query,this._parts.escapeQuerySpace);\n
if("object"===typeof a)for(var f in a)w.call(a,f)&&(e[f]=a[f]);else if("string"===typeof a)e[a]=void 0!==b?b:null;else throw new TypeError("URI.addQuery() accepts an object, string as the name parameter");this._parts.query=d.buildQuery(e,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace);"string"!==typeof a&&(c=b);this.build(!c);return this};f.addQuery=function(a,b,c){var e=d.parseQuery(this._parts.query,this._parts.escapeQuerySpace);d.addQuery(e,a,void 0===b?null:b);this._parts.query=\n
d.buildQuery(e,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace);"string"!==typeof a&&(c=b);this.build(!c);return this};f.removeQuery=function(a,b,c){var e=d.parseQuery(this._parts.query,this._parts.escapeQuerySpace);d.removeQuery(e,a,b);this._parts.query=d.buildQuery(e,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace);"string"!==typeof a&&(c=b);this.build(!c);return this};f.hasQuery=function(a,b,c){var e=d.parseQuery(this._parts.query,this._parts.escapeQuerySpace);\n
return d.hasQuery(e,a,b,c)};f.setSearch=f.setQuery;f.addSearch=f.addQuery;f.removeSearch=f.removeQuery;f.hasSearch=f.hasQuery;f.normalize=function(){return this._parts.urn?this.normalizeProtocol(!1).normalizeQuery(!1).normalizeFragment(!1).build():this.normalizeProtocol(!1).normalizeHostname(!1).normalizePort(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build()};f.normalizeProtocol=function(a){"string"===typeof this._parts.protocol&&(this._parts.protocol=this._parts.protocol.toLowerCase(),\n
this.build(!a));return this};f.normalizeHostname=function(a){this._parts.hostname&&(this.is("IDN")&&e?this._parts.hostname=e.toASCII(this._parts.hostname):this.is("IPv6")&&k&&(this._parts.hostname=k.best(this._parts.hostname)),this._parts.hostname=this._parts.hostname.toLowerCase(),this.build(!a));return this};f.normalizePort=function(a){"string"===typeof this._parts.protocol&&this._parts.port===d.defaultPorts[this._parts.protocol]&&(this._parts.port=null,this.build(!a));return this};f.normalizePath=\n
function(a){if(this._parts.urn||!this._parts.path||"/"===this._parts.path)return this;var b,c=this._parts.path,e="",f,g;"/"!==c.charAt(0)&&(b=!0,c="/"+c);c=c.replace(/(\\/(\\.\\/)+)|(\\/\\.$)/g,"/").replace(/\\/{2,}/g,"/");b&&(e=c.substring(1).match(/^(\\.\\.\\/)+/)||"")&&(e=e[0]);for(;;){f=c.indexOf("/..");if(-1===f)break;else if(0===f){c=c.substring(3);continue}g=c.substring(0,f).lastIndexOf("/");-1===g&&(g=f);c=c.substring(0,g)+c.substring(f+3)}b&&this.is("relative")&&(c=e+c.substring(1));c=d.recodePath(c);\n
this._parts.path=c;this.build(!a);return this};f.normalizePathname=f.normalizePath;f.normalizeQuery=function(a){"string"===typeof this._parts.query&&(this._parts.query.length?this.query(d.parseQuery(this._parts.query,this._parts.escapeQuerySpace)):this._parts.query=null,this.build(!a));return this};f.normalizeFragment=function(a){this._parts.fragment||(this._parts.fragment=null,this.build(!a));return this};f.normalizeSearch=f.normalizeQuery;f.normalizeHash=f.normalizeFragment;f.iso8859=function(){var a=\n
d.encode,b=d.decode;d.encode=escape;d.decode=decodeURIComponent;this.normalize();d.encode=a;d.decode=b;return this};f.unicode=function(){var a=d.encode,b=d.decode;d.encode=E;d.decode=unescape;this.normalize();d.encode=a;d.decode=b;return this};f.readable=function(){var a=this.clone();a.username("").password("").normalize();var b="";a._parts.protocol&&(b+=a._parts.protocol+"://");a._parts.hostname&&(a.is("punycode")&&e?(b+=e.toUnicode(a._parts.hostname),a._parts.port&&(b+=":"+a._parts.port)):b+=a.host());\n
a._parts.hostname&&a._parts.path&&"/"!==a._parts.path.charAt(0)&&(b+="/");b+=a.path(!0);if(a._parts.query){for(var c="",f=0,g=a._parts.query.split("&"),k=g.length;f<k;f++){var l=(g[f]||"").split("="),c=c+("&"+d.decodeQuery(l[0],this._parts.escapeQuerySpace).replace(/&/g,"%26"));void 0!==l[1]&&(c+="="+d.decodeQuery(l[1],this._parts.escapeQuerySpace).replace(/&/g,"%26"))}b+="?"+c.substring(1)}return b+=d.decodeQuery(a.hash(),!0)};f.absoluteTo=function(a){var b=this.clone(),c=["protocol","username",\n
"password","hostname","port"],e,f;if(this._parts.urn)throw Error("URNs do not have any generally defined hierarchical components");a instanceof d||(a=new d(a));b._parts.protocol||(b._parts.protocol=a._parts.protocol);if(this._parts.hostname)return b;for(e=0;f=c[e];e++)b._parts[f]=a._parts[f];b._parts.path?".."===b._parts.path.substring(-2)&&(b._parts.path+="/"):(b._parts.path=a._parts.path,b._parts.query||(b._parts.query=a._parts.query));"/"!==b.path().charAt(0)&&(a=a.directory(),b._parts.path=(a?\n
a+"/":"")+b._parts.path,b.normalizePath());b.build();return b};f.relativeTo=function(a){var b=this.clone().normalize(),c,e,f,g;if(b._parts.urn)throw Error("URNs do not have any generally defined hierarchical components");a=(new d(a)).normalize();c=b._parts;e=a._parts;f=b.path();g=a.path();if("/"!==f.charAt(0))throw Error("URI is already relative");if("/"!==g.charAt(0))throw Error("Cannot calculate a URI relative to another relative URI");c.protocol===e.protocol&&(c.protocol=null);if(c.username===\n
e.username&&c.password===e.password&&null===c.protocol&&null===c.username&&null===c.password&&c.hostname===e.hostname&&c.port===e.port)c.hostname=null,c.port=null;else return b.build();if(f===g)return c.path="",b.build();a=d.commonPath(b.path(),a.path());if(!a)return b.build();e=e.path.substring(a.length).replace(/[^\\/]*$/,"").replace(/.*?\\//g,"../");c.path=e+c.path.substring(a.length);return b.build()};f.equals=function(a){var b=this.clone();a=new d(a);var c={},e={},f={},g;b.normalize();a.normalize();\n
if(b.toString()===a.toString())return!0;c=b.query();e=a.query();b.query("");a.query("");if(b.toString()!==a.toString()||c.length!==e.length)return!1;c=d.parseQuery(c,this._parts.escapeQuerySpace);e=d.parseQuery(e,this._parts.escapeQuerySpace);for(g in c)if(w.call(c,g)){if(!l(c[g])){if(c[g]!==e[g])return!1}else if(!z(c[g],e[g]))return!1;f[g]=!0}for(g in e)if(w.call(e,g)&&!f[g])return!1;return!0};f.duplicateQueryParameters=function(a){this._parts.duplicateQueryParameters=!!a;return this};f.escapeQuerySpace=\n
function(a){this._parts.escapeQuerySpace=!!a;return this};return d});\n
(function(e,k){"object"===typeof exports?module.exports=k(require("./URI")):"function"===typeof define&&define.amd?define(["./URI"],k):k(e.URI)})(this,function(e){var k=e.prototype,u=k.fragment;e.fragmentPrefix="?";var m=e._parts;e._parts=function(){var d=m();d.fragmentPrefix=e.fragmentPrefix;return d};k.fragmentPrefix=function(d){this._parts.fragmentPrefix=d;return this};k.fragment=function(d,g){var k=this._parts.fragmentPrefix,l=this._parts.fragment||"";return!0===d?l.substring(0,k.length)!==k?\n
{}:e.parseQuery(l.substring(k.length)):void 0!==d&&"string"!==typeof d?(this._parts.fragment=k+e.buildQuery(d),this.build(!g),this):u.call(this,d,g)};k.addFragment=function(d,g,k){var l=this._parts.fragmentPrefix,m=e.parseQuery((this._parts.fragment||"").substring(l.length));e.addQuery(m,d,g);this._parts.fragment=l+e.buildQuery(m);"string"!==typeof d&&(k=g);this.build(!k);return this};k.removeFragment=function(d,g,k){var l=this._parts.fragmentPrefix,m=e.parseQuery((this._parts.fragment||"").substring(l.length));\n
e.removeQuery(m,d,g);this._parts.fragment=l+e.buildQuery(m);"string"!==typeof d&&(k=g);this.build(!k);return this};k.addHash=k.addFragment;k.removeHash=k.removeFragment;return{}});
]]></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>URI.js</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>1.12.0</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1406898405.52</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>936.8892.34577.7731</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405933454.59</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405086440.08</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
......@@ -102,7 +102,7 @@
<value> <string encoding="cdata"><![CDATA[
CACHE MANIFEST\n
# generated on Mon, 06 Oct 2014 15:03:33 +0000\n
# generated on Wed, 04 Feb 2015 16:31:07 +0000\n
# XXX + fonts\n
# images/ajax-loader.gif\n
CACHE:\n
......@@ -112,8 +112,6 @@ https://netdna.bootstrapcdn.com/font-awesome/4.0.3/fonts/fontawesome-webfont.eot
https://netdna.bootstrapcdn.com/font-awesome/4.0.3/fonts/fontawesome-webfont.woff?v=4.0.3\n
https://netdna.bootstrapcdn.com/font-awesome/4.0.3/fonts/fontawesome-webfont.ttf?v=4.0.3\n
https://netdna.bootstrapcdn.com/font-awesome/4.0.3/fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular\n
rsvp.js\n
URI.js\n
codemirror.css\n
codemirror.js\n
codemirror_addon_dialog.css\n
......@@ -138,6 +136,8 @@ gadget_erp5.html\n
gadget_erp5.js\n
gadget_erp5_field_float.html\n
gadget_erp5_field_float.js\n
gadget_erp5_field_gadget.html\n
gadget_erp5_field_gadget.js\n
gadget_erp5_field_list.html\n
gadget_erp5_field_list.js\n
gadget_erp5_field_listbox.html\n
......@@ -148,8 +148,6 @@ gadget_erp5_field_string.html\n
gadget_erp5_field_string.js\n
gadget_erp5_field_textarea.html\n
gadget_erp5_field_textarea.js\n
gadget_erp5_field_gadget.html\n
gadget_erp5_field_gadget.js\n
gadget_erp5_form.html\n
gadget_erp5_form.js\n
gadget_erp5_header.html\n
......@@ -182,18 +180,16 @@ gadget_erp5_searchfield.js\n
gadget_global.js\n
gadget_jio.html\n
gadget_jio.js\n
gadget_translate.html\n
gadget_translate.js\n
handlebars.js\n
jio.js\n
jio_complex_queries.js\n
jio_sha1.amd.js\n
jio_sha2.amd.js\n
jio_sha256.amd.js\n
jio_storage_erp5.js\n
i18next.js\n
jiodev.js\n
jquery.js\n
jquerymobile.css\n
jquerymobile.js\n
renderjs.js\n
uritemplate.js\n
rsvp.js\n
NETWORK:\n
*
......@@ -259,7 +255,7 @@ NETWORK:\n
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -281,7 +277,7 @@ NETWORK:\n
</tuple>
<state>
<tuple>
<float>1406898405.77</float>
<float>1421252934.14</float>
<string>GMT</string>
</tuple>
</state>
......@@ -312,7 +308,7 @@ NETWORK:\n
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>xiaowu</string> </value>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -326,7 +322,7 @@ NETWORK:\n
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>940.17441.54956.1450</string> </value>
<value> <string>940.30209.53658.33979</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -344,8 +340,8 @@ NETWORK:\n
</tuple>
<state>
<tuple>
<float>1421155553.4</float>
<string>UTC</string>
<float>1423067467.33</float>
<string>GMT</string>
</tuple>
</state>
</object>
......
......@@ -129,7 +129,6 @@
});\n
})\n
\n
.declareAcquiredMethod("aq_put", "jio_put")\n
.declareAcquiredMethod("translateHtml", "translateHtml")\n
.allowPublicAcquisition("notifyInvalid", function (param_list, scope) {\n
return this.getDeclaredGadget(scope)\n
......@@ -474,7 +473,7 @@
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>super_sven</string> </value>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -488,7 +487,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>940.28668.29547.7765</string> </value>
<value> <string>940.21870.34932.42444</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -506,7 +505,7 @@
</tuple>
<state>
<tuple>
<float>1421829262.31</float>
<float>1423061410.81</float>
<string>GMT</string>
</tuple>
</state>
......
......@@ -174,7 +174,6 @@
//////////////////////////////////////////////\n
.declareAcquiredMethod("translateHtml", "translateHtml")\n
.declareAcquiredMethod("whoWantToDisplayThis", "whoWantToDisplayThis")\n
.declareAcquiredMethod("jio_get", "jio_get")\n
.declareAcquiredMethod("triggerSubmit", "triggerSubmit")\n
.declareAcquiredMethod("triggerPanel", "triggerPanel")\n
\n
......@@ -581,7 +580,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>940.10099.40468.62378</string> </value>
<value> <string>940.17574.28685.15906</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -599,7 +598,7 @@
</tuple>
<state>
<tuple>
<float>1421080897.75</float>
<float>1421681794.02</float>
<string>GMT</string>
</tuple>
</state>
......
......@@ -101,10 +101,12 @@
<key> <string>text_content</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*global window, document, rJS, RSVP, jQuery, console, jQuery, XMLHttpRequest, loopEventListener */\n
/*global window, document, rJS, RSVP, jQuery, console, jQuery, XMLHttpRequest, loopEventListener, URI, location */\n
/*jslint nomen: true, indent: 2, maxerr: 3 */\n
(function (window, document, rJS, RSVP, $, XMLHttpRequest, console, loopEventListener) {\n
(function (window, document, rJS, RSVP, $, XMLHttpRequest, console, loopEventListener, URI, location) {\n
"use strict";\n
\n
var DEFAULT_VIEW_REFERENCE = "view";\n
\n
/////////////////////////////////////////////////////////////////\n
// Desactivate jQuery Mobile URL management\n
......@@ -122,8 +124,17 @@
.push(function (jio_gadget) {\n
return jio_gadget.createJio({\n
type: "erp5",\n
url: gadget.props.hateoas_url\n
url: (new URI("hateoas/")).absoluteTo(location.href).toString()\n
});\n
/*\n
return jio_gadget.createJio({\n
type: "restattachment",\n
sub_storage: {\n
type: "erp5",\n
url: (new URI("hateoas/")).absoluteTo(location.href).toString()\n
}\n
});\n
*/\n
});\n
}\n
\n
......@@ -154,7 +165,7 @@
// Do not break the application in case of errors.\n
// Display it to the user for now, and allow user to go back to the frontpage\n
var error_text = "";\n
if (error.status === 401) {\n
if ((error.target !== undefined) && (error.target.status === 401)) {\n
// Redirect to the login view\n
return gadget.aq_pleasePublishMyState({page: "login"})\n
.push(gadget.pleaseRedirectMyHash.bind(gadget));\n
......@@ -210,9 +221,7 @@
.ready(function (g) {\n
g.props = {\n
translation_lookup: "",\n
hateoas_url: "hateoas/",\n
action_view: "action_object_view",\n
default_view_reference: "view"\n
hateoas_url: "hateoas/"\n
};\n
// return g.getDeclaredGadget("breadcrumb")\n
// .push(function (sub_gadget) {\n
......@@ -292,29 +301,33 @@
return jio_gadget.allDocs.apply(jio_gadget, param_list);\n
});\n
})\n
.allowPublicAcquisition("jio_ajax", function (param_list) {\n
.allowPublicAcquisition("aq_putAttachment", function (param_list) {\n
return this.getDeclaredGadget("jio_gadget")\n
.push(function (jio_gadget) {\n
return jio_gadget.ajax.apply(jio_gadget, param_list);\n
return jio_gadget.putAttachment({\n
"_id": param_list[0]._id,\n
"_attachment": param_list[0]._attachment,\n
"_data": JSON.stringify(param_list[0]._data)\n
});\n
});\n
})\n
.allowPublicAcquisition("jio_put", function (param_list) {\n
.allowPublicAcquisition("jio_get", function (param_list) {\n
return this.getDeclaredGadget("jio_gadget")\n
.push(function (jio_gadget) {\n
return jio_gadget.put.apply(jio_gadget, param_list);\n
return jio_gadget.get.apply(jio_gadget, param_list);\n
});\n
})\n
.allowPublicAcquisition("jio_get", function (param_list) {\n
.allowPublicAcquisition("jio_getAttachment", function (param_list) {\n
return this.getDeclaredGadget("jio_gadget")\n
.push(function (jio_gadget) {\n
return jio_gadget.get.apply(jio_gadget, param_list);\n
return jio_gadget.getAttachment.apply(jio_gadget, param_list);\n
});\n
})\n
.allowPublicAcquisition("whoWantToDisplayThis", function (param_list) {\n
// Hey, I want to display some URL\n
var options = {\n
jio_key: param_list[0],\n
view: this.props.default_view_reference\n
view: DEFAULT_VIEW_REFERENCE\n
};\n
if (param_list[1] !== undefined) {\n
if (param_list[1].editable !== undefined) {\n
......@@ -327,7 +340,7 @@
// Hey, I want to display some URL\n
var options = {\n
jio_key: this.state_parameter_dict.jio_key,\n
view: param_list[0].name || this.props.default_view_reference\n
view: param_list[0].name || DEFAULT_VIEW_REFERENCE\n
};\n
if (param_list[0].editable !== undefined) {\n
options.editable = param_list[0].editable;\n
......@@ -491,7 +504,6 @@
panel_action: true\n
}];\n
\n
options.action_view = gadget.props.action_view;\n
gadget.state_parameter_dict = {\n
jio_key: options.jio_key,\n
view: options.view\n
......@@ -499,6 +511,7 @@
\n
if ((options.jio_key !== undefined) && (options.page === undefined)) {\n
options.page = "form";\n
options.view = options.view || DEFAULT_VIEW_REFERENCE;\n
}\n
if (options.page === undefined) {\n
// Not rendering a jio document and not page requested.\n
......@@ -566,7 +579,7 @@
);\n
});\n
\n
}(window, document, rJS, RSVP, jQuery, XMLHttpRequest, console, loopEventListener));
}(window, document, rJS, RSVP, jQuery, XMLHttpRequest, console, loopEventListener, URI, location));
]]></string> </value>
</item>
......@@ -689,7 +702,7 @@
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -703,7 +716,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>940.10219.33899.48998</string> </value>
<value> <string>940.49304.32028.23995</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -721,8 +734,8 @@
</tuple>
<state>
<tuple>
<float>1420722838.8</float>
<string>UTC</string>
<float>1423067269.03</float>
<string>GMT</string>
</tuple>
</state>
</object>
......
......@@ -136,7 +136,7 @@
/////////////////////////////////////////////////////////////////\n
// Acquired methods\n
/////////////////////////////////////////////////////////////////\n
.declareAcquiredMethod("jio_get", "jio_get")\n
.declareAcquiredMethod("jio_getAttachment", "jio_getAttachment")\n
.declareAcquiredMethod("translateHtml", "translateHtml")\n
.declareAcquiredMethod("whoWantToDisplayThisPage", "whoWantToDisplayThisPage")\n
.declareAcquiredMethod("renderPageHeader", "renderPageHeader")\n
......@@ -150,7 +150,7 @@
result_list,\n
view_list;\n
\n
return gadget.jio_get({"_id": options.jio_key})\n
return gadget.jio_getAttachment({"_id": options.jio_key, "_attachment": "links"})\n
.push(function (result) {\n
var i,\n
promise_list = [\n
......@@ -166,7 +166,7 @@
\n
for (i = 0; i < view_list.length; i += 1) {\n
promise_list.push(gadget.whoWantToDisplayThisPage({\n
name: view_list[i].name\n
name: view_list[i].href\n
}));\n
}\n
return RSVP.all(promise_list);\n
......@@ -325,7 +325,7 @@
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -339,7 +339,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>940.11553.26313.55261</string> </value>
<value> <string>940.49126.4849.49664</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -357,7 +357,7 @@
</tuple>
<state>
<tuple>
<float>1421080866.35</float>
<float>1423066988.75</float>
<string>GMT</string>
</tuple>
</state>
......
......@@ -134,7 +134,7 @@
/////////////////////////////////////////////////////////////////\n
// Acquired methods\n
/////////////////////////////////////////////////////////////////\n
.declareAcquiredMethod("jio_get", "jio_get")\n
.declareAcquiredMethod("jio_getAttachment", "jio_getAttachment")\n
.declareAcquiredMethod("whoWantToDisplayThisPage", "whoWantToDisplayThisPage")\n
.declareAcquiredMethod("whoWantToDisplayThis", "whoWantToDisplayThis")\n
.declareAcquiredMethod("translateHtml", "translateHtml")\n
......@@ -172,7 +172,7 @@
title: parent_link.name,\n
link: parent_href\n
});\n
return gadget.jio_get({"_id": jio_key});\n
return gadget.jio_getAttachment({"_id": jio_key, "_attachment": "links"});\n
})\n
.push(function (result) {\n
handleParent(result.data._links.parent || "#");\n
......@@ -186,7 +186,7 @@
return gadget.whoWantToDisplayThisPage({name: options.view, editable: options.editable})\n
.push(function (back_url) {\n
header_options.back_url = back_url;\n
return gadget.jio_get({"_id": options.jio_key});\n
return gadget.jio_getAttachment({"_id": options.jio_key, "_attachment": "links"});\n
})\n
.push(function (result) {\n
erp5_document = result.data;\n
......@@ -330,7 +330,7 @@
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>super_sven</string> </value>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -344,7 +344,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>940.1898.34631.55091</string> </value>
<value> <string>940.49124.20596.60757</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -362,7 +362,7 @@
</tuple>
<state>
<tuple>
<float>1420236895.39</float>
<float>1423066901.42</float>
<string>GMT</string>
</tuple>
</state>
......
......@@ -132,7 +132,7 @@
/////////////////////////////////////////////////////////////////\n
// acquisition\n
/////////////////////////////////////////////////////////////////\n
.declareAcquiredMethod("jio_ajax", "jio_ajax")\n
.declareAcquiredMethod("aq_putAttachment", "aq_putAttachment")\n
.declareAcquiredMethod("pleaseRedirectMyHash", "pleaseRedirectMyHash")\n
.declareAcquiredMethod("whoWantToDisplayThisPage", "whoWantToDisplayThisPage")\n
.declareAcquiredMethod("whoWantToDisplayThis", "whoWantToDisplayThis")\n
......@@ -256,14 +256,12 @@
}\n
}\n
\n
return form_gadget.jio_ajax({\n
"type": form_gadget.props.action.method,\n
"url": form_gadget.props.action.href,\n
"data": data,\n
"xhrFields": {\n
withCredentials: true\n
}\n
return form_gadget.aq_putAttachment({\n
"_id": form_gadget.props.id,\n
"_attachment": form_gadget.props.action.href,\n
"_data": data\n
});\n
\n
})\n
.push(function (evt) {\n
var location = evt.target.getResponseHeader("X-Location");\n
......@@ -413,7 +411,7 @@
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -427,7 +425,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>940.17478.1208.10666</string> </value>
<value> <string>940.49292.16784.61849</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -445,7 +443,7 @@
</tuple>
<state>
<tuple>
<float>1421157982.02</float>
<float>1423066365.58</float>
<string>GMT</string>
</tuple>
</state>
......
......@@ -133,7 +133,7 @@
.push(function () {\n
var new_content_action = options.erp5_document._links.action_object_new_content_action;\n
if (new_content_action !== undefined) {\n
new_content_action = gadget.whoWantToDisplayThisPage({name: new_content_action.name, editable: true});\n
new_content_action = gadget.whoWantToDisplayThisPage({name: new_content_action.href, editable: true});\n
} else {\n
new_content_action = "";\n
}\n
......@@ -301,7 +301,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>937.65471.52542.37171</string> </value>
<value> <string>940.49123.7425.11349</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -319,7 +319,7 @@
</tuple>
<state>
<tuple>
<float>1412596633.53</float>
<float>1423066273.81</float>
<string>GMT</string>
</tuple>
</state>
......
......@@ -128,7 +128,7 @@
});\n
})\n
\n
.declareAcquiredMethod("aq_put", "jio_put")\n
.declareAcquiredMethod("aq_putAttachment", "aq_putAttachment")\n
.declareAcquiredMethod("translateHtml", "translateHtml")\n
.declareAcquiredMethod("whoWantToDisplayThisPage", "whoWantToDisplayThisPage")\n
.declareAcquiredMethod("whoWantToDisplayThis", "whoWantToDisplayThis")\n
......@@ -148,6 +148,8 @@
\n
form_gadget.props.id = erp5_document._id;\n
form_gadget.props.view = options.view;\n
form_gadget.props.action = erp5_document._embedded._view._actions.put;\n
form_gadget.props.form_id = erp5_document._embedded._view.form_id;\n
\n
return form_gadget.getDeclaredGadget("erp5_form")\n
.push(function (erp5_form) {\n
......@@ -210,10 +212,17 @@
if (validity) {\n
return erp5_form.getContent()\n
.push(function (data) {\n
data._id = form_gadget.props.id;\n
\n
data[form_gadget.props.form_id.key] =\n
form_gadget.props.form_id[\'default\'];\n
\n
return RSVP.all([\n
form_gadget.notifySubmitting(),\n
form_gadget.aq_put(data, {"_view": form_gadget.props.view})\n
form_gadget.aq_putAttachment({\n
"_id": form_gadget.props.id,\n
"_attachment": form_gadget.props.action.href,\n
"_data": data\n
})\n
]);\n
})\n
.push(form_gadget.notifySubmitted.bind(form_gadget));\n
......@@ -351,7 +360,7 @@
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -365,7 +374,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>940.10421.7831.40686</string> </value>
<value> <string>940.49128.62667.58914</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -383,8 +392,8 @@
</tuple>
<state>
<tuple>
<float>1420736076.72</float>
<string>UTC</string>
<float>1423066195.91</float>
<string>GMT</string>
</tuple>
</state>
</object>
......
......@@ -300,7 +300,7 @@
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -314,7 +314,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>938.194.24732.3993</string> </value>
<value> <string>940.21776.61223.15274</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -332,7 +332,7 @@
</tuple>
<state>
<tuple>
<float>1412343893.37</float>
<float>1421415462.01</float>
<string>GMT</string>
</tuple>
</state>
......
......@@ -127,7 +127,7 @@
/////////////////////////////////////////////////////////////////\n
// Acquired methods\n
/////////////////////////////////////////////////////////////////\n
.declareAcquiredMethod("jio_get", "jio_get")\n
.declareAcquiredMethod("jio_getAttachment", "jio_getAttachment")\n
\n
/////////////////////////////////////////////////////////////////\n
// declared methods\n
......@@ -145,11 +145,11 @@
erp5_form,\n
form_gadget;\n
\n
return gadget.jio_get({"_id": options.jio_key}, {"_view": options.view})\n
return gadget.jio_getAttachment({"_id": options.jio_key, "_attachment": options.view})\n
.push(function (result) {\n
var uri = new URI(result.data._embedded._view._links.form_definition.href);\n
erp5_document = result.data;\n
return gadget.jio_get({"_id": uri.segment(2)}, {"_view": "view"});\n
return gadget.jio_getAttachment({"_id": uri.segment(2), "_attachment": "view"});\n
})\n
.push(function (result) {\n
erp5_form = result.data;\n
......@@ -312,7 +312,7 @@
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>sven</string> </value>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -326,7 +326,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>938.19043.60684.21452</string> </value>
<value> <string>940.49122.12001.41540</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -344,7 +344,7 @@
</tuple>
<state>
<tuple>
<float>1413473559.42</float>
<float>1423065965.58</float>
<string>GMT</string>
</tuple>
</state>
......
......@@ -136,7 +136,7 @@
/////////////////////////////////////////////////////////////////\n
// Acquired methods\n
/////////////////////////////////////////////////////////////////\n
.declareAcquiredMethod("jio_get", "jio_get")\n
.declareAcquiredMethod("jio_getAttachment", "jio_getAttachment")\n
.declareAcquiredMethod("whoWantToDisplayThisPage", "whoWantToDisplayThisPage")\n
.declareAcquiredMethod("translateHtml", "translateHtml")\n
.declareAcquiredMethod("renderPageHeader", "renderPageHeader")\n
......@@ -150,12 +150,12 @@
tab_list = [],\n
gadget = this;\n
\n
return gadget.jio_get({"_id": options.jio_key})\n
return gadget.jio_getAttachment({"_id": options.jio_key, "_attachment": "links"})\n
.push(function (result) {\n
var erp5_document = result.data,\n
i,\n
promise_list = [];\n
view_list = erp5_document._links[options.action_view];\n
view_list = erp5_document._links.view;\n
\n
// All ERP5 document should at least have one view.\n
// So, no need normally to test undefined\n
......@@ -164,16 +164,16 @@
}\n
\n
for (i = 0; i < view_list.length; i += 1) {\n
if (options.view === view_list[i].name) {\n
if (options.view === view_list[i].href) {\n
matching = i;\n
}\n
promise_list.push(gadget.whoWantToDisplayThisPage({\n
name: view_list[i].name,\n
name: view_list[i].href,\n
editable: true\n
}));\n
}\n
promise_list.push(gadget.whoWantToDisplayThisPage({\n
name: view_list[0].name\n
name: "view"\n
}));\n
return RSVP.all(promise_list);\n
})\n
......@@ -206,9 +206,19 @@
.push(function (my_translated_html) {\n
gadget.props.element.innerHTML = my_translated_html;\n
\n
if (matching !== undefined) {\n
return gadget.renderPageHeader({\n
cancel_url: tab_list[matching].link\n
});\n
}\n
return gadget.whoWantToDisplayThisPage({\n
name: "view",\n
editable: true\n
})\n
.push(function (url) {\n
return gadget.renderPageHeader({cancel_url: url});\n
});\n
\n
});\n
});\n
\n
......@@ -335,7 +345,7 @@
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -349,7 +359,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>940.11553.26313.55261</string> </value>
<value> <string>940.49264.57640.4352</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -367,7 +377,7 @@
</tuple>
<state>
<tuple>
<float>1421080804.4</float>
<float>1423065230.54</float>
<string>GMT</string>
</tuple>
</state>
......
......@@ -114,17 +114,7 @@
<script src="rsvp.js" type="text/javascript"></script>\n
<script src="renderjs.js" type="text/javascript"></script>\n
\n
<script src="uritemplate.js" type="text/javascript"></script>\n
<script src="URI.js" type="text/javascript"></script>\n
\n
<script src="jio_sha1.amd.js" type="text/javascript"></script>\n
<script src="jio_sha2.amd.js" type="text/javascript"></script>\n
<script src="jio_sha256.amd.js" type="text/javascript"></script>\n
<script src="jio.js" type="text/javascript"></script>\n
<script src="jio_complex_queries.js" type="text/javascript"></script>\n
<script src="jio_storage_erp5.js" type="text/javascript"></script>\n
\n
\n
<script src="jiodev.js" type="text/javascript"></script>\n
\n
<!-- custom script -->\n
<script src="gadget_jio.js" type="text/javascript"></script>\n
......@@ -255,7 +245,7 @@
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>tb</string> </value>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -269,7 +259,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>936.39262.40401.22254</string> </value>
<value> <string>940.49251.5828.61098</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -287,7 +277,7 @@
</tuple>
<state>
<tuple>
<float>1406908734.53</float>
<float>1423064264.23</float>
<string>GMT</string>
</tuple>
</state>
......
......@@ -103,7 +103,7 @@
/*global window, rJS, jIO, FormData */\n
/*jslint indent: 2, maxerr: 3 */\n
(function (window, rJS, jIO, FormData) {\n
(function (window, rJS, jIO) {\n
"use strict";\n
\n
rJS(window)\n
......@@ -116,58 +116,34 @@
.declareMethod(\'createJio\', function (jio_options) {\n
this.state_parameter_dict.jio_storage = jIO.createJIO(jio_options);\n
})\n
.declareMethod(\'ajax\', function (options) {\n
var key,\n
form_data = new FormData();\n
if (options.data !== undefined) {\n
for (key in options.data) {\n
if (options.data.hasOwnProperty(key)) {\n
form_data.append(key, options.data[key]);\n
}\n
}\n
options.data = form_data;\n
}\n
return jIO.util.ajax(options);\n
})\n
.declareMethod(\'allDocs\', function () {\n
var storage = this.state_parameter_dict.jio_storage;\n
return storage.allDocs.apply(storage, arguments);\n
})\n
.declareMethod(\'get\', function () {\n
var storage = this.state_parameter_dict.jio_storage;\n
return storage.get.apply(storage, arguments);\n
})\n
.declareMethod(\'remove\', function () {\n
var storage = this.state_parameter_dict.jio_storage;\n
return storage.remove.apply(storage, arguments);\n
return storage.get.apply(storage, arguments)\n
.push(function (result) {\n
return {data: result};\n
});\n
})\n
.declareMethod(\'getAttachment\', function () {\n
var storage = this.state_parameter_dict.jio_storage;\n
return storage.getAttachment.apply(storage, arguments)\n
// XXX Where to put this &@! blob reading\n
.then(function (response) {\n
return jIO.util.readBlobAsText(response.data);\n
return jIO.util.readBlobAsText(response);\n
})\n
.then(function (lala) {\n
return lala.target.result;\n
.then(function (evt) {\n
return {data: JSON.parse(evt.target.result)};\n
});\n
})\n
.declareMethod(\'putAttachment\', function () {\n
var storage = this.state_parameter_dict.jio_storage;\n
return storage.putAttachment.apply(storage, arguments);\n
})\n
.declareMethod(\'put\', function () {\n
// XXX set modified value\n
var storage = this.state_parameter_dict.jio_storage;\n
return storage.put.apply(storage, arguments);\n
})\n
.declareMethod(\'post\', function () {\n
// XXX set modified value\n
var storage = this.state_parameter_dict.jio_storage;\n
return storage.post.apply(storage, arguments);\n
});\n
\n
}(window, rJS, jIO, FormData));
}(window, rJS, jIO));
]]></string> </value>
</item>
......@@ -290,7 +266,7 @@
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
......@@ -304,7 +280,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>940.17512.23099.38434</string> </value>
<value> <string>940.46046.3030.52343</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -322,7 +298,7 @@
</tuple>
<state>
<tuple>
<float>1421162230.18</float>
<float>1423064556.21</float>
<string>GMT</string>
</tuple>
</state>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Web Script" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>jio_complex_queries.js</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>rjs_jio_complex_queries_js</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Web Script</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*\n
* Copyright 2013, Nexedi SA\n
* Released under the LGPL license.\n
* http://www.gnu.org/licenses/lgpl.html\n
*/\n
\n
/**\n
* Provides some function to use complex queries with item list\n
*\n
* @module complex_queries\n
*/\n
// define([module_name], [dependencies], module);\n
(function (dependencies, module) {\n
"use strict";\n
if (typeof define === \'function\' && define.amd) {\n
return define(dependencies, module);\n
}\n
if (typeof exports === \'object\') {\n
return module(exports);\n
}\n
window.complex_queries = {};\n
module(window.complex_queries, RSVP);\n
}([\'exports\', \'rsvp\'], function (to_export, RSVP) {\n
"use strict";\n
\n
/**\n
* Add a secured (write permission denied) property to an object.\n
*\n
* @param {Object} object The object to fill\n
* @param {String} key The object key where to store the property\n
* @param {Any} value The value to store\n
*/\n
function _export(key, value) {\n
Object.defineProperty(to_export, key, {\n
"configurable": false,\n
"enumerable": true,\n
"writable": false,\n
"value": value\n
});\n
}\n
\n
/**\n
* Parse a text request to a json query object tree\n
*\n
* @param {String} string The string to parse\n
* @return {Object} The json query tree\n
*/\n
function parseStringToObject(string) {\n
\n
\n
/*\n
\tDefault template driver for JS/CC generated parsers running as\n
\tbrowser-based JavaScript/ECMAScript applications.\n
\t\n
\tWARNING: \tThis parser template will not run as console and has lesser\n
\t\t\t\tfeatures for debugging than the console derivates for the\n
\t\t\t\tvarious JavaScript platforms.\n
\t\n
\tFeatures:\n
\t- Parser trace messages\n
\t- Integrated panic-mode error recovery\n
\t\n
\tWritten 2007, 2008 by Jan Max Meyer, J.M.K S.F. Software Technologies\n
\t\n
\tThis is in the public domain.\n
*/\n
\n
var NODEJS__dbg_withtrace\t\t= false;\n
var NODEJS__dbg_string\t\t\t= new String();\n
\n
function __NODEJS_dbg_print( text )\n
{\n
\tNODEJS__dbg_string += text + "\\n";\n
}\n
\n
function __NODEJS_lex( info )\n
{\n
\tvar state\t\t= 0;\n
\tvar match\t\t= -1;\n
\tvar match_pos\t= 0;\n
\tvar start\t\t= 0;\n
\tvar pos\t\t\t= info.offset + 1;\n
\n
\tdo\n
\t{\n
\t\tpos--;\n
\t\tstate = 0;\n
\t\tmatch = -2;\n
\t\tstart = pos;\n
\n
\t\tif( info.src.length <= start )\n
\t\t\treturn 19;\n
\n
\t\tdo\n
\t\t{\n
\n
switch( state )\n
{\n
\tcase 0:\n
\t\tif( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 8 ) || ( info.src.charCodeAt( pos ) >= 10 && info.src.charCodeAt( pos ) <= 31 ) || ( info.src.charCodeAt( pos ) >= 35 && info.src.charCodeAt( pos ) <= 39 ) || ( info.src.charCodeAt( pos ) >= 42 && info.src.charCodeAt( pos ) <= 57 ) || info.src.charCodeAt( pos ) == 59 || ( info.src.charCodeAt( pos ) >= 63 && info.src.charCodeAt( pos ) <= 64 ) || ( info.src.charCodeAt( pos ) >= 66 && info.src.charCodeAt( pos ) <= 77 ) || ( info.src.charCodeAt( pos ) >= 80 && info.src.charCodeAt( pos ) <= 254 ) ) state = 1;\n
\t\telse if( info.src.charCodeAt( pos ) == 9 ) state = 2;\n
\t\telse if( info.src.charCodeAt( pos ) == 40 ) state = 3;\n
\t\telse if( info.src.charCodeAt( pos ) == 41 ) state = 4;\n
\t\telse if( info.src.charCodeAt( pos ) == 60 || info.src.charCodeAt( pos ) == 62 ) state = 5;\n
\t\telse if( info.src.charCodeAt( pos ) == 33 ) state = 11;\n
\t\telse if( info.src.charCodeAt( pos ) == 79 ) state = 12;\n
\t\telse if( info.src.charCodeAt( pos ) == 32 ) state = 13;\n
\t\telse if( info.src.charCodeAt( pos ) == 61 ) state = 14;\n
\t\telse if( info.src.charCodeAt( pos ) == 34 ) state = 15;\n
\t\telse if( info.src.charCodeAt( pos ) == 65 ) state = 19;\n
\t\telse if( info.src.charCodeAt( pos ) == 78 ) state = 20;\n
\t\telse state = -1;\n
\t\tbreak;\n
\n
\tcase 1:\n
\t\tif( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 31 ) || info.src.charCodeAt( pos ) == 33 || ( info.src.charCodeAt( pos ) >= 35 && info.src.charCodeAt( pos ) <= 39 ) || ( info.src.charCodeAt( pos ) >= 42 && info.src.charCodeAt( pos ) <= 57 ) || ( info.src.charCodeAt( pos ) >= 59 && info.src.charCodeAt( pos ) <= 254 ) ) state = 1;\n
\t\telse if( info.src.charCodeAt( pos ) == 58 ) state = 6;\n
\t\telse state = -1;\n
\t\tmatch = 10;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 2:\n
\t\tif( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 31 ) || info.src.charCodeAt( pos ) == 33 || ( info.src.charCodeAt( pos ) >= 35 && info.src.charCodeAt( pos ) <= 39 ) || ( info.src.charCodeAt( pos ) >= 42 && info.src.charCodeAt( pos ) <= 57 ) || ( info.src.charCodeAt( pos ) >= 59 && info.src.charCodeAt( pos ) <= 254 ) ) state = 1;\n
\t\telse if( info.src.charCodeAt( pos ) == 58 ) state = 6;\n
\t\telse state = -1;\n
\t\tmatch = 1;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 3:\n
\t\tstate = -1;\n
\t\tmatch = 3;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 4:\n
\t\tstate = -1;\n
\t\tmatch = 4;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 5:\n
\t\tif( info.src.charCodeAt( pos ) == 61 ) state = 14;\n
\t\telse state = -1;\n
\t\tmatch = 11;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 6:\n
\t\tstate = -1;\n
\t\tmatch = 8;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 7:\n
\t\tstate = -1;\n
\t\tmatch = 9;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 8:\n
\t\tif( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 31 ) || info.src.charCodeAt( pos ) == 33 || ( info.src.charCodeAt( pos ) >= 35 && info.src.charCodeAt( pos ) <= 39 ) || ( info.src.charCodeAt( pos ) >= 42 && info.src.charCodeAt( pos ) <= 57 ) || ( info.src.charCodeAt( pos ) >= 59 && info.src.charCodeAt( pos ) <= 254 ) ) state = 1;\n
\t\telse if( info.src.charCodeAt( pos ) == 58 ) state = 6;\n
\t\telse state = -1;\n
\t\tmatch = 6;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 9:\n
\t\tif( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 31 ) || info.src.charCodeAt( pos ) == 33 || ( info.src.charCodeAt( pos ) >= 35 && info.src.charCodeAt( pos ) <= 39 ) || ( info.src.charCodeAt( pos ) >= 42 && info.src.charCodeAt( pos ) <= 57 ) || ( info.src.charCodeAt( pos ) >= 59 && info.src.charCodeAt( pos ) <= 254 ) ) state = 1;\n
\t\telse if( info.src.charCodeAt( pos ) == 58 ) state = 6;\n
\t\telse state = -1;\n
\t\tmatch = 5;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 10:\n
\t\tif( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 31 ) || info.src.charCodeAt( pos ) == 33 || ( info.src.charCodeAt( pos ) >= 35 && info.src.charCodeAt( pos ) <= 39 ) || ( info.src.charCodeAt( pos ) >= 42 && info.src.charCodeAt( pos ) <= 57 ) || ( info.src.charCodeAt( pos ) >= 59 && info.src.charCodeAt( pos ) <= 254 ) ) state = 1;\n
\t\telse if( info.src.charCodeAt( pos ) == 58 ) state = 6;\n
\t\telse state = -1;\n
\t\tmatch = 7;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 11:\n
\t\tif( info.src.charCodeAt( pos ) == 61 ) state = 14;\n
\t\telse state = -1;\n
\t\tbreak;\n
\n
\tcase 12:\n
\t\tif( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 31 ) || info.src.charCodeAt( pos ) == 33 || ( info.src.charCodeAt( pos ) >= 35 && info.src.charCodeAt( pos ) <= 39 ) || ( info.src.charCodeAt( pos ) >= 42 && info.src.charCodeAt( pos ) <= 57 ) || ( info.src.charCodeAt( pos ) >= 59 && info.src.charCodeAt( pos ) <= 81 ) || ( info.src.charCodeAt( pos ) >= 83 && info.src.charCodeAt( pos ) <= 254 ) ) state = 1;\n
\t\telse if( info.src.charCodeAt( pos ) == 58 ) state = 6;\n
\t\telse if( info.src.charCodeAt( pos ) == 82 ) state = 8;\n
\t\telse state = -1;\n
\t\tmatch = 10;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 13:\n
\t\tstate = -1;\n
\t\tmatch = 1;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 14:\n
\t\tstate = -1;\n
\t\tmatch = 11;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 15:\n
\t\tif( info.src.charCodeAt( pos ) == 34 ) state = 7;\n
\t\telse if( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 33 ) || ( info.src.charCodeAt( pos ) >= 35 && info.src.charCodeAt( pos ) <= 91 ) || ( info.src.charCodeAt( pos ) >= 93 && info.src.charCodeAt( pos ) <= 254 ) ) state = 15;\n
\t\telse if( info.src.charCodeAt( pos ) == 92 ) state = 17;\n
\t\telse state = -1;\n
\t\tbreak;\n
\n
\tcase 16:\n
\t\tif( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 31 ) || info.src.charCodeAt( pos ) == 33 || ( info.src.charCodeAt( pos ) >= 35 && info.src.charCodeAt( pos ) <= 39 ) || ( info.src.charCodeAt( pos ) >= 42 && info.src.charCodeAt( pos ) <= 57 ) || ( info.src.charCodeAt( pos ) >= 59 && info.src.charCodeAt( pos ) <= 67 ) || ( info.src.charCodeAt( pos ) >= 69 && info.src.charCodeAt( pos ) <= 254 ) ) state = 1;\n
\t\telse if( info.src.charCodeAt( pos ) == 58 ) state = 6;\n
\t\telse if( info.src.charCodeAt( pos ) == 68 ) state = 9;\n
\t\telse state = -1;\n
\t\tmatch = 10;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 17:\n
\t\tif( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 254 ) ) state = 15;\n
\t\telse state = -1;\n
\t\tbreak;\n
\n
\tcase 18:\n
\t\tif( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 31 ) || info.src.charCodeAt( pos ) == 33 || ( info.src.charCodeAt( pos ) >= 35 && info.src.charCodeAt( pos ) <= 39 ) || ( info.src.charCodeAt( pos ) >= 42 && info.src.charCodeAt( pos ) <= 57 ) || ( info.src.charCodeAt( pos ) >= 59 && info.src.charCodeAt( pos ) <= 83 ) || ( info.src.charCodeAt( pos ) >= 85 && info.src.charCodeAt( pos ) <= 254 ) ) state = 1;\n
\t\telse if( info.src.charCodeAt( pos ) == 58 ) state = 6;\n
\t\telse if( info.src.charCodeAt( pos ) == 84 ) state = 10;\n
\t\telse state = -1;\n
\t\tmatch = 10;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 19:\n
\t\tif( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 31 ) || info.src.charCodeAt( pos ) == 33 || ( info.src.charCodeAt( pos ) >= 35 && info.src.charCodeAt( pos ) <= 39 ) || ( info.src.charCodeAt( pos ) >= 42 && info.src.charCodeAt( pos ) <= 57 ) || ( info.src.charCodeAt( pos ) >= 59 && info.src.charCodeAt( pos ) <= 77 ) || ( info.src.charCodeAt( pos ) >= 79 && info.src.charCodeAt( pos ) <= 254 ) ) state = 1;\n
\t\telse if( info.src.charCodeAt( pos ) == 58 ) state = 6;\n
\t\telse if( info.src.charCodeAt( pos ) == 78 ) state = 16;\n
\t\telse state = -1;\n
\t\tmatch = 10;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
\tcase 20:\n
\t\tif( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 31 ) || info.src.charCodeAt( pos ) == 33 || ( info.src.charCodeAt( pos ) >= 35 && info.src.charCodeAt( pos ) <= 39 ) || ( info.src.charCodeAt( pos ) >= 42 && info.src.charCodeAt( pos ) <= 57 ) || ( info.src.charCodeAt( pos ) >= 59 && info.src.charCodeAt( pos ) <= 78 ) || ( info.src.charCodeAt( pos ) >= 80 && info.src.charCodeAt( pos ) <= 254 ) ) state = 1;\n
\t\telse if( info.src.charCodeAt( pos ) == 58 ) state = 6;\n
\t\telse if( info.src.charCodeAt( pos ) == 79 ) state = 18;\n
\t\telse state = -1;\n
\t\tmatch = 10;\n
\t\tmatch_pos = pos;\n
\t\tbreak;\n
\n
}\n
\n
\n
\t\t\tpos++;\n
\n
\t\t}\n
\t\twhile( state > -1 );\n
\n
\t}\n
\twhile( 1 > -1 && match == 1 );\n
\n
\tif( match > -1 )\n
\t{\n
\t\tinfo.att = info.src.substr( start, match_pos - start );\n
\t\tinfo.offset = match_pos;\n
\t\t\n
\n
\t}\n
\telse\n
\t{\n
\t\tinfo.att = new String();\n
\t\tmatch = -1;\n
\t}\n
\n
\treturn match;\n
}\n
\n
\n
function __NODEJS_parse( src, err_off, err_la )\n
{\n
\tvar\t\tsstack\t\t\t= new Array();\n
\tvar\t\tvstack\t\t\t= new Array();\n
\tvar \terr_cnt\t\t\t= 0;\n
\tvar\t\tact;\n
\tvar\t\tgo;\n
\tvar\t\tla;\n
\tvar\t\trval;\n
\tvar \tparseinfo\t\t= new Function( "", "var offset; var src; var att;" );\n
\tvar\t\tinfo\t\t\t= new parseinfo();\n
\t\n
/* Pop-Table */\n
var pop_tab = new Array(\n
\tnew Array( 0/* begin\' */, 1 ),\n
\tnew Array( 13/* begin */, 1 ),\n
\tnew Array( 12/* search_text */, 1 ),\n
\tnew Array( 12/* search_text */, 2 ),\n
\tnew Array( 12/* search_text */, 3 ),\n
\tnew Array( 14/* and_expression */, 1 ),\n
\tnew Array( 14/* and_expression */, 3 ),\n
\tnew Array( 15/* boolean_expression */, 2 ),\n
\tnew Array( 15/* boolean_expression */, 1 ),\n
\tnew Array( 16/* expression */, 3 ),\n
\tnew Array( 16/* expression */, 2 ),\n
\tnew Array( 16/* expression */, 1 ),\n
\tnew Array( 17/* value */, 2 ),\n
\tnew Array( 17/* value */, 1 ),\n
\tnew Array( 18/* string */, 1 ),\n
\tnew Array( 18/* string */, 1 )\n
);\n
\n
/* Action-Table */\n
var act_tab = new Array(\n
\t/* State 0 */ new Array( 7/* "NOT" */,5 , 3/* "LEFT_PARENTHESE" */,7 , 8/* "COLUMN" */,8 , 11/* "OPERATOR" */,10 , 10/* "WORD" */,12 , 9/* "STRING" */,13 ),\n
\t/* State 1 */ new Array( 19/* "$" */,0 ),\n
\t/* State 2 */ new Array( 19/* "$" */,-1 ),\n
\t/* State 3 */ new Array( 6/* "OR" */,14 , 7/* "NOT" */,5 , 3/* "LEFT_PARENTHESE" */,7 , 8/* "COLUMN" */,8 , 11/* "OPERATOR" */,10 , 10/* "WORD" */,12 , 9/* "STRING" */,13 , 19/* "$" */,-2 , 4/* "RIGHT_PARENTHESE" */,-2 ),\n
\t/* State 4 */ new Array( 5/* "AND" */,16 , 19/* "$" */,-5 , 7/* "NOT" */,-5 , 3/* "LEFT_PARENTHESE" */,-5 , 8/* "COLUMN" */,-5 , 11/* "OPERATOR" */,-5 , 10/* "WORD" */,-5 , 9/* "STRING" */,-5 , 6/* "OR" */,-5 , 4/* "RIGHT_PARENTHESE" */,-5 ),\n
\t/* State 5 */ new Array( 3/* "LEFT_PARENTHESE" */,7 , 8/* "COLUMN" */,8 , 11/* "OPERATOR" */,10 , 10/* "WORD" */,12 , 9/* "STRING" */,13 ),\n
\t/* State 6 */ new Array( 19/* "$" */,-8 , 7/* "NOT" */,-8 , 3/* "LEFT_PARENTHESE" */,-8 , 8/* "COLUMN" */,-8 , 11/* "OPERATOR" */,-8 , 10/* "WORD" */,-8 , 9/* "STRING" */,-8 , 6/* "OR" */,-8 , 5/* "AND" */,-8 , 4/* "RIGHT_PARENTHESE" */,-8 ),\n
\t/* State 7 */ new Array( 7/* "NOT" */,5 , 3/* "LEFT_PARENTHESE" */,7 , 8/* "COLUMN" */,8 , 11/* "OPERATOR" */,10 , 10/* "WORD" */,12 , 9/* "STRING" */,13 ),\n
\t/* State 8 */ new Array( 3/* "LEFT_PARENTHESE" */,7 , 8/* "COLUMN" */,8 , 11/* "OPERATOR" */,10 , 10/* "WORD" */,12 , 9/* "STRING" */,13 ),\n
\t/* State 9 */ new Array( 19/* "$" */,-11 , 7/* "NOT" */,-11 , 3/* "LEFT_PARENTHESE" */,-11 , 8/* "COLUMN" */,-11 , 11/* "OPERATOR" */,-11 , 10/* "WORD" */,-11 , 9/* "STRING" */,-11 , 6/* "OR" */,-11 , 5/* "AND" */,-11 , 4/* "RIGHT_PARENTHESE" */,-11 ),\n
\t/* State 10 */ new Array( 10/* "WORD" */,12 , 9/* "STRING" */,13 ),\n
\t/* State 11 */ new Array( 19/* "$" */,-13 , 7/* "NOT" */,-13 , 3/* "LEFT_PARENTHESE" */,-13 , 8/* "COLUMN" */,-13 , 11/* "OPERATOR" */,-13 , 10/* "WORD" */,-13 , 9/* "STRING" */,-13 , 6/* "OR" */,-13 , 5/* "AND" */,-13 , 4/* "RIGHT_PARENTHESE" */,-13 ),\n
\t/* State 12 */ new Array( 19/* "$" */,-14 , 7/* "NOT" */,-14 , 3/* "LEFT_PARENTHESE" */,-14 , 8/* "COLUMN" */,-14 , 11/* "OPERATOR" */,-14 , 10/* "WORD" */,-14 , 9/* "STRING" */,-14 , 6/* "OR" */,-14 , 5/* "AND" */,-14 , 4/* "RIGHT_PARENTHESE" */,-14 ),\n
\t/* State 13 */ new Array( 19/* "$" */,-15 , 7/* "NOT" */,-15 , 3/* "LEFT_PARENTHESE" */,-15 , 8/* "COLUMN" */,-15 , 11/* "OPERATOR" */,-15 , 10/* "WORD" */,-15 , 9/* "STRING" */,-15 , 6/* "OR" */,-15 , 5/* "AND" */,-15 , 4/* "RIGHT_PARENTHESE" */,-15 ),\n
\t/* State 14 */ new Array( 7/* "NOT" */,5 , 3/* "LEFT_PARENTHESE" */,7 , 8/* "COLUMN" */,8 , 11/* "OPERATOR" */,10 , 10/* "WORD" */,12 , 9/* "STRING" */,13 ),\n
\t/* State 15 */ new Array( 19/* "$" */,-3 , 4/* "RIGHT_PARENTHESE" */,-3 ),\n
\t/* State 16 */ new Array( 7/* "NOT" */,5 , 3/* "LEFT_PARENTHESE" */,7 , 8/* "COLUMN" */,8 , 11/* "OPERATOR" */,10 , 10/* "WORD" */,12 , 9/* "STRING" */,13 ),\n
\t/* State 17 */ new Array( 19/* "$" */,-7 , 7/* "NOT" */,-7 , 3/* "LEFT_PARENTHESE" */,-7 , 8/* "COLUMN" */,-7 , 11/* "OPERATOR" */,-7 , 10/* "WORD" */,-7 , 9/* "STRING" */,-7 , 6/* "OR" */,-7 , 5/* "AND" */,-7 , 4/* "RIGHT_PARENTHESE" */,-7 ),\n
\t/* State 18 */ new Array( 4/* "RIGHT_PARENTHESE" */,23 ),\n
\t/* State 19 */ new Array( 19/* "$" */,-10 , 7/* "NOT" */,-10 , 3/* "LEFT_PARENTHESE" */,-10 , 8/* "COLUMN" */,-10 , 11/* "OPERATOR" */,-10 , 10/* "WORD" */,-10 , 9/* "STRING" */,-10 , 6/* "OR" */,-10 , 5/* "AND" */,-10 , 4/* "RIGHT_PARENTHESE" */,-10 ),\n
\t/* State 20 */ new Array( 19/* "$" */,-12 , 7/* "NOT" */,-12 , 3/* "LEFT_PARENTHESE" */,-12 , 8/* "COLUMN" */,-12 , 11/* "OPERATOR" */,-12 , 10/* "WORD" */,-12 , 9/* "STRING" */,-12 , 6/* "OR" */,-12 , 5/* "AND" */,-12 , 4/* "RIGHT_PARENTHESE" */,-12 ),\n
\t/* State 21 */ new Array( 19/* "$" */,-4 , 4/* "RIGHT_PARENTHESE" */,-4 ),\n
\t/* State 22 */ new Array( 19/* "$" */,-6 , 7/* "NOT" */,-6 , 3/* "LEFT_PARENTHESE" */,-6 , 8/* "COLUMN" */,-6 , 11/* "OPERATOR" */,-6 , 10/* "WORD" */,-6 , 9/* "STRING" */,-6 , 6/* "OR" */,-6 , 4/* "RIGHT_PARENTHESE" */,-6 ),\n
\t/* State 23 */ new Array( 19/* "$" */,-9 , 7/* "NOT" */,-9 , 3/* "LEFT_PARENTHESE" */,-9 , 8/* "COLUMN" */,-9 , 11/* "OPERATOR" */,-9 , 10/* "WORD" */,-9 , 9/* "STRING" */,-9 , 6/* "OR" */,-9 , 5/* "AND" */,-9 , 4/* "RIGHT_PARENTHESE" */,-9 )\n
);\n
\n
/* Goto-Table */\n
var goto_tab = new Array(\n
\t/* State 0 */ new Array( 13/* begin */,1 , 12/* search_text */,2 , 14/* and_expression */,3 , 15/* boolean_expression */,4 , 16/* expression */,6 , 17/* value */,9 , 18/* string */,11 ),\n
\t/* State 1 */ new Array( ),\n
\t/* State 2 */ new Array( ),\n
\t/* State 3 */ new Array( 12/* search_text */,15 , 14/* and_expression */,3 , 15/* boolean_expression */,4 , 16/* expression */,6 , 17/* value */,9 , 18/* string */,11 ),\n
\t/* State 4 */ new Array( ),\n
\t/* State 5 */ new Array( 16/* expression */,17 , 17/* value */,9 , 18/* string */,11 ),\n
\t/* State 6 */ new Array( ),\n
\t/* State 7 */ new Array( 12/* search_text */,18 , 14/* and_expression */,3 , 15/* boolean_expression */,4 , 16/* expression */,6 , 17/* value */,9 , 18/* string */,11 ),\n
\t/* State 8 */ new Array( 16/* expression */,19 , 17/* value */,9 , 18/* string */,11 ),\n
\t/* State 9 */ new Array( ),\n
\t/* State 10 */ new Array( 18/* string */,20 ),\n
\t/* State 11 */ new Array( ),\n
\t/* State 12 */ new Array( ),\n
\t/* State 13 */ new Array( ),\n
\t/* State 14 */ new Array( 12/* search_text */,21 , 14/* and_expression */,3 , 15/* boolean_expression */,4 , 16/* expression */,6 , 17/* value */,9 , 18/* string */,11 ),\n
\t/* State 15 */ new Array( ),\n
\t/* State 16 */ new Array( 14/* and_expression */,22 , 15/* boolean_expression */,4 , 16/* expression */,6 , 17/* value */,9 , 18/* string */,11 ),\n
\t/* State 17 */ new Array( ),\n
\t/* State 18 */ new Array( ),\n
\t/* State 19 */ new Array( ),\n
\t/* State 20 */ new Array( ),\n
\t/* State 21 */ new Array( ),\n
\t/* State 22 */ new Array( ),\n
\t/* State 23 */ new Array( )\n
);\n
\n
\n
\n
/* Symbol labels */\n
var labels = new Array(\n
\t"begin\'" /* Non-terminal symbol */,\n
\t"WHITESPACE" /* Terminal symbol */,\n
\t"WHITESPACE" /* Terminal symbol */,\n
\t"LEFT_PARENTHESE" /* Terminal symbol */,\n
\t"RIGHT_PARENTHESE" /* Terminal symbol */,\n
\t"AND" /* Terminal symbol */,\n
\t"OR" /* Terminal symbol */,\n
\t"NOT" /* Terminal symbol */,\n
\t"COLUMN" /* Terminal symbol */,\n
\t"STRING" /* Terminal symbol */,\n
\t"WORD" /* Terminal symbol */,\n
\t"OPERATOR" /* Terminal symbol */,\n
\t"search_text" /* Non-terminal symbol */,\n
\t"begin" /* Non-terminal symbol */,\n
\t"and_expression" /* Non-terminal symbol */,\n
\t"boolean_expression" /* Non-terminal symbol */,\n
\t"expression" /* Non-terminal symbol */,\n
\t"value" /* Non-terminal symbol */,\n
\t"string" /* Non-terminal symbol */,\n
\t"$" /* Terminal symbol */\n
);\n
\n
\n
\t\n
\tinfo.offset = 0;\n
\tinfo.src = src;\n
\tinfo.att = new String();\n
\t\n
\tif( !err_off )\n
\t\terr_off\t= new Array();\n
\tif( !err_la )\n
\terr_la = new Array();\n
\t\n
\tsstack.push( 0 );\n
\tvstack.push( 0 );\n
\t\n
\tla = __NODEJS_lex( info );\n
\n
\twhile( true )\n
\t{\n
\t\tact = 25;\n
\t\tfor( var i = 0; i < act_tab[sstack[sstack.length-1]].length; i+=2 )\n
\t\t{\n
\t\t\tif( act_tab[sstack[sstack.length-1]][i] == la )\n
\t\t\t{\n
\t\t\t\tact = act_tab[sstack[sstack.length-1]][i+1];\n
\t\t\t\tbreak;\n
\t\t\t}\n
\t\t}\n
\n
\t\tif( NODEJS__dbg_withtrace && sstack.length > 0 )\n
\t\t{\n
\t\t\t__NODEJS_dbg_print( "\\nState " + sstack[sstack.length-1] + "\\n" +\n
\t\t\t\t\t\t\t"\\tLookahead: " + labels[la] + " (\\"" + info.att + "\\")\\n" +\n
\t\t\t\t\t\t\t"\\tAction: " + act + "\\n" + \n
\t\t\t\t\t\t\t"\\tSource: \\"" + info.src.substr( info.offset, 30 ) + ( ( info.offset + 30 < info.src.length ) ?\n
\t\t\t\t\t\t\t\t\t"..." : "" ) + "\\"\\n" +\n
\t\t\t\t\t\t\t"\\tStack: " + sstack.join() + "\\n" +\n
\t\t\t\t\t\t\t"\\tValue stack: " + vstack.join() + "\\n" );\n
\t\t}\n
\t\t\n
\t\t\t\n
\t\t//Panic-mode: Try recovery when parse-error occurs!\n
\t\tif( act == 25 )\n
\t\t{\n
\t\t\tif( NODEJS__dbg_withtrace )\n
\t\t\t\t__NODEJS_dbg_print( "Error detected: There is no reduce or shift on the symbol " + labels[la] );\n
\t\t\t\n
\t\t\terr_cnt++;\n
\t\t\terr_off.push( info.offset - info.att.length );\t\t\t\n
\t\t\terr_la.push( new Array() );\n
\t\t\tfor( var i = 0; i < act_tab[sstack[sstack.length-1]].length; i+=2 )\n
\t\t\t\terr_la[err_la.length-1].push( labels[act_tab[sstack[sstack.length-1]][i]] );\n
\t\t\t\n
\t\t\t//Remember the original stack!\n
\t\t\tvar rsstack = new Array();\n
\t\t\tvar rvstack = new Array();\n
\t\t\tfor( var i = 0; i < sstack.length; i++ )\n
\t\t\t{\n
\t\t\t\trsstack[i] = sstack[i];\n
\t\t\t\trvstack[i] = vstack[i];\n
\t\t\t}\n
\t\t\t\n
\t\t\twhile( act == 25 && la != 19 )\n
\t\t\t{\n
\t\t\t\tif( NODEJS__dbg_withtrace )\n
\t\t\t\t\t__NODEJS_dbg_print( "\\tError recovery\\n" +\n
\t\t\t\t\t\t\t\t\t"Current lookahead: " + labels[la] + " (" + info.att + ")\\n" +\n
\t\t\t\t\t\t\t\t\t"Action: " + act + "\\n\\n" );\n
\t\t\t\tif( la == -1 )\n
\t\t\t\t\tinfo.offset++;\n
\t\t\t\t\t\n
\t\t\t\twhile( act == 25 && sstack.length > 0 )\n
\t\t\t\t{\n
\t\t\t\t\tsstack.pop();\n
\t\t\t\t\tvstack.pop();\n
\t\t\t\t\t\n
\t\t\t\t\tif( sstack.length == 0 )\n
\t\t\t\t\t\tbreak;\n
\t\t\t\t\t\t\n
\t\t\t\t\tact = 25;\n
\t\t\t\t\tfor( var i = 0; i < act_tab[sstack[sstack.length-1]].length; i+=2 )\n
\t\t\t\t\t{\n
\t\t\t\t\t\tif( act_tab[sstack[sstack.length-1]][i] == la )\n
\t\t\t\t\t\t{\n
\t\t\t\t\t\t\tact = act_tab[sstack[sstack.length-1]][i+1];\n
\t\t\t\t\t\t\tbreak;\n
\t\t\t\t\t\t}\n
\t\t\t\t\t}\n
\t\t\t\t}\n
\t\t\t\t\n
\t\t\t\tif( act != 25 )\n
\t\t\t\t\tbreak;\n
\t\t\t\t\n
\t\t\t\tfor( var i = 0; i < rsstack.length; i++ )\n
\t\t\t\t{\n
\t\t\t\t\tsstack.push( rsstack[i] );\n
\t\t\t\t\tvstack.push( rvstack[i] );\n
\t\t\t\t}\n
\t\t\t\t\n
\t\t\t\tla = __NODEJS_lex( info );\n
\t\t\t}\n
\t\t\t\n
\t\t\tif( act == 25 )\n
\t\t\t{\n
\t\t\t\tif( NODEJS__dbg_withtrace )\n
\t\t\t\t\t__NODEJS_dbg_print( "\\tError recovery failed, terminating parse process..." );\n
\t\t\t\tbreak;\n
\t\t\t}\n
\n
\n
\t\t\tif( NODEJS__dbg_withtrace )\n
\t\t\t\t__NODEJS_dbg_print( "\\tError recovery succeeded, continuing" );\n
\t\t}\n
\t\t\n
\t\t/*\n
\t\tif( act == 25 )\n
\t\t\tbreak;\n
\t\t*/\n
\t\t\n
\t\t\n
\t\t//Shift\n
\t\tif( act > 0 )\n
\t\t{\t\t\t\n
\t\t\tif( NODEJS__dbg_withtrace )\n
\t\t\t\t__NODEJS_dbg_print( "Shifting symbol: " + labels[la] + " (" + info.att + ")" );\n
\t\t\n
\t\t\tsstack.push( act );\n
\t\t\tvstack.push( info.att );\n
\t\t\t\n
\t\t\tla = __NODEJS_lex( info );\n
\t\t\t\n
\t\t\tif( NODEJS__dbg_withtrace )\n
\t\t\t\t__NODEJS_dbg_print( "\\tNew lookahead symbol: " + labels[la] + " (" + info.att + ")" );\n
\t\t}\n
\t\t//Reduce\n
\t\telse\n
\t\t{\t\t\n
\t\t\tact *= -1;\n
\t\t\t\n
\t\t\tif( NODEJS__dbg_withtrace )\n
\t\t\t\t__NODEJS_dbg_print( "Reducing by producution: " + act );\n
\t\t\t\n
\t\t\trval = void(0);\n
\t\t\t\n
\t\t\tif( NODEJS__dbg_withtrace )\n
\t\t\t\t__NODEJS_dbg_print( "\\tPerforming semantic action..." );\n
\t\t\t\n
switch( act )\n
{\n
\tcase 0:\n
\t{\n
\t\trval = vstack[ vstack.length - 1 ];\n
\t}\n
\tbreak;\n
\tcase 1:\n
\t{\n
\t\t result = vstack[ vstack.length - 1 ]; \n
\t}\n
\tbreak;\n
\tcase 2:\n
\t{\n
\t\t rval = vstack[ vstack.length - 1 ]; \n
\t}\n
\tbreak;\n
\tcase 3:\n
\t{\n
\t\t rval = mkComplexQuery(\'OR\',[vstack[ vstack.length - 2 ],vstack[ vstack.length - 1 ]]); \n
\t}\n
\tbreak;\n
\tcase 4:\n
\t{\n
\t\t rval = mkComplexQuery(\'OR\',[vstack[ vstack.length - 3 ],vstack[ vstack.length - 1 ]]); \n
\t}\n
\tbreak;\n
\tcase 5:\n
\t{\n
\t\t rval = vstack[ vstack.length - 1 ] ; \n
\t}\n
\tbreak;\n
\tcase 6:\n
\t{\n
\t\t rval = mkComplexQuery(\'AND\',[vstack[ vstack.length - 3 ],vstack[ vstack.length - 1 ]]); \n
\t}\n
\tbreak;\n
\tcase 7:\n
\t{\n
\t\t rval = mkNotQuery(vstack[ vstack.length - 1 ]); \n
\t}\n
\tbreak;\n
\tcase 8:\n
\t{\n
\t\t rval = vstack[ vstack.length - 1 ]; \n
\t}\n
\tbreak;\n
\tcase 9:\n
\t{\n
\t\t rval = vstack[ vstack.length - 2 ]; \n
\t}\n
\tbreak;\n
\tcase 10:\n
\t{\n
\t\t simpleQuerySetKey(vstack[ vstack.length - 1 ],vstack[ vstack.length - 2 ].split(\':\').slice(0,-1).join(\':\')); rval = vstack[ vstack.length - 1 ]; \n
\t}\n
\tbreak;\n
\tcase 11:\n
\t{\n
\t\t rval = vstack[ vstack.length - 1 ]; \n
\t}\n
\tbreak;\n
\tcase 12:\n
\t{\n
\t\t vstack[ vstack.length - 1 ].operator = vstack[ vstack.length - 2 ] ; rval = vstack[ vstack.length - 1 ]; \n
\t}\n
\tbreak;\n
\tcase 13:\n
\t{\n
\t\t rval = vstack[ vstack.length - 1 ]; \n
\t}\n
\tbreak;\n
\tcase 14:\n
\t{\n
\t\t rval = mkSimpleQuery(\'\',vstack[ vstack.length - 1 ]); \n
\t}\n
\tbreak;\n
\tcase 15:\n
\t{\n
\t\t rval = mkSimpleQuery(\'\',vstack[ vstack.length - 1 ].split(\'"\').slice(1,-1).join(\'"\')); \n
\t}\n
\tbreak;\n
}\n
\n
\n
\n
\t\t\tif( NODEJS__dbg_withtrace )\n
\t\t\t\t__NODEJS_dbg_print( "\\tPopping " + pop_tab[act][1] + " off the stack..." );\n
\t\t\t\t\n
\t\t\tfor( var i = 0; i < pop_tab[act][1]; i++ )\n
\t\t\t{\n
\t\t\t\tsstack.pop();\n
\t\t\t\tvstack.pop();\n
\t\t\t}\n
\t\t\t\t\t\t\t\t\t\n
\t\t\tgo = -1;\n
\t\t\tfor( var i = 0; i < goto_tab[sstack[sstack.length-1]].length; i+=2 )\n
\t\t\t{\n
\t\t\t\tif( goto_tab[sstack[sstack.length-1]][i] == pop_tab[act][0] )\n
\t\t\t\t{\n
\t\t\t\t\tgo = goto_tab[sstack[sstack.length-1]][i+1];\n
\t\t\t\t\tbreak;\n
\t\t\t\t}\n
\t\t\t}\n
\t\t\t\n
\t\t\tif( act == 0 )\n
\t\t\t\tbreak;\n
\t\t\t\t\n
\t\t\tif( NODEJS__dbg_withtrace )\n
\t\t\t\t__NODEJS_dbg_print( "\\tPushing non-terminal " + labels[ pop_tab[act][0] ] );\n
\t\t\t\t\n
\t\t\tsstack.push( go );\n
\t\t\tvstack.push( rval );\t\t\t\n
\t\t}\n
\t\t\n
\t\tif( NODEJS__dbg_withtrace )\n
\t\t{\t\t\n
\t\t\talert( NODEJS__dbg_string );\n
\t\t\tNODEJS__dbg_string = new String();\n
\t\t}\n
\t}\n
\n
\tif( NODEJS__dbg_withtrace )\n
\t{\n
\t\t__NODEJS_dbg_print( "\\nParse complete." );\n
\t\talert( NODEJS__dbg_string );\n
\t}\n
\t\n
\treturn err_cnt;\n
}\n
\n
\n
\n
var arrayExtend = function () {\n
var j, i, newlist = [], list_list = arguments;\n
for (j = 0; j < list_list.length; j += 1) {\n
for (i = 0; i < list_list[j].length; i += 1) {\n
newlist.push(list_list[j][i]);\n
}\n
}\n
return newlist;\n
\n
}, mkSimpleQuery = function (key, value, operator) {\n
var object = {"type": "simple", "key": key, "value": value};\n
if (operator !== undefined) {\n
object.operator = operator;\n
}\n
return object;\n
\n
}, mkNotQuery = function (query) {\n
if (query.operator === "NOT") {\n
return query.query_list[0];\n
}\n
return {"type": "complex", "operator": "NOT", "query_list": [query]};\n
\n
}, mkComplexQuery = function (operator, query_list) {\n
var i, query_list2 = [];\n
for (i = 0; i < query_list.length; i += 1) {\n
if (query_list[i].operator === operator) {\n
query_list2 = arrayExtend(query_list2, query_list[i].query_list);\n
} else {\n
query_list2.push(query_list[i]);\n
}\n
}\n
return {type:"complex",operator:operator,query_list:query_list2};\n
\n
}, simpleQuerySetKey = function (query, key) {\n
var i;\n
if (query.type === "complex") {\n
for (i = 0; i < query.query_list.length; ++i) {\n
simpleQuerySetKey (query.query_list[i],key);\n
}\n
return true;\n
}\n
if (query.type === "simple" && !query.key) {\n
query.key = key;\n
return true;\n
}\n
return false;\n
},\n
error_offsets = [],\n
error_lookaheads = [],\n
error_count = 0,\n
result;\n
\n
if ((error_count = __NODEJS_parse(string, error_offsets, error_lookaheads)) > 0) {\n
var i;\n
for (i = 0; i < error_count; i += 1) {\n
throw new Error("Parse error near \\"" +\n
string.substr(error_offsets[i]) +\n
"\\", expecting \\"" +\n
error_lookaheads[i].join() + "\\"");\n
}\n
}\n
\n
\n
return result;\n
} // parseStringToObject\n
\n
_export(\'parseStringToObject\', parseStringToObject);\n
\n
/*jslint indent: 2, maxlen: 80, sloppy: true */\n
\n
var query_class_dict = {};\n
\n
/*jslint indent: 2, maxlen: 80, sloppy: true, nomen: true */\n
/*global Query: true, query_class_dict: true, inherits: true,\n
_export, QueryFactory, RSVP, sequence */\n
\n
/**\n
* The ComplexQuery inherits from Query, and compares one or several metadata\n
* values.\n
*\n
* @class ComplexQuery\n
* @extends Query\n
* @param {Object} [spec={}] The specifications\n
* @param {String} [spec.operator="AND"] The compare method to use\n
* @param {String} spec.key The metadata key\n
* @param {String} spec.value The value of the metadata to compare\n
*/\n
function ComplexQuery(spec, key_schema) {\n
Query.call(this);\n
\n
/**\n
* Logical operator to use to compare object values\n
*\n
* @attribute operator\n
* @type String\n
* @default "AND"\n
* @optional\n
*/\n
this.operator = spec.operator || "AND";\n
\n
/**\n
* The sub Query list which are used to query an item.\n
*\n
* @attribute query_list\n
* @type Array\n
* @default []\n
* @optional\n
*/\n
this.query_list = spec.query_list || [];\n
/*jslint unparam: true*/\n
this.query_list = this.query_list.map(\n
// decorate the map to avoid sending the index as key_schema argument\n
function (o, i) { return QueryFactory.create(o, key_schema); }\n
);\n
/*jslint unparam: false*/\n
\n
}\n
inherits(ComplexQuery, Query);\n
\n
/**\n
* #crossLink "Query/match:method"\n
*/\n
ComplexQuery.prototype.match = function (item) {\n
var operator = this.operator;\n
if (!(/^(?:AND|OR|NOT)$/i.test(operator))) {\n
operator = "AND";\n
}\n
return this[operator.toUpperCase()](item);\n
};\n
\n
/**\n
* #crossLink "Query/toString:method"\n
*/\n
ComplexQuery.prototype.toString = function () {\n
var str_list = ["("], this_operator = this.operator;\n
this.query_list.forEach(function (query) {\n
str_list.push(query.toString());\n
str_list.push(this_operator);\n
});\n
str_list[str_list.length - 1] = ")"; // replace last operator\n
return str_list.join(" ");\n
};\n
\n
/**\n
* #crossLink "Query/serialized:method"\n
*/\n
ComplexQuery.prototype.serialized = function () {\n
var s = {\n
"type": "complex",\n
"operator": this.operator,\n
"query_list": []\n
};\n
this.query_list.forEach(function (query) {\n
s.query_list.push(query.serialized());\n
});\n
return s;\n
};\n
ComplexQuery.prototype.toJSON = ComplexQuery.prototype.serialized;\n
\n
/**\n
* Comparison operator, test if all sub queries match the\n
* item value\n
*\n
* @method AND\n
* @param {Object} item The item to match\n
* @return {Boolean} true if all match, false otherwise\n
*/\n
ComplexQuery.prototype.AND = function (item) {\n
var j, promises = [];\n
for (j = 0; j < this.query_list.length; j += 1) {\n
promises.push(this.query_list[j].match(item));\n
}\n
\n
function cancel() {\n
var i;\n
for (i = 0; i < promises.length; i += 1) {\n
if (typeof promises.cancel === \'function\') {\n
promises.cancel();\n
}\n
}\n
}\n
\n
return new RSVP.Promise(function (resolve, reject) {\n
var i, count = 0;\n
function resolver(value) {\n
if (!value) {\n
resolve(false);\n
}\n
count += 1;\n
if (count === promises.length) {\n
resolve(true);\n
}\n
}\n
\n
function rejecter(err) {\n
reject(err);\n
cancel();\n
}\n
\n
for (i = 0; i < promises.length; i += 1) {\n
promises[i].then(resolver, rejecter);\n
}\n
}, cancel);\n
};\n
\n
/**\n
* Comparison operator, test if one of the sub queries matches the\n
* item value\n
*\n
* @method OR\n
* @param {Object} item The item to match\n
* @return {Boolean} true if one match, false otherwise\n
*/\n
ComplexQuery.prototype.OR = function (item) {\n
var j, promises = [];\n
for (j = 0; j < this.query_list.length; j += 1) {\n
promises.push(this.query_list[j].match(item));\n
}\n
\n
function cancel() {\n
var i;\n
for (i = 0; i < promises.length; i += 1) {\n
if (typeof promises.cancel === \'function\') {\n
promises.cancel();\n
}\n
}\n
}\n
\n
return new RSVP.Promise(function (resolve, reject) {\n
var i, count = 0;\n
function resolver(value) {\n
if (value) {\n
resolve(true);\n
}\n
count += 1;\n
if (count === promises.length) {\n
resolve(false);\n
}\n
}\n
\n
function rejecter(err) {\n
reject(err);\n
cancel();\n
}\n
\n
for (i = 0; i < promises.length; i += 1) {\n
promises[i].then(resolver, rejecter);\n
}\n
}, cancel);\n
};\n
\n
/**\n
* Comparison operator, test if the sub query does not match the\n
* item value\n
*\n
* @method NOT\n
* @param {Object} item The item to match\n
* @return {Boolean} true if one match, false otherwise\n
*/\n
ComplexQuery.prototype.NOT = function (item) {\n
return sequence([function () {\n
return this.query_list[0].match(item);\n
}, function (answer) {\n
return !answer;\n
}]);\n
};\n
\n
query_class_dict.complex = ComplexQuery;\n
\n
_export("ComplexQuery", ComplexQuery);\n
\n
/*jslint indent: 2, maxlen: 80, sloppy: true, nomen: true */\n
/*global parseStringToObject: true, emptyFunction: true, sortOn: true, limit:\n
true, select: true, _export: true, stringEscapeRegexpCharacters: true,\n
deepClone, RSVP, sequence */\n
\n
/**\n
* The query to use to filter a list of objects.\n
* This is an abstract class.\n
*\n
* @class Query\n
* @constructor\n
*/\n
function Query() {\n
\n
/**\n
* Called before parsing the query. Must be overridden!\n
*\n
* @method onParseStart\n
* @param {Object} object The object shared in the parse process\n
* @param {Object} option Some option gave in parse()\n
*/\n
this.onParseStart = emptyFunction;\n
\n
/**\n
* Called when parsing a simple query. Must be overridden!\n
*\n
* @method onParseSimpleQuery\n
* @param {Object} object The object shared in the parse process\n
* @param {Object} option Some option gave in parse()\n
*/\n
this.onParseSimpleQuery = emptyFunction;\n
\n
/**\n
* Called when parsing a complex query. Must be overridden!\n
*\n
* @method onParseComplexQuery\n
* @param {Object} object The object shared in the parse process\n
* @param {Object} option Some option gave in parse()\n
*/\n
this.onParseComplexQuery = emptyFunction;\n
\n
/**\n
* Called after parsing the query. Must be overridden!\n
*\n
* @method onParseEnd\n
* @param {Object} object The object shared in the parse process\n
* @param {Object} option Some option gave in parse()\n
*/\n
this.onParseEnd = emptyFunction;\n
\n
}\n
\n
/**\n
* Filter the item list with matching item only\n
*\n
* @method exec\n
* @param {Array} item_list The list of object\n
* @param {Object} [option] Some operation option\n
* @param {Array} [option.select_list] A object keys to retrieve\n
* @param {Array} [option.sort_on] Couples of object keys and "ascending"\n
* or "descending"\n
* @param {Array} [option.limit] Couple of integer, first is an index and\n
* second is the length.\n
*/\n
Query.prototype.exec = function (item_list, option) {\n
var i, promises = [];\n
if (!Array.isArray(item_list)) {\n
throw new TypeError("Query().exec(): Argument 1 is not of type \'array\'");\n
}\n
if (option === undefined) {\n
option = {};\n
}\n
if (typeof option !== \'object\') {\n
throw new TypeError("Query().exec(): " +\n
"Optional argument 2 is not of type \'object\'");\n
}\n
for (i = 0; i < item_list.length; i += 1) {\n
if (!item_list[i]) {\n
promises.push(RSVP.resolve(false));\n
} else {\n
promises.push(this.match(item_list[i]));\n
}\n
}\n
return sequence([function () {\n
return RSVP.all(promises);\n
}, function (answers) {\n
var j;\n
for (j = answers.length - 1; j >= 0; j -= 1) {\n
if (!answers[j]) {\n
item_list.splice(j, 1);\n
}\n
}\n
if (option.sort_on) {\n
return sortOn(option.sort_on, item_list);\n
}\n
}, function () {\n
if (option.limit) {\n
return limit(option.limit, item_list);\n
}\n
}, function () {\n
return select(option.select_list || [], item_list);\n
}, function () {\n
return item_list;\n
}]);\n
};\n
\n
/**\n
* Test if an item matches this query\n
*\n
* @method match\n
* @param {Object} item The object to test\n
* @return {Boolean} true if match, false otherwise\n
*/\n
Query.prototype.match = function () {\n
return RSVP.resolve(true);\n
};\n
\n
\n
/**\n
* Browse the Query in deep calling parser method in each step.\n
*\n
* `onParseStart` is called first, on end `onParseEnd` is called.\n
* It starts from the simple queries at the bottom of the tree calling the\n
* parser method `onParseSimpleQuery`, and go up calling the\n
* `onParseComplexQuery` method.\n
*\n
* @method parse\n
* @param {Object} option Any options you want (except \'parsed\')\n
* @return {Any} The parse result\n
*/\n
Query.prototype.parse = function (option) {\n
var that = this, object;\n
/**\n
* The recursive parser.\n
*\n
* @param {Object} object The object shared in the parse process\n
* @param {Object} options Some options usable in the parseMethods\n
* @return {Any} The parser result\n
*/\n
function recParse(object, option) {\n
var query = object.parsed;\n
if (query.type === "complex") {\n
return sequence([function () {\n
return sequence(query.query_list.map(function (v, i) {\n
/*jslint unparam: true */\n
return function () {\n
sequence([function () {\n
object.parsed = query.query_list[i];\n
return recParse(object, option);\n
}, function () {\n
query.query_list[i] = object.parsed;\n
}]);\n
};\n
}));\n
}, function () {\n
object.parsed = query;\n
return that.onParseComplexQuery(object, option);\n
}]);\n
}\n
if (query.type === "simple") {\n
return that.onParseSimpleQuery(object, option);\n
}\n
}\n
object = {"parsed": JSON.parse(JSON.stringify(that.serialized()))};\n
return sequence([function () {\n
return that.onParseStart(object, option);\n
}, function () {\n
return recParse(object, option);\n
}, function () {\n
return that.onParseEnd(object, option);\n
}, function () {\n
return object.parsed;\n
}]);\n
};\n
\n
/**\n
* Convert this query to a parsable string.\n
*\n
* @method toString\n
* @return {String} The string version of this query\n
*/\n
Query.prototype.toString = function () {\n
return "";\n
};\n
\n
/**\n
* Convert this query to an jsonable object in order to be remake thanks to\n
* QueryFactory class.\n
*\n
* @method serialized\n
* @return {Object} The jsonable object\n
*/\n
Query.prototype.serialized = function () {\n
return undefined;\n
};\n
\n
_export("Query", Query);\n
\n
/*jslint indent: 2, maxlen: 80, sloppy: true, nomen: true */\n
/*global _export, ComplexQuery, SimpleQuery, Query, parseStringToObject,\n
query_class_dict */\n
\n
/**\n
* Provides static methods to create Query object\n
*\n
* @class QueryFactory\n
*/\n
function QueryFactory() {\n
return;\n
}\n
\n
/**\n
* Creates Query object from a search text string or a serialized version\n
* of a Query.\n
*\n
* @method create\n
* @static\n
* @param {Object,String} object The search text or the serialized version\n
* of a Query\n
* @return {Query} A Query object\n
*/\n
QueryFactory.create = function (object, key_schema) {\n
if (object === "") {\n
return new Query();\n
}\n
if (typeof object === "string") {\n
object = parseStringToObject(object);\n
}\n
if (typeof (object || {}).type === "string" &&\n
query_class_dict[object.type]) {\n
return new query_class_dict[object.type](object, key_schema);\n
}\n
throw new TypeError("QueryFactory.create(): " +\n
"Argument 1 is not a search text or a parsable object");\n
};\n
\n
_export("QueryFactory", QueryFactory);\n
\n
/*jslint indent: 2, maxlen: 80, sloppy: true, nomen: true */\n
/*global _export: true */\n
\n
function objectToSearchText(query) {\n
var str_list = [];\n
if (query.type === "complex") {\n
str_list.push("(");\n
(query.query_list || []).forEach(function (sub_query) {\n
str_list.push(objectToSearchText(sub_query));\n
str_list.push(query.operator);\n
});\n
str_list.length -= 1;\n
str_list.push(")");\n
return str_list.join(" ");\n
}\n
if (query.type === "simple") {\n
return (query.key ? query.key + ": " : "") +\n
(query.operator || "") + \' "\' + query.value + \'"\';\n
}\n
throw new TypeError("This object is not a query");\n
}\n
_export("objectToSearchText", objectToSearchText);\n
\n
/*jslint indent: 2, maxlen: 80, sloppy: true, nomen: true */\n
/*global Query: true, inherits: true, query_class_dict: true, _export: true,\n
searchTextToRegExp, RSVP */\n
\n
var checkKeySchema = function (key_schema) {\n
var prop;\n
\n
if (key_schema !== undefined) {\n
if (typeof key_schema !== \'object\') {\n
throw new TypeError("SimpleQuery().create(): " +\n
"key_schema is not of type \'object\'");\n
}\n
// key_set is mandatory\n
if (key_schema.key_set === undefined) {\n
throw new TypeError("SimpleQuery().create(): " +\n
"key_schema has no \'key_set\' property");\n
}\n
for (prop in key_schema) {\n
if (key_schema.hasOwnProperty(prop)) {\n
switch (prop) {\n
case \'key_set\':\n
case \'cast_lookup\':\n
case \'match_lookup\':\n
break;\n
default:\n
throw new TypeError("SimpleQuery().create(): " +\n
"key_schema has unknown property \'" + prop + "\'");\n
}\n
}\n
}\n
}\n
};\n
\n
\n
/**\n
* The SimpleQuery inherits from Query, and compares one metadata value\n
*\n
* @class SimpleQuery\n
* @extends Query\n
* @param {Object} [spec={}] The specifications\n
* @param {String} [spec.operator="="] The compare method to use\n
* @param {String} spec.key The metadata key\n
* @param {String} spec.value The value of the metadata to compare\n
*/\n
function SimpleQuery(spec, key_schema) {\n
Query.call(this);\n
\n
checkKeySchema(key_schema);\n
\n
this._key_schema = key_schema || {};\n
\n
/**\n
* Operator to use to compare object values\n
*\n
* @attribute operator\n
* @type String\n
* @optional\n
*/\n
this.operator = spec.operator;\n
\n
/**\n
* Key of the object which refers to the value to compare\n
*\n
* @attribute key\n
* @type String\n
*/\n
this.key = spec.key;\n
\n
/**\n
* Value is used to do the comparison with the object value\n
*\n
* @attribute value\n
* @type String\n
*/\n
this.value = spec.value;\n
\n
}\n
inherits(SimpleQuery, Query);\n
\n
\n
var checkKey = function (key) {\n
var prop;\n
\n
if (key.read_from === undefined) {\n
throw new TypeError("Custom key is missing the read_from property");\n
}\n
\n
for (prop in key) {\n
if (key.hasOwnProperty(prop)) {\n
switch (prop) {\n
case \'read_from\':\n
case \'cast_to\':\n
case \'equal_match\':\n
break;\n
default:\n
throw new TypeError("Custom key has unknown property \'" +\n
prop + "\'");\n
}\n
}\n
}\n
};\n
\n
\n
/**\n
* #crossLink "Query/match:method"\n
*/\n
SimpleQuery.prototype.match = function (item) {\n
var object_value = null,\n
equal_match = null,\n
cast_to = null,\n
matchMethod = null,\n
operator = this.operator,\n
value = null,\n
key = this.key;\n
\n
/*jslint regexp: true */\n
if (!(/^(?:!?=|<=?|>=?)$/i.test(operator))) {\n
// `operator` is not correct, we have to change it to "like" or "="\n
if (/%/.test(this.value)) {\n
// `value` contains a non escaped `%`\n
operator = "like";\n
} else {\n
// `value` does not contain non escaped `%`\n
operator = "=";\n
}\n
}\n
\n
matchMethod = this[operator];\n
\n
if (this._key_schema.key_set && this._key_schema.key_set[key] !== undefined) {\n
key = this._key_schema.key_set[key];\n
}\n
\n
if (typeof key === \'object\') {\n
checkKey(key);\n
object_value = item[key.read_from];\n
\n
equal_match = key.equal_match;\n
\n
// equal_match can be a string\n
if (typeof equal_match === \'string\') {\n
// XXX raise error if equal_match not in match_lookup\n
equal_match = this._key_schema.match_lookup[equal_match];\n
}\n
\n
// equal_match overrides the default \'=\' operator\n
if (equal_match !== undefined) {\n
matchMethod = (operator === "=" || operator === "like" ?\n
equal_match : matchMethod);\n
}\n
\n
value = this.value;\n
cast_to = key.cast_to;\n
if (cast_to) {\n
// cast_to can be a string\n
if (typeof cast_to === \'string\') {\n
// XXX raise error if cast_to not in cast_lookup\n
cast_to = this._key_schema.cast_lookup[cast_to];\n
}\n
\n
value = cast_to(value);\n
object_value = cast_to(object_value);\n
}\n
} else {\n
object_value = item[key];\n
value = this.value;\n
}\n
if (object_value === undefined || value === undefined) {\n
return RSVP.resolve(false);\n
}\n
return matchMethod(object_value, value);\n
};\n
\n
/**\n
* #crossLink "Query/toString:method"\n
*/\n
SimpleQuery.prototype.toString = function () {\n
return (this.key ? this.key + ":" : "") +\n
(this.operator ? " " + this.operator : "") + \' "\' + this.value + \'"\';\n
};\n
\n
/**\n
* #crossLink "Query/serialized:method"\n
*/\n
SimpleQuery.prototype.serialized = function () {\n
var object = {\n
"type": "simple",\n
"key": this.key,\n
"value": this.value\n
};\n
if (this.operator !== undefined) {\n
object.operator = this.operator;\n
}\n
return object;\n
};\n
SimpleQuery.prototype.toJSON = SimpleQuery.prototype.serialized;\n
\n
/**\n
* Comparison operator, test if this query value matches the item value\n
*\n
* @method =\n
* @param {String} object_value The value to compare\n
* @param {String} comparison_value The comparison value\n
* @return {Boolean} true if match, false otherwise\n
*/\n
SimpleQuery.prototype["="] = function (object_value, comparison_value) {\n
var value, i;\n
if (!Array.isArray(object_value)) {\n
object_value = [object_value];\n
}\n
for (i = 0; i < object_value.length; i += 1) {\n
value = object_value[i];\n
if (typeof value === \'object\' && value.hasOwnProperty(\'content\')) {\n
value = value.content;\n
}\n
if (typeof value.cmp === "function") {\n
return RSVP.resolve(value.cmp(comparison_value) === 0);\n
}\n
if (\n
searchTextToRegExp(comparison_value.toString(), false).\n
test(value.toString())\n
) {\n
return RSVP.resolve(true);\n
}\n
}\n
return RSVP.resolve(false);\n
};\n
\n
/**\n
* Comparison operator, test if this query value matches the item value\n
*\n
* @method like\n
* @param {String} object_value The value to compare\n
* @param {String} comparison_value The comparison value\n
* @return {Boolean} true if match, false otherwise\n
*/\n
SimpleQuery.prototype.like = function (object_value, comparison_value) {\n
var value, i;\n
if (!Array.isArray(object_value)) {\n
object_value = [object_value];\n
}\n
for (i = 0; i < object_value.length; i += 1) {\n
value = object_value[i];\n
if (typeof value === \'object\' && value.hasOwnProperty(\'content\')) {\n
value = value.content;\n
}\n
if (typeof value.cmp === "function") {\n
return RSVP.resolve(value.cmp(comparison_value) === 0);\n
}\n
if (\n
searchTextToRegExp(comparison_value.toString()).test(value.toString())\n
) {\n
return RSVP.resolve(true);\n
}\n
}\n
return RSVP.resolve(false);\n
};\n
\n
/**\n
* Comparison operator, test if this query value does not match the item value\n
*\n
* @method !=\n
* @param {String} object_value The value to compare\n
* @param {String} comparison_value The comparison value\n
* @return {Boolean} true if not match, false otherwise\n
*/\n
SimpleQuery.prototype["!="] = function (object_value, comparison_value) {\n
var value, i;\n
if (!Array.isArray(object_value)) {\n
object_value = [object_value];\n
}\n
for (i = 0; i < object_value.length; i += 1) {\n
value = object_value[i];\n
if (typeof value === \'object\' && value.hasOwnProperty(\'content\')) {\n
value = value.content;\n
}\n
if (typeof value.cmp === "function") {\n
return RSVP.resolve(value.cmp(comparison_value) !== 0);\n
}\n
if (\n
searchTextToRegExp(comparison_value.toString(), false).\n
test(value.toString())\n
) {\n
return RSVP.resolve(false);\n
}\n
}\n
return RSVP.resolve(true);\n
};\n
\n
/**\n
* Comparison operator, test if this query value is lower than the item value\n
*\n
* @method <\n
* @param {Number, String} object_value The value to compare\n
* @param {Number, String} comparison_value The comparison value\n
* @return {Boolean} true if lower, false otherwise\n
*/\n
SimpleQuery.prototype["<"] = function (object_value, comparison_value) {\n
var value;\n
if (!Array.isArray(object_value)) {\n
object_value = [object_value];\n
}\n
value = object_value[0];\n
if (typeof value === \'object\' && value.hasOwnProperty(\'content\')) {\n
value = value.content;\n
}\n
if (typeof value.cmp === "function") {\n
return RSVP.resolve(value.cmp(comparison_value) < 0);\n
}\n
return RSVP.resolve(value < comparison_value);\n
};\n
\n
/**\n
* Comparison operator, test if this query value is equal or lower than the\n
* item value\n
*\n
* @method <=\n
* @param {Number, String} object_value The value to compare\n
* @param {Number, String} comparison_value The comparison value\n
* @return {Boolean} true if equal or lower, false otherwise\n
*/\n
SimpleQuery.prototype["<="] = function (object_value, comparison_value) {\n
var value;\n
if (!Array.isArray(object_value)) {\n
object_value = [object_value];\n
}\n
value = object_value[0];\n
if (typeof value === \'object\' && value.hasOwnProperty(\'content\')) {\n
value = value.content;\n
}\n
if (typeof value.cmp === "function") {\n
return RSVP.resolve(value.cmp(comparison_value) <= 0);\n
}\n
return RSVP.resolve(value <= comparison_value);\n
};\n
\n
/**\n
* Comparison operator, test if this query value is greater than the item\n
* value\n
*\n
* @method >\n
* @param {Number, String} object_value The value to compare\n
* @param {Number, String} comparison_value The comparison value\n
* @return {Boolean} true if greater, false otherwise\n
*/\n
SimpleQuery.prototype[">"] = function (object_value, comparison_value) {\n
var value;\n
if (!Array.isArray(object_value)) {\n
object_value = [object_value];\n
}\n
value = object_value[0];\n
if (typeof value === \'object\' && value.hasOwnProperty(\'content\')) {\n
value = value.content;\n
}\n
if (typeof value.cmp === "function") {\n
return RSVP.resolve(value.cmp(comparison_value) > 0);\n
}\n
return RSVP.resolve(value > comparison_value);\n
};\n
\n
/**\n
* Comparison operator, test if this query value is equal or greater than the\n
* item value\n
*\n
* @method >=\n
* @param {Number, String} object_value The value to compare\n
* @param {Number, String} comparison_value The comparison value\n
* @return {Boolean} true if equal or greater, false otherwise\n
*/\n
SimpleQuery.prototype[">="] = function (object_value, comparison_value) {\n
var value;\n
if (!Array.isArray(object_value)) {\n
object_value = [object_value];\n
}\n
value = object_value[0];\n
if (typeof value === \'object\' && value.hasOwnProperty(\'content\')) {\n
value = value.content;\n
}\n
if (typeof value.cmp === "function") {\n
return RSVP.resolve(value.cmp(comparison_value) >= 0);\n
}\n
return RSVP.resolve(value >= comparison_value);\n
};\n
\n
query_class_dict.simple = SimpleQuery;\n
\n
_export("SimpleQuery", SimpleQuery);\n
\n
/*jslint indent: 2, maxlen: 80, sloppy: true, nomen: true */\n
/*global _export, RSVP */\n
\n
/**\n
* Escapes regexp special chars from a string.\n
*\n
* @param {String} string The string to escape\n
* @return {String} The escaped string\n
*/\n
function stringEscapeRegexpCharacters(string) {\n
if (typeof string === "string") {\n
return string.replace(/([\\\\\\.\\$\\[\\]\\(\\)\\{\\}\\^\\?\\*\\+\\-])/g, "\\\\$1");\n
}\n
throw new TypeError("complex_queries.stringEscapeRegexpCharacters(): " +\n
"Argument no 1 is not of type \'string\'");\n
}\n
\n
_export("stringEscapeRegexpCharacters", stringEscapeRegexpCharacters);\n
\n
/**\n
* Convert metadata values to array of strings. ex:\n
*\n
* "a" -> ["a"],\n
* {"content": "a"} -> ["a"]\n
*\n
* @param {Any} value The metadata value\n
* @return {Array} The value in string array format\n
*/\n
function metadataValueToStringArray(value) {\n
var i, new_value = [];\n
if (value === undefined) {\n
return undefined;\n
}\n
if (!Array.isArray(value)) {\n
value = [value];\n
}\n
for (i = 0; i < value.length; i += 1) {\n
if (typeof value[i] === \'object\') {\n
new_value[i] = value[i].content;\n
} else {\n
new_value[i] = value[i];\n
}\n
}\n
return new_value;\n
}\n
\n
/**\n
* A sort function to sort items by key\n
*\n
* @param {String} key The key to sort on\n
* @param {String} [way="ascending"] \'ascending\' or \'descending\'\n
* @return {Function} The sort function\n
*/\n
function sortFunction(key, way) {\n
if (way === \'descending\') {\n
return function (a, b) {\n
// this comparison is 5 times faster than json comparison\n
var i, l;\n
a = metadataValueToStringArray(a[key]) || [];\n
b = metadataValueToStringArray(b[key]) || [];\n
l = a.length > b.length ? a.length : b.length;\n
for (i = 0; i < l; i += 1) {\n
if (a[i] === undefined) {\n
return 1;\n
}\n
if (b[i] === undefined) {\n
return -1;\n
}\n
if (a[i] > b[i]) {\n
return -1;\n
}\n
if (a[i] < b[i]) {\n
return 1;\n
}\n
}\n
return 0;\n
};\n
}\n
if (way === \'ascending\') {\n
return function (a, b) {\n
// this comparison is 5 times faster than json comparison\n
var i, l;\n
a = metadataValueToStringArray(a[key]) || [];\n
b = metadataValueToStringArray(b[key]) || [];\n
l = a.length > b.length ? a.length : b.length;\n
for (i = 0; i < l; i += 1) {\n
if (a[i] === undefined) {\n
return -1;\n
}\n
if (b[i] === undefined) {\n
return 1;\n
}\n
if (a[i] > b[i]) {\n
return 1;\n
}\n
if (a[i] < b[i]) {\n
return -1;\n
}\n
}\n
return 0;\n
};\n
}\n
throw new TypeError("complex_queries.sortFunction(): " +\n
"Argument 2 must be \'ascending\' or \'descending\'");\n
}\n
\n
/**\n
* Clones all native object in deep. Managed types: Object, Array, String,\n
* Number, Boolean, null.\n
*\n
* @param {A} object The object to clone\n
* @return {A} The cloned object\n
*/\n
function deepClone(object) {\n
var i, cloned;\n
if (Array.isArray(object)) {\n
cloned = [];\n
for (i = 0; i < object.length; i += 1) {\n
cloned[i] = deepClone(object[i]);\n
}\n
return cloned;\n
}\n
if (typeof object === "object") {\n
cloned = {};\n
for (i in object) {\n
if (object.hasOwnProperty(i)) {\n
cloned[i] = deepClone(object[i]);\n
}\n
}\n
return cloned;\n
}\n
return object;\n
}\n
\n
/**\n
* Inherits the prototype methods from one constructor into another. The\n
* prototype of `constructor` will be set to a new object created from\n
* `superConstructor`.\n
*\n
* @param {Function} constructor The constructor which inherits the super one\n
* @param {Function} superConstructor The super constructor\n
*/\n
function inherits(constructor, superConstructor) {\n
constructor.super_ = superConstructor;\n
constructor.prototype = Object.create(superConstructor.prototype, {\n
"constructor": {\n
"configurable": true,\n
"enumerable": false,\n
"writable": true,\n
"value": constructor\n
}\n
});\n
}\n
\n
/**\n
* Does nothing\n
*/\n
function emptyFunction() {\n
return;\n
}\n
\n
/**\n
* Filter a list of items, modifying them to select only wanted keys. If\n
* `clone` is true, then the method will act on a cloned list.\n
*\n
* @param {Array} select_option Key list to keep\n
* @param {Array} list The item list to filter\n
* @param {Boolean} [clone=false] If true, modifies a clone of the list\n
* @return {Array} The filtered list\n
*/\n
function select(select_option, list, clone) {\n
var i, j, new_item;\n
if (!Array.isArray(select_option)) {\n
throw new TypeError("complex_queries.select(): " +\n
"Argument 1 is not of type Array");\n
}\n
if (!Array.isArray(list)) {\n
throw new TypeError("complex_queries.select(): " +\n
"Argument 2 is not of type Array");\n
}\n
if (clone === true) {\n
list = deepClone(list);\n
}\n
for (i = 0; i < list.length; i += 1) {\n
new_item = {};\n
for (j = 0; j < select_option.length; j += 1) {\n
if (list[i].hasOwnProperty([select_option[j]])) {\n
new_item[select_option[j]] = list[i][select_option[j]];\n
}\n
}\n
for (j in new_item) {\n
if (new_item.hasOwnProperty(j)) {\n
list[i] = new_item;\n
break;\n
}\n
}\n
}\n
return list;\n
}\n
\n
_export(\'select\', select);\n
\n
/**\n
* Sort a list of items, according to keys and directions. If `clone` is true,\n
* then the method will act on a cloned list.\n
*\n
* @param {Array} sort_on_option List of couples [key, direction]\n
* @param {Array} list The item list to sort\n
* @param {Boolean} [clone=false] If true, modifies a clone of the list\n
* @return {Array} The filtered list\n
*/\n
function sortOn(sort_on_option, list, clone) {\n
var sort_index;\n
if (!Array.isArray(sort_on_option)) {\n
throw new TypeError("complex_queries.sortOn(): " +\n
"Argument 1 is not of type \'array\'");\n
}\n
if (clone) {\n
list = deepClone(list);\n
}\n
for (sort_index = sort_on_option.length - 1; sort_index >= 0;\n
sort_index -= 1) {\n
list.sort(sortFunction(\n
sort_on_option[sort_index][0],\n
sort_on_option[sort_index][1]\n
));\n
}\n
return list;\n
}\n
\n
_export(\'sortOn\', sortOn);\n
\n
/**\n
* Limit a list of items, according to index and length. If `clone` is true,\n
* then the method will act on a cloned list.\n
*\n
* @param {Array} limit_option A couple [from, length]\n
* @param {Array} list The item list to limit\n
* @param {Boolean} [clone=false] If true, modifies a clone of the list\n
* @return {Array} The filtered list\n
*/\n
function limit(limit_option, list, clone) {\n
if (!Array.isArray(limit_option)) {\n
throw new TypeError("complex_queries.limit(): " +\n
"Argument 1 is not of type \'array\'");\n
}\n
if (!Array.isArray(list)) {\n
throw new TypeError("complex_queries.limit(): " +\n
"Argument 2 is not of type \'array\'");\n
}\n
if (clone) {\n
list = deepClone(list);\n
}\n
list.splice(0, limit_option[0]);\n
if (limit_option[1]) {\n
list.splice(limit_option[1]);\n
}\n
return list;\n
}\n
\n
_export(\'limit\', limit);\n
\n
/**\n
* Convert a search text to a regexp.\n
*\n
* @param {String} string The string to convert\n
* @param {Boolean} [use_wildcard_character=true] Use wildcard "%" and "_"\n
* @return {RegExp} The search text regexp\n
*/\n
function searchTextToRegExp(string, use_wildcard_characters) {\n
if (typeof string !== \'string\') {\n
throw new TypeError("complex_queries.searchTextToRegExp(): " +\n
"Argument 1 is not of type \'string\'");\n
}\n
if (use_wildcard_characters === false) {\n
return new RegExp("^" + stringEscapeRegexpCharacters(string) + "$");\n
}\n
return new RegExp("^" + stringEscapeRegexpCharacters(string).replace(\n
/%/g,\n
".*"\n
).replace(\n
/_/g,\n
"."\n
) + "$");\n
}\n
\n
_export("searchTextToRegExp", searchTextToRegExp);\n
\n
/**\n
* sequence(thens): Promise\n
*\n
* Executes a sequence of *then* callbacks. It acts like\n
* `smth().then(callback).then(callback)...`. The first callback is called with\n
* no parameter.\n
*\n
* Elements of `thens` array can be a function or an array contaning at most\n
* three *then* callbacks: *onFulfilled*, *onRejected*, *onNotified*.\n
*\n
* When `cancel()` is executed, each then promises are cancelled at the same\n
* time.\n
*\n
* @param {Array} thens An array of *then* callbacks\n
* @return {Promise} A new promise\n
*/\n
function sequence(thens) {\n
var promises = [];\n
return new RSVP.Promise(function (resolve, reject, notify) {\n
var i;\n
promises[0] = new RSVP.Promise(function (resolve) {\n
resolve();\n
});\n
for (i = 0; i < thens.length; i += 1) {\n
if (Array.isArray(thens[i])) {\n
promises[i + 1] = promises[i].\n
then(thens[i][0], thens[i][1], thens[i][2]);\n
} else {\n
promises[i + 1] = promises[i].then(thens[i]);\n
}\n
}\n
promises[i].then(resolve, reject, notify);\n
}, function () {\n
var i;\n
for (i = 0; i < promises.length; i += 1) {\n
promises[i].cancel();\n
}\n
});\n
}\n
\n
\n
return to_export;\n
}));
]]></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jio_complex_queries.js</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>001</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1406898405.92</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>936.8906.38062.29081</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405933455.12</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405087262.84</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Web Script" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>jio_sha1.amd.js</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>rjs_jio_sha1_amd_js</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Web Script</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function (dependencies, module) {\n
if (typeof define === \'function\' && define.amd) {\n
return define(dependencies, module);\n
}\n
if (typeof exports === \'object\') {\n
return module(exports);\n
}\n
module(window);\n
}([\'exports\'], function (exports) {\n
/*\n
* A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n
* in FIPS PUB 180-1\n
* Version 2.1a Copyright Paul Johnston 2000 - 2002.\n
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n
* Distributed under the BSD License\n
* See http://pajhome.org.uk/crypt/md5 for details.\n
*/\n
\n
/*\n
* Configurable variables. You may need to tweak these to be compatible with\n
* the server-side, but the defaults work in most cases.\n
*/\n
\n
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */\n
var b64pad = "="; /* base-64 pad character. "=" for strict RFC compliance */\n
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */\n
\n
/*\n
* These are the functions you\'ll usually want to call\n
* They take string arguments and return either hex or base-64 encoded strings\n
*/\n
function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}\n
function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}\n
function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}\n
function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}\n
function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}\n
function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}\n
\n
/*\n
* Perform a simple self-test to see if the VM is working\n
*/\n
function sha1_vm_test()\n
{\n
return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";\n
}\n
\n
/*\n
* Calculate the SHA-1 of an array of big-endian words, and a bit length\n
*/\n
function core_sha1(x, len)\n
{\n
/* append padding */\n
x[len >> 5] |= 0x80 << (24 - len % 32);\n
x[((len + 64 >> 9) << 4) + 15] = len;\n
\n
var w = Array(80);\n
var a = 1732584193;\n
var b = -271733879;\n
var c = -1732584194;\n
var d = 271733878;\n
var e = -1009589776;\n
\n
for(var i = 0; i < x.length; i += 16)\n
{\n
var olda = a;\n
var oldb = b;\n
var oldc = c;\n
var oldd = d;\n
var olde = e;\n
\n
for(var j = 0; j < 80; j++)\n
{\n
if(j < 16) w[j] = x[i + j];\n
else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);\n
var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),\n
safe_add(safe_add(e, w[j]), sha1_kt(j)));\n
e = d;\n
d = c;\n
c = rol(b, 30);\n
b = a;\n
a = t;\n
}\n
\n
a = safe_add(a, olda);\n
b = safe_add(b, oldb);\n
c = safe_add(c, oldc);\n
d = safe_add(d, oldd);\n
e = safe_add(e, olde);\n
}\n
return Array(a, b, c, d, e);\n
\n
}\n
\n
/*\n
* Perform the appropriate triplet combination function for the current\n
* iteration\n
*/\n
function sha1_ft(t, b, c, d)\n
{\n
if(t < 20) return (b & c) | ((~b) & d);\n
if(t < 40) return b ^ c ^ d;\n
if(t < 60) return (b & c) | (b & d) | (c & d);\n
return b ^ c ^ d;\n
}\n
\n
/*\n
* Determine the appropriate additive constant for the current iteration\n
*/\n
function sha1_kt(t)\n
{\n
return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :\n
(t < 60) ? -1894007588 : -899497514;\n
}\n
\n
/*\n
* Calculate the HMAC-SHA1 of a key and some data\n
*/\n
function core_hmac_sha1(key, data)\n
{\n
var bkey = str2binb(key);\n
if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);\n
\n
var ipad = Array(16), opad = Array(16);\n
for(var i = 0; i < 16; i++)\n
{\n
ipad[i] = bkey[i] ^ 0x36363636;\n
opad[i] = bkey[i] ^ 0x5C5C5C5C;\n
}\n
\n
var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);\n
return core_sha1(opad.concat(hash), 512 + 160);\n
}\n
\n
/*\n
* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n
* to work around bugs in some JS interpreters.\n
*/\n
function safe_add(x, y)\n
{\n
var lsw = (x & 0xFFFF) + (y & 0xFFFF);\n
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n
return (msw << 16) | (lsw & 0xFFFF);\n
}\n
\n
/*\n
* Bitwise rotate a 32-bit number to the left.\n
*/\n
function rol(num, cnt)\n
{\n
return (num << cnt) | (num >>> (32 - cnt));\n
}\n
\n
/*\n
* Convert an 8-bit or 16-bit string to an array of big-endian words\n
* In 8-bit function, characters >255 have their hi-byte silently ignored.\n
*/\n
function str2binb(str)\n
{\n
var bin = Array();\n
var mask = (1 << chrsz) - 1;\n
for(var i = 0; i < str.length * chrsz; i += chrsz)\n
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);\n
return bin;\n
}\n
\n
/*\n
* Convert an array of big-endian words to a string\n
*/\n
function binb2str(bin)\n
{\n
var str = "";\n
var mask = (1 << chrsz) - 1;\n
for(var i = 0; i < bin.length * 32; i += chrsz)\n
str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);\n
return str;\n
}\n
\n
/*\n
* Convert an array of big-endian words to a hex string.\n
*/\n
function binb2hex(binarray)\n
{\n
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";\n
var str = "";\n
for(var i = 0; i < binarray.length * 4; i++)\n
{\n
str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +\n
hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);\n
}\n
return str;\n
}\n
\n
/*\n
* Convert an array of big-endian words to a base-64 string\n
*/\n
function binb2b64(binarray)\n
{\n
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";\n
var str = "";\n
for(var i = 0; i < binarray.length * 4; i += 3)\n
{\n
var triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16)\n
| (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )\n
| ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);\n
for(var j = 0; j < 4; j++)\n
{\n
if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;\n
else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);\n
}\n
}\n
return str;\n
}\n
\n
exports.hex_sha1 = hex_sha1;\n
exports.b64_sha1 = b64_sha1;\n
exports.str_sha1 = str_sha1;\n
exports.hex_hmac_sha1 = hex_hmac_sha1;\n
exports.b64_hmac_sha1 = b64_hmac_sha1;\n
exports.str_hmac_sha1 = str_hmac_sha1;\n
}));
]]></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jio_sha1.amd.js</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>001</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1406898405.7</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>936.8919.26569.29201</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405933454.83</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405086959.62</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Web Script" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>jio_sha256.amd.js</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>rjs_jio_sha256_amd_js</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Web Script</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function (dependencies, module) {\n
if (typeof define === \'function\' && define.amd) {\n
return define(dependencies, module);\n
}\n
if (typeof exports === \'object\') {\n
return module(exports);\n
}\n
module(window);\n
}([\'exports\'], function (window) {\n
/* A JavaScript implementation of the Secure Hash Algorithm, SHA-256\n
* Version 0.3 Copyright Angel Marin 2003-2004 - http://anmar.eu.org/\n
* Distributed under the BSD License\n
* Some bits taken from Paul Johnston\'s SHA-1 implementation\n
*/\n
(function () {\n
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */\n
function safe_add (x, y) {\n
var lsw = (x & 0xFFFF) + (y & 0xFFFF);\n
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n
return (msw << 16) | (lsw & 0xFFFF);\n
}\n
function S (X, n) {return ( X >>> n ) | (X << (32 - n));}\n
function R (X, n) {return ( X >>> n );}\n
function Ch(x, y, z) {return ((x & y) ^ ((~x) & z));}\n
function Maj(x, y, z) {return ((x & y) ^ (x & z) ^ (y & z));}\n
function Sigma0256(x) {return (S(x, 2) ^ S(x, 13) ^ S(x, 22));}\n
function Sigma1256(x) {return (S(x, 6) ^ S(x, 11) ^ S(x, 25));}\n
function Gamma0256(x) {return (S(x, 7) ^ S(x, 18) ^ R(x, 3));}\n
function Gamma1256(x) {return (S(x, 17) ^ S(x, 19) ^ R(x, 10));}\n
function newArray (n) {\n
var a = [];\n
for (;n>0;n--) {\n
a.push(undefined);\n
}\n
return a;\n
}\n
function core_sha256 (m, l) {\n
var K = [0x428A2F98,0x71374491,0xB5C0FBCF,0xE9B5DBA5,0x3956C25B,0x59F111F1,0x923F82A4,0xAB1C5ED5,0xD807AA98,0x12835B01,0x243185BE,0x550C7DC3,0x72BE5D74,0x80DEB1FE,0x9BDC06A7,0xC19BF174,0xE49B69C1,0xEFBE4786,0xFC19DC6,0x240CA1CC,0x2DE92C6F,0x4A7484AA,0x5CB0A9DC,0x76F988DA,0x983E5152,0xA831C66D,0xB00327C8,0xBF597FC7,0xC6E00BF3,0xD5A79147,0x6CA6351,0x14292967,0x27B70A85,0x2E1B2138,0x4D2C6DFC,0x53380D13,0x650A7354,0x766A0ABB,0x81C2C92E,0x92722C85,0xA2BFE8A1,0xA81A664B,0xC24B8B70,0xC76C51A3,0xD192E819,0xD6990624,0xF40E3585,0x106AA070,0x19A4C116,0x1E376C08,0x2748774C,0x34B0BCB5,0x391C0CB3,0x4ED8AA4A,0x5B9CCA4F,0x682E6FF3,0x748F82EE,0x78A5636F,0x84C87814,0x8CC70208,0x90BEFFFA,0xA4506CEB,0xBEF9A3F7,0xC67178F2];\n
var HASH = [0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19];\n
var W = newArray(64);\n
var a, b, c, d, e, f, g, h, i, j;\n
var T1, T2;\n
/* append padding */\n
m[l >> 5] |= 0x80 << (24 - l % 32);\n
m[((l + 64 >> 9) << 4) + 15] = l;\n
for ( var i = 0; i<m.length; i+=16 ) {\n
a = HASH[0]; b = HASH[1]; c = HASH[2]; d = HASH[3];\n
e = HASH[4]; f = HASH[5]; g = HASH[6]; h = HASH[7];\n
for ( var j = 0; j<64; j++) {\n
if (j < 16) {\n
W[j] = m[j + i];\n
} else {\n
W[j] = safe_add(safe_add(safe_add(Gamma1256(\n
W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]);\n
}\n
T1 = safe_add(safe_add(safe_add(\n
safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]);\n
T2 = safe_add(Sigma0256(a), Maj(a, b, c));\n
h = g; g = f; f = e; e = safe_add(d, T1);\n
d = c; c = b; b = a; a = safe_add(T1, T2);\n
}\n
HASH[0] = safe_add(a, HASH[0]); HASH[1] = safe_add(b, HASH[1]);\n
HASH[2] = safe_add(c, HASH[2]); HASH[3] = safe_add(d, HASH[3]);\n
HASH[4] = safe_add(e, HASH[4]); HASH[5] = safe_add(f, HASH[5]);\n
HASH[6] = safe_add(g, HASH[6]); HASH[7] = safe_add(h, HASH[7]);\n
}\n
return HASH;\n
}\n
function str2binb (str) {\n
var bin = Array();\n
var mask = (1 << chrsz) - 1;\n
for(var i = 0; i < str.length * chrsz; i += chrsz)\n
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);\n
return bin;\n
}\n
function binb2hex (binarray) {\n
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */\n
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";\n
var str = "";\n
for (var i = 0; i < binarray.length * 4; i++) {\n
str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +\n
hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);\n
}\n
return str;\n
}\n
function hex_sha256(s){\n
return binb2hex(core_sha256(str2binb(s),s.length * chrsz));\n
}\n
window.hex_sha256 = hex_sha256;\n
}());\n
}));
]]></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jio_sha256.amd.js</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>001</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1406898405.93</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>936.8919.10922.33092</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405933455.15</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405087119.31</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Web Script" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>jio_sha2.amd.js</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>rjs_jio_sha2_amd_js</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Web Script</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content</string> </key>
<value> <string encoding="cdata"><![CDATA[
(function (dependencies, module) {\n
if (typeof define === \'function\' && define.amd) {\n
return define(dependencies, module);\n
}\n
if (typeof exports === \'object\') {\n
return module(exports);\n
}\n
module(window);\n
}([\'exports\'], function (window) {\n
/* A JavaScript implementation of the Secure Hash Standard\n
* Version 0.3 Copyright Angel Marin 2003-2004 - http://anmar.eu.org/\n
* Distributed under the BSD License\n
* Some bits taken from Paul Johnston\'s SHA-1 implementation\n
*/\n
(function () {\n
var chrsz = 8;/* bits per input character. 8 - ASCII; 16 - Unicode */\n
var hexcase = 0;/* hex output format. 0 - lowercase; 1 - uppercase */\n
\n
function safe_add (x, y) {\n
var lsw = (x & 0xFFFF) + (y & 0xFFFF);\n
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n
return (msw << 16) | (lsw & 0xFFFF);\n
}\n
\n
function S (X, n) {return ( X >>> n ) | (X << (32 - n));}\n
\n
function R (X, n) {return ( X >>> n );}\n
\n
function Ch(x, y, z) {return ((x & y) ^ ((~x) & z));}\n
\n
function Maj(x, y, z) {return ((x & y) ^ (x & z) ^ (y & z));}\n
\n
function Sigma0256(x) {return (S(x, 2) ^ S(x, 13) ^ S(x, 22));}\n
\n
function Sigma1256(x) {return (S(x, 6) ^ S(x, 11) ^ S(x, 25));}\n
\n
function Gamma0256(x) {return (S(x, 7) ^ S(x, 18) ^ R(x, 3));}\n
\n
function Gamma1256(x) {return (S(x, 17) ^ S(x, 19) ^ R(x, 10));}\n
\n
function Sigma0512(x) {return (S(x, 28) ^ S(x, 34) ^ S(x, 39));}\n
\n
function Sigma1512(x) {return (S(x, 14) ^ S(x, 18) ^ S(x, 41));}\n
\n
function Gamma0512(x) {return (S(x, 1) ^ S(x, 8) ^ R(x, 7));}\n
\n
function Gamma1512(x) {return (S(x, 19) ^ S(x, 61) ^ R(x, 6));}\n
\n
function newArray (n) {\n
var a = [];\n
for (;n>0;n--) {\n
a.push(undefined);\n
}\n
return a;\n
}\n
\n
function core_sha256 (m, l) {\n
var K = [0x428A2F98,0x71374491,0xB5C0FBCF,0xE9B5DBA5,0x3956C25B,0x59F111F1,0x923F82A4,0xAB1C5ED5,0xD807AA98,0x12835B01,0x243185BE,0x550C7DC3,0x72BE5D74,0x80DEB1FE,0x9BDC06A7,0xC19BF174,0xE49B69C1,0xEFBE4786,0xFC19DC6,0x240CA1CC,0x2DE92C6F,0x4A7484AA,0x5CB0A9DC,0x76F988DA,0x983E5152,0xA831C66D,0xB00327C8,0xBF597FC7,0xC6E00BF3,0xD5A79147,0x6CA6351,0x14292967,0x27B70A85,0x2E1B2138,0x4D2C6DFC,0x53380D13,0x650A7354,0x766A0ABB,0x81C2C92E,0x92722C85,0xA2BFE8A1,0xA81A664B,0xC24B8B70,0xC76C51A3,0xD192E819,0xD6990624,0xF40E3585,0x106AA070,0x19A4C116,0x1E376C08,0x2748774C,0x34B0BCB5,0x391C0CB3,0x4ED8AA4A,0x5B9CCA4F,0x682E6FF3,0x748F82EE,0x78A5636F,0x84C87814,0x8CC70208,0x90BEFFFA,0xA4506CEB,0xBEF9A3F7,0xC67178F2];\n
var HASH = [0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19];\n
var W = newArray(64);\n
var a, b, c, d, e, f, g, h, i, j;\n
var T1, T2;\n
\n
/* append padding */\n
m[l >> 5] |= 0x80 << (24 - l % 32);\n
m[((l + 64 >> 9) << 4) + 15] = l;\n
\n
for ( var i = 0; i<m.length; i+=16 ) {\n
a = HASH[0];\n
b = HASH[1];\n
c = HASH[2];\n
d = HASH[3];\n
e = HASH[4];\n
f = HASH[5];\n
g = HASH[6];\n
h = HASH[7];\n
\n
for ( var j = 0; j<64; j++) {\n
if (j < 16) {\n
W[j] = m[j + i];\n
} else {\n
W[j] = safe_add(safe_add(safe_add(Gamma1256(\n
W[j - 2]),W[j - 7]),Gamma0256(W[j - 15])), W[j - 16]);\n
}\n
\n
T1 = safe_add(safe_add(safe_add(safe_add(\n
h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]);\n
T2 = safe_add(Sigma0256(a), Maj(a, b, c));\n
\n
h = g;\n
g = f;\n
f = e;\n
e = safe_add(d, T1);\n
d = c;\n
c = b;\n
b = a;\n
a = safe_add(T1, T2);\n
}\n
\n
HASH[0] = safe_add(a, HASH[0]);\n
HASH[1] = safe_add(b, HASH[1]);\n
HASH[2] = safe_add(c, HASH[2]);\n
HASH[3] = safe_add(d, HASH[3]);\n
HASH[4] = safe_add(e, HASH[4]);\n
HASH[5] = safe_add(f, HASH[5]);\n
HASH[6] = safe_add(g, HASH[6]);\n
HASH[7] = safe_add(h, HASH[7]);\n
}\n
return HASH;\n
}\n
\n
function core_sha512 (m, l) {\n
var K = [0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817];\n
var HASH = [0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179];\n
var W = newArray(80);\n
var a, b, c, d, e, f, g, h, i, j;\n
var T1, T2;\n
\n
}\n
\n
function str2binb (str) {\n
var bin = Array();\n
var mask = (1 << chrsz) - 1;\n
for(var i = 0; i < str.length * chrsz; i += chrsz)\n
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);\n
return bin;\n
}\n
\n
function binb2str (bin) {\n
var str = "";\n
var mask = (1 << chrsz) - 1;\n
for(var i = 0; i < bin.length * 32; i += chrsz)\n
str += String.fromCharCode((bin[i>>5] >>> (24 - i%32)) & mask);\n
return str;\n
}\n
\n
function binb2hex (binarray) {\n
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";\n
var str = "";\n
for(var i = 0; i < binarray.length * 4; i++)\n
{\n
str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +\n
hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);\n
}\n
return str;\n
}\n
\n
function binb2b64 (binarray) {\n
var tab =\n
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";\n
var str = "";\n
for(var i = 0; i < binarray.length * 4; i += 3) {\n
var triplet = (((binarray[i >> 2] >> 8 * (3- i %4)) & 0xFF) << 16) |\n
(((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 ) |\n
((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);\n
for(var j = 0; j < 4; j++) {\n
if(i * 8 + j * 6 > binarray.length * 32) { str += b64pad; }\n
else {str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);}\n
}\n
}\n
return str;\n
}\n
\n
function hex_sha256(s){\n
return binb2hex(core_sha256(str2binb(s),s.length * chrsz));\n
}\n
function b64_sha256(s){\n
return binb2b64(core_sha256(str2binb(s),s.length * chrsz));\n
}\n
function str_sha256(s){\n
return binb2str(core_sha256(str2binb(s),s.length * chrsz));\n
}\n
window.hex_sha256 = hex_sha256;\n
window.b64_sha256 = b64_sha256;\n
window.str_sha256 = str_sha256;\n
}());\n
}));
]]></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jio_sha2.amd.js</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>001</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1406898405.94</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>936.8919.19351.38041</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405933455.16</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405087086.22</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Web Script" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>jio_storage_erp5.js</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>rjs_jio_storage_erp5_js</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Web Script</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*\n
* Copyright 2013, Nexedi SA\n
* Released under the LGPL license.\n
* http://www.gnu.org/licenses/lgpl.html\n
*/\n
// JIO ERP5 Storage Description :\n
// {\n
// type: "erp5"\n
// url: {string}\n
// default_view: {string} (optional)\n
// }\n
\n
/*jslint indent: 2, nomen: true, unparam: true */\n
/*global jIO, UriTemplate, FormData, RSVP, URI, DOMParser, Blob,\n
ProgressEvent, define */\n
\n
(function (root, dependencies, module) {\n
"use strict";\n
if (typeof define === \'function\' && define.amd) {\n
return define(dependencies, module);\n
}\n
var namespace = module(RSVP, jIO, URI, UriTemplate);\n
if (namespace !== undefined) { root.ERP5Storage = namespace; }\n
}(this, [\n
"rsvp",\n
"jio",\n
"uri",\n
"uritemplate"\n
], function (RSVP, jIO, URI, UriTemplate) {\n
"use strict";\n
\n
var hasOwnProperty = Function.prototype.call.bind(\n
Object.prototype.hasOwnProperty\n
), constant = {};\n
\n
constant.method_notification_message_obj = {\n
"get": "Getting document.",\n
"post": "Posting document.",\n
"put": "Putting document.",\n
"remove": "Removing document.",\n
"getAttachment": "Getting attachment.",\n
"putAttachment": "Putting attachment.",\n
"removeAttacment": "Removing attachment.",\n
"allDocs": "Getting document list."\n
};\n
\n
// XXX docstring\n
function formatGetSuccessAnswer(answer) {\n
if (answer === undefined || answer === null) { throw answer; }\n
var result;\n
if (typeof answer.data === "object" && answer.data) {\n
return answer;\n
}\n
if (answer.target &&\n
typeof answer.target.status === "number" &&\n
typeof answer.target.statusText === "string") {\n
result = {\n
"status": answer.target.status\n
};\n
if (typeof answer.target.response === "object" &&\n
answer.target.response !== null) {\n
if (typeof answer.target.response.toJSON === "function") {\n
result.data = answer.target.response.toJSON();\n
} else {\n
result.data = answer.target.response;\n
}\n
} else if (answer.target.response instanceof Blob) {\n
return jIO.util.readBlobAsText(answer.target.response).\n
then(function (text) {\n
result.data = JSON.parse(text);\n
return result;\n
});\n
}\n
return result;\n
}\n
return answer;\n
}\n
\n
// XXX docstring\n
function formatUpdateSuccessAnswer(answer) {\n
if (answer === undefined || answer === null) { throw answer; }\n
var result;\n
if (typeof answer.target === "object" && answer.target !== null &&\n
typeof answer.target.status === "number") {\n
result = {\n
"status": answer.target.status\n
};\n
return result;\n
}\n
return answer;\n
}\n
\n
// XXX docstring\n
function formatErrorAnswer(answer) {\n
if (answer === undefined || answer === null) { throw answer; }\n
var result, dom;\n
if (answer.target &&\n
typeof answer.target.status === "number" &&\n
typeof answer.target.statusText === "string") {\n
// seams to be a ProgressEvent\n
result = {\n
"status": answer.target.status\n
};\n
if (typeof answer.target.response === "object" &&\n
answer.target.response !== null) {\n
if (typeof answer.target.response.toJSON === "function") {\n
result.data = answer.target.response.toJSON();\n
} else {\n
result.data = answer.target.response;\n
}\n
} else if (typeof answer.target.responseText === "string") {\n
result.message = answer.target.responseText;\n
// dom = new DOMParser().parseFromString(\n
// answer.target.responseText,\n
// "text/html"\n
// );\n
// result.message = (dom.querySelector(\'#master\') ||\n
// dom.firstElementChild).textContent;\n
// if (!result.message) { delete result.message; }\n
}\n
throw result;\n
}\n
throw answer;\n
}\n
\n
// XXX docstring\n
function formatNotification(method, notif) {\n
var result;\n
if (notif) {\n
if (typeof notif.loaded === "number" &&\n
typeof notif.total === "number") {\n
result = {};\n
// can be a ProgressEvent or a jIO notification\n
if (notif.method !== method) {\n
result = {\n
"method": method,\n
"loaded": notif.loaded,\n
"total": notif.total\n
};\n
if (typeof notif.percentage === "number") {\n
result.percentage = notif.percentage;\n
}\n
}\n
if (typeof notif.message === "string") {\n
result.message = notif.message;\n
} else {\n
result.message = constant.method_notification_message_obj[method];\n
}\n
return result;\n
}\n
}\n
throw null; // stop propagation\n
}\n
\n
constant.formatSuccessAnswerFor = {\n
"post": formatUpdateSuccessAnswer,\n
"put": formatUpdateSuccessAnswer,\n
"get": formatGetSuccessAnswer\n
};\n
\n
//////////////////////////////////////////////////////////////////////\n
\n
// XXX docstring\n
function ERP5Storage(spec) {\n
if (typeof spec.url !== "string" || !spec.url) {\n
throw new TypeError("ERP5 \'url\' must be a string " +\n
"which contains more than one character.");\n
}\n
this._url = spec.url;\n
this._default_view = spec.default_view;\n
}\n
\n
// XXX docstring\n
function methodGenerator(method) {\n
return function (command, param, options) {\n
RSVP.resolve().\n
then(function () {\n
var view = ERP5Storage.onView[options._view || this._default_view] ||\n
ERP5Storage.onView["default"];\n
if (typeof view[method] !== "function") {\n
view = ERP5Storage.onView["default"];\n
}\n
return view[method].call(this, param, options);\n
}.bind(this)).\n
then(constant.formatSuccessAnswerFor[method]).\n
then(null, formatErrorAnswer, formatNotification.bind(null, method)).\n
then(command.success, command.error, command.progress);\n
};\n
}\n
\n
// XXX docstring\n
[\n
"post",\n
"put",\n
"get",\n
"remove",\n
"putAttachment",\n
"getAttachment",\n
"removeAttachment",\n
"allDocs",\n
"check",\n
"repair"\n
].forEach(function (method) {\n
ERP5Storage.prototype[method] = methodGenerator(method);\n
});\n
// XXX docstring\n
function getSiteDocument(url) {\n
if (typeof url !== "string" &&\n
typeof (this && this._url) !== "string") {\n
throw new TypeError("ERP5Storage.getSiteDocument(): Argument 1 `url` " +\n
"or `this._url` are not of type string.");\n
}\n
return jIO.util.ajax({\n
"type": "GET",\n
"url": url || this._url,\n
"xhrFields": {\n
withCredentials: true\n
}\n
}).then(function (event) {\n
return JSON.parse(event.target.responseText);\n
});\n
}\n
ERP5Storage.getSiteDocument = getSiteDocument;\n
\n
// XXX docstring\n
function getDocumentAndHatoas(param, options) {\n
var this_ = this;\n
return ERP5Storage.getSiteDocument(this._url).\n
then(function (site_hal) {\n
// XXX need to get modified metadata\n
return jIO.util.ajax({\n
"type": "GET",\n
"url": UriTemplate.parse(site_hal._links.traverse.href)\n
.expand({\n
relative_url: param._id,\n
view: options._view || this_._default_view || "view"\n
}),\n
"xhrFields": {\n
withCredentials: true\n
}\n
});\n
});\n
}\n
\n
ERP5Storage.onView = {};\n
ERP5Storage.onView["default"] = {};\n
\n
// XXX docstring\n
ERP5Storage.onView["default"].get = function (param, options) {\n
return getDocumentAndHatoas.call(this, param, options).\n
then(function (response) {\n
var result = JSON.parse(response.target.responseText);\n
result._id = param._id;\n
result.portal_type = result._links.type.name;\n
// XXX\n
// delete result._embedded;\n
// delete result._links;\n
// delete result._debug;\n
// new jIO.Metadata(result).format();\n
return {"data": result};\n
});\n
};\n
\n
// XXX docstring\n
ERP5Storage.onView["default"].post = function (metadata, options) {\n
var final_response;\n
return getSiteDocument(this._url)\n
.then(function (site_hal) {\n
/*jslint forin: true */\n
var post_action = site_hal._actions.add,\n
data = new FormData();\n
\n
data.append("portal_type", metadata.portal_type);\n
\n
return jIO.util.ajax({\n
"type": post_action.method,\n
"url": post_action.href,\n
"data": data,\n
"xhrFields": {\n
withCredentials: true\n
}\n
});\n
}).then(function (event) {\n
final_response = {"status": event.target.status};\n
if (!metadata._id) {\n
// XXX Really depend on server response...\n
var uri = new URI(event.target.getResponseHeader("X-Location"));\n
final_response.id = uri.segment(2);\n
metadata._id = final_response.id;\n
}\n
}).\n
then(ERP5Storage.onView["default"].put.bind(this, metadata, options)).\n
then(function () { return final_response; });\n
};\n
\n
// XXX docstring\n
ERP5Storage.onView["default"].put = function (metadata, options) {\n
return getDocumentAndHatoas.call(this, metadata, options).\n
then(function (result) {\n
/*jslint forin: true */\n
result = JSON.parse(result.target.responseText);\n
var put_action = result._embedded._view._actions.put,\n
renderer_form = result._embedded._view,\n
data = new FormData(),\n
key;\n
data.append(renderer_form.form_id.key,\n
renderer_form.form_id[\'default\']);\n
for (key in metadata) {\n
// console.log(key);\n
if (hasOwnProperty(metadata, key)) {\n
if (key !== "_id") {\n
// Hardcoded my_ ERP5 behaviour\n
data.append(key, metadata[key]);\n
// if (hasOwnProperty(renderer_form, "my_" + key)) {\n
// console.log("ok");\n
// data.append(renderer_form["my_" + key].key, metadata[key]);\n
// }\n
}\n
}\n
}\n
return jIO.util.ajax({\n
"type": put_action.method,\n
"url": put_action.href,\n
"data": data,\n
"xhrFields": {\n
withCredentials: true\n
}\n
});\n
});\n
};\n
\n
ERP5Storage.onView["default"].remove = function () {\n
return;\n
};\n
\n
ERP5Storage.onView["default"].allDocs = function (param, options) {\n
if (typeof options.query !== "string") {\n
options.query = (options.query ?\n
jIO.Query.objectToSearchText(options.query) :\n
undefined);\n
}\n
return getSiteDocument(this._url)\n
.then(function (site_hal) {\n
return jIO.util.ajax({\n
"type": "GET",\n
"url": UriTemplate.parse(site_hal._links.raw_search.href)\n
.expand({\n
query: options.query,\n
// XXX Force erp5 to return embedded document\n
select_list: options.select_list || ["title", "reference"],\n
limit: options.limit\n
}),\n
"xhrFields": {\n
withCredentials: true\n
}\n
});\n
})\n
.then(function (response) {\n
return JSON.parse(response.target.responseText);\n
})\n
.then(function (catalog_json) {\n
var data = catalog_json._embedded.contents,\n
count = data.length,\n
i,\n
uri,\n
item,\n
result = [],\n
promise_list = [result];\n
for (i = 0; i < count; i += 1) {\n
item = data[i];\n
uri = new URI(item._links.self.href);\n
result.push({\n
id: uri.segment(2),\n
key: uri.segment(2),\n
doc: {},\n
value: item\n
});\n
// if (options.include_docs) {\n
// promise_list.push(RSVP.Queue().push(function () {\n
// return this._get({_id: item.name}, {_view: "View"});\n
// }).push\n
// }\n
}\n
return RSVP.all(promise_list);\n
})\n
.then(function (promise_list) {\n
var result = promise_list[0];\n
return {"data": {"rows": result, "total_rows": result.length}};\n
});\n
};\n
\n
ERP5Storage.onView["default"].check = function () {\n
return;\n
};\n
\n
ERP5Storage.onView["default"].repair = function () {\n
return;\n
};\n
\n
jIO.addStorage("erp5", ERP5Storage);\n
\n
return ERP5Storage;\n
\n
}));
]]></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jio_storage_erp5.js</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>001</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1406898405.91</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>937.690.6828.44612</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1410861948.88</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405087399.46</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Web Script" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>uritemplate.js</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>http://git.erp5.org/gitweb/uritemplate-js.git/blob_plain/HEAD:/bin/uritemplate.js</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>rjs_uritemplate_js</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Web Script</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*global unescape, module, define, window, global*/\n
\n
/*\n
UriTemplate Copyright (c) 2012-2013 Franz Antesberger. All Rights Reserved.\n
Available via the MIT license.\n
*/\n
\n
(function (exportCallback) {\n
"use strict";\n
\n
var UriTemplateError = (function () {\n
\n
function UriTemplateError (options) {\n
this.options = options;\n
}\n
\n
UriTemplateError.prototype.toString = function () {\n
if (JSON && JSON.stringify) {\n
return JSON.stringify(this.options);\n
}\n
else {\n
return this.options;\n
}\n
};\n
\n
return UriTemplateError;\n
}());\n
\n
var objectHelper = (function () {\n
function isArray (value) {\n
return Object.prototype.toString.apply(value) === \'[object Array]\';\n
}\n
\n
function isString (value) {\n
return Object.prototype.toString.apply(value) === \'[object String]\';\n
}\n
\n
function isNumber (value) {\n
return Object.prototype.toString.apply(value) === \'[object Number]\';\n
}\n
\n
function isBoolean (value) {\n
return Object.prototype.toString.apply(value) === \'[object Boolean]\';\n
}\n
\n
function join (arr, separator) {\n
var\n
result = \'\',\n
first = true,\n
index;\n
for (index = 0; index < arr.length; index += 1) {\n
if (first) {\n
first = false;\n
}\n
else {\n
result += separator;\n
}\n
result += arr[index];\n
}\n
return result;\n
}\n
\n
function map (arr, mapper) {\n
var\n
result = [],\n
index = 0;\n
for (; index < arr.length; index += 1) {\n
result.push(mapper(arr[index]));\n
}\n
return result;\n
}\n
\n
function filter (arr, predicate) {\n
var\n
result = [],\n
index = 0;\n
for (; index < arr.length; index += 1) {\n
if (predicate(arr[index])) {\n
result.push(arr[index]);\n
}\n
}\n
return result;\n
}\n
\n
function deepFreezeUsingObjectFreeze (object) {\n
if (typeof object !== "object" || object === null) {\n
return object;\n
}\n
Object.freeze(object);\n
var property, propertyName;\n
for (propertyName in object) {\n
if (object.hasOwnProperty(propertyName)) {\n
property = object[propertyName];\n
// be aware, arrays are \'object\', too\n
if (typeof property === "object") {\n
deepFreeze(property);\n
}\n
}\n
}\n
return object;\n
}\n
\n
function deepFreeze (object) {\n
if (typeof Object.freeze === \'function\') {\n
return deepFreezeUsingObjectFreeze(object);\n
}\n
return object;\n
}\n
\n
\n
return {\n
isArray: isArray,\n
isString: isString,\n
isNumber: isNumber,\n
isBoolean: isBoolean,\n
join: join,\n
map: map,\n
filter: filter,\n
deepFreeze: deepFreeze\n
};\n
}());\n
\n
var charHelper = (function () {\n
\n
function isAlpha (chr) {\n
return (chr >= \'a\' && chr <= \'z\') || ((chr >= \'A\' && chr <= \'Z\'));\n
}\n
\n
function isDigit (chr) {\n
return chr >= \'0\' && chr <= \'9\';\n
}\n
\n
function isHexDigit (chr) {\n
return isDigit(chr) || (chr >= \'a\' && chr <= \'f\') || (chr >= \'A\' && chr <= \'F\');\n
}\n
\n
return {\n
isAlpha: isAlpha,\n
isDigit: isDigit,\n
isHexDigit: isHexDigit\n
};\n
}());\n
\n
var pctEncoder = (function () {\n
var utf8 = {\n
encode: function (chr) {\n
// see http://ecmanaut.blogspot.de/2006/07/encoding-decoding-utf8-in-javascript.html\n
return unescape(encodeURIComponent(chr));\n
},\n
numBytes: function (firstCharCode) {\n
if (firstCharCode <= 0x7F) {\n
return 1;\n
}\n
else if (0xC2 <= firstCharCode && firstCharCode <= 0xDF) {\n
return 2;\n
}\n
else if (0xE0 <= firstCharCode && firstCharCode <= 0xEF) {\n
return 3;\n
}\n
else if (0xF0 <= firstCharCode && firstCharCode <= 0xF4) {\n
return 4;\n
}\n
// no valid first octet\n
return 0;\n
},\n
isValidFollowingCharCode: function (charCode) {\n
return 0x80 <= charCode && charCode <= 0xBF;\n
}\n
};\n
\n
/**\n
* encodes a character, if needed or not.\n
* @param chr\n
* @return pct-encoded character\n
*/\n
function encodeCharacter (chr) {\n
var\n
result = \'\',\n
octets = utf8.encode(chr),\n
octet,\n
index;\n
for (index = 0; index < octets.length; index += 1) {\n
octet = octets.charCodeAt(index);\n
result += \'%\' + (octet < 0x10 ? \'0\' : \'\') + octet.toString(16).toUpperCase();\n
}\n
return result;\n
}\n
\n
/**\n
* Returns, whether the given text at start is in the form \'percent hex-digit hex-digit\', like \'%3F\'\n
* @param text\n
* @param start\n
* @return {boolean|*|*}\n
*/\n
function isPercentDigitDigit (text, start) {\n
return text.charAt(start) === \'%\' && charHelper.isHexDigit(text.charAt(start + 1)) && charHelper.isHexDigit(text.charAt(start + 2));\n
}\n
\n
/**\n
* Parses a hex number from start with length 2.\n
* @param text a string\n
* @param start the start index of the 2-digit hex number\n
* @return {Number}\n
*/\n
function parseHex2 (text, start) {\n
return parseInt(text.substr(start, 2), 16);\n
}\n
\n
/**\n
* Returns whether or not the given char sequence is a correctly pct-encoded sequence.\n
* @param chr\n
* @return {boolean}\n
*/\n
function isPctEncoded (chr) {\n
if (!isPercentDigitDigit(chr, 0)) {\n
return false;\n
}\n
var firstCharCode = parseHex2(chr, 1);\n
var numBytes = utf8.numBytes(firstCharCode);\n
if (numBytes === 0) {\n
return false;\n
}\n
for (var byteNumber = 1; byteNumber < numBytes; byteNumber += 1) {\n
if (!isPercentDigitDigit(chr, 3*byteNumber) || !utf8.isValidFollowingCharCode(parseHex2(chr, 3*byteNumber + 1))) {\n
return false;\n
}\n
}\n
return true;\n
}\n
\n
/**\n
* Reads as much as needed from the text, e.g. \'%20\' or \'%C3%B6\'. It does not decode!\n
* @param text\n
* @param startIndex\n
* @return the character or pct-string of the text at startIndex\n
*/\n
function pctCharAt(text, startIndex) {\n
var chr = text.charAt(startIndex);\n
if (!isPercentDigitDigit(text, startIndex)) {\n
return chr;\n
}\n
var utf8CharCode = parseHex2(text, startIndex + 1);\n
var numBytes = utf8.numBytes(utf8CharCode);\n
if (numBytes === 0) {\n
return chr;\n
}\n
for (var byteNumber = 1; byteNumber < numBytes; byteNumber += 1) {\n
if (!isPercentDigitDigit(text, startIndex + 3 * byteNumber) || !utf8.isValidFollowingCharCode(parseHex2(text, startIndex + 3 * byteNumber + 1))) {\n
return chr;\n
}\n
}\n
return text.substr(startIndex, 3 * numBytes);\n
}\n
\n
return {\n
encodeCharacter: encodeCharacter,\n
isPctEncoded: isPctEncoded,\n
pctCharAt: pctCharAt\n
};\n
}());\n
\n
var rfcCharHelper = (function () {\n
\n
/**\n
* Returns if an character is an varchar character according 2.3 of rfc 6570\n
* @param chr\n
* @return (Boolean)\n
*/\n
function isVarchar (chr) {\n
return charHelper.isAlpha(chr) || charHelper.isDigit(chr) || chr === \'_\' || pctEncoder.isPctEncoded(chr);\n
}\n
\n
/**\n
* Returns if chr is an unreserved character according 1.5 of rfc 6570\n
* @param chr\n
* @return {Boolean}\n
*/\n
function isUnreserved (chr) {\n
return charHelper.isAlpha(chr) || charHelper.isDigit(chr) || chr === \'-\' || chr === \'.\' || chr === \'_\' || chr === \'~\';\n
}\n
\n
/**\n
* Returns if chr is an reserved character according 1.5 of rfc 6570\n
* or the percent character mentioned in 3.2.1.\n
* @param chr\n
* @return {Boolean}\n
*/\n
function isReserved (chr) {\n
return chr === \':\' || chr === \'/\' || chr === \'?\' || chr === \'#\' || chr === \'[\' || chr === \']\' || chr === \'@\' || chr === \'!\' || chr === \'$\' || chr === \'&\' || chr === \'(\' ||\n
chr === \')\' || chr === \'*\' || chr === \'+\' || chr === \',\' || chr === \';\' || chr === \'=\' || chr === "\'";\n
}\n
\n
return {\n
isVarchar: isVarchar,\n
isUnreserved: isUnreserved,\n
isReserved: isReserved\n
};\n
\n
}());\n
\n
/**\n
* encoding of rfc 6570\n
*/\n
var encodingHelper = (function () {\n
\n
function encode (text, passReserved) {\n
var\n
result = \'\',\n
index,\n
chr = \'\';\n
if (typeof text === "number" || typeof text === "boolean") {\n
text = text.toString();\n
}\n
for (index = 0; index < text.length; index += chr.length) {\n
chr = text.charAt(index);\n
result += rfcCharHelper.isUnreserved(chr) || (passReserved && rfcCharHelper.isReserved(chr)) ? chr : pctEncoder.encodeCharacter(chr);\n
}\n
return result;\n
}\n
\n
function encodePassReserved (text) {\n
return encode(text, true);\n
}\n
\n
function encodeLiteralCharacter (literal, index) {\n
var chr = pctEncoder.pctCharAt(literal, index);\n
if (chr.length > 1) {\n
return chr;\n
}\n
else {\n
return rfcCharHelper.isReserved(chr) || rfcCharHelper.isUnreserved(chr) ? chr : pctEncoder.encodeCharacter(chr);\n
}\n
}\n
\n
function encodeLiteral (literal) {\n
var\n
result = \'\',\n
index,\n
chr = \'\';\n
for (index = 0; index < literal.length; index += chr.length) {\n
chr = pctEncoder.pctCharAt(literal, index);\n
if (chr.length > 1) {\n
result += chr;\n
}\n
else {\n
result += rfcCharHelper.isReserved(chr) || rfcCharHelper.isUnreserved(chr) ? chr : pctEncoder.encodeCharacter(chr);\n
}\n
}\n
return result;\n
}\n
\n
return {\n
encode: encode,\n
encodePassReserved: encodePassReserved,\n
encodeLiteral: encodeLiteral,\n
encodeLiteralCharacter: encodeLiteralCharacter\n
};\n
\n
}());\n
\n
\n
// the operators defined by rfc 6570\n
var operators = (function () {\n
\n
var\n
bySymbol = {};\n
\n
function create (symbol) {\n
bySymbol[symbol] = {\n
symbol: symbol,\n
separator: (symbol === \'?\') ? \'&\' : (symbol === \'\' || symbol === \'+\' || symbol === \'#\') ? \',\' : symbol,\n
named: symbol === \';\' || symbol === \'&\' || symbol === \'?\',\n
ifEmpty: (symbol === \'&\' || symbol === \'?\') ? \'=\' : \'\',\n
first: (symbol === \'+\' ) ? \'\' : symbol,\n
encode: (symbol === \'+\' || symbol === \'#\') ? encodingHelper.encodePassReserved : encodingHelper.encode,\n
toString: function () {\n
return this.symbol;\n
}\n
};\n
}\n
\n
create(\'\');\n
create(\'+\');\n
create(\'#\');\n
create(\'.\');\n
create(\'/\');\n
create(\';\');\n
create(\'?\');\n
create(\'&\');\n
return {\n
valueOf: function (chr) {\n
if (bySymbol[chr]) {\n
return bySymbol[chr];\n
}\n
if ("=,!@|".indexOf(chr) >= 0) {\n
return null;\n
}\n
return bySymbol[\'\'];\n
}\n
};\n
}());\n
\n
\n
/**\n
* Detects, whether a given element is defined in the sense of rfc 6570\n
* Section 2.3 of the RFC makes clear defintions:\n
* * undefined and null are not defined.\n
* * the empty string is defined\n
* * an array ("list") is defined, if it is not empty (even if all elements are not defined)\n
* * an object ("map") is defined, if it contains at least one property with defined value\n
* @param object\n
* @return {Boolean}\n
*/\n
function isDefined (object) {\n
var\n
propertyName;\n
if (object === null || object === undefined) {\n
return false;\n
}\n
if (objectHelper.isArray(object)) {\n
// Section 2.3: A variable defined as a list value is considered undefined if the list contains zero members\n
return object.length > 0;\n
}\n
if (typeof object === "string" || typeof object === "number" || typeof object === "boolean") {\n
// falsy values like empty strings, false or 0 are "defined"\n
return true;\n
}\n
// else Object\n
for (propertyName in object) {\n
if (object.hasOwnProperty(propertyName) && isDefined(object[propertyName])) {\n
return true;\n
}\n
}\n
return false;\n
}\n
\n
var LiteralExpression = (function () {\n
function LiteralExpression (literal) {\n
this.literal = encodingHelper.encodeLiteral(literal);\n
}\n
\n
LiteralExpression.prototype.expand = function () {\n
return this.literal;\n
};\n
\n
LiteralExpression.prototype.toString = LiteralExpression.prototype.expand;\n
\n
return LiteralExpression;\n
}());\n
\n
var parse = (function () {\n
\n
function parseExpression (expressionText) {\n
var\n
operator,\n
varspecs = [],\n
varspec = null,\n
varnameStart = null,\n
maxLengthStart = null,\n
index,\n
chr = \'\';\n
\n
function closeVarname () {\n
var varname = expressionText.substring(varnameStart, index);\n
if (varname.length === 0) {\n
throw new UriTemplateError({expressionText: expressionText, message: "a varname must be specified", position: index});\n
}\n
varspec = {varname: varname, exploded: false, maxLength: null};\n
varnameStart = null;\n
}\n
\n
function closeMaxLength () {\n
if (maxLengthStart === index) {\n
throw new UriTemplateError({expressionText: expressionText, message: "after a \':\' you have to specify the length", position: index});\n
}\n
varspec.maxLength = parseInt(expressionText.substring(maxLengthStart, index), 10);\n
maxLengthStart = null;\n
}\n
\n
operator = (function (operatorText) {\n
var op = operators.valueOf(operatorText);\n
if (op === null) {\n
throw new UriTemplateError({expressionText: expressionText, message: "illegal use of reserved operator", position: index, operator: operatorText});\n
}\n
return op;\n
}(expressionText.charAt(0)));\n
index = operator.symbol.length;\n
\n
varnameStart = index;\n
\n
for (; index < expressionText.length; index += chr.length) {\n
chr = pctEncoder.pctCharAt(expressionText, index);\n
\n
if (varnameStart !== null) {\n
// the spec says: varname = varchar *( ["."] varchar )\n
// so a dot is allowed except for the first char\n
if (chr === \'.\') {\n
if (varnameStart === index) {\n
throw new UriTemplateError({expressionText: expressionText, message: "a varname MUST NOT start with a dot", position: index});\n
}\n
continue;\n
}\n
if (rfcCharHelper.isVarchar(chr)) {\n
continue;\n
}\n
closeVarname();\n
}\n
if (maxLengthStart !== null) {\n
if (index === maxLengthStart && chr === \'0\') {\n
throw new UriTemplateError({expressionText: expressionText, message: "A :prefix must not start with digit 0", position: index});\n
}\n
if (charHelper.isDigit(chr)) {\n
if (index - maxLengthStart >= 4) {\n
throw new UriTemplateError({expressionText: expressionText, message: "A :prefix must have max 4 digits", position: index});\n
}\n
continue;\n
}\n
closeMaxLength();\n
}\n
if (chr === \':\') {\n
if (varspec.maxLength !== null) {\n
throw new UriTemplateError({expressionText: expressionText, message: "only one :maxLength is allowed per varspec", position: index});\n
}\n
if (varspec.exploded) {\n
throw new UriTemplateError({expressionText: expressionText, message: "an exploeded varspec MUST NOT be varspeced", position: index});\n
}\n
maxLengthStart = index + 1;\n
continue;\n
}\n
if (chr === \'*\') {\n
if (varspec === null) {\n
throw new UriTemplateError({expressionText: expressionText, message: "exploded without varspec", position: index});\n
}\n
if (varspec.exploded) {\n
throw new UriTemplateError({expressionText: expressionText, message: "exploded twice", position: index});\n
}\n
if (varspec.maxLength) {\n
throw new UriTemplateError({expressionText: expressionText, message: "an explode (*) MUST NOT follow to a prefix", position: index});\n
}\n
varspec.exploded = true;\n
continue;\n
}\n
// the only legal character now is the comma\n
if (chr === \',\') {\n
varspecs.push(varspec);\n
varspec = null;\n
varnameStart = index + 1;\n
continue;\n
}\n
throw new UriTemplateError({expressionText: expressionText, message: "illegal character", character: chr, position: index});\n
} // for chr\n
if (varnameStart !== null) {\n
closeVarname();\n
}\n
if (maxLengthStart !== null) {\n
closeMaxLength();\n
}\n
varspecs.push(varspec);\n
return new VariableExpression(expressionText, operator, varspecs);\n
}\n
\n
function escape_regexp_string(string) {\n
// http://simonwillison.net/2006/Jan/20/escape/\n
return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, "\\\\$&");\n
}\n
\n
function parse (uriTemplateText) {\n
// assert filled string\n
var\n
index,\n
chr,\n
expressions = [],\n
expression,\n
braceOpenIndex = null,\n
regexp_string = \'\',\n
can_match = true,\n
literalStart = 0;\n
for (index = 0; index < uriTemplateText.length; index += 1) {\n
chr = uriTemplateText.charAt(index);\n
if (literalStart !== null) {\n
if (chr === \'}\') {\n
throw new UriTemplateError({templateText: uriTemplateText, message: "unopened brace closed", position: index});\n
}\n
if (chr === \'{\') {\n
if (literalStart < index) {\n
expression = new LiteralExpression(uriTemplateText.substring(literalStart, index));\n
expressions.push(expression);\n
regexp_string += escape_regexp_string(\n
expression.literal);\n
}\n
literalStart = null;\n
braceOpenIndex = index;\n
}\n
continue;\n
}\n
\n
if (braceOpenIndex !== null) {\n
// here just { is forbidden\n
if (chr === \'{\') {\n
throw new UriTemplateError({templateText: uriTemplateText, message: "brace already opened", position: index});\n
}\n
if (chr === \'}\') {\n
if (braceOpenIndex + 1 === index) {\n
throw new UriTemplateError({templateText: uriTemplateText, message: "empty braces", position: braceOpenIndex});\n
}\n
try {\n
expression = parseExpression(uriTemplateText.substring(braceOpenIndex + 1, index));\n
}\n
catch (error) {\n
if (error.prototype === UriTemplateError.prototype) {\n
throw new UriTemplateError({templateText: uriTemplateText, message: error.options.message, position: braceOpenIndex + error.options.position, details: error.options});\n
}\n
throw error;\n
}\n
expressions.push(expression);\n
if (expression.operator.symbol.length === 0) {\n
regexp_string += "([^/]+)";\n
} else {\n
can_match = false;\n
}\n
braceOpenIndex = null;\n
literalStart = index + 1;\n
}\n
continue;\n
}\n
throw new Error(\'reached unreachable code\');\n
}\n
if (braceOpenIndex !== null) {\n
throw new UriTemplateError({templateText: uriTemplateText, message: "unclosed brace", position: braceOpenIndex});\n
}\n
if (literalStart < uriTemplateText.length) {\n
expression = new LiteralExpression(uriTemplateText.substring(literalStart));\n
expressions.push(expression);\n
regexp_string += escape_regexp_string(expression.literal);\n
}\n
if (can_match === false) {\n
regexp_string = undefined;\n
}\n
return new UriTemplate(uriTemplateText, expressions, regexp_string);\n
}\n
\n
return parse;\n
}());\n
\n
var VariableExpression = (function () {\n
// helper function if JSON is not available\n
function prettyPrint (value) {\n
return (JSON && JSON.stringify) ? JSON.stringify(value) : value;\n
}\n
\n
function isEmpty (value) {\n
if (!isDefined(value)) {\n
return true;\n
}\n
if (objectHelper.isString(value)) {\n
return value === \'\';\n
}\n
if (objectHelper.isNumber(value) || objectHelper.isBoolean(value)) {\n
return false;\n
}\n
if (objectHelper.isArray(value)) {\n
return value.length === 0;\n
}\n
for (var propertyName in value) {\n
if (value.hasOwnProperty(propertyName)) {\n
return false;\n
}\n
}\n
return true;\n
}\n
\n
function propertyArray (object) {\n
var\n
result = [],\n
propertyName;\n
for (propertyName in object) {\n
if (object.hasOwnProperty(propertyName)) {\n
result.push({name: propertyName, value: object[propertyName]});\n
}\n
}\n
return result;\n
}\n
\n
function VariableExpression (templateText, operator, varspecs) {\n
this.templateText = templateText;\n
this.operator = operator;\n
this.varspecs = varspecs;\n
}\n
\n
VariableExpression.prototype.toString = function () {\n
return this.templateText;\n
};\n
\n
function expandSimpleValue(varspec, operator, value) {\n
var result = \'\';\n
value = value.toString();\n
if (operator.named) {\n
result += encodingHelper.encodeLiteral(varspec.varname);\n
if (value === \'\') {\n
result += operator.ifEmpty;\n
return result;\n
}\n
result += \'=\';\n
}\n
if (varspec.maxLength !== null) {\n
value = value.substr(0, varspec.maxLength);\n
}\n
result += operator.encode(value);\n
return result;\n
}\n
\n
function valueDefined (nameValue) {\n
return isDefined(nameValue.value);\n
}\n
\n
function expandNotExploded(varspec, operator, value) {\n
var\n
arr = [],\n
result = \'\';\n
if (operator.named) {\n
result += encodingHelper.encodeLiteral(varspec.varname);\n
if (isEmpty(value)) {\n
result += operator.ifEmpty;\n
return result;\n
}\n
result += \'=\';\n
}\n
if (objectHelper.isArray(value)) {\n
arr = value;\n
arr = objectHelper.filter(arr, isDefined);\n
arr = objectHelper.map(arr, operator.encode);\n
result += objectHelper.join(arr, \',\');\n
}\n
else {\n
arr = propertyArray(value);\n
arr = objectHelper.filter(arr, valueDefined);\n
arr = objectHelper.map(arr, function (nameValue) {\n
return operator.encode(nameValue.name) + \',\' + operator.encode(nameValue.value);\n
});\n
result += objectHelper.join(arr, \',\');\n
}\n
return result;\n
}\n
\n
function expandExplodedNamed (varspec, operator, value) {\n
var\n
isArray = objectHelper.isArray(value),\n
arr = [];\n
if (isArray) {\n
arr = value;\n
arr = objectHelper.filter(arr, isDefined);\n
arr = objectHelper.map(arr, function (listElement) {\n
var tmp = encodingHelper.encodeLiteral(varspec.varname);\n
if (isEmpty(listElement)) {\n
tmp += operator.ifEmpty;\n
}\n
else {\n
tmp += \'=\' + operator.encode(listElement);\n
}\n
return tmp;\n
});\n
}\n
else {\n
arr = propertyArray(value);\n
arr = objectHelper.filter(arr, valueDefined);\n
arr = objectHelper.map(arr, function (nameValue) {\n
var tmp = encodingHelper.encodeLiteral(nameValue.name);\n
if (isEmpty(nameValue.value)) {\n
tmp += operator.ifEmpty;\n
}\n
else {\n
tmp += \'=\' + operator.encode(nameValue.value);\n
}\n
return tmp;\n
});\n
}\n
return objectHelper.join(arr, operator.separator);\n
}\n
\n
function expandExplodedUnnamed (operator, value) {\n
var\n
arr = [],\n
result = \'\';\n
if (objectHelper.isArray(value)) {\n
arr = value;\n
arr = objectHelper.filter(arr, isDefined);\n
arr = objectHelper.map(arr, operator.encode);\n
result += objectHelper.join(arr, operator.separator);\n
}\n
else {\n
arr = propertyArray(value);\n
arr = objectHelper.filter(arr, function (nameValue) {\n
return isDefined(nameValue.value);\n
});\n
arr = objectHelper.map(arr, function (nameValue) {\n
return operator.encode(nameValue.name) + \'=\' + operator.encode(nameValue.value);\n
});\n
result += objectHelper.join(arr, operator.separator);\n
}\n
return result;\n
}\n
\n
\n
VariableExpression.prototype.expand = function (variables) {\n
var\n
expanded = [],\n
index,\n
varspec,\n
value,\n
valueIsArr,\n
oneExploded = false,\n
operator = this.operator;\n
\n
// expand each varspec and join with operator\'s separator\n
for (index = 0; index < this.varspecs.length; index += 1) {\n
varspec = this.varspecs[index];\n
value = variables[varspec.varname];\n
// if (!isDefined(value)) {\n
// if (variables.hasOwnProperty(varspec.name)) {\n
if (value === null || value === undefined) {\n
continue;\n
}\n
if (varspec.exploded) {\n
oneExploded = true;\n
}\n
valueIsArr = objectHelper.isArray(value);\n
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {\n
expanded.push(expandSimpleValue(varspec, operator, value));\n
}\n
else if (varspec.maxLength && isDefined(value)) {\n
// 2.4.1 of the spec says: "Prefix modifiers are not applicable to variables that have composite values."\n
throw new Error(\'Prefix modifiers are not applicable to variables that have composite values. You tried to expand \' + this + " with " + prettyPrint(value));\n
}\n
else if (!varspec.exploded) {\n
if (operator.named || !isEmpty(value)) {\n
expanded.push(expandNotExploded(varspec, operator, value));\n
}\n
}\n
else if (isDefined(value)) {\n
if (operator.named) {\n
expanded.push(expandExplodedNamed(varspec, operator, value));\n
}\n
else {\n
expanded.push(expandExplodedUnnamed(operator, value));\n
}\n
}\n
}\n
\n
if (expanded.length === 0) {\n
return "";\n
}\n
else {\n
return operator.first + objectHelper.join(expanded, operator.separator);\n
}\n
};\n
\n
return VariableExpression;\n
}());\n
\n
var UriTemplate = (function () {\n
function UriTemplate (templateText, expressions, regexp_string) {\n
this.templateText = templateText;\n
this.expressions = expressions;\n
\n
if (regexp_string !== undefined) {\n
this.regexp = new RegExp("^" + regexp_string + "$");\n
}\n
\n
objectHelper.deepFreeze(this);\n
}\n
\n
UriTemplate.prototype.toString = function () {\n
return this.templateText;\n
};\n
\n
UriTemplate.prototype.expand = function (variables) {\n
// this.expressions.map(function (expression) {return expression.expand(variables);}).join(\'\');\n
var\n
index,\n
result = \'\';\n
for (index = 0; index < this.expressions.length; index += 1) {\n
result += this.expressions[index].expand(variables);\n
}\n
return result;\n
};\n
\n
UriTemplate.prototype.extract = function (text) {\n
var expression_index,\n
extracted_index = 1,\n
expression,\n
varspec,\n
matched = true,\n
variables = {},\n
result;\n
\n
if ((this.regexp !== undefined) && (this.regexp.test(text))) {\n
result = this.regexp.exec(text);\n
for (expression_index = 0; expression_index < this.expressions.length; expression_index += 1) {\n
expression = this.expressions[expression_index];\n
if (expression.literal === undefined) {\n
if ((expression.operator !== undefined) && (expression.operator.symbol.length === 0) && (expression.varspecs.length === 1)) {\n
varspec = expression.varspecs[0];\n
if ((varspec.exploded === false) && (varspec.maxLength === null)) {\n
if (result[extracted_index].indexOf(\',\') === -1) {\n
variables[varspec.varname] = decodeURIComponent(result[extracted_index]);\n
extracted_index += 1;\n
} else {\n
matched = false;\n
}\n
} else {\n
matched = false;\n
}\n
} else {\n
matched = false;\n
}\n
}\n
}\n
if (matched) {\n
return variables;\n
}\n
}\n
return false;\n
};\n
\n
UriTemplate.parse = parse;\n
UriTemplate.UriTemplateError = UriTemplateError;\n
return UriTemplate;\n
}());\n
\n
exportCallback(UriTemplate);\n
\n
}(function (UriTemplate) {\n
"use strict";\n
// export UriTemplate, when module is present, or pass it to window or global\n
if (typeof module !== "undefined") {\n
module.exports = UriTemplate;\n
}\n
else if (typeof define === "function") {\n
define([],function() {\n
return UriTemplate;\n
});\n
}\n
else if (typeof window !== "undefined") {\n
window.UriTemplate = UriTemplate;\n
}\n
else {\n
global.UriTemplate = UriTemplate;\n
}\n
}\n
));
]]></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>uritemplate.js</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>1.12.0</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1406898405.71</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>936.8894.19002.47138</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405933454.85</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>romain</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1405086573.26</float>
<string>GMT</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
......@@ -114,6 +114,33 @@
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_local_properties</string> </key>
<value>
<tuple>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>default_view_action_reference</string> </value>
</item>
<item>
<key> <string>type</string> </key>
<value> <string>string</string> </value>
</item>
</dictionary>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>view_action_category</string> </value>
</item>
<item>
<key> <string>type</string> </key>
<value> <string>string</string> </value>
</item>
</dictionary>
</tuple>
</value>
</item>
<item>
<key> <string>_range_criterion</string> </key>
<value>
......@@ -132,6 +159,10 @@
<key> <string>custom_render_method_id</string> </key>
<value> <string>ERP5Document_getHateoas</string> </value>
</item>
<item>
<key> <string>default_view_action_reference</string> </key>
<value> <string>view</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
......@@ -146,6 +177,10 @@
<key> <string>id</string> </key>
<value> <string>hateoas</string> </value>
</item>
<item>
<key> <string>layout_configuration_form_id</string> </key>
<value> <string>WebSection_viewHateoasPreference</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Web Section</string> </value>
......@@ -164,6 +199,10 @@
<key> <string>title</string> </key>
<value> <string>Restricted Hateoas</string> </value>
</item>
<item>
<key> <string>view_action_category</string> </key>
<value> <string>object_view</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string>Base_edit</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string>multipart/form-data</string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>left</string> </key>
<value>
<list>
<string>my_default_view_action_reference</string>
<string>my_view_action_category</string>
</list>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSection_viewHateoasPreference</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>WebSection_viewHateoasPreference</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>form_view</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Web Section Preference</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>my_default_view_action_reference</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_view_mode_reference</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Default View Action Reference</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>my_view_action_category</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_view_mode_reference</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>View Action Category</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment