muu

DEPRECATED lightweight JS framework
git clone https://git.ce9e.org/muu.git

commit
1bb712422c712541bb4588eb7e057f930c565430
parent
8d6419ff97803e99c18efd4bd9581b0051544983
Author
Tobias Bengfort <tobias.bengfort@gmx.net>
Date
2015-08-30 20:46
build

Diffstat

M dist/muu-core.js 30 +++++++++++++++++++-----------
M dist/muu-core.min.js 21 +++++++++++----------
M dist/muu.js 30 +++++++++++++++++++-----------
M dist/muu.min.js 38 +++++++++++++++++++-------------------

4 files changed, 68 insertions, 51 deletions


diff --git a/dist/muu-core.js b/dist/muu-core.js

@@ -85,10 +85,12 @@
   85    85                 root.innerHTML = '';
   86    86 
   87    87                 var eventCallback = function(originalEvent) {
   -1    88                     var element = originalEvent.currentTarget;
   88    89                     var attrName = 'data-on' + originalEvent.type;
   89    -1                     if (originalEvent.target.hasAttribute(attrName)) {
   90    -1                         var eventName = originalEvent.target.getAttribute(attrName);
   91    -1                         var event = $.createEvent('muu-' + eventName, originalEvent);
   -1    90                     if (element.hasAttribute(attrName)) {
   -1    91                         var eventName = element.getAttribute(attrName);
   -1    92                         var event = $.createEvent(
   -1    93                             'muu-' + eventName, undefined, undefined, originalEvent);
   92    94                         root.dispatchEvent(event);
   93    95                     }
   94    96                 };
@@ -190,9 +192,11 @@
  190   192                         var element = self.querySelector('[name=' + name + ']');
  191   193                         if (element === undefined) {
  192   194                             return _default;
  193    -1                         } else if (element.type === 'checkbox') {
   -1   195                         } else if (element.getAttribute('type') === 'number') {
   -1   196                             return parseFloat(element.value, 10);
   -1   197                         } else if (element.getAttribute('type') === 'checkbox') {
  194   198                             return element.checked;
  195    -1                         } else if (element.type === 'radio') {
   -1   199                         } else if (element.getAttribute('type') === 'radio') {
  196   200                             var options = self.querySelectorAll('[name=' + name + ']');
  197   201                             return $.getRadio(options) || _default;
  198   202                         } else {
@@ -212,9 +216,9 @@
  212   216                  */
  213   217                 this.setModel = function(name, value) {
  214   218                     var element = self.querySelector('[name=' + name + ']');
  215    -1                     if (element.type === 'checkbox') {
   -1   219                     if (element.getAttribute('type') === 'checkbox') {
  216   220                         element.checked = value;
  217    -1                     } else if (element.type === 'radio') {
   -1   221                     } else if (element.getAttribute('type') === 'radio') {
  218   222                         var options = self.querySelectorAll('[name=' + name + ']');
  219   223                         $.setRadio(options, value);
  220   224                     } else {
@@ -264,19 +268,23 @@
  264   268              * with this.
  265   269              *
  266   270              * @param {string} type
  267    -1              * @param {*} detail
   -1   271              * @param {boolean} [bubbles]
   -1   272              * @param {boolean} [cancelable]
   -1   273              * @param {*} [detail]
  268   274              * @return {Event}
  269   275              * @see https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
  270   276              * @nosideeffects
  271   277              */
  272    -1             $.createEvent = function(type, detail) {
   -1   278             $.createEvent = function(type, bubbles, cancelable, detail) {
  273   279                 if (typeof CustomEvent === 'function') {
  274   280                     return new CustomEvent(type, {
  275    -1                         detail: detail
   -1   281                         detail: detail,
   -1   282                         bubbles: bubbles,
   -1   283                         cancelable: cancelable
  276   284                     });
  277   285                 } else {
  278   286                     var event = document.createEvent('CustomEvent');
  279    -1                     event.initCustomEvent(type, false, true, detail);
   -1   287                     event.initCustomEvent(type, bubbles, cancelable, detail);
  280   288                     return event;
  281   289                 }
  282   290             };

diff --git a/dist/muu-core.min.js b/dist/muu-core.min.js

@@ -1,10 +1,11 @@
    1    -1 (function(q,n,p){(function(l){"function"===typeof define&&define.amd?define("muu",["lodash"],l):q.muu=l(q._)})(function(l){var m={};m["muu-js-helpers"]={instance:l};var t=function(e,k){for(var g=[],a=0;a<e.length;a++)g.push(k(e[a]));return g};l=function(e,k,g){m[e]={deps:k,factory:g}};var r=function(e){if(!m[e])return p;m[e].instance||(m[e].instance=m[e].factory.apply(p,t(m[e].deps,r)));return m[e].instance};l("muu-directive",["muu-dom-helpers","muu-js-helpers","muu-update-dom"],function(e,k,g){return function(a,
    2    -1 b,d){var h=this;a.innerHTML="";var c=function(f){var c="data-on"+f.type;f.target.hasAttribute(c)&&(c=f.target.getAttribute(c),f=e.createEvent("muu-"+c,f),a.dispatchEvent(f))};this.update=function(f){var s=n.createElement("div");s.innerHTML=d.renderer(b,f);g(a,s);k.forEach(["keydown","keyup","click","change","search"],function(a){k.forEach(h.querySelectorAll("[data-on"+a+"]"),function(f){f.addEventListener(a,c,!1)})});var u=e.createEvent("muu-parent-update");f=this.querySelectorAll("muu.muu-initialised");
    3    -1 k.forEach(f,function(a){a.dispatchEvent(u)});d.linkAll(h)};this.querySelectorAll=function(f){var c=a.querySelectorAll(f),d=a.querySelectorAll(".muu-isolate"),d=k.union(k.map(d,function(a){return a.querySelectorAll(f)}));return k.difference(c,d)};this.querySelector=function(a){a=h.querySelectorAll(a);if(0<a.length)return a[0]};this.getModel=function(a,c){if(a===p){var d={};k.forEach(h.querySelectorAll("[name]"),function(a){d[a.name]=h.getModel(a.name)});return d}var b=h.querySelector("[name="+a+"]");
    4    -1 return b===p?c:"checkbox"===b.type?b.checked:"radio"===b.type?(b=h.querySelectorAll("[name="+a+"]"),e.getRadio(b)||c):b.value};this.setModel=function(a,c){var b=h.querySelector("[name="+a+"]");"checkbox"===b.type?b.checked=c:"radio"===b.type?(b=h.querySelectorAll("[name="+a+"]"),e.setRadio(b,c)):b.value=c}}});l("muu-dom-helpers",["muu-js-helpers"],function(e){var k={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},g={DELAY:1E3,escapeHtml:function(a){return String(a).replace(/[&<>"'\/]/g,
    5    -1 function(a){return k[a]})},createEvent:function(a,b){if("function"===typeof CustomEvent)return new CustomEvent(a,{detail:b});var d=n.createEvent("CustomEvent");d.initCustomEvent(a,!1,!0,b);return d},on:function(a,b,d){a.addEventListener(b,d,!1);return function(){a.removeEventListener(b,d,!1)}},ready:function(a){a=e.once(a);if("complete"===n.readyState)return a(),function(){};var b=g.on(n,"DOMContentLoaded",a),d=g.on(q,"load",a);return function(){b();d()}},isDescendant:function(a,b){return!!a&&(a===
    6    -1 b||g.isDescendant(a.parentNode,b))},destroy:function(a,b){var d;if(q.MutationObserver){var h=new MutationObserver(function(){g.isDescendant(a,n)||(b(),d())});h.observe(n,{childList:!0,subtree:!0});d=e.once(function(){h.disconnect();h=p})}else{var c=setInterval(function(){g.isDescendant(a,n)||(b(),d())},g.DELAY);d=function(){clearInterval(c)}}return d},getRadio:function(a){for(var b=0;b<a.length;b++)if(a[b].checked)return a[b].value},setRadio:function(a,b){for(var d=0;d<a.length;d++)a[d].checked=a[d].value===
    7    -1 b?!0:!1}};return g});l("muu",["muu-registry","muu-dom-helpers","muu-location"],function(e,k,g){var a={};a.Registry=e;a.$=k;a.$location=g;return a});l("muu-registry",["muu-template","muu-directive","muu-js-helpers","muu-dom-helpers"],function(e,k,g,a){return function(b){var d=this,h={};this.config=b||{};this.renderer=d.config.renderer||e;this.registerDirective=function(a,b,e){h[a]={template:b,link:e};return d};this.registerModule=function(a){a(d);return d};this.link=function(c,b){b===p&&(b=c.getAttribute("type"));
    8    -1 if(!h.hasOwnProperty(b))throw Error("Unknown directive type: "+b);var e=h[b].link,g=new k(c,h[b].template,d),e=e(g,c);c.classList.add("muu-isolate");c.classList.add("muu-initialised");d.config.debug&&(c.directive=g);e!==p&&a.destroy(c,e);return g};this.linkAll=function(a){a=g.filter(a.querySelectorAll("muu"),function(a){return!a.classList.contains("muu-initialised")});return g.map(a,function(a){return d.link(a)})}}});l("muu-update-dom",["muu-js-helpers"],function(e){var k=function(a,b){var d=e.map(a.attributes,
    9    -1 function(a){return a.name}),g=e.map(b.attributes,function(a){return a.name});e.forEach(d,function(c){b.hasAttribute(c)||"__IE8__"===c.substr(0,7)||a.removeAttribute(c)});e.forEach(g,function(c){a.getAttribute(c)!==b.getAttribute(c)&&a.setAttribute(c,b.getAttribute(c))})},g=function(a,b){for(var d=a.childNodes.length,h=b.childNodes.length,c=h;c<d;c++)a.removeChild(a.childNodes[h]);for(c=d;c<h;c++)a.appendChild(b.childNodes[d]);for(c=0;c<d&&c<h;c++){var f=a.childNodes[c],l=b.childNodes[c];if(f.nodeType===
   10    -1 l.nodeType&&f.nodeName===l.nodeName&&f.type===l.type){if(1===f.nodeType){var m=e.filter(f.classList,function(a){return 0===a.lastIndexOf("muu-",0)});k(f,l);e.forEach(m,function(a){f.classList.add(a)})}else 3===f.nodeType&&(f.nodeValue=l.nodeValue);3===f.nodeType||f.classList.contains("muu-isolate")||g(f,l)}else f.parentNode.replaceChild(l,f)}};return g});return r("muu")})})(window,document,void 0);
   -1     1 (function(q,p,m){(function(l){"function"===typeof define&&define.amd?define("muu",["lodash"],l):q.muu=l(q._)})(function(l){var n={};n["muu-js-helpers"]={instance:l};var t=function(d,k){for(var g=[],a=0;a<d.length;a++)g.push(k(d[a]));return g};l=function(d,k,g){n[d]={deps:k,factory:g}};var r=function(d){if(!n[d])return m;n[d].instance||(n[d].instance=n[d].factory.apply(m,t(n[d].deps,r)));return n[d].instance};l("muu-directive",["muu-dom-helpers","muu-js-helpers","muu-update-dom"],function(d,k,g){return function(a,
   -1     2 c,b){var h=this;a.innerHTML="";var e=function(f){var e=f.currentTarget,b="data-on"+f.type;e.hasAttribute(b)&&(e=e.getAttribute(b),f=d.createEvent("muu-"+e,m,m,f),a.dispatchEvent(f))};this.update=function(f){var s=p.createElement("div");s.innerHTML=b.renderer(c,f);g(a,s);k.forEach(["keydown","keyup","click","change","search"],function(a){k.forEach(h.querySelectorAll("[data-on"+a+"]"),function(f){f.addEventListener(a,e,!1)})});var u=d.createEvent("muu-parent-update");f=this.querySelectorAll("muu.muu-initialised");
   -1     3 k.forEach(f,function(a){a.dispatchEvent(u)});b.linkAll(h)};this.querySelectorAll=function(f){var e=a.querySelectorAll(f),b=a.querySelectorAll(".muu-isolate"),b=k.union(k.map(b,function(a){return a.querySelectorAll(f)}));return k.difference(e,b)};this.querySelector=function(a){a=h.querySelectorAll(a);if(0<a.length)return a[0]};this.getModel=function(a,e){if(a===m){var b={};k.forEach(h.querySelectorAll("[name]"),function(a){b[a.name]=h.getModel(a.name)});return b}var c=h.querySelector("[name="+a+"]");
   -1     4 return c===m?e:"number"===c.getAttribute("type")?parseFloat(c.value,10):"checkbox"===c.getAttribute("type")?c.checked:"radio"===c.getAttribute("type")?(c=h.querySelectorAll("[name="+a+"]"),d.getRadio(c)||e):c.value};this.setModel=function(a,e){var b=h.querySelector("[name="+a+"]");"checkbox"===b.getAttribute("type")?b.checked=e:"radio"===b.getAttribute("type")?(b=h.querySelectorAll("[name="+a+"]"),d.setRadio(b,e)):b.value=e}}});l("muu-dom-helpers",["muu-js-helpers"],function(d){var k={"&":"&amp;",
   -1     5 "<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},g={DELAY:1E3,escapeHtml:function(a){return String(a).replace(/[&<>"'\/]/g,function(a){return k[a]})},createEvent:function(a,c,b,d){if("function"===typeof CustomEvent)return new CustomEvent(a,{detail:d,bubbles:c,cancelable:b});var e=p.createEvent("CustomEvent");e.initCustomEvent(a,c,b,d);return e},on:function(a,c,b){a.addEventListener(c,b,!1);return function(){a.removeEventListener(c,b,!1)}},ready:function(a){a=d.once(a);if("complete"===
   -1     6 p.readyState)return a(),function(){};var c=g.on(p,"DOMContentLoaded",a),b=g.on(q,"load",a);return function(){c();b()}},isDescendant:function(a,c){return!!a&&(a===c||g.isDescendant(a.parentNode,c))},destroy:function(a,c){var b;if(q.MutationObserver){var h=new MutationObserver(function(){g.isDescendant(a,p)||(c(),b())});h.observe(p,{childList:!0,subtree:!0});b=d.once(function(){h.disconnect();h=m})}else{var e=setInterval(function(){g.isDescendant(a,p)||(c(),b())},g.DELAY);b=function(){clearInterval(e)}}return b},
   -1     7 getRadio:function(a){for(var c=0;c<a.length;c++)if(a[c].checked)return a[c].value},setRadio:function(a,c){for(var b=0;b<a.length;b++)a[b].checked=a[b].value===c?!0:!1}};return g});l("muu",["muu-registry","muu-dom-helpers","muu-location"],function(d,k,g){var a={};a.Registry=d;a.$=k;a.$location=g;return a});l("muu-registry",["muu-template","muu-directive","muu-js-helpers","muu-dom-helpers"],function(d,k,g,a){return function(c){var b=this,h={};this.config=c||{};this.renderer=b.config.renderer||d;this.registerDirective=
   -1     8 function(a,c,d){h[a]={template:c,link:d};return b};this.registerModule=function(a){a(b);return b};this.link=function(e,c){c===m&&(c=e.getAttribute("type"));if(!h.hasOwnProperty(c))throw Error("Unknown directive type: "+c);var d=h[c].link,g=new k(e,h[c].template,b),d=d(g,e);e.classList.add("muu-isolate");e.classList.add("muu-initialised");b.config.debug&&(e.directive=g);d!==m&&a.destroy(e,d);return g};this.linkAll=function(a){a=g.filter(a.querySelectorAll("muu"),function(a){return!a.classList.contains("muu-initialised")});
   -1     9 return g.map(a,function(a){return b.link(a)})}}});l("muu-update-dom",["muu-js-helpers"],function(d){var k=function(a,c){var b=d.map(a.attributes,function(a){return a.name}),g=d.map(c.attributes,function(a){return a.name});d.forEach(b,function(b){c.hasAttribute(b)||"__IE8__"===b.substr(0,7)||a.removeAttribute(b)});d.forEach(g,function(b){a.getAttribute(b)!==c.getAttribute(b)&&a.setAttribute(b,c.getAttribute(b))})},g=function(a,c){for(var b=a.childNodes.length,h=c.childNodes.length,e=h;e<b;e++)a.removeChild(a.childNodes[h]);
   -1    10 for(e=b;e<h;e++)a.appendChild(c.childNodes[b]);for(e=0;e<b&&e<h;e++){var f=a.childNodes[e],l=c.childNodes[e];if(f.nodeType===l.nodeType&&f.nodeName===l.nodeName&&f.type===l.type){if(1===f.nodeType){var m=d.filter(f.classList,function(a){return 0===a.lastIndexOf("muu-",0)});k(f,l);d.forEach(m,function(a){f.classList.add(a)})}else 3===f.nodeType&&(f.nodeValue=l.nodeValue);3===f.nodeType||f.classList.contains("muu-isolate")||g(f,l)}else f.parentNode.replaceChild(l,f)}};return g});return r("muu")})})(window,
   -1    11 document,void 0);

diff --git a/dist/muu.js b/dist/muu.js

@@ -85,10 +85,12 @@
   85    85                 root.innerHTML = '';
   86    86 
   87    87                 var eventCallback = function(originalEvent) {
   -1    88                     var element = originalEvent.currentTarget;
   88    89                     var attrName = 'data-on' + originalEvent.type;
   89    -1                     if (originalEvent.target.hasAttribute(attrName)) {
   90    -1                         var eventName = originalEvent.target.getAttribute(attrName);
   91    -1                         var event = $.createEvent('muu-' + eventName, originalEvent);
   -1    90                     if (element.hasAttribute(attrName)) {
   -1    91                         var eventName = element.getAttribute(attrName);
   -1    92                         var event = $.createEvent(
   -1    93                             'muu-' + eventName, undefined, undefined, originalEvent);
   92    94                         root.dispatchEvent(event);
   93    95                     }
   94    96                 };
@@ -190,9 +192,11 @@
  190   192                         var element = self.querySelector('[name=' + name + ']');
  191   193                         if (element === undefined) {
  192   194                             return _default;
  193    -1                         } else if (element.type === 'checkbox') {
   -1   195                         } else if (element.getAttribute('type') === 'number') {
   -1   196                             return parseFloat(element.value, 10);
   -1   197                         } else if (element.getAttribute('type') === 'checkbox') {
  194   198                             return element.checked;
  195    -1                         } else if (element.type === 'radio') {
   -1   199                         } else if (element.getAttribute('type') === 'radio') {
  196   200                             var options = self.querySelectorAll('[name=' + name + ']');
  197   201                             return $.getRadio(options) || _default;
  198   202                         } else {
@@ -212,9 +216,9 @@
  212   216                  */
  213   217                 this.setModel = function(name, value) {
  214   218                     var element = self.querySelector('[name=' + name + ']');
  215    -1                     if (element.type === 'checkbox') {
   -1   219                     if (element.getAttribute('type') === 'checkbox') {
  216   220                         element.checked = value;
  217    -1                     } else if (element.type === 'radio') {
   -1   221                     } else if (element.getAttribute('type') === 'radio') {
  218   222                         var options = self.querySelectorAll('[name=' + name + ']');
  219   223                         $.setRadio(options, value);
  220   224                     } else {
@@ -264,19 +268,23 @@
  264   268              * with this.
  265   269              *
  266   270              * @param {string} type
  267    -1              * @param {*} detail
   -1   271              * @param {boolean} [bubbles]
   -1   272              * @param {boolean} [cancelable]
   -1   273              * @param {*} [detail]
  268   274              * @return {Event}
  269   275              * @see https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
  270   276              * @nosideeffects
  271   277              */
  272    -1             $.createEvent = function(type, detail) {
   -1   278             $.createEvent = function(type, bubbles, cancelable, detail) {
  273   279                 if (typeof CustomEvent === 'function') {
  274   280                     return new CustomEvent(type, {
  275    -1                         detail: detail
   -1   281                         detail: detail,
   -1   282                         bubbles: bubbles,
   -1   283                         cancelable: cancelable
  276   284                     });
  277   285                 } else {
  278   286                     var event = document.createEvent('CustomEvent');
  279    -1                     event.initCustomEvent(type, false, true, detail);
   -1   287                     event.initCustomEvent(type, bubbles, cancelable, detail);
  280   288                     return event;
  281   289                 }
  282   290             };

diff --git a/dist/muu.min.js b/dist/muu.min.js

@@ -1,19 +1,19 @@
    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,
    2    -1 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");
    3    -1 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    -1 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={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},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=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===
    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,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===
    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 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);
    8    -1 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    -1 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    -1 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    -1 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,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    -1 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){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=
   15    -1 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),
   16    -1 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+
   17    -1 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=
   18    -1 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")||
   19    -1 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);
   -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(d,b){for(var e=[],a=0;a<d.length;a++)e.push(b(d[a]));return e};m=function(d,b,e){n[d]={deps:b,factory:e}};var t=function(d){if(!n[d])return h;n[d].instance||(n[d].instance=n[d].factory.apply(h,v(n[d].deps,t)));return n[d].instance};m("muu-directive",["muu-dom-helpers","muu-js-helpers","muu-update-dom"],function(d,b,e){return function(a,
   -1     2 c,g){var f=this;a.innerHTML="";var k=function(c){var b=c.currentTarget,k="data-on"+c.type;b.hasAttribute(k)&&(b=b.getAttribute(k),c=d.createEvent("muu-"+b,h,h,c),a.dispatchEvent(c))};this.update=function(l){var u=p.createElement("div");u.innerHTML=g.renderer(c,l);e(a,u);b.forEach(["keydown","keyup","click","change","search"],function(a){b.forEach(f.querySelectorAll("[data-on"+a+"]"),function(c){c.addEventListener(a,k,!1)})});var s=d.createEvent("muu-parent-update");l=this.querySelectorAll("muu.muu-initialised");
   -1     3 b.forEach(l,function(a){a.dispatchEvent(s)});g.linkAll(f)};this.querySelectorAll=function(c){var k=a.querySelectorAll(c),d=a.querySelectorAll(".muu-isolate"),d=b.union(b.map(d,function(a){return a.querySelectorAll(c)}));return b.difference(k,d)};this.querySelector=function(a){a=f.querySelectorAll(a);if(0<a.length)return a[0]};this.getModel=function(a,c){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     4 return e===h?c:"number"===e.getAttribute("type")?parseFloat(e.value,10):"checkbox"===e.getAttribute("type")?e.checked:"radio"===e.getAttribute("type")?(e=f.querySelectorAll("[name="+a+"]"),d.getRadio(e)||c):e.value};this.setModel=function(a,c){var b=f.querySelector("[name="+a+"]");"checkbox"===b.getAttribute("type")?b.checked=c:"radio"===b.getAttribute("type")?(b=f.querySelectorAll("[name="+a+"]"),d.setRadio(b,c)):b.value=c}}});m("muu-dom-helpers",["muu-js-helpers"],function(d){var b={"&":"&amp;",
   -1     5 "<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},e={DELAY:1E3,escapeHtml:function(a){return String(a).replace(/[&<>"'\/]/g,function(a){return b[a]})},createEvent:function(a,c,b,e){if("function"===typeof CustomEvent)return new CustomEvent(a,{detail:e,bubbles:c,cancelable:b});var k=p.createEvent("CustomEvent");k.initCustomEvent(a,c,b,e);return k},on:function(a,c,b){a.addEventListener(c,b,!1);return function(){a.removeEventListener(c,b,!1)}},ready:function(a){a=d.once(a);if("complete"===
   -1     6 p.readyState)return a(),function(){};var c=e.on(p,"DOMContentLoaded",a),b=e.on(r,"load",a);return function(){c();b()}},isDescendant:function(a,c){return!!a&&(a===c||e.isDescendant(a.parentNode,c))},destroy:function(a,c){var b;if(r.MutationObserver){var f=new MutationObserver(function(){e.isDescendant(a,p)||(c(),b())});f.observe(p,{childList:!0,subtree:!0});b=d.once(function(){f.disconnect();f=h})}else{var k=setInterval(function(){e.isDescendant(a,p)||(c(),b())},e.DELAY);b=function(){clearInterval(k)}}return b},
   -1     7 getRadio:function(a){for(var c=0;c<a.length;c++)if(a[c].checked)return a[c].value},setRadio:function(a,c){for(var b=0;b<a.length;b++)a[b].checked=a[b].value===c?!0:!1}};return e});m("muu-js-helpers",[],function(){var d={isString:function(b){return"string"===typeof b||"[object String]"===Object.prototype.toString.call(b)}};d.isArray=Array.isArray;d.isFunction=function(b){return"function"===typeof b};d.once=function(b){var e,a=!1;return function(){a||(e=b.apply(this,arguments),a=!0);return e}};d.indexOf=
   -1     8 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};d.forEach=function(b,e){if("forEach"in b)return b.forEach(e);for(var a=0;a<b.length;a++)e(b[a])};d.map=function(b,e){if("map"in b)return b.map(e);for(var a=[],c=0;c<b.length;c++)a.push(e(b[c]));return a};d.filter=function(b,e){if("filter"in b)return b.filter(e);for(var a=[],c=0;c<b.length;c++)e(b[c])&&a.push(b[c]);return a};d.union=function(b){for(var e=[],a=0;a<b.length;a++)for(var c=0;c<
   -1     9 b[a].length;c++)-1===d.indexOf(e,b[a][c])&&e.push(b[a][c]);return e};d.difference=function(b,e){for(var a=[],c=0;c<b.length;c++)-1===d.indexOf(e,b[c])&&a.push(b[c]);return a};d.flatten=function(b){var e=[];d.forEach(b,function(a){d.isArray(a)?e=e.concat(d.flatten(a)):e.push(a)});return e};return d});m("muu-location",["muu-search"],function(d){var b={absUrl:function(){return location.href},url:function(a,c){if(a===h)return location.pathname+location.search+location.hash;c?history.replaceState(null,
   -1    10 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,c){if(a===h)return location.pathname;b.url(a+location.search+location.hash,c);return b}},e=function(a,c){if(a===h)return location.search;a&&"?"!==a[0]&&(a="?"+a);1===a.length&&(a="");b.url(location.pathname+a+location.hash,c);return b};b.search=function(a,b,g){if(a!==h){if(b!==h){var f=d.parse(e());f[a]=b;return e(d.unparse(f),
   -1    11 g)}return e(d.unparse(a),g)}return d.parse(e())};b.hash=function(a,c){if(a===h)return location.hash?location.hash.slice(1):"";b.url(location.pathname+location.search+"#"+a,c);return b};b.addEventListener=function(a,c){"change"===a&&r.addEventListener("popstate",c,!1);return b};b.removeEventListener=function(a,c){"change"===a&&r.removeEventListener("popstate",c,!1);return b};return b});m("muu-registry",["muu-template","muu-directive","muu-js-helpers","muu-dom-helpers"],function(d,b,e,a){return function(c){var g=
   -1    12 this,f={};this.config=c||{};this.renderer=g.config.renderer||d;this.registerDirective=function(a,b,c){f[a]={template:b,link:c};return g};this.registerModule=function(a){a(g);return g};this.link=function(c,e){e===h&&(e=c.getAttribute("type"));if(!f.hasOwnProperty(e))throw Error("Unknown directive type: "+e);var d=f[e].link,s=new b(c,f[e].template,g),d=d(s,c);c.classList.add("muu-isolate");c.classList.add("muu-initialised");g.config.debug&&(c.directive=s);d!==h&&a.destroy(c,d);return s};this.linkAll=
   -1    13 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)})}}});m("muu-search",["muu-js-helpers"],function(d){var b={parse:function(a){var c={},b=function(a,b){c.hasOwnProperty(a)?d.isArray(c[a])?c[a].push(b):c[a]=[c[a],b]:c[a]=b};d.forEach(a.substring(1).split("&"),function(a){a=d.map(a.split("="),decodeURIComponent);2===a.length?b(a[0],a[1]):a[0]&&b(a[0],!0)});return c}},e=function(a,b){return b===h||
   -1    14 null===b||!1===b?[]:d.isArray(b)?d.flatten(d.map(b,function(b){return e(a,b)})):!0===b?[encodeURIComponent(a)]:[encodeURIComponent(a)+"="+encodeURIComponent(b)]};b.unparse=function(a){if(d.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(d,b){var e=function(a,b){return"this"===a?b:b[a]},a=function(a){if(-1===a.indexOf(":"))return function(c){return b.escapeHtml(e(a,
   -1    15 c)||"")};var c=d.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 k=d.map(d.filter(c,function(b){return e(b[1],a)}),function(a){return a[0]});return b.escapeHtml(k.join(" "))}},c=function(a,b,c){var f=g(b,a);return{render:function(b){var g=e(a,b),l="";if(c)g||(l+=f.render(b));else if(d.isArray(g))for(b=0;b<g.length;b++)l+=f.render(g[b]);else g&&(l+=f.render(b));return l},afterBlock:f.afterBlock}},g=function(b,e){var d=
   -1    16 b.indexOf("{{");if(-1===d){if(e===h)return{render:function(){return b},afterBlock:""};throw Error("unclosed loop: "+e);}var f=b.slice(0,d),q=b.slice(d),m=q.indexOf("}}");if(-1===m)throw Error("unclosed tag: "+q);var d=q.slice(2,m),q=q.slice(m+2),m=!0,n={render:function(){return""},afterBlock:q};if(0===d.lastIndexOf("#",0))n=c(d.substr(1),q);else if(0===d.lastIndexOf("^",0))n=c(d.substr(1),q,!0);else if(0===d.lastIndexOf("/",0)){if(m=!1,d.substr(1)!==e)throw Error("unexpected closing loop: "+d);}else 0!==
   -1    17 d.lastIndexOf("!",0)&&(n.render=a(d));if(m){var p=g(n.afterBlock,e);return{render:function(a){return f+n.render(a)+p.render(a)},afterBlock:p.afterBlock}}return{render:function(a){return f+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(d){var b=function(a,b){var e=d.map(a.attributes,function(a){return a.name}),f=d.map(b.attributes,function(a){return a.name});d.forEach(e,function(d){b.hasAttribute(d)||
   -1    18 "__IE8__"===d.substr(0,7)||a.removeAttribute(d)});d.forEach(f,function(d){a.getAttribute(d)!==b.getAttribute(d)&&a.setAttribute(d,b.getAttribute(d))})},e=function(a,c){for(var g=a.childNodes.length,f=c.childNodes.length,k=f;k<g;k++)a.removeChild(a.childNodes[f]);for(k=g;k<f;k++)a.appendChild(c.childNodes[g]);for(k=0;k<g&&k<f;k++){var l=a.childNodes[k],h=c.childNodes[k];if(l.nodeType===h.nodeType&&l.nodeName===h.nodeName&&l.type===h.type){if(1===l.nodeType){var m=d.filter(l.classList,function(a){return 0===
   -1    19 a.lastIndexOf("muu-",0)});b(l,h);d.forEach(m,function(a){l.classList.add(a)})}else 3===l.nodeType&&(l.nodeValue=h.nodeValue);3===l.nodeType||l.classList.contains("muu-isolate")||e(l,h)}else l.parentNode.replaceChild(h,l)}};return e});m("muu",["muu-registry","muu-dom-helpers","muu-location"],function(d,b,e){var a={};a.Registry=d;a.$=b;a.$location=e;return a});return t("muu")})})(window,document,void 0);