- commit
- 40091da832c3a4e6bc98bae06c2a53acb6335020
- parent
- cddee052173f6a3a7ab401963a9f78f92016f8ad
- Author
- Tobias Bengfort <tobias.bengfort@gmx.net>
- Date
- 2015-08-28 19:57
bump to 0.1.0
Diffstat
| A | CHANGES.md | 35 | +++++++++++++++++++++++++++++++++++ |
| M | bower.json | 2 | +- |
| M | dist/muu.js | 192 | +++++++++++++++++++++++++++++++------------------------------ |
| M | dist/muu.min.js | 28 | ++++++++++++++-------------- |
4 files changed, 149 insertions, 108 deletions
diff --git a/CHANGES.md b/CHANGES.md
@@ -0,0 +1,35 @@ -1 1 # 0.1.0 -1 2 -1 3 ## Breaking changes -1 4 -1 5 - The public API has changed: Instead of many AMD modules there is now one -1 6 UMD module exporting an object that provides access to the following -1 7 resources: -1 8 -1 9 - `Registry` (formally exported from module `muu`) -1 10 - `$` (formally exported from module `muu-dom-helpers` -1 11 - `$location` (formally exported from module `muu-location`) -1 12 -1 13 There is now also a minimal build in `dist/muu-core.js` that does not -1 14 contain `muu-template`, `muu-js-helpers`, `muu-location` or `muu-search`. -1 15 Instead, it depends on lodash. -1 16 -1 17 - `updateDOM` does no longer change the Node it is called on. As a -1 18 consequence, the `<div>` wrapper inside of a `<muu>` element is no longer -1 19 required and was removed. -1 20 -1 21 ## Enhancements -1 22 -1 23 - The build-in templating system has two new features: -1 24 - inverted loops render the content once if the value is falsy -1 25 - `this` can now be used to refer to the scope as a whole -1 26 -1 27 ## Bugfixes -1 28 -1 29 - A bug in `$.destroy` that caused it to always use the fallback -1 30 implementation was fixed. -1 31 -1 32 -1 33 # 0.0.0 (2015-10-23) -1 34 -1 35 *initial release*
diff --git a/bower.json b/bower.json
@@ -1,6 +1,6 @@ 1 1 { 2 2 "name": "muu",3 -1 "version": "0.0.0",-1 3 "version": "0.1.0", 4 4 "authors": [ 5 5 "Tobias Bengfort <tobias.bengfort@posteo.de>" 6 6 ],
diff --git a/dist/muu.js b/dist/muu.js
@@ -938,7 +938,7 @@ 938 938 return q; 939 939 } 940 940941 -1 var a = []-1 941 var a = []; 942 942 for (var key in q) { 943 943 if (q.hasOwnProperty(key)) { 944 944 a = a.concat(unparseItem(key, q[key])); @@ -1023,19 +1023,28 @@ 1023 1023 var openTag = '{{'; 1024 1024 var closeTag = '}}'; 1025 1025 -1 1026 /** -1 1027 * @param {string} key -1 1028 * @param {Object} data -1 1029 * @return {*} -1 1030 * @nosideeffects -1 1031 */ 1026 1032 var getValue = function(key, data) { 1027 1033 return key === 'this' ? data : data[key]; 1028 1034 }; 1029 10351030 -1 var parseVariableTemplate = function(template) {1031 -1 var content = template.slice(2, -2);1032 -11033 -1 if (template.indexOf(':') === -1) {-1 1036 /** -1 1037 * @param {string} tag -1 1038 * @return {function(*): string} -1 1039 * @nosideeffects -1 1040 */ -1 1041 var parseVariable = function(tag) { -1 1042 if (tag.indexOf(':') === -1) { 1034 1043 return function(data) {1035 -1 return $.escapeHtml(getValue(content, data) || '');-1 1044 return $.escapeHtml(getValue(tag, data) || ''); 1036 1045 }; 1037 1046 } else {1038 -1 var pairs = content.split(',').map(function(pair) {-1 1047 var pairs = _.map(tag.split(','), function(pair) { 1039 1048 var v = pair.split(':'); 1040 1049 var key = v[0].trim(); 1041 1050 var value = v.slice(1).join(':').trim(); @@ -1043,81 +1052,65 @@ 1043 1052 }); 1044 1053 1045 1054 return function(data) {1046 -1 var results = [];1047 -11048 -1 for (var i = 0; i < pairs.length; i++) {1049 -1 var key = pairs[i][0];1050 -1 var value = pairs[i][1];1051 -11052 -1 if (getValue(value, data)) {1053 -1 results.push(key);1054 -1 }1055 -1 }-1 1055 var results = _.map(_.filter(pairs, function(pair) { -1 1056 return getValue(pair[1], data); -1 1057 }), function(pair) { -1 1058 return pair[0]; -1 1059 }); 1056 1060 1057 1061 return $.escapeHtml(results.join(' ')); 1058 1062 }; 1059 1063 } 1060 1064 }; 1061 10651062 -1 var parseLoopTemplate = function(tag, afterTag, inverted) {1063 -1 var tagName = tag.slice(3, -2);-1 1066 /** -1 1067 * @param {string} tag -1 1068 * @param {string} afterTag -1 1069 * @param {boolean} [inverted] -1 1070 * @return {{render: function(*): string, afterBlock: string}} -1 1071 * @nosideeffects -1 1072 */ -1 1073 var parseLoop = function(tag, afterTag, inverted) { -1 1074 var inner = parseTemplate(afterTag, tag); 1064 10751065 -1 var v = parseTemplate(afterTag, tagName);1066 -1 var inner = v[0];1067 -1 var afterLoop = v[1];-1 1076 return { -1 1077 render: function(data) { -1 1078 var value = getValue(tag, data); -1 1079 var result = ''; 1068 10801069 -1 var render = function(data) {1070 -1 if (inverted) {1071 -1 if (getValue(tagName, data)) {1072 -1 return '';1073 -1 } else {1074 -1 return inner(data);1075 -1 }1076 -1 } else {1077 -1 if (_.isArray(getValue(tagName, data))) {1078 -1 var result = '';1079 -1 for (var i = 0; i < getValue(tagName, data).length; i++) {1080 -1 result += inner(getValue(tagName, data)[i]);-1 1081 if (inverted) { -1 1082 if (!value) { -1 1083 result += inner.render(data); 1081 1084 }1082 -1 return result;1083 -1 } else if (getValue(tagName, data)) {1084 -1 return inner(data);1085 1085 } else {1086 -1 return '';-1 1086 if (_.isArray(value)) { -1 1087 for (var i = 0; i < value.length; i++) { -1 1088 result += inner.render(value[i]); -1 1089 } -1 1090 } else if (value) { -1 1091 result += inner.render(data); -1 1092 } 1087 1093 }1088 -1 }1089 -1 };1090 -11091 -1 return [render, afterLoop];1092 -1 };1093 -11094 -1 var concat = function(a) {1095 -1 var last = a.pop();1096 -11097 -1 if (_.isArray(last)) {1098 -1 a.push(last[0]);1099 -1 return [concat(a), last[1]];1100 -1 } else {1101 -1 a.push(last);1102 10941103 -1 return function(data) {1104 -1 return a.map(function(item) {1105 -1 if (_.isString(item)) {1106 -1 return item;1107 -1 } else if (_.isFunction(item)) {1108 -1 return item(data);1109 -1 }1110 -1 }).join('');1111 -1 };1112 -1 }-1 1095 return result; -1 1096 }, -1 1097 afterBlock: inner.afterBlock -1 1098 }; 1113 1099 }; 1114 1100 -1 1101 /** -1 1102 * @param {string} template -1 1103 * @param {string} [loopName] -1 1104 * @return {{render: function(*): string, afterBlock: string}} -1 1105 * @nosideeffects -1 1106 */ 1115 1107 var parseTemplate = function(template, loopName) { 1116 1108 var openIndex = template.indexOf(openTag); 1117 1109 if (openIndex === -1) { 1118 1110 if (loopName === undefined) {1119 -1 return function() {1120 -1 return template;-1 1111 return { -1 1112 render: function() { return template; }, -1 1113 afterBlock: '' 1121 1114 }; 1122 1115 } else { 1123 1116 throw new Error('unclosed loop: ' + loopName); @@ -1126,45 +1119,58 @@ 1126 1119 var beforeTag = template.slice(0, openIndex); 1127 1120 var tmp = template.slice(openIndex); 1128 11211129 -1 var closeIndex = tmp.indexOf(closeTag) + 2;1130 -1 if (closeIndex === 1) {-1 1122 var closeIndex = tmp.indexOf(closeTag); -1 1123 if (closeIndex === -1) { 1131 1124 throw new Error('unclosed tag: ' + tmp); 1132 1125 }1133 -1 var tag = tmp.slice(0, closeIndex);1134 -1 var afterTag = tmp.slice(closeIndex);1135 -11136 -1 if (tag.lastIndexOf('{{#', 0) === 0) {1137 -1 var v = parseLoopTemplate(tag, afterTag);1138 -1 var loop = v[0];1139 -1 var after = parseTemplate(v[1], loopName);1140 -1 return concat([beforeTag, loop, after]);1141 -1 } else if (tag.lastIndexOf('{{^', 0) === 0) {1142 -1 var v = parseLoopTemplate(tag, afterTag, true);1143 -1 var loop = v[0];1144 -1 var after = parseTemplate(v[1], loopName);1145 -1 return concat([beforeTag, loop, after]);1146 -1 } else if (tag.lastIndexOf('{{!', 0) === 0) {1147 -1 var after = parseTemplate(afterTag, loopName);1148 -1 return concat([beforeTag, after]);1149 -1 } else if (tag.lastIndexOf('{{/', 0) === 0) {1150 -1 if (tag.slice(3, -2) === loopName) {1151 -1 var render = function() {1152 -1 return beforeTag;1153 -1 };1154 -1 return [render, afterTag];1155 -1 } else {-1 1126 var tag = tmp.slice(openTag.length, closeIndex); -1 1127 var afterTag = tmp.slice(closeIndex + closeTag.length); -1 1128 -1 1129 var loadNext = true; -1 1130 var current = { -1 1131 render: function() { return ''; }, -1 1132 afterBlock: afterTag -1 1133 }; -1 1134 -1 1135 if (tag.lastIndexOf('#', 0) === 0) { -1 1136 current = parseLoop(tag.substr(1), afterTag); -1 1137 } else if (tag.lastIndexOf('^', 0) === 0) { -1 1138 current = parseLoop(tag.substr(1), afterTag, true); -1 1139 } else if (tag.lastIndexOf('/', 0) === 0) { -1 1140 loadNext = false; -1 1141 if (tag.substr(1) !== loopName) { 1156 1142 throw new Error('unexpected closing loop: ' + tag); 1157 1143 } -1 1144 } else if (tag.lastIndexOf('!', 0) !== 0) { -1 1145 current.render = parseVariable(tag); -1 1146 } -1 1147 -1 1148 if (loadNext) { -1 1149 var next = parseTemplate(current.afterBlock, loopName); -1 1150 return { -1 1151 render: function(data) { -1 1152 return beforeTag + current.render(data) + next.render(data); -1 1153 }, -1 1154 afterBlock: next.afterBlock -1 1155 }; 1158 1156 } else {1159 -1 var render = parseVariableTemplate(tag);1160 -1 var after = parseTemplate(afterTag, loopName);1161 -1 return concat([beforeTag, render, after]);-1 1157 return { -1 1158 render: function(data) { -1 1159 return beforeTag + current.render(data); -1 1160 }, -1 1161 afterBlock: current.afterBlock -1 1162 }; 1162 1163 } 1163 1164 } 1164 1165 }; 1165 1166 -1 1167 var cache = {}; -1 1168 1166 1169 return function(template, data) {1167 -1 return parseTemplate(template)(data);-1 1170 if (cache[template] === undefined) { -1 1171 cache[template] = parseTemplate(template); -1 1172 } -1 1173 return cache[template].render(data); 1168 1174 }; 1169 1175 }); 1170 1176 /**
diff --git a/dist/muu.min.js b/dist/muu.min.js
@@ -1,19 +1,19 @@1 -1 (function(r,q,h){(function(h){"function"===typeof define&&define.amd?define("muu",[],h):r.muu=h(r._)})(function(m){var p={};p["muu-js-helpers"]={instance:m};var v=function(c,b){for(var e=[],a=0;a<c.length;a++)e.push(b(c[a]));return e};m=function(c,b,e){p[c]={deps:b,factory:e}};var t=function(c){if(!p[c])return h;p[c].instance||(p[c].instance=p[c].factory.apply(h,v(p[c].deps,t)));return p[c].instance};m("muu-directive",["muu-dom-helpers","muu-js-helpers","muu-update-dom"],function(c,b,e){return function(a,2 -1 d,g){var f=this;a.innerHTML="";var k=function(d){var b="data-on"+d.type;d.target.hasAttribute(b)&&(b=d.target.getAttribute(b),d=c.createEvent("muu-"+b,d),a.dispatchEvent(d))};this.update=function(s){var u=q.createElement("div");u.innerHTML=g.renderer(d,s);e(a,u);b.forEach(["keydown","keyup","click","change","search"],function(a){b.forEach(f.querySelectorAll("[data-on"+a+"]"),function(d){d.addEventListener(a,k,!1)})});var n=c.createEvent("muu-parent-update");s=this.querySelectorAll("muu.muu-initialised");3 -1 b.forEach(s,function(a){a.dispatchEvent(n)});g.linkAll(f)};this.querySelectorAll=function(d){var k=a.querySelectorAll(d),c=a.querySelectorAll(".muu-isolate"),c=b.union(b.map(c,function(a){return a.querySelectorAll(d)}));return b.difference(k,c)};this.querySelector=function(a){a=f.querySelectorAll(a);if(0<a.length)return a[0]};this.getModel=function(a,d){if(a===h){var k={};b.forEach(f.querySelectorAll("[name]"),function(a){k[a.name]=f.getModel(a.name)});return k}var e=f.querySelector("[name="+a+"]");-1 1 (function(r,p,h){(function(h){"function"===typeof define&&define.amd?define("muu",[],h):r.muu=h(r._)})(function(m){var n={};n["muu-js-helpers"]={instance:m};var v=function(c,b){for(var e=[],a=0;a<c.length;a++)e.push(b(c[a]));return e};m=function(c,b,e){n[c]={deps:b,factory:e}};var t=function(c){if(!n[c])return h;n[c].instance||(n[c].instance=n[c].factory.apply(h,v(n[c].deps,t)));return n[c].instance};m("muu-directive",["muu-dom-helpers","muu-js-helpers","muu-update-dom"],function(c,b,e){return function(a, -1 2 d,g){var f=this;a.innerHTML="";var l=function(d){var b="data-on"+d.type;d.target.hasAttribute(b)&&(b=d.target.getAttribute(b),d=c.createEvent("muu-"+b,d),a.dispatchEvent(d))};this.update=function(k){var u=p.createElement("div");u.innerHTML=g.renderer(d,k);e(a,u);b.forEach(["keydown","keyup","click","change","search"],function(a){b.forEach(f.querySelectorAll("[data-on"+a+"]"),function(d){d.addEventListener(a,l,!1)})});var s=c.createEvent("muu-parent-update");k=this.querySelectorAll("muu.muu-initialised"); -1 3 b.forEach(k,function(a){a.dispatchEvent(s)});g.linkAll(f)};this.querySelectorAll=function(d){var l=a.querySelectorAll(d),c=a.querySelectorAll(".muu-isolate"),c=b.union(b.map(c,function(a){return a.querySelectorAll(d)}));return b.difference(l,c)};this.querySelector=function(a){a=f.querySelectorAll(a);if(0<a.length)return a[0]};this.getModel=function(a,d){if(a===h){var l={};b.forEach(f.querySelectorAll("[name]"),function(a){l[a.name]=f.getModel(a.name)});return l}var e=f.querySelector("[name="+a+"]"); 4 4 return e===h?d:"checkbox"===e.type?e.checked:"radio"===e.type?(e=f.querySelectorAll("[name="+a+"]"),c.getRadio(e)||d):e.value};this.setModel=function(a,d){var b=f.querySelector("[name="+a+"]");"checkbox"===b.type?b.checked=d:"radio"===b.type?(b=f.querySelectorAll("[name="+a+"]"),c.setRadio(b,d)):b.value=d}}});m("muu-dom-helpers",["muu-js-helpers"],function(c){var b={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},e={DELAY:1E3,escapeHtml:function(a){return String(a).replace(/[&<>"'\/]/g,5 -1 function(a){return b[a]})},createEvent:function(a,d){if("function"===typeof CustomEvent)return new CustomEvent(a,{detail:d});var b=q.createEvent("CustomEvent");b.initCustomEvent(a,!1,!0,d);return b},on:function(a,d,b){a.addEventListener(d,b,!1);return function(){a.removeEventListener(d,b,!1)}},ready:function(a){a=c.once(a);if("complete"===q.readyState)return a(),function(){};var d=e.on(q,"DOMContentLoaded",a),b=e.on(r,"load",a);return function(){d();b()}},isDescendant:function(a,d){return!!a&&(a===6 -1 d||e.isDescendant(a.parentNode,d))},destroy:function(a,d){var b;if(r.MutationObserver){var f=new MutationObserver(function(){e.isDescendant(a,q)||(d(),b())});f.observe(q,{childList:!0,subtree:!0});b=c.once(function(){f.disconnect();f=h})}else{var k=setInterval(function(){e.isDescendant(a,q)||(d(),b())},e.DELAY);b=function(){clearInterval(k)}}return b},getRadio:function(a){for(var d=0;d<a.length;d++)if(a[d].checked)return a[d].value},setRadio:function(a,d){for(var b=0;b<a.length;b++)a[b].checked=a[b].value===7 -1 d?!0:!1}};return e});m("muu-js-helpers",[],function(){var c={isString:function(b){return"string"===typeof b||"[object String]"===Object.prototype.toString.call(b)}};c.isArray=Array.isArray;c.isFunction=function(b){return"function"===typeof b};c.once=function(b){var e,a=!1;return function(){a||(e=b.apply(this,arguments),a=!0);return e}};c.indexOf=function(b,e){if("indexOf"in b)return b.indexOf(e);for(var a=0;a<b.length;a++)if(b[a]===e)return a;return-1};c.forEach=function(b,e){if("forEach"in b)return b.forEach(e);8 -1 for(var a=0;a<b.length;a++)e(b[a])};c.map=function(b,e){if("map"in b)return b.map(e);for(var a=[],d=0;d<b.length;d++)a.push(e(b[d]));return a};c.filter=function(b,e){if("filter"in b)return b.filter(e);for(var a=[],d=0;d<b.length;d++)e(b[d])&&a.push(b[d]);return a};c.union=function(b){for(var e=[],a=0;a<b.length;a++)for(var d=0;d<b[a].length;d++)-1===c.indexOf(e,b[a][d])&&e.push(b[a][d]);return e};c.difference=function(b,e){for(var a=[],d=0;d<b.length;d++)-1===c.indexOf(e,b[d])&&a.push(b[d]);return a};-1 5 function(a){return b[a]})},createEvent:function(a,d){if("function"===typeof CustomEvent)return new CustomEvent(a,{detail:d});var b=p.createEvent("CustomEvent");b.initCustomEvent(a,!1,!0,d);return b},on:function(a,d,b){a.addEventListener(d,b,!1);return function(){a.removeEventListener(d,b,!1)}},ready:function(a){a=c.once(a);if("complete"===p.readyState)return a(),function(){};var d=e.on(p,"DOMContentLoaded",a),b=e.on(r,"load",a);return function(){d();b()}},isDescendant:function(a,d){return!!a&&(a=== -1 6 d||e.isDescendant(a.parentNode,d))},destroy:function(a,d){var b;if(r.MutationObserver){var f=new MutationObserver(function(){e.isDescendant(a,p)||(d(),b())});f.observe(p,{childList:!0,subtree:!0});b=c.once(function(){f.disconnect();f=h})}else{var l=setInterval(function(){e.isDescendant(a,p)||(d(),b())},e.DELAY);b=function(){clearInterval(l)}}return b},getRadio:function(a){for(var d=0;d<a.length;d++)if(a[d].checked)return a[d].value},setRadio:function(a,d){for(var b=0;b<a.length;b++)a[b].checked=a[b].value=== -1 7 d?!0:!1}};return e});m("muu-js-helpers",[],function(){var c={isString:function(b){return"string"===typeof b||"[object String]"===Object.prototype.toString.call(b)}};c.isArray=Array.isArray;c.isFunction=function(b){return"function"===typeof b};c.once=function(b){var c,a=!1;return function(){a||(c=b.apply(this,arguments),a=!0);return c}};c.indexOf=function(b,c){if("indexOf"in b)return b.indexOf(c);for(var a=0;a<b.length;a++)if(b[a]===c)return a;return-1};c.forEach=function(b,c){if("forEach"in b)return b.forEach(c); -1 8 for(var a=0;a<b.length;a++)c(b[a])};c.map=function(b,c){if("map"in b)return b.map(c);for(var a=[],d=0;d<b.length;d++)a.push(c(b[d]));return a};c.filter=function(b,c){if("filter"in b)return b.filter(c);for(var a=[],d=0;d<b.length;d++)c(b[d])&&a.push(b[d]);return a};c.union=function(b){for(var e=[],a=0;a<b.length;a++)for(var d=0;d<b[a].length;d++)-1===c.indexOf(e,b[a][d])&&e.push(b[a][d]);return e};c.difference=function(b,e){for(var a=[],d=0;d<b.length;d++)-1===c.indexOf(e,b[d])&&a.push(b[d]);return a}; 9 9 c.flatten=function(b){var e=[];c.forEach(b,function(a){c.isArray(a)?e=e.concat(c.flatten(a)):e.push(a)});return e};return c});m("muu-location",["muu-search"],function(c){var b={absUrl:function(){return location.href},url:function(a,d){if(a===h)return location.pathname+location.search+location.hash;d?history.replaceState(null,null,a):history.pushState(null,null,a);return b},protocol:function(){return location.protocol},host:function(){return location.host},port:function(){return location.port},path:function(a, 10 10 d){if(a===h)return location.pathname;b.url(a+location.search+location.hash,d);return b}},e=function(a,d){if(a===h)return location.search;a&&"?"!==a[0]&&(a="?"+a);1===a.length&&(a="");b.url(location.pathname+a+location.hash,d);return b};b.search=function(a,b,g){if(a!==h){if(b!==h){var f=c.parse(e());f[a]=b;return e(c.unparse(f),g)}return e(c.unparse(a),g)}return c.parse(e())};b.hash=function(a,d){if(a===h)return location.hash?location.hash.slice(1):"";b.url(location.pathname+location.search+"#"+a, 11 11 d);return b};b.addEventListener=function(a,d){"change"===a&&r.addEventListener("popstate",d,!1);return b};b.removeEventListener=function(a,d){"change"===a&&r.removeEventListener("popstate",d,!1);return b};return b});m("muu-registry",["muu-template","muu-directive","muu-js-helpers","muu-dom-helpers"],function(c,b,e,a){return function(d){var g=this,f={};this.config=d||{};this.renderer=g.config.renderer||c;this.registerDirective=function(a,b,d){f[a]={template:b,link:d};return g};this.registerModule=12 -1 function(a){a(g);return g};this.link=function(d,e){e===h&&(e=d.getAttribute("type"));if(!f.hasOwnProperty(e))throw Error("Unknown directive type: "+e);var c=f[e].link,n=new b(d,f[e].template,g),c=c(n,d);d.classList.add("muu-isolate");d.classList.add("muu-initialised");g.config.debug&&(d.directive=n);c!==h&&a.destroy(d,c);return n};this.linkAll=function(a){a=e.filter(a.querySelectorAll("muu"),function(a){return!a.classList.contains("muu-initialised")});return e.map(a,function(a){return g.link(a)})}}});-1 12 function(a){a(g);return g};this.link=function(d,c){c===h&&(c=d.getAttribute("type"));if(!f.hasOwnProperty(c))throw Error("Unknown directive type: "+c);var e=f[c].link,s=new b(d,f[c].template,g),e=e(s,d);d.classList.add("muu-isolate");d.classList.add("muu-initialised");g.config.debug&&(d.directive=s);e!==h&&a.destroy(d,e);return s};this.linkAll=function(a){a=e.filter(a.querySelectorAll("muu"),function(a){return!a.classList.contains("muu-initialised")});return e.map(a,function(a){return g.link(a)})}}}); 13 13 m("muu-search",["muu-js-helpers"],function(c){var b={parse:function(a){var d={},b=function(a,b){d.hasOwnProperty(a)?c.isArray(d[a])?d[a].push(b):d[a]=[d[a],b]:d[a]=b};c.forEach(a.substring(1).split("&"),function(a){a=c.map(a.split("="),decodeURIComponent);2===a.length?b(a[0],a[1]):a[0]&&b(a[0],!0)});return d}},e=function(a,b){return b===h||null===b||!1===b?[]:c.isArray(b)?c.flatten(c.map(b,function(b){return e(a,b)})):!0===b?[encodeURIComponent(a)]:[encodeURIComponent(a)+"="+encodeURIComponent(b)]};14 -1 b.unparse=function(a){if(c.isString(a))return a;var b=[],g;for(g in a)a.hasOwnProperty(g)&&(b=b.concat(e(g,a[g])));return 0<b.length?"?"+b.join("&"):""};return b});m("muu-template",["muu-js-helpers","muu-dom-helpers"],function(c,b){var e=function(a,b){return"this"===a?b:b[a]},a=function(a){var d=a.slice(2,-2);if(-1===a.indexOf(":"))return function(a){return b.escapeHtml(e(d,a)||"")};var c=d.split(",").map(function(a){var b=a.split(":");a=b[0].trim();b=b.slice(1).join(":").trim();return[a,b]});return function(a){for(var d=15 -1 [],k=0;k<c.length;k++){var f=c[k][0];e(c[k][1],a)&&d.push(f)}return b.escapeHtml(d.join(" "))}},d=function(a,b,d){var g=a.slice(3,-2);a=f(b,g);var l=a[0];return[function(a){if(d)return e(g,a)?"":l(a);if(c.isArray(e(g,a))){for(var b="",k=0;k<e(g,a).length;k++)b+=l(e(g,a)[k]);return b}return e(g,a)?l(a):""},a[1]]},g=function(a){var b=a.pop();if(c.isArray(b))return a.push(b[0]),[g(a),b[1]];a.push(b);return function(b){return a.map(function(a){if(c.isString(a))return a;if(c.isFunction(a))return a(b)}).join("")}},16 -1 f=function(b,e){var c=b.indexOf("{{");if(-1===c){if(e===h)return function(){return b};throw Error("unclosed loop: "+e);}var n=b.slice(0,c),l=b.slice(c),m=l.indexOf("}}")+2;if(1===m)throw Error("unclosed tag: "+l);c=l.slice(0,m);l=l.slice(m);if(0===c.lastIndexOf("{{#",0))return l=d(c,l),c=l[0],l=f(l[1],e),g([n,c,l]);if(0===c.lastIndexOf("{{^",0))return l=d(c,l,!0),c=l[0],l=f(l[1],e),g([n,c,l]);if(0===c.lastIndexOf("{{!",0))return l=f(l,e),g([n,l]);if(0===c.lastIndexOf("{{/",0)){if(c.slice(3,-2)===17 -1 e)return[function(){return n},l];throw Error("unexpected closing loop: "+c);}c=a(c);l=f(l,e);return g([n,c,l])};return function(a,b){return f(a)(b)}});m("muu-update-dom",["muu-js-helpers"],function(c){var b=function(a,b){var e=c.map(a.attributes,function(a){return a.name}),f=c.map(b.attributes,function(a){return a.name});c.forEach(e,function(c){b.hasAttribute(c)||"__IE8__"===c.substr(0,7)||a.removeAttribute(c)});c.forEach(f,function(c){a.getAttribute(c)!==b.getAttribute(c)&&a.setAttribute(c,b.getAttribute(c))})},18 -1 e=function(a,d){for(var g=a.childNodes.length,f=d.childNodes.length,k=f;k<g;k++)a.removeChild(a.childNodes[f]);for(k=g;k<f;k++)a.appendChild(d.childNodes[g]);for(k=0;k<g&&k<f;k++){var h=a.childNodes[k],m=d.childNodes[k];if(h.nodeType===m.nodeType&&h.nodeName===m.nodeName&&h.type===m.type){if(1===h.nodeType){var n=c.filter(h.classList,function(a){return 0===a.lastIndexOf("muu-",0)});b(h,m);c.forEach(n,function(a){h.classList.add(a)})}else 3===h.nodeType&&(h.nodeValue=m.nodeValue);3===h.nodeType||h.classList.contains("muu-isolate")||19 -1 e(h,m)}else h.parentNode.replaceChild(m,h)}};return e});m("muu",["muu-registry","muu-dom-helpers","muu-location"],function(c,b,e){var a={};a.Registry=c;a.$=b;a.$location=e;return a});return t("muu")})})(window,document,void 0);-1 14 b.unparse=function(a){if(c.isString(a))return a;var b=[],g;for(g in a)a.hasOwnProperty(g)&&(b=b.concat(e(g,a[g])));return 0<b.length?"?"+b.join("&"):""};return b});m("muu-template",["muu-js-helpers","muu-dom-helpers"],function(c,b){var e=function(a,b){return"this"===a?b:b[a]},a=function(a){if(-1===a.indexOf(":"))return function(d){return b.escapeHtml(e(a,d)||"")};var d=c.map(a.split(","),function(a){var b=a.split(":");a=b[0].trim();b=b.slice(1).join(":").trim();return[a,b]});return function(a){var l= -1 15 c.map(c.filter(d,function(b){return e(b[1],a)}),function(a){return a[0]});return b.escapeHtml(l.join(" "))}},d=function(a,b,d){var f=g(b,a);return{render:function(b){var g=e(a,b),k="";if(d)g||(k+=f.render(b));else if(c.isArray(g))for(b=0;b<g.length;b++)k+=f.render(g[b]);else g&&(k+=f.render(b));return k},afterBlock:f.afterBlock}},g=function(b,c){var e=b.indexOf("{{");if(-1===e){if(c===h)return{render:function(){return b},afterBlock:""};throw Error("unclosed loop: "+c);}var f=b.slice(0,e),q=b.slice(e), -1 16 m=q.indexOf("}}");if(-1===m)throw Error("unclosed tag: "+q);var e=q.slice(2,m),q=q.slice(m+2),m=!0,n={render:function(){return""},afterBlock:q};if(0===e.lastIndexOf("#",0))n=d(e.substr(1),q);else if(0===e.lastIndexOf("^",0))n=d(e.substr(1),q,!0);else if(0===e.lastIndexOf("/",0)){if(m=!1,e.substr(1)!==c)throw Error("unexpected closing loop: "+e);}else 0!==e.lastIndexOf("!",0)&&(n.render=a(e));if(m){var p=g(n.afterBlock,c);return{render:function(a){return f+n.render(a)+p.render(a)},afterBlock:p.afterBlock}}return{render:function(a){return f+ -1 17 n.render(a)},afterBlock:n.afterBlock}},f={};return function(a,b){f[a]===h&&(f[a]=g(a));return f[a].render(b)}});m("muu-update-dom",["muu-js-helpers"],function(c){var b=function(a,b){var e=c.map(a.attributes,function(a){return a.name}),f=c.map(b.attributes,function(a){return a.name});c.forEach(e,function(c){b.hasAttribute(c)||"__IE8__"===c.substr(0,7)||a.removeAttribute(c)});c.forEach(f,function(c){a.getAttribute(c)!==b.getAttribute(c)&&a.setAttribute(c,b.getAttribute(c))})},e=function(a,d){for(var g= -1 18 a.childNodes.length,f=d.childNodes.length,l=f;l<g;l++)a.removeChild(a.childNodes[f]);for(l=g;l<f;l++)a.appendChild(d.childNodes[g]);for(l=0;l<g&&l<f;l++){var k=a.childNodes[l],h=d.childNodes[l];if(k.nodeType===h.nodeType&&k.nodeName===h.nodeName&&k.type===h.type){if(1===k.nodeType){var m=c.filter(k.classList,function(a){return 0===a.lastIndexOf("muu-",0)});b(k,h);c.forEach(m,function(a){k.classList.add(a)})}else 3===k.nodeType&&(k.nodeValue=h.nodeValue);3===k.nodeType||k.classList.contains("muu-isolate")|| -1 19 e(k,h)}else k.parentNode.replaceChild(h,k)}};return e});m("muu",["muu-registry","muu-dom-helpers","muu-location"],function(c,b,e){var a={};a.Registry=c;a.$=b;a.$location=e;return a});return t("muu")})})(window,document,void 0);