{"version":3,"sources":["laroux.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length",1,"module","_interopRequireDefault","obj","__esModule","default","Object","defineProperty","value","_larouxDeferredJs","_larouxDeferredJs2","_larouxEventsJs","_larouxEventsJs2","_larouxHelpersJs","_larouxHelpersJs2","ajax","corsDefault","xDomainObject","xmlHttpRequestObject","xDomainRequestObject","xhr","crossDomain","XMLHttpRequest","XDomainRequest","xhrResp","options","response","undefined","datatype","responseText","JSON","parse","eval","responseXML","makeRequest","deferred","cors","url","timer","timeout","setTimeout","abort","reject","onreadystatechange","readyState","clearTimeout","status","res","isSuccess","err","invoke","exception","resolve","progress","getdata","constructor","queryString","buildQueryString","indexOf","jsonp","open","type","xhrFields","hasOwnProperty","headers","j","setRequestHeader","postdata","send","postdatatype","stringify","buildFormData","get","path","values","getJson","getJsonP","method","getScript","post","postJson","Content-Type","./laroux.deferred.js","./laroux.events.js","./laroux.helpers.js",2,"date","shortDateFormat","longDateFormat","timeFormat","monthsShort","monthsLong","strings","now","later","ago","seconds","aminute","minutes","ahour","hours","aday","days","aweek","weeks","amonth","months","ayear","years","parseEpoch","timespan","limitWithWeeks","Math","ceil","getCustomDateString","format","timestamp","Date","replace","match","getFullYear","getYear","getMonth","substr","getDate","hour1","getHours","hour2","getMinutes","getSeconds","getDateDiffString","getTime","absTimespan","abs","past","timespanstring","getShortDateString","includeTime","getLongDateString",3,"_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","key","protoProps","staticProps","prototype","Deferred","this","events","eventName","_len","arguments","args","Array","_key","finalEvent","invoked","result","invokeCallback","callbacks","completed","concat","event","callback","shift","apply","_invoke","_len2","_key2","_invoke2","_len3","_key3","push","on","_len4","_key4",4,"delegates","add","item",5,"helpers","uniqueId","getUniqueId","clone","merge","source","keys","_length","mergeNs","ptr","pathSlices","split","_length2","current","rfc3986","uri","regEx","_name","encodeURIComponent","toString","data","FormData","_name2","append","replaceAll","text","dictionary","re","RegExp","join","camelCase","flag","output","currChar","charAt","toUpperCase","antiCamelCase","toLowerCase","quoteAttr","spliceString","index","count","slice","random","min","max","floor","find","iterator","context","some","list","each","arr","testOwnProperties","map","dontSkipReturns","results","aeach","_length3","amap","_length4","aindex","start","_length5","column","shuffle","shuffled","rand","prependArray","items","removeFromArray","targetKey","splice","toArray","getAsArray","NodeList","_length6","getLength","getKeysRecursive","delimiter","prefix","getElement","defaultValue","pos","rest","substring","callAll","scope","parameters","_length7",6,"global","_larouxAjaxJs","_larouxAjaxJs2","_larouxDateJs","_larouxDateJs2","_larouxStoryboardJs","_larouxStoryboardJs2","_larouxTypesJs","_larouxTypesJs2","_larouxTemplatesJs","_larouxTemplatesJs2","_larouxTimersJs","_larouxTimersJs2","_larouxVarsJs","_larouxVarsJs2","_larouxWhenJs","_larouxWhenJs2","laroux","selector","parent","document","querySelectorAll","querySelector","storyboard","types","templates","timers","vars","when","extend","extendNs","readyPassed","ready","setReady","setInterval","ontick","$l","self","window","./laroux.ajax.js","./laroux.date.js","./laroux.storyboard.js","./laroux.templates.js","./laroux.timers.js","./laroux.types.js","./laroux.vars.js","./laroux.when.js",7,"Storyboard","phases","phaseKeys","currentIteration","running","addPhase","checkPromise","promises","phase","fnc","addPromise","phaseId","promise","done","currentPhase",8,"engines","plain","compile","template","render","compiled","model","dict","lastIndex","nextIndex","closeIndex","hogan","Hogan","mustache","Mustache","handlebars","Handlebars","lodash","_","underscore","engine","element","content","nodeType","textContent","nodeValue",9,"set","next","remove","id","currentItem","removeKeys","state","reset","item2",10,"staticKeys","Observable","_callbacks","_onupdate","changes","observe","setRange","valueKey","unobserve","observable",11,"storages","cookie","defaultPath","name","decodeURIComponent","expires","expireValue","toGMTString","local","localStorage","session","sessionStorage","storage",12,"When","queues","remaining","deferredCompleted","check","then","queue","Function","async","is",13,"_larouxCssJs","_larouxCssJs2","anim","fx","interpolate","easing","cos","PI","newanim","startTime","unit","from","object","body","property","documentElement","scrollTop","String","Number","requestAnimationFrame","onframe","setCss","getProperty","style","step","time","scrollTo","finishT","to","../laroux.deferred.js","../laroux.helpers.js","./laroux.css.js",14,"css","hasClass","className","classList","contains","addClass","elements","removeClass","toggleClass","cycleClass","styleName","getComputedStyle","getPropertyValue","setProperty","properties","oldProperties","newStyleName","defaultTransition","setTransitionSingle","transition","transitions","currentTransitions","currentTransitionsArray","transitionProperties","found","trim","localeCompare","webkitTransition","msTransition","setTransition","show","opacity","hide","height","getPropertyCSSValue","getFloatValue","primitiveType","innerHeight","clientHeight","outerHeight","includeMargin","offsetHeight","marginTop","marginBottom","margins","width","innerWidth","clientWidth","outerWidth","offsetWidth","marginLeft","marginRight","top","getBoundingClientRect","left","scrollLeft","aboveTheTop","bottom","belowTheFold","leftOfScreen","right","rightOfScreen","inViewport","rect",15,"dom","docprop","propName","select","selectByClass","getElementsByClassName","selectByTag","getElementsByTagName","selectById","getElementById","selectSingle","attr","attributes","getAttribute","oldAttributes","attributeName","removeAttribute","setAttribute","datanames","oldDatanames","dataName","eventHistory","setEvent","eventname","setEventSingle","callbackWrapper","preventDefault","returnValue","addEventListener","unsetEvent","i1","length1","i2","length2","removeEventListener","dispatchEvent","customEvent","createEvent","initEvent","create","html","frag","createDocumentFragment","temp","createElement","insertAdjacentHTML","firstChild","appendChild","children","elem","createOption","isDefault","option","selectByValue","selectedIndex","clear","hasChildNodes","removeChild","insert","position","prepend","replaceText","cloneReturn","cloneAppend","cloneInsertAfter","cloneInsertBefore","container","newElement","cloneNode","parentNode","insertBefore","nextSibling","Element","parentElement",16,"_larouxDomJs","_larouxDomJs2","forms","ajaxForm","formobj","callbackBegin","serializeFormData","isFormField","tagName","getFormFieldValue","disabled","files","checked","setFormFieldValue","toggleFormEditing","selection","selected","lastDisabled","formdata","serialize","deserialize","../laroux.ajax.js","./laroux.dom.js",17,"_larouxFormsJs","_larouxFormsJs2","keyName","keycode","fromCharCode","assign","wrapper","ev","srcElement","disableInputs","shiftKey","ctrl","ctrlKey","alt","altKey","keyCode","which","./laroux.forms.js",18,"mvc","apps","pauseUpdate","init","appKey","update","rebind","app","modelKeys","boundElements","eventElements","scanElements","binding","bindStringParser","atts","m","binding1","binding2","chldrn","childNodes","boundElement","lastBuffer","buffer","curr",19,"_larouxJs","_larouxJs2","routes","attached","regexConverter","sensitive","strict","regexString","slash","capture","optional","regex","addNamed","converted","params","route","exec","resolved","getNamed","link","previous","go","silent","detach","location","hash","attach","goNamed","reload","../laroux.js",20,"touch","touchStarted","swipeTreshold","precision","tapCount","tapTreshold","longTapTreshold","tapTimer","cached","end","move","locatePointer","targetTouches","pageX","pageY","navigator","msPointerEnabled","onstart","onend","innerEvent","x","y","delta","distance",21,"_larouxAnimJs","_larouxAnimJs2","_larouxKeysJs","_larouxKeysJs2","_larouxMvcJs","_larouxMvcJs2","_larouxRoutesJs","_larouxRoutesJs2","_larouxTouchJs","_larouxTouchJs2","single","array","c","idc","./laroux.anim.js","./laroux.keys.js","./laroux.mvc.js","./laroux.routes.js","./laroux.touch.js"],"mappings":"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","file":"build/dist/web/laroux.min.js","sourcesContent":["/**\n * laroux.js - A jquery substitute for modern browsers (web bundle)\n *\n * @version v2.1.1\n * @link https://eserozvataf.github.io/laroux.js\n * @license Apache-2.0\n */\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 0) {\n url += (url.indexOf('?') < 0 ? '?' : '&') + queryString;\n }\n } else {\n url += (url.indexOf('?') < 0 ? '?' : '&') + options.getdata;\n }\n }\n\n if (options.jsonp !== undefined) {\n url += (url.indexOf('?') < 0 ? '?' : '&') + 'jsonp=' + options.jsonp;\n }\n\n if (!ajax.xDomainObject) {\n xhr.open(options.type, url, true);\n } else {\n xhr.open(options.type, url);\n }\n\n if (options.xhrFields !== undefined) {\n for (var i in options.xhrFields) {\n if (!options.xhrFields.hasOwnProperty(i)) {\n continue;\n }\n\n xhr[i] = options.xhrFields[i];\n }\n }\n\n var headers = options.headers || {};\n\n if (!cors) {\n headers['X-Requested-With'] = 'XMLHttpRequest';\n }\n\n for (var j in headers) {\n if (!headers.hasOwnProperty(j)) {\n continue;\n }\n\n xhr.setRequestHeader(j, headers[j]);\n }\n\n if (options.postdata === undefined || options.postdata === null) {\n xhr.send(null);\n return deferred;\n }\n\n switch (options.postdatatype) {\n case 'json':\n xhr.send(JSON.stringify(options.postdata));\n break;\n case 'form':\n xhr.send(_larouxHelpersJs2['default'].buildFormData(options.postdata));\n break;\n default:\n xhr.send(options.postdata);\n break;\n }\n\n return deferred;\n },\n\n get: function get(path, values, cors) {\n return ajax.makeRequest({\n type: 'GET',\n url: path,\n datatype: 'html',\n getdata: values,\n cors: cors || ajax.corsDefault\n });\n },\n\n getJson: function getJson(path, values, cors) {\n return ajax.makeRequest({\n type: 'GET',\n url: path,\n datatype: 'json',\n getdata: values,\n cors: cors || ajax.corsDefault\n });\n },\n\n getJsonP: function getJsonP(path, values, method, cors) {\n return ajax.makeRequest({\n type: 'GET',\n url: path,\n datatype: 'script',\n getdata: values,\n jsonp: method,\n cors: cors || ajax.corsDefault\n });\n },\n\n getScript: function getScript(path, values, cors) {\n return ajax.makeRequest({\n type: 'GET',\n url: path,\n datatype: 'script',\n getdata: values,\n cors: cors || ajax.corsDefault\n });\n },\n\n post: function post(path, values, cors) {\n return ajax.makeRequest({\n type: 'POST',\n url: path,\n datatype: 'json',\n postdata: values,\n postdatatype: 'form',\n cors: cors || ajax.corsDefault\n });\n },\n\n postJson: function postJson(path, values, cors) {\n return ajax.makeRequest({\n type: 'POST',\n url: path,\n datatype: 'json',\n postdata: values,\n postdatatype: 'json',\n headers: {\n 'Content-Type': 'application/json; charset=UTF-8'\n },\n cors: cors || ajax.corsDefault\n });\n }\n };\n\n return ajax;\n})();\n\nmodule.exports = exports['default'];\n},{\"./laroux.deferred.js\":3,\"./laroux.events.js\":4,\"./laroux.helpers.js\":5}],2:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nexports['default'] = (function () {\n 'use strict';\n\n var date = {\n shortDateFormat: 'dd.MM.yyyy',\n longDateFormat: 'dd MMMM yyyy',\n timeFormat: 'HH:mm',\n\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n monthsLong: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n\n strings: {\n now: 'now',\n later: 'later',\n ago: 'ago',\n seconds: 'seconds',\n aminute: 'a minute',\n minutes: 'minutes',\n ahour: 'a hour',\n hours: 'hours',\n aday: 'a day',\n days: 'days',\n aweek: 'a week',\n weeks: 'weeks',\n amonth: 'a month',\n months: 'months',\n ayear: 'a year',\n years: 'years'\n },\n\n parseEpoch: function parseEpoch(timespan, limitWithWeeks) {\n if (timespan < 60 * 1000) {\n timespan = Math.ceil(timespan / 1000);\n\n return timespan + ' ' + date.strings.seconds;\n }\n\n if (timespan < 60 * 60 * 1000) {\n timespan = Math.ceil(timespan / (60 * 1000));\n\n if (timespan === 1) {\n return date.strings.aminute;\n }\n\n return timespan + ' ' + date.strings.minutes;\n }\n\n if (timespan < 24 * 60 * 60 * 1000) {\n timespan = Math.ceil(timespan / (60 * 60 * 1000));\n\n if (timespan === 1) {\n return date.strings.ahour;\n }\n\n return timespan + ' ' + date.strings.hours;\n }\n\n if (timespan < 7 * 24 * 60 * 60 * 1000) {\n timespan = Math.ceil(timespan / (24 * 60 * 60 * 1000));\n\n if (timespan === 1) {\n return date.strings.aday;\n }\n\n return timespan + ' ' + date.strings.days;\n }\n\n if (timespan < 4 * 7 * 24 * 60 * 60 * 1000) {\n timespan = Math.ceil(timespan / (7 * 24 * 60 * 60 * 1000));\n\n if (timespan === 1) {\n return date.strings.aweek;\n }\n\n return timespan + ' ' + date.strings.weeks;\n }\n\n if (limitWithWeeks === true) {\n return null;\n }\n\n if (timespan < 30 * 7 * 24 * 60 * 60 * 1000) {\n timespan = Math.ceil(timespan / (30 * 24 * 60 * 60 * 1000));\n\n if (timespan === 1) {\n return date.strings.amonth;\n }\n\n return timespan + ' ' + date.strings.months;\n }\n\n timespan = Math.ceil(timespan / (365 * 24 * 60 * 60 * 1000));\n\n if (timespan === 1) {\n return date.strings.ayear;\n }\n\n return timespan + ' ' + date.strings.years;\n },\n\n getCustomDateString: function getCustomDateString(format, timestamp) {\n var now = timestamp || new Date();\n\n return format.replace(/yyyy|yy|MMMM|MMM|MM|M|dd|d|hh|h|HH|H|mm|m|ss|s|tt|t/g, function (match) {\n switch (match) {\n case 'yyyy':\n return now.getFullYear();\n\n case 'yy':\n return now.getYear();\n\n case 'MMMM':\n return date.monthsLong[now.getMonth()];\n\n case 'MMM':\n return date.monthsShort[now.getMonth()];\n\n case 'MM':\n return ('0' + (now.getMonth() + 1)).substr(-2, 2);\n\n case 'M':\n return now.getMonth() + 1;\n\n case 'dd':\n return ('0' + now.getDate()).substr(-2, 2);\n\n case 'd':\n return now.getDate();\n\n case 'hh':\n var hour1 = now.getHours();\n return ('0' + (hour1 % 12 > 0 ? hour1 % 12 : 12)).substr(-2, 2);\n\n case 'h':\n var hour2 = now.getHours();\n return hour2 % 12 > 0 ? hour2 % 12 : 12;\n\n case 'HH':\n return ('0' + now.getHours()).substr(-2, 2);\n\n case 'H':\n return now.getHours();\n\n case 'mm':\n return ('0' + now.getMinutes()).substr(-2, 2);\n\n case 'm':\n return now.getMinutes();\n\n case 'ss':\n return ('0' + now.getSeconds()).substr(-2, 2);\n\n case 's':\n return now.getSeconds();\n\n case 'tt':\n if (now.getHours() >= 12) {\n return 'pm';\n }\n\n return 'am';\n\n case 't':\n if (now.getHours() >= 12) {\n return 'p';\n }\n\n return 'a';\n }\n\n return match;\n });\n },\n\n getDateDiffString: function getDateDiffString(timestamp) {\n var now = Date.now(),\n timespan = now - timestamp.getTime(),\n absTimespan = Math.abs(timespan),\n past = timespan > 0;\n\n if (absTimespan <= 3000) {\n return date.strings.now;\n }\n\n var timespanstring = date.parseEpoch(absTimespan, true);\n if (timespanstring !== null) {\n return timespanstring + ' ' + (past ? date.strings.ago : date.strings.later);\n }\n\n return date.getShortDateString(timestamp, true);\n },\n\n getShortDateString: function getShortDateString(timestamp, includeTime) {\n return date.getCustomDateString(includeTime ? date.shortDateFormat + ' ' + date.timeFormat : date.shortDateFormat, timestamp);\n },\n\n getLongDateString: function getLongDateString(timestamp, includeTime) {\n return date.getCustomDateString(includeTime ? date.longDateFormat + ' ' + date.timeFormat : date.longDateFormat, timestamp);\n }\n };\n\n return date;\n})();\n\nmodule.exports = exports['default'];\n},{}],3:[function(require,module,exports){\n/*jslint node: true */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _larouxHelpersJs = require('./laroux.helpers.js');\n\nvar _larouxHelpersJs2 = _interopRequireDefault(_larouxHelpersJs);\n\nvar Deferred = (function () {\n function Deferred() {\n _classCallCheck(this, Deferred);\n\n this.events = {};\n }\n\n _createClass(Deferred, [{\n key: 'invoke',\n value: function invoke(eventName) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var finalEvent = eventName === 'done' || eventName === 'fail';\n\n if (eventName in this.events) {\n this.events[eventName].invoked = true;\n this.events[eventName].result = args;\n\n this.invokeCallback(this.events[eventName], args);\n } else {\n this.events[eventName] = { callbacks: [], invoked: true, result: args };\n }\n\n if (finalEvent && 'completed' in this.events) {\n this.invokeCallback(this.events.completed, [eventName].concat(args));\n }\n\n return this;\n }\n }, {\n key: 'invokeCallback',\n value: function invokeCallback(event, args) {\n if (!('callbacks' in event)) {\n return;\n }\n\n var callbacks = event.callbacks;\n\n while (callbacks.length > 0) {\n var callback = callbacks.shift();\n callback.apply(this, args);\n }\n }\n }, {\n key: 'resolve',\n value: function resolve() {\n var _invoke;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return (_invoke = this.invoke).call.apply(_invoke, [this, 'done'].concat(args));\n }\n }, {\n key: 'reject',\n value: function reject() {\n var _invoke2;\n\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return (_invoke2 = this.invoke).call.apply(_invoke2, [this, 'fail'].concat(args));\n }\n }, {\n key: 'on',\n value: function on(eventName, callback) {\n if (!(eventName in this.events)) {\n this.events[eventName] = {\n callbacks: [callback],\n invoked: false,\n result: undefined\n };\n\n return this;\n }\n\n var event = this.events[eventName];\n\n if (event.invoked) {\n callback.apply(this, event.result);\n\n return this;\n }\n\n event.callbacks.push(callback);\n\n return this;\n }\n }, {\n key: 'done',\n value: function done(callback) {\n return this.on('done', callback);\n }\n }, {\n key: 'fail',\n value: function fail(callback) {\n return this.on('fail', callback);\n }\n }, {\n key: 'completed',\n value: function completed(callback) {\n return this.on('completed', callback);\n }\n }, {\n key: 'is',\n value: function is(eventName) {\n if (!(eventName in this.events)) {\n return false;\n }\n\n return this.events[eventName].invoked;\n }\n }], [{\n key: 'async',\n value: function async(callback) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n var deferred = new Deferred();\n\n setTimeout(function () {\n try {\n var result = callback.apply(deferred, args);\n deferred.resolve(result);\n } catch (err) {\n deferred.reject(err);\n }\n }, 0);\n\n return deferred;\n }\n }]);\n\n return Deferred;\n})();\n\nexports['default'] = Deferred;\nmodule.exports = exports['default'];\n},{\"./laroux.helpers.js\":5}],4:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nexports['default'] = (function () {\n 'use strict';\n\n var events = {\n delegates: [],\n\n add: function add(event, callback) {\n events.delegates.push({ event: event, callback: callback });\n },\n\n invoke: function invoke(event, args) {\n for (var item in events.delegates) {\n if (!events.delegates.hasOwnProperty(item)) {\n continue;\n }\n\n if (events.delegates[item].event != event) {\n continue;\n }\n\n events.delegates[item].callback(args);\n }\n }\n };\n\n return events;\n})();\n\nmodule.exports = exports['default'];\n},{}],5:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nexports['default'] = (function () {\n 'use strict';\n\n var helpers = {\n uniqueId: 0,\n\n getUniqueId: function getUniqueId() {\n /*jslint plusplus: true */\n return 'uid-' + ++helpers.uniqueId;\n },\n\n clone: function clone(obj) {\n return JSON.parse(JSON.stringify(obj));\n },\n\n merge: function merge(target, source, clone) {\n var result = clone ? helpers.clone(target) : target,\n keys = Object.keys(source);\n\n for (var i = 0, _length = keys.length; i < _length; i++) {\n var key = keys[i];\n\n if (result[key] instanceof Array) {\n result[key] = result[key].concat(source[key]);\n continue;\n }\n\n if (result[key] instanceof Object) {\n helpers.merge(result[key], source[key]);\n continue;\n }\n\n result[key] = source[key];\n }\n\n return result;\n },\n\n mergeNs: function mergeNs(target, path, source) {\n var ptr = target,\n pathSlices = path.split('.'),\n keys = Object.keys(source);\n\n for (var i = 0, _length2 = pathSlices.length; i < _length2; i++) {\n var current = pathSlices[i];\n\n if (ptr[current] === undefined) {\n ptr[current] = {};\n }\n\n ptr = ptr[current];\n }\n\n if (source !== undefined) {\n // might be replaced w/ $l.merge method\n helpers.merge(ptr, source);\n }\n\n return target;\n },\n\n buildQueryString: function buildQueryString(values, rfc3986) {\n var uri = '',\n regEx = /%20/g;\n\n for (var _name in values) {\n if (!values.hasOwnProperty(_name)) {\n continue;\n }\n\n if (typeof values[_name] !== 'function') {\n if (rfc3986 || false) {\n uri += '&' + encodeURIComponent(_name).replace(regEx, '+') + '=' + encodeURIComponent(values[_name].toString()).replace(regEx, '+');\n } else {\n uri += '&' + encodeURIComponent(_name) + '=' + encodeURIComponent(values[_name].toString());\n }\n }\n }\n\n return uri.substr(1);\n },\n\n buildFormData: function buildFormData(values) {\n var data = new FormData();\n\n for (var _name2 in values) {\n if (!values.hasOwnProperty(_name2)) {\n continue;\n }\n\n if (typeof values[_name2] !== 'function') {\n data.append(_name2, values[_name2]);\n }\n }\n\n return data;\n },\n\n format: function format() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return Array.prototype.shift.call(args).replace(/%s/g, function () {\n return Array.prototype.shift.call(args);\n });\n },\n\n replaceAll: function replaceAll(text, dictionary) {\n var re = new RegExp(Object.keys(dictionary).join('|'), 'g');\n\n return text.replace(re, function (match) {\n return dictionary[match];\n });\n },\n\n camelCase: function camelCase(value) {\n var flag = false;\n var output = '';\n\n for (var j = 0; j < value.length; j++) {\n var currChar = value.charAt(j);\n if (currChar === '-') {\n flag = true;\n continue;\n }\n\n output += !flag ? currChar : currChar.toUpperCase();\n flag = false;\n }\n\n return output;\n },\n\n antiCamelCase: function antiCamelCase(value) {\n var output = '';\n\n for (var j = 0; j < value.length; j++) {\n var currChar = value.charAt(j);\n if (currChar !== '-' && currChar == currChar.toUpperCase()) {\n output += '-' + currChar.toLowerCase();\n continue;\n }\n\n output += currChar;\n }\n\n return output;\n },\n\n quoteAttr: function quoteAttr(value) {\n return value.replace(/&/g, '&').replace(/'/g, ''').replace(/\"/g, '"').replace(//g, '>').replace(/\"/g, '"').replace(/\\r\\n/g, ' ').replace(/[\\r\\n]/g, ' ');\n },\n\n spliceString: function spliceString(value, index, count, add) {\n return value.slice(0, index) + (add || '') + value.slice(index + count);\n },\n\n random: function random(min, max) {\n return min + Math.floor(Math.random() * (max - min + 1));\n },\n\n find: function find(obj, iterator, context) {\n var result = undefined;\n\n obj.some(function (value, index, list) {\n if (iterator.call(context, value, index, list)) {\n result = value;\n return true;\n }\n });\n\n return result;\n },\n\n each: function each(arr, callback, testOwnProperties) {\n for (var item in arr) {\n if (testOwnProperties && !arr.hasOwnProperty(item)) {\n continue;\n }\n\n if (callback(item, arr[item]) === false) {\n break;\n }\n }\n\n return arr;\n },\n\n map: function map(arr, callback, dontSkipReturns, testOwnProperties) {\n var results = [];\n\n for (var item in arr) {\n if (testOwnProperties && !arr.hasOwnProperty(item)) {\n continue;\n }\n\n var result = callback(arr[item], item);\n if (result === false) {\n break;\n }\n\n if (dontSkipReturns || result !== undefined) {\n results.push(result);\n }\n }\n\n return results;\n },\n\n index: function index(arr, value, testOwnProperties) {\n for (var item in arr) {\n if (testOwnProperties && !arr.hasOwnProperty(item)) {\n continue;\n }\n\n if (arr[item] === value) {\n return item;\n }\n }\n\n return null;\n },\n\n aeach: function aeach(arr, callback) {\n for (var i = 0, _length3 = arr.length; i < _length3; i++) {\n if (callback(i, arr[i]) === false) {\n break;\n }\n }\n\n return arr;\n },\n\n amap: function amap(arr, callback, dontSkipReturns) {\n var results = [];\n\n for (var i = 0, _length4 = arr.length; i < _length4; i++) {\n var result = callback(arr[i], i);\n if (result === false) {\n break;\n }\n\n if (dontSkipReturns || result !== undefined) {\n results.push(result);\n }\n }\n\n return results;\n },\n\n aindex: function aindex(arr, value, start) {\n for (var i = start || 0, _length5 = arr.length; i < _length5; i++) {\n if (arr[i] === value) {\n return i;\n }\n }\n\n return -1;\n },\n\n column: function column(obj, key) {\n return helpers.map(obj, function (value) {\n return value[key];\n }, true);\n },\n\n shuffle: function shuffle(obj) {\n var index = 0,\n shuffled = [];\n\n for (var item in obj) {\n if (!obj.hasOwnProperty(item)) {\n continue;\n }\n\n var rand = helpers.random(0, index);\n shuffled[index++] = shuffled[rand];\n shuffled[rand] = obj[item];\n }\n\n return shuffled;\n },\n\n prependArray: function prependArray(obj, value) {\n var length = obj.length,\n items = new Array(length + 1);\n\n items[0] = value;\n for (var i = 0, j = 1; i < length; i++, j++) {\n items[j] = obj[i];\n }\n\n return items;\n },\n\n removeFromArray: function removeFromArray(obj, value) {\n var targetKey = null;\n\n for (var item in obj) {\n if (!obj.hasOwnProperty(item)) {\n continue;\n }\n\n if (obj[item] === value) {\n targetKey = item;\n break;\n }\n }\n\n if (targetKey !== null) {\n obj.splice(targetKey, 1);\n return true;\n }\n\n return false;\n },\n\n toArray: function toArray(obj) {\n var length = obj.length,\n items = new Array(length);\n\n for (var i = 0; i < length; i++) {\n items[i] = obj[i];\n }\n\n return items;\n },\n\n getAsArray: function getAsArray(obj) {\n if (obj instanceof Array) {\n return obj;\n }\n\n if (obj instanceof NodeList) {\n var _length6 = obj.length;\n\n var items = new Array(_length6);\n for (var i = 0; i < _length6; i++) {\n items[i] = obj[i];\n }\n\n return items;\n }\n\n return [obj];\n },\n\n getLength: function getLength(obj) {\n if (obj.constructor === Object) {\n if (obj.length !== undefined) {\n return obj.length;\n }\n\n return Object.keys(obj).length;\n }\n\n return -1;\n },\n\n getKeysRecursive: function getKeysRecursive(obj, delimiter, prefix, keys) {\n if (delimiter === undefined) {\n delimiter = '.';\n }\n\n if (prefix === undefined) {\n prefix = '';\n keys = [];\n }\n\n for (var item in obj) {\n if (!obj.hasOwnProperty(item)) {\n continue;\n }\n\n keys.push(prefix + item);\n\n if (obj[item] !== undefined && obj[item] !== null && obj[item].constructor === Object) {\n helpers.getKeysRecursive(obj[item], delimiter, prefix + item + delimiter, keys);\n continue;\n }\n }\n\n return keys;\n },\n\n getElement: function getElement(obj, path, defaultValue, delimiter) {\n if (defaultValue === undefined) {\n defaultValue = null;\n }\n\n if (delimiter === undefined) {\n delimiter = '.';\n }\n\n var pos = path.indexOf(delimiter);\n var key = undefined;\n var rest = undefined;\n if (pos === -1) {\n key = path;\n rest = null;\n } else {\n key = path.substring(0, pos);\n rest = path.substring(pos + 1);\n }\n\n if (!(key in obj)) {\n return defaultValue;\n }\n\n if (rest === null || rest.length === 0) {\n return obj[key];\n }\n\n return helpers.getElement(obj[key], rest, defaultValue, delimiter);\n },\n\n callAll: function callAll(callbacks, scope, parameters) {\n for (var i = 0, _length7 = callbacks.length; i < _length7; i++) {\n callbacks[i].apply(scope, parameters);\n }\n }\n };\n\n return helpers;\n})();\n\nmodule.exports = exports['default'];\n},{}],6:[function(require,module,exports){\n(function (global){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxAjaxJs = require('./laroux.ajax.js');\n\nvar _larouxAjaxJs2 = _interopRequireDefault(_larouxAjaxJs);\n\nvar _larouxDateJs = require('./laroux.date.js');\n\nvar _larouxDateJs2 = _interopRequireDefault(_larouxDateJs);\n\nvar _larouxDeferredJs = require('./laroux.deferred.js');\n\nvar _larouxDeferredJs2 = _interopRequireDefault(_larouxDeferredJs);\n\nvar _larouxEventsJs = require('./laroux.events.js');\n\nvar _larouxEventsJs2 = _interopRequireDefault(_larouxEventsJs);\n\nvar _larouxHelpersJs = require('./laroux.helpers.js');\n\nvar _larouxHelpersJs2 = _interopRequireDefault(_larouxHelpersJs);\n\nvar _larouxStoryboardJs = require('./laroux.storyboard.js');\n\nvar _larouxStoryboardJs2 = _interopRequireDefault(_larouxStoryboardJs);\n\nvar _larouxTypesJs = require('./laroux.types.js');\n\nvar _larouxTypesJs2 = _interopRequireDefault(_larouxTypesJs);\n\nvar _larouxTemplatesJs = require('./laroux.templates.js');\n\nvar _larouxTemplatesJs2 = _interopRequireDefault(_larouxTemplatesJs);\n\nvar _larouxTimersJs = require('./laroux.timers.js');\n\nvar _larouxTimersJs2 = _interopRequireDefault(_larouxTimersJs);\n\nvar _larouxVarsJs = require('./laroux.vars.js');\n\nvar _larouxVarsJs2 = _interopRequireDefault(_larouxVarsJs);\n\nvar _larouxWhenJs = require('./laroux.when.js');\n\nvar _larouxWhenJs2 = _interopRequireDefault(_larouxWhenJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n var laroux = function laroux(selector, parent) {\n if (selector instanceof Array) {\n return _larouxHelpersJs2['default'].toArray((parent || document).querySelectorAll(selector));\n }\n\n // FIXME: Laroux: non-chromium optimization, but it runs\n // slowly in chromium\n //\n // let re = /^#([^\\+\\>\\[\\]\\.# ]*)$/.exec(selector);\n // if (re) {\n // return (parent || document).getElementById(re[1]);\n // }\n\n return (parent || document).querySelector(selector);\n };\n\n _larouxHelpersJs2['default'].merge(laroux, _larouxHelpersJs2['default']);\n _larouxHelpersJs2['default'].merge(laroux, {\n ajax: _larouxAjaxJs2['default'],\n date: _larouxDateJs2['default'],\n deferred: _larouxDeferredJs2['default'],\n events: _larouxEventsJs2['default'],\n storyboard: _larouxStoryboardJs2['default'],\n types: _larouxTypesJs2['default'],\n templates: _larouxTemplatesJs2['default'],\n timers: _larouxTimersJs2['default'],\n vars: _larouxVarsJs2['default'],\n when: _larouxWhenJs2['default'],\n\n extend: function extend(source) {\n return _larouxHelpersJs2['default'].merge(laroux, source);\n },\n\n extendNs: function extendNs(path, source) {\n return _larouxHelpersJs2['default'].mergeNs(laroux, path, source);\n },\n\n readyPassed: false,\n\n ready: function ready(callback) {\n if (!laroux.readyPassed) {\n _larouxEventsJs2['default'].add('ContentLoaded', callback);\n return;\n }\n\n callback();\n },\n\n setReady: function setReady() {\n if (!laroux.readyPassed) {\n _larouxEventsJs2['default'].invoke('ContentLoaded');\n setInterval(_larouxTimersJs2['default'].ontick, 100);\n laroux.readyPassed = true;\n }\n }\n });\n\n if (global.$l === undefined) {\n global.$l = laroux;\n }\n\n return laroux;\n})();\n\nmodule.exports = exports['default'];\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./laroux.ajax.js\":1,\"./laroux.date.js\":2,\"./laroux.deferred.js\":3,\"./laroux.events.js\":4,\"./laroux.helpers.js\":5,\"./laroux.storyboard.js\":7,\"./laroux.templates.js\":8,\"./laroux.timers.js\":9,\"./laroux.types.js\":10,\"./laroux.vars.js\":11,\"./laroux.when.js\":12}],7:[function(require,module,exports){\n(function (global){\n/*jslint node: true */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _larouxDeferredJs = require('./laroux.deferred.js');\n\nvar _larouxDeferredJs2 = _interopRequireDefault(_larouxDeferredJs);\n\nvar Storyboard = (function () {\n function Storyboard() {\n _classCallCheck(this, Storyboard);\n\n var self = this;\n\n this.phases = [];\n this.phaseKeys = {};\n this.currentIteration = 0;\n this.running = false;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n for (var i = 0, _length = args.length; i < _length; i++) {\n this.addPhase(args[i]);\n }\n\n this.checkPromise = function () {\n if (--self.phases[self.currentIteration].promises === 0 && !self.running) {\n self.start();\n }\n };\n }\n\n _createClass(Storyboard, [{\n key: 'addPhase',\n value: function addPhase(key) {\n this.phaseKeys[key] = this.phases.length;\n this.phases.push({\n key: key,\n callbacks: [],\n promises: 0\n });\n }\n }, {\n key: 'add',\n value: function add(phase, fnc) {\n if (fnc instanceof _larouxDeferredJs2['default']) {\n return this.addPromise(phase, fnc);\n }\n\n var phaseId = this.phaseKeys[phase];\n\n if (phaseId < this.currentIteration) {\n // execute immediately if phase is already passed\n fnc.apply(global);\n return;\n }\n\n this.phases[phaseId].callbacks.push(fnc);\n }\n }, {\n key: 'addPromise',\n value: function addPromise(phase, promise) {\n var phaseId = this.phaseKeys[phase];\n\n // skips if phase is already passed\n if (phaseId < this.currentIteration) {\n return;\n }\n\n this.phases[phaseId].promises++;\n promise.done(this.checkPromise);\n }\n }, {\n key: 'start',\n value: function start() {\n this.running = true;\n\n while (this.phases.length > this.currentIteration) {\n var currentPhase = this.phases[this.currentIteration];\n\n while (currentPhase.callbacks.length > 0) {\n var fnc = currentPhase.callbacks.shift();\n fnc.apply(global);\n }\n\n if (currentPhase.promises > 0) {\n break;\n }\n\n this.currentIteration++;\n }\n\n this.running = false;\n }\n }]);\n\n return Storyboard;\n})();\n\nexports['default'] = Storyboard;\nmodule.exports = exports['default'];\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./laroux.deferred.js\":3}],8:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxHelpersJs = require('./laroux.helpers.js');\n\nvar _larouxHelpersJs2 = _interopRequireDefault(_larouxHelpersJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n var templates = {\n engines: {\n plain: {\n compile: function compile(template, options) {\n return [template, options];\n },\n\n render: function render(compiled, model) {\n var result = compiled[0],\n dict = [],\n lastIndex = 0,\n nextIndex = undefined;\n\n while ((nextIndex = result.indexOf('{{', lastIndex)) !== -1) {\n nextIndex += 2;\n var closeIndex = result.indexOf('}}', nextIndex);\n if (closeIndex === -1) {\n break;\n }\n\n var key = result.substring(nextIndex, closeIndex);\n dict['{{' + key + '}}'] = _larouxHelpersJs2['default'].getElement(model, key, '');\n lastIndex = closeIndex + 2;\n }\n\n return _larouxHelpersJs2['default'].replaceAll(result, dict);\n }\n },\n\n hogan: {\n compile: function compile(template, options) {\n return Hogan.compile(template, options);\n },\n\n render: function render(compiled, model) {\n return compiled.render(model);\n }\n },\n\n mustache: {\n compile: function compile(template, options) {\n return Mustache.compile(template, options);\n },\n\n render: function render(compiled, model) {\n return compiled(model);\n }\n },\n\n handlebars: {\n compile: function compile(template, options) {\n return Handlebars.compile(template, options);\n },\n\n render: function render(compiled, model) {\n return compiled(model);\n }\n },\n\n lodash: {\n compile: function compile(template, options) {\n /*jslint nomen: true */\n return _.compile(template, null, options);\n },\n\n render: function render(compiled, model) {\n return compiled(model);\n }\n },\n\n underscore: {\n compile: function compile(template, options) {\n /*jslint nomen: true */\n return _.compile(template, null, options);\n },\n\n render: function render(compiled, model) {\n return compiled(model);\n }\n }\n },\n engine: 'plain',\n\n apply: function apply(element, model, options) {\n var content = undefined,\n engine = templates.engines[templates.engine];\n\n if (element.nodeType === 1 || element.nodeType === 3 || element.nodeType === 11) {\n content = element.textContent;\n } else {\n content = element.nodeValue;\n }\n\n var compiled = engine.compile(content, options);\n return engine.render(compiled, model);\n }\n\n /*\n insert: function (element, model, target, position, options) {\n let output = templates.apply(element, model, options);\n dom.insert(target, position || 'beforeend', output);\n },\n replace: function (element, model, target, options) {\n let output = templates.apply(element, model, options);\n dom.replace(target, output);\n }\n */\n };\n\n return templates;\n})();\n\nmodule.exports = exports['default'];\n},{\"./laroux.helpers.js\":5}],9:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxHelpersJs = require('./laroux.helpers.js');\n\nvar _larouxHelpersJs2 = _interopRequireDefault(_larouxHelpersJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n var timers = {\n data: [],\n\n set: function set(timer) {\n timer.next = Date.now() + timer.timeout;\n timers.data.push(timer);\n },\n\n remove: function remove(id) {\n var targetKey = null;\n\n for (var item in timers.data) {\n if (!timers.data.hasOwnProperty(item)) {\n continue;\n }\n\n var currentItem = timers.data[item];\n\n if (currentItem.id !== undefined && currentItem.id == id) {\n targetKey = item;\n break;\n }\n }\n\n if (targetKey !== null) {\n timers.data.splice(targetKey, 1);\n return true;\n }\n\n return false;\n },\n\n ontick: function ontick() {\n var now = Date.now(),\n removeKeys = [];\n\n for (var item in timers.data) {\n if (!timers.data.hasOwnProperty(item)) {\n continue;\n }\n\n var currentItem = timers.data[item];\n\n if (currentItem.next <= now) {\n var result = currentItem.ontick(currentItem.state);\n\n if (result !== false && currentItem.reset) {\n currentItem.next = now + currentItem.timeout;\n } else {\n removeKeys = _larouxHelpersJs2['default'].prependArray(removeKeys, item);\n }\n }\n }\n\n for (var item2 in removeKeys) {\n if (!removeKeys.hasOwnProperty(item2)) {\n continue;\n }\n\n timers.data.splice(removeKeys[item2], 1);\n }\n }\n };\n\n return timers;\n})();\n\nmodule.exports = exports['default'];\n},{\"./laroux.helpers.js\":5}],10:[function(require,module,exports){\n/*jslint node: true */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _larouxHelpersJs = require('./laroux.helpers.js');\n\nvar _larouxHelpersJs2 = _interopRequireDefault(_larouxHelpersJs);\n\nvar staticKeys = ['_callbacks', '_onupdate'];\n\nvar Observable = (function () {\n function Observable(data) {\n _classCallCheck(this, Observable);\n\n var self = this;\n\n this._callbacks = [];\n this._onupdate = function (changes) {\n _larouxHelpersJs2['default'].callAll(self._callbacks, self, [changes]);\n };\n\n Object.observe(this, this._onupdate);\n\n if (data) {\n this.setRange(data);\n }\n }\n\n _createClass(Observable, [{\n key: 'set',\n value: function set(key, value) {\n if (staticKeys.indexOf(key) === -1) {\n this[key] = value;\n }\n }\n }, {\n key: 'setRange',\n value: function setRange(values) {\n for (var valueKey in values) {\n this.set(valueKey, values[valueKey]);\n }\n }\n }, {\n key: 'get',\n value: function get(key, defaultValue) {\n if (key in this && staticKeys.indexOf(key) === -1) {\n return this[key];\n }\n\n return defaultValue || null;\n }\n }, {\n key: 'getRange',\n value: function getRange(keys) {\n var values = {};\n\n for (var item in keys) {\n values[keys[item]] = this[keys[item]];\n }\n\n return values;\n }\n }, {\n key: 'keys',\n value: function keys() {\n var keys = [];\n\n for (var item in this) {\n if (staticKeys.indexOf(item) === -1) {\n keys.push(item);\n }\n }\n\n return keys;\n }\n }, {\n key: 'length',\n value: function length() {\n return this.keys().length;\n }\n }, {\n key: 'exists',\n value: function exists(key) {\n return key in this;\n }\n }, {\n key: 'remove',\n value: function remove(key) {\n if (staticKeys.indexOf(key) === -1) {\n delete this[key];\n }\n }\n }, {\n key: 'clear',\n value: function clear() {\n for (var item in this) {\n if (!this.hasOwnProperty(item) || staticKeys.indexOf(item) !== -1) {\n continue;\n }\n\n delete this[item];\n }\n }\n }, {\n key: 'observe',\n value: function observe(obj) {\n Object.observe(obj, this._onupdate);\n }\n }, {\n key: 'unobserve',\n value: function unobserve(obj) {\n Object.unobserve(obj);\n }\n }, {\n key: 'on',\n value: function on(callback) {\n this._callbacks.push(callback);\n }\n }, {\n key: 'off',\n value: function off(callback) {\n _larouxHelpersJs2['default'].removeFromArray(this._callbacks, callback);\n }\n }]);\n\n return Observable;\n})();\n\nexports['default'] = (function () {\n var types = {\n observable: Observable\n };\n\n return types;\n})();\n\nmodule.exports = exports['default'];\n},{\"./laroux.helpers.js\":5}],11:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxHelpersJs = require('./laroux.helpers.js');\n\nvar _larouxHelpersJs2 = _interopRequireDefault(_larouxHelpersJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n var vars = {\n storages: {\n cookie: {\n defaultPath: '/',\n\n get: function get(name, defaultValue) {\n var re = new RegExp(encodeURIComponent(name) + '=[^;]+', 'i'),\n match = document.cookie.match(re);\n\n if (!match) {\n return defaultValue || null;\n }\n\n return decodeURIComponent(match[0].split('=')[1]);\n },\n\n set: function set(name, value, expires, path) {\n var expireValue = '';\n if (expires) {\n expireValue = '; expires=' + expires.toGMTString();\n }\n\n document.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) + expireValue + '; path=' + (path || vars.storages.cookie.defaultPath);\n },\n\n remove: function remove(name, path) {\n document.cookie = encodeURIComponent(name) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=' + (path || vars.storages.cookie.defaultPath);\n }\n },\n\n local: {\n get: function get(name, defaultValue) {\n if (!(name in localStorage)) {\n return defaultValue || null;\n }\n\n return JSON.parse(localStorage[name]);\n },\n\n set: function set(name, value) {\n localStorage[name] = JSON.stringify(value);\n },\n\n remove: function remove(name) {\n delete localStorage[name];\n }\n },\n\n session: {\n get: function get(name, defaultValue) {\n if (!(name in sessionStorage)) {\n return defaultValue || null;\n }\n\n return JSON.parse(sessionStorage[name]);\n },\n\n set: function set(name, value) {\n sessionStorage[name] = JSON.stringify(value);\n },\n\n remove: function remove(name) {\n delete sessionStorage[name];\n }\n }\n },\n\n get: function get(storage) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return vars.storages[storage].get.apply(this, args);\n },\n\n set: function set(storage) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return vars.storages[storage].set.apply(this, args);\n },\n\n remove: function remove(storage) {\n for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return vars.storages[storage].remove.apply(this, args);\n }\n };\n\n return vars;\n})();\n\nmodule.exports = exports['default'];\n},{\"./laroux.helpers.js\":5}],12:[function(require,module,exports){\n/*jslint node: true */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _larouxDeferredJs = require('./laroux.deferred.js');\n\nvar _larouxDeferredJs2 = _interopRequireDefault(_larouxDeferredJs);\n\nvar _larouxHelpersJs = require('./laroux.helpers.js');\n\nvar _larouxHelpersJs2 = _interopRequireDefault(_larouxHelpersJs);\n\nvar When = (function () {\n function When() {\n _classCallCheck(this, When);\n\n var self = this;\n\n this.queues = [];\n this.remaining = -1;\n\n this.deferredCompleted = function () {\n self.remaining--;\n self.check();\n };\n\n if (arguments.length > 0) {\n this.then.apply(this, arguments);\n }\n }\n\n _createClass(When, [{\n key: 'then',\n value: function then() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this.queues.push(args);\n this.check();\n\n return this;\n }\n }, {\n key: 'check',\n value: function check() {\n while (this.remaining <= 0) {\n if (this.remaining !== -1) {\n this.queues.shift();\n }\n\n if (this.queues.length === 0) {\n this.remaining = -1;\n break;\n }\n\n var queue = this.queues[0];\n // console.log('queue: ', queue);\n\n this.remaining = 0;\n for (var i = 0, _length = queue.length; i < _length; i++) {\n if (queue[i].constructor === Function) {\n queue[i] = _larouxDeferredJs2['default'].async(queue[i]);\n }\n\n if (queue[i] instanceof _larouxDeferredJs2['default'] && !queue[i].is('completed')) {\n this.remaining++;\n queue[i].completed(this.deferredCompleted);\n }\n }\n }\n }\n }]);\n\n return When;\n})();\n\nexports['default'] = When;\nmodule.exports = exports['default'];\n},{\"./laroux.deferred.js\":3,\"./laroux.helpers.js\":5}],13:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxCssJs = require('./laroux.css.js');\n\nvar _larouxCssJs2 = _interopRequireDefault(_larouxCssJs);\n\nvar _larouxDeferredJs = require('../laroux.deferred.js');\n\nvar _larouxDeferredJs2 = _interopRequireDefault(_larouxDeferredJs);\n\nvar _larouxHelpersJs = require('../laroux.helpers.js');\n\nvar _larouxHelpersJs2 = _interopRequireDefault(_larouxHelpersJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n var anim = {\n data: [],\n\n fx: {\n interpolate: function interpolate(source, target, shift) {\n return source + (target - source) * shift;\n },\n\n easing: function easing(pos) {\n return -Math.cos(pos * Math.PI) / 2 + 0.5;\n }\n },\n\n // {object, property, from, to, time, unit, reset}\n set: function set(newanim) {\n newanim.deferred = new _larouxDeferredJs2['default']();\n\n newanim.startTime = undefined;\n\n if (newanim.unit === null || newanim.unit === undefined) {\n newanim.unit = '';\n }\n\n if (newanim.from === null || newanim.from === undefined) {\n if (newanim.object === document.body && newanim.property === 'scrollTop') {\n newanim.from = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop;\n } else {\n newanim.from = newanim.object[newanim.property];\n }\n }\n\n if (newanim.from.constructor === String) {\n newanim.from = Number(newanim.from);\n }\n\n // if (newanim.id === undefined) {\n // newanim.id = helpers.getUniqueId();\n // }\n\n anim.data.push(newanim);\n if (anim.data.length === 1) {\n requestAnimationFrame(anim.onframe);\n }\n\n return newanim.deferred;\n },\n\n setCss: function setCss(newanim) {\n if (newanim.from === null || newanim.from === undefined) {\n newanim.from = _larouxCssJs2['default'].getProperty(newanim.object, newanim.property);\n }\n\n newanim.object = newanim.object.style;\n newanim.property = _larouxHelpersJs2['default'].camelCase(newanim.property);\n\n return anim.set(newanim);\n },\n\n remove: function remove(id) {\n var targetKey = null;\n\n for (var item in anim.data) {\n if (!anim.data.hasOwnProperty(item)) {\n continue;\n }\n\n var currentItem = anim.data[item];\n\n if (currentItem.id !== undefined && currentItem.id == id) {\n targetKey = item;\n break;\n }\n }\n\n if (targetKey !== null) {\n var deferred = anim.data[targetKey].deferred;\n\n deferred.reject('stop');\n\n anim.data.splice(targetKey, 1);\n return true;\n }\n\n return false;\n },\n\n onframe: function onframe(timestamp) {\n var removeKeys = [];\n\n for (var item in anim.data) {\n if (!anim.data.hasOwnProperty(item)) {\n continue;\n }\n\n var currentItem = anim.data[item];\n if (currentItem.startTime === undefined) {\n currentItem.startTime = timestamp;\n }\n\n anim.step(currentItem, timestamp);\n\n if (timestamp > currentItem.startTime + currentItem.time) {\n if (currentItem.reset === true) {\n currentItem.startTime = timestamp;\n if (currentItem.object === document.body && currentItem.property === 'scrollTop') {\n scrollTo(0, currentItem.from);\n // setTimeout(function () { scrollTo(0, currentItem.from); }, 1);\n } else {\n currentItem.object[currentItem.property] = currentItem.from;\n }\n } else {\n removeKeys = _larouxHelpersJs2['default'].prependArray(removeKeys, item);\n currentItem.deferred.resolve();\n }\n }\n }\n\n for (var item2 in removeKeys) {\n if (!removeKeys.hasOwnProperty(item2)) {\n continue;\n }\n\n anim.data.splice(removeKeys[item2], 1);\n }\n\n if (anim.data.length > 0) {\n requestAnimationFrame(anim.onframe);\n }\n },\n\n step: function step(newanim, timestamp) {\n var finishT = newanim.startTime + newanim.time,\n shift = timestamp > finishT ? 1 : (timestamp - newanim.startTime) / newanim.time;\n\n var value = anim.fx.interpolate(newanim.from, newanim.to, anim.fx.easing(shift)) + newanim.unit;\n\n if (newanim.object === document.body && newanim.property === 'scrollTop') {\n scrollTo(0, value);\n // setTimeout(function () { scrollTo(0, value); }, 1);\n } else {\n newanim.object[newanim.property] = value;\n }\n }\n };\n\n return anim;\n})();\n\nmodule.exports = exports['default'];\n},{\"../laroux.deferred.js\":3,\"../laroux.helpers.js\":5,\"./laroux.css.js\":14}],14:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxHelpersJs = require('../laroux.helpers.js');\n\nvar _larouxHelpersJs2 = _interopRequireDefault(_larouxHelpersJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n var css = {\n // class features\n hasClass: function hasClass(element, className) {\n return element.classList.contains(className);\n },\n\n addClass: function addClass(element, className) {\n var elements = _larouxHelpersJs2['default'].getAsArray(element);\n\n for (var i = 0, _length = elements.length; i < _length; i++) {\n elements[i].classList.add(className);\n }\n },\n\n removeClass: function removeClass(element, className) {\n var elements = _larouxHelpersJs2['default'].getAsArray(element);\n\n for (var i = 0, _length2 = elements.length; i < _length2; i++) {\n elements[i].classList.remove(className);\n }\n },\n\n toggleClass: function toggleClass(element, className) {\n var elements = _larouxHelpersJs2['default'].getAsArray(element);\n\n for (var i = 0, _length3 = elements.length; i < _length3; i++) {\n if (elements[i].classList.contains(className)) {\n elements[i].classList.remove(className);\n } else {\n elements[i].classList.add(className);\n }\n }\n },\n\n cycleClass: function cycleClass(elements, className) {\n for (var i = 0, _length4 = elements.length; i < _length4; i++) {\n if (elements[i].classList.contains(className)) {\n elements[i].classList.remove(className);\n elements[(i + 1) % _length4].classList.add(className);\n return;\n }\n }\n },\n\n // style features\n getProperty: function getProperty(element, styleName) {\n var style = getComputedStyle(element);\n\n styleName = _larouxHelpersJs2['default'].antiCamelCase(styleName);\n\n return style.getPropertyValue(styleName);\n },\n\n setProperty: function setProperty(element, properties, value) {\n var elements = _larouxHelpersJs2['default'].getAsArray(element);\n\n if (typeof properties === 'string') {\n var oldProperties = properties;\n properties = {};\n properties[oldProperties] = value;\n }\n\n for (var styleName in properties) {\n if (!properties.hasOwnProperty(styleName)) {\n continue;\n }\n\n var newStyleName = _larouxHelpersJs2['default'].camelCase(styleName);\n\n for (var i = 0, _length5 = elements.length; i < _length5; i++) {\n elements[i].style[newStyleName] = properties[styleName];\n }\n }\n },\n\n // transition features\n defaultTransition: '2s ease',\n\n setTransitionSingle: function setTransitionSingle(element, transition) {\n var transitions = _larouxHelpersJs2['default'].getAsArray(transition),\n style = getComputedStyle(element),\n currentTransitions = style.getPropertyValue('transition') || style.getPropertyValue('-webkit-transition') || style.getPropertyValue('-ms-transition') || '',\n currentTransitionsArray = undefined;\n\n if (currentTransitions.length > 0) {\n currentTransitionsArray = currentTransitions.split(',');\n } else {\n currentTransitionsArray = [];\n }\n\n for (var item in transitions) {\n if (!transitions.hasOwnProperty(item)) {\n continue;\n }\n\n var styleName = undefined,\n transitionProperties = undefined,\n pos = transitions[item].indexOf(' ');\n\n if (pos !== -1) {\n styleName = transitions[item].substring(0, pos);\n transitionProperties = transitions[item].substring(pos + 1);\n } else {\n styleName = transitions[item];\n transitionProperties = css.defaultTransition;\n }\n\n var found = false;\n for (var j = 0; j < currentTransitionsArray.length; j++) {\n if (currentTransitionsArray[j].trim().localeCompare(styleName) === 0) {\n currentTransitionsArray[j] = styleName + ' ' + transitionProperties;\n found = true;\n break;\n }\n }\n\n if (!found) {\n currentTransitionsArray.push(styleName + ' ' + transitionProperties);\n }\n }\n\n var value = currentTransitionsArray.join(', ');\n\n element.style.transition = value;\n element.style.webkitTransition = value;\n element.style.msTransition = value;\n },\n\n setTransition: function setTransition(element, transition) {\n var elements = _larouxHelpersJs2['default'].getAsArray(element);\n\n for (var i = 0, _length6 = elements.length; i < _length6; i++) {\n css.setTransitionSingle(elements[i], transition);\n }\n },\n\n show: function show(element, transitionProperties) {\n if (transitionProperties !== undefined) {\n css.setTransition(element, 'opacity ' + transitionProperties);\n } else {\n css.setTransition(element, 'opacity');\n }\n\n css.setProperty(element, { opacity: 1 });\n },\n\n hide: function hide(element, transitionProperties) {\n if (transitionProperties !== undefined) {\n css.setTransition(element, 'opacity ' + transitionProperties);\n } else {\n css.setTransition(element, 'opacity');\n }\n\n css.setProperty(element, { opacity: 0 });\n },\n\n // measurement features\n // height of element without padding, margin and border\n height: function height(element) {\n var style = getComputedStyle(element),\n height = style.getPropertyCSSValue('height');\n\n return height.getFloatValue(height.primitiveType);\n },\n\n // height of element with padding but without margin and border\n innerHeight: function innerHeight(element) {\n return element.clientHeight;\n },\n\n // height of element with padding and border but margin optional\n outerHeight: function outerHeight(element, includeMargin) {\n if (includeMargin || false) {\n return element.offsetHeight;\n }\n\n var style = getComputedStyle(element),\n marginTop = style.getPropertyCSSValue('margin-top'),\n marginBottom = style.getPropertyCSSValue('margin-bottom'),\n margins = marginTop.getFloatValue(marginTop.primitiveType) + marginBottom.getFloatValue(marginBottom.primitiveType);\n\n return Math.ceil(element.offsetHeight + margins);\n },\n\n // width of element without padding, margin and border\n width: function width(element) {\n var style = getComputedStyle(element),\n height = style.getPropertyCSSValue('width');\n\n return height.getFloatValue(height.primitiveType);\n },\n\n // width of element with padding but without margin and border\n innerWidth: function innerWidth(element) {\n return element.clientWidth;\n },\n\n // width of element with padding and border but margin optional\n outerWidth: function outerWidth(element, includeMargin) {\n if (includeMargin || false) {\n return element.offsetWidth;\n }\n\n var style = getComputedStyle(element),\n marginLeft = style.getPropertyCSSValue('margin-left'),\n marginRight = style.getPropertyCSSValue('margin-right'),\n margins = marginLeft.getFloatValue(marginLeft.primitiveType) + marginRight.getFloatValue(marginRight.primitiveType);\n\n return Math.ceil(element.offsetWidth + margins);\n },\n\n top: function top(element) {\n return element.getBoundingClientRect().top + (document.documentElement && document.documentElement.scrollTop || document.body.scrollTop);\n },\n\n left: function left(element) {\n return element.getBoundingClientRect().left + (document.documentElement && document.documentElement.scrollLeft || document.body.scrollLeft);\n },\n\n aboveTheTop: function aboveTheTop(element) {\n return element.getBoundingClientRect().bottom <= 0;\n },\n\n belowTheFold: function belowTheFold(element) {\n return element.getBoundingClientRect().top > innerHeight;\n },\n\n leftOfScreen: function leftOfScreen(element) {\n return element.getBoundingClientRect().right <= 0;\n },\n\n rightOfScreen: function rightOfScreen(element) {\n return element.getBoundingClientRect().left > innerWidth;\n },\n\n inViewport: function inViewport(element) {\n var rect = element.getBoundingClientRect();\n\n return !(rect.bottom <= 0 || rect.top > innerHeight || rect.right <= 0 || rect.left > innerWidth);\n }\n };\n\n return css;\n})();\n\nmodule.exports = exports['default'];\n},{\"../laroux.helpers.js\":5}],15:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxHelpersJs = require('../laroux.helpers.js');\n\nvar _larouxHelpersJs2 = _interopRequireDefault(_larouxHelpersJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n var dom = {\n docprop: function docprop(propName) {\n return document.documentElement.classList.contains(propName);\n },\n\n select: function select(selector, parent) {\n return _larouxHelpersJs2['default'].toArray((parent || document).querySelectorAll(selector));\n },\n\n selectByClass: function selectByClass(selector, parent) {\n return _larouxHelpersJs2['default'].toArray((parent || document).getElementsByClassName(selector));\n },\n\n selectByTag: function selectByTag(selector, parent) {\n return _larouxHelpersJs2['default'].toArray((parent || document).getElementsByTagName(selector));\n },\n\n selectById: function selectById(selector, parent) {\n return (parent || document).getElementById(selector);\n },\n\n selectSingle: function selectSingle(selector, parent) {\n return (parent || document).querySelector(selector);\n },\n\n attr: function attr(element, attributes, value) {\n if (value === undefined && attributes.constructor !== Object) {\n return element.getAttribute(attributes);\n }\n\n var elements = _larouxHelpersJs2['default'].getAsArray(element);\n if (typeof attributes === 'string') {\n var oldAttributes = attributes;\n attributes = {};\n attributes[oldAttributes] = value;\n }\n\n for (var attributeName in attributes) {\n if (!attributes.hasOwnProperty(attributeName)) {\n continue;\n }\n\n for (var i = 0, _length = elements.length; i < _length; i++) {\n if (attributes[attributeName] === null) {\n element.removeAttribute(attributeName);\n } else {\n element.setAttribute(attributeName, attributes[attributeName]);\n }\n }\n }\n },\n\n data: function data(element, datanames, value) {\n if (value === undefined && datanames.constructor !== Object) {\n return element.getAttribute('data-' + datanames);\n }\n\n var elements = _larouxHelpersJs2['default'].getAsArray(element);\n if (typeof datanames === 'string') {\n var oldDatanames = datanames;\n datanames = {};\n datanames[oldDatanames] = value;\n }\n\n for (var dataName in datanames) {\n if (!datanames.hasOwnProperty(dataName)) {\n continue;\n }\n\n for (var i = 0, _length2 = elements.length; i < _length2; i++) {\n if (datanames[dataName] === null) {\n element.removeAttribute('data-' + dataName);\n } else {\n element.setAttribute('data-' + dataName, datanames[dataName]);\n }\n }\n }\n },\n\n eventHistory: [],\n setEvent: function setEvent(element, eventname, callback) {\n var elements = _larouxHelpersJs2['default'].getAsArray(element);\n\n for (var i = 0, _length3 = elements.length; i < _length3; i++) {\n dom.setEventSingle(elements[i], eventname, callback);\n }\n },\n\n setEventSingle: function setEventSingle(element, eventname, callback) {\n var callbackWrapper = function callbackWrapper(e) {\n if (callback(e, element) === false) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n event.returnValue = false;\n }\n }\n };\n\n dom.eventHistory.push({ element: element, eventname: eventname, callback: callback, callbackWrapper: callbackWrapper });\n element.addEventListener(eventname, callbackWrapper, false);\n },\n\n unsetEvent: function unsetEvent(element, eventname, callback) {\n var elements = _larouxHelpersJs2['default'].getAsArray(element);\n\n for (var i1 = 0, length1 = elements.length; i1 < length1; i1++) {\n for (var i2 = 0, length2 = dom.eventHistory.length; i2 < length2; i2++) {\n var item = dom.eventHistory[i2];\n\n if (item === undefined) {\n continue;\n }\n\n if (item.element !== elements[i1]) {\n continue;\n }\n\n if (eventname !== undefined && item.eventname !== eventname) {\n continue;\n }\n\n if (callback !== undefined && item.callback !== callback) {\n continue;\n }\n\n item.element.removeEventListener(item.eventname, item.callbackWrapper, false);\n delete dom.eventHistory[i2];\n }\n }\n },\n\n dispatchEvent: function dispatchEvent(element, eventname, data) {\n var customEvent = document.createEvent('Event');\n for (var item in data) {\n if (!data.hasOwnProperty(item)) {\n continue;\n }\n\n customEvent[item] = data[item];\n }\n\n customEvent.initEvent(eventname, true, true);\n element.dispatchEvent(customEvent);\n },\n\n create: function create(html) {\n var frag = document.createDocumentFragment(),\n temp = document.createElement('DIV');\n\n temp.insertAdjacentHTML('beforeend', html);\n while (temp.firstChild) {\n frag.appendChild(temp.firstChild);\n }\n\n // nulling out the reference, there is no obvious dispose method\n temp = null;\n\n return frag;\n },\n\n createElement: function createElement(element, attributes, children) {\n var elem = document.createElement(element);\n\n if (attributes !== undefined && attributes.constructor === Object) {\n for (var item in attributes) {\n if (!attributes.hasOwnProperty(item)) {\n continue;\n }\n\n elem.setAttribute(item, attributes[item]);\n }\n }\n\n if (children !== undefined) {\n if (children.constructor === Object) {\n for (var item2 in children) {\n if (!children.hasOwnProperty(item2)) {\n continue;\n }\n\n elem.setAttribute(item2, children[item2]);\n }\n } else if ( /* typeof children === 'string' && */children.length > 0) {\n dom.append(elem, children);\n }\n }\n\n return elem;\n },\n\n createOption: function createOption(element, key, value, isDefault) {\n /* old behaviour, does not support optgroups as parents.\n let count = element.options.length;\n element.options[count] = new Option(value, key);\n if (isDefault === true) {\n element.options.selectedIndex = count - 1;\n }\n */\n\n var option = document.createElement('OPTION');\n option.setAttribute('value', key);\n if (isDefault === true) {\n option.setAttribute('checked', 'checked');\n }\n\n dom.append(option, value);\n element.appendChild(option);\n },\n\n selectByValue: function selectByValue(element, value) {\n for (var i = 0, _length4 = element.options.length; i < _length4; i++) {\n if (element.options[i].getAttribute('value') == value) {\n element.selectedIndex = i;\n break;\n }\n }\n }, /*,\n // TODO: it's redundant for now\n loadImage: function () {\n let images = [];\n for (let i = 0, length = arguments.length; i < length; i++) {\n let image = document.createElement('IMG');\n image.setAttribute('src', arguments[i]);\n images.push(image);\n }\n return images;\n },\n loadAsyncScript: function (path, triggerName, async) {\n let elem = document.createElement('script');\n elem.type = 'text/javascript';\n elem.async = (async !== undefined) ? async : true;\n elem.src = path;\n let loaded = false;\n elem.onload = elem.onreadystatechange = function () {\n if ((elem.readyState && elem.readyState !== 'complete' && elem.readyState !== 'loaded') || loaded) {\n return false;\n }\n elem.onload = elem.onreadystatechange = null;\n loaded = true;\n if (triggerName) {\n if (typeof triggerName === 'function') {\n triggerName();\n } else {\n triggers.ontrigger(triggerName);\n }\n }\n };\n let head = document.getElementsByTagName('head')[0];\n head.appendChild(elem);\n },\n loadAsyncStyle: function (path, triggerName, async) {\n let elem = document.createElement('LINK');\n elem.type = 'text/css';\n elem.async = (async !== undefined) ? async : true;\n elem.href = path;\n elem.rel = 'stylesheet';\n let loaded = false;\n elem.onload = elem.onreadystatechange = function () {\n if ((elem.readyState && elem.readyState !== 'complete' && elem.readyState !== 'loaded') || loaded) {\n return false;\n }\n elem.onload = elem.onreadystatechange = null;\n loaded = true;\n if (triggerName) {\n if (typeof triggerName === 'function') {\n triggerName();\n } else {\n triggers.ontrigger(triggerName);\n }\n }\n };\n let head = document.getElementsByTagName('head')[0];\n head.appendChild(elem);\n },*/\n\n clear: function clear(element) {\n while (element.hasChildNodes()) {\n element.removeChild(element.firstChild);\n }\n },\n\n insert: function insert(element, position, content) {\n element.insertAdjacentHTML(position, content);\n },\n\n prepend: function prepend(element, content) {\n element.insertAdjacentHTML('afterbegin', content);\n },\n\n append: function append(element, content) {\n element.insertAdjacentHTML('beforeend', content);\n },\n\n replace: function replace(element, content) {\n dom.clear(element);\n element.insertAdjacentHTML('afterbegin', content);\n },\n\n replaceText: function replaceText(element, content) {\n // dom.clear(element);\n element.textContent = content;\n },\n\n remove: function remove(element) {\n element.remove();\n },\n\n cloneReturn: 0,\n cloneAppend: 1,\n cloneInsertAfter: 2,\n cloneInsertBefore: 3,\n\n clone: function clone(element, type, container, target) {\n var newElement = element.cloneNode(true);\n\n if (container === undefined) {\n container = element.parentNode;\n }\n if (target === undefined) {\n target = element;\n }\n\n if (type !== undefined && type != dom.cloneReturn) {\n if (type == dom.cloneAppend) {\n container.appendChild(newElement);\n } else if (type == dom.cloneInsertAfter) {\n container.insertBefore(newElement, target.nextSibling);\n } else {\n // type == dom.cloneInsertBefore\n container.insertBefore(newElement, target);\n }\n }\n\n return newElement;\n } /*,\n // TODO: it's redundant for now\n applyOperations: function (element, operations) {\n for (let operation in operations) {\n if (!operations.hasOwnProperty(operation)) {\n continue;\n }\n for (let binding in operations[operation]) {\n if (!operations[operation].hasOwnProperty(binding)) {\n continue;\n }\n let value = operations[operation][binding];\n switch (operation) {\n case 'setprop':\n if (binding.substring(0, 1) === '_') {\n element.setAttribute(binding.substring(1), value);\n continue;\n }\n if (binding === 'content') {\n dom.replace(element, value);\n continue;\n }\n break;\n case 'addprop':\n if (binding.substring(0, 1) === '_') {\n element.setAttribute(binding.substring(1), element.getAttribute(binding.substring(1)) + value);\n continue;\n }\n if (binding === 'content') {\n dom.append(element, value);\n continue;\n }\n break;\n case 'removeprop':\n if (value.substring(0, 1) === '_') {\n element.removeAttribute(value.substring(1));\n continue;\n }\n if (value === 'content') {\n dom.clear(element);\n continue;\n }\n break;\n case 'addclass':\n css.addClass(element, value);\n break;\n case 'removeclass':\n css.removeClass(element, value);\n break;\n case 'addstyle':\n css.setProperty(element, binding, value);\n break;\n case 'removestyle':\n css.setProperty(element, value, 'inherit !important');\n break;\n case 'repeat':\n break;\n default:\n console.log(operation);\n }\n }\n }\n }*/\n };\n\n // a fix for Internet Explorer\n if (typeof Element !== 'undefined') {\n if (Element.prototype.remove === undefined) {\n Element.prototype.remove = function () {\n if (this.parentElement !== null) {\n this.parentElement.removeChild(this);\n }\n };\n }\n }\n\n return dom;\n})();\n\nmodule.exports = exports['default'];\n},{\"../laroux.helpers.js\":5}],16:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxAjaxJs = require('../laroux.ajax.js');\n\nvar _larouxAjaxJs2 = _interopRequireDefault(_larouxAjaxJs);\n\nvar _larouxDomJs = require('./laroux.dom.js');\n\nvar _larouxDomJs2 = _interopRequireDefault(_larouxDomJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n var forms = {\n ajaxForm: function ajaxForm(formobj, callback, callbackBegin) {\n _larouxDomJs2['default'].setEvent(formobj, 'submit', function () {\n if (callbackBegin !== undefined) {\n callbackBegin();\n }\n\n _larouxAjaxJs2['default'].post(formobj.getAttribute('action'), forms.serializeFormData(formobj), callback);\n\n return false;\n });\n },\n\n isFormField: function isFormField(element) {\n if (element.tagName === 'SELECT') {\n return true;\n }\n\n if (element.tagName === 'INPUT') {\n var type = element.getAttribute('type').toUpperCase();\n\n if (type === 'FILE' || type === 'CHECKBOX' || type === 'RADIO' || type === 'TEXT' || type === 'PASSWORD' || type === 'HIDDEN') {\n return true;\n }\n\n return false;\n }\n\n if (element.tagName === 'TEXTAREA') {\n return true;\n }\n\n return false;\n },\n\n getFormFieldValue: function getFormFieldValue(element) {\n if (element.disabled === true) {\n return null;\n }\n\n if (element.tagName === 'SELECT') {\n return element.options[element.selectedIndex].value;\n }\n\n if (element.tagName === 'INPUT') {\n var type = element.getAttribute('type').toUpperCase();\n\n if (type === 'FILE') {\n return element.files[0];\n }\n\n if (type === 'CHECKBOX' || type === 'RADIO') {\n if (element.checked) {\n return element.value;\n }\n\n return null;\n }\n\n if (type === 'TEXT' || type === 'PASSWORD' || type === 'HIDDEN') {\n return element.value;\n }\n\n return null;\n }\n\n if (element.tagName === 'TEXTAREA') {\n return element.value;\n }\n\n return null;\n },\n\n setFormFieldValue: function setFormFieldValue(element, value) {\n if (element.disabled === true) {\n return;\n }\n\n if (element.tagName === 'SELECT') {\n for (var option in element.options) {\n if (!element.options.hasOwnProperty(option)) {\n continue;\n }\n\n if (element.options[option].value == value) {\n element.selectedIndex = option;\n return;\n }\n }\n\n return;\n }\n\n if (element.tagName === 'INPUT') {\n var type = element.getAttribute('type').toUpperCase();\n\n if (type === 'FILE') {\n element.files[0] = value;\n return;\n }\n\n if (type === 'CHECKBOX' || type === 'RADIO') {\n if (value === true || value == element.value) {\n element.checked = true;\n }\n\n return;\n }\n\n if (type === 'TEXT' || type === 'PASSWORD' || type === 'HIDDEN') {\n element.value = value;\n return;\n }\n\n return;\n }\n\n if (element.tagName === 'TEXTAREA') {\n element.value = value;\n return;\n }\n },\n\n toggleFormEditing: function toggleFormEditing(formobj, value) {\n var selection = formobj.querySelectorAll('*[name]');\n\n if (value === undefined) {\n if (formobj.getAttribute('data-last-enabled') === null) {\n formobj.setAttribute('data-last-enabled', 'enabled');\n value = false;\n } else {\n formobj.removeAttribute('data-last-enabled');\n value = true;\n }\n }\n\n for (var selected = 0, _length = selection.length; selected < _length; selected++) {\n if (!forms.isFormField(selection[selected])) {\n continue;\n }\n\n var lastDisabled = selection[selected].getAttribute('data-last-disabled');\n if (!value) {\n if (lastDisabled === null) {\n if (selection[selected].getAttribute('disabled') !== null) {\n selection[selected].setAttribute('data-last-disabled', 'disabled');\n }\n }\n\n selection[selected].setAttribute('disabled', 'disabled');\n continue;\n }\n\n if (lastDisabled !== null) {\n selection[selected].removeAttribute('data-last-disabled');\n } else {\n selection[selected].removeAttribute('disabled');\n }\n }\n },\n\n serializeFormData: function serializeFormData(formobj) {\n var formdata = new FormData();\n var selection = formobj.querySelectorAll('*[name]');\n\n for (var selected = 0, _length2 = selection.length; selected < _length2; selected++) {\n var value = forms.getFormFieldValue(selection[selected]);\n\n if (value !== null) {\n formdata.append(selection[selected].getAttribute('name'), value);\n }\n }\n\n return formdata;\n },\n\n serialize: function serialize(formobj) {\n var values = {};\n var selection = formobj.querySelectorAll('*[name]');\n\n for (var selected = 0, _length3 = selection.length; selected < _length3; selected++) {\n var value = forms.getFormFieldValue(selection[selected]);\n\n if (value !== null) {\n values[selection[selected].getAttribute('name')] = value;\n }\n }\n\n return values;\n },\n\n deserialize: function deserialize(formobj, data) {\n var selection = formobj.querySelectorAll('*[name]');\n\n for (var selected = 0, _length4 = selection.length; selected < _length4; selected++) {\n forms.setFormFieldValue(selection[selected], data[selection[selected].getAttribute('name')]);\n }\n }\n };\n\n return forms;\n})();\n\nmodule.exports = exports['default'];\n},{\"../laroux.ajax.js\":1,\"./laroux.dom.js\":15}],17:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxDomJs = require('./laroux.dom.js');\n\nvar _larouxDomJs2 = _interopRequireDefault(_larouxDomJs);\n\nvar _larouxFormsJs = require('./laroux.forms.js');\n\nvar _larouxFormsJs2 = _interopRequireDefault(_larouxFormsJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n var keys = {\n keyName: function keyName(keycode) {\n keycode = keycode.toLowerCase();\n\n switch (keycode) {\n case 'backspace':\n return 8;\n\n case 'tab':\n return 9;\n\n case 'enter':\n case 'return':\n return 13;\n\n case 'esc':\n case 'escape':\n return 27;\n\n case 'space':\n return 32;\n\n case 'pgup':\n return 33;\n\n case 'pgdn':\n return 34;\n\n case 'end':\n return 35;\n\n case 'home':\n return 36;\n\n case 'left':\n return 37;\n\n case 'up':\n return 38;\n\n case 'right':\n return 39;\n\n case 'down':\n return 40;\n\n case 'insert':\n return 45;\n\n case 'delete':\n return 46;\n\n case 'f1':\n return 112;\n\n case 'f2':\n return 113;\n\n case 'f3':\n return 114;\n\n case 'f4':\n return 115;\n\n case 'f5':\n return 116;\n\n case 'f6':\n return 117;\n\n case 'f7':\n return 118;\n\n case 'f8':\n return 119;\n\n case 'f9':\n return 120;\n\n case 'f10':\n return 121;\n\n case 'f11':\n return 122;\n\n case 'f12':\n return 123;\n\n case ',':\n return 188;\n\n case '.':\n return 190;\n }\n\n return String.fromCharCode(keycode);\n },\n\n // {target, key, shift, ctrl, alt, disableInputs, callback}\n assign: function assign(options) {\n var wrapper = function wrapper(ev) {\n if (!ev) {\n ev = event;\n }\n\n var element = ev.target || ev.srcElement;\n if (element.nodeType === 3 || element.nodeType === 11) {\n // element.nodeType === 1 ||\n element = element.parentNode;\n }\n\n if (options.disableInputs && _larouxFormsJs2['default'].isFormField(element)) {\n return;\n }\n\n if (options.shift && !ev.shiftKey) {\n return;\n }\n\n if (options.ctrl && !ev.ctrlKey) {\n return;\n }\n\n if (options.alt && !ev.altKey) {\n return;\n }\n\n var key = keys.keyName(options.key);\n if (key !== (ev.keyCode || ev.which)) {\n return;\n }\n\n options.callback(ev);\n\n return false;\n };\n\n _larouxDomJs2['default'].setEvent(options.target || document, 'keydown', wrapper);\n }\n };\n\n return keys;\n})();\n\nmodule.exports = exports['default'];\n},{\"./laroux.dom.js\":15,\"./laroux.forms.js\":16}],18:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxDomJs = require('./laroux.dom.js');\n\nvar _larouxDomJs2 = _interopRequireDefault(_larouxDomJs);\n\nvar _larouxHelpersJs = require('../laroux.helpers.js');\n\nvar _larouxHelpersJs2 = _interopRequireDefault(_larouxHelpersJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n var mvc = {\n apps: {},\n pauseUpdate: false,\n\n init: function init(element, model) {\n if (element.constructor === String) {\n element = _larouxDomJs2['default'].selectById(element);\n }\n\n // if (model.constructor !== types.Observable) {\n // model = new types.Observable(model);\n // }\n\n var appKey = element.getAttribute('id');\n\n model.on(function (event) {\n if (!mvc.pauseUpdate) {\n mvc.update(appKey); // , [event.key]\n }\n });\n\n mvc.apps[appKey] = {\n element: element,\n model: model // ,\n // modelKeys: null,\n // boundElements: null,\n // eventElements: null\n };\n\n mvc.rebind(appKey);\n },\n\n rebind: function rebind(appKey) {\n var app = mvc.apps[appKey];\n /*jslint nomen: true */\n app.modelKeys = _larouxHelpersJs2['default'].getKeysRecursive(app.model); // FIXME: works only for $l.types.Observable\n app.boundElements = {};\n app.eventElements = [];\n\n mvc.scanElements(app, app.element);\n mvc.update(appKey);\n\n var callback = function callback(ev, elem) {\n var binding = mvc.bindStringParser(elem.getAttribute('lr-event'));\n // mvc.pauseUpdate = true;\n for (var item in binding) {\n if (item === null || !binding.hasOwnProperty(item)) {\n continue;\n }\n\n if (binding[item].charAt(0) === '\\'') {\n app.model[item] = binding[item].substring(1, binding[item].length - 1);\n } else if (binding[item].substring(0, 5) === 'attr.') {\n app.model[item] = elem.getAttribute(binding[item].substring(5));\n } else if (binding[item].substring(0, 5) === 'prop.') {\n app.model[item] = elem[binding[item].substring(5)];\n }\n }\n // mvc.pauseUpdate = false;\n };\n\n for (var i = 0, _length = app.eventElements.length; i < _length; i++) {\n _larouxDomJs2['default'].setEvent(app.eventElements[i].element, app.eventElements[i].binding[null], callback);\n }\n },\n\n scanElements: function scanElements(app, element) {\n for (var i = 0, atts = element.attributes, m = atts.length; i < m; i++) {\n if (atts[i].name === 'lr-bind') {\n var binding1 = mvc.bindStringParser(atts[i].value);\n\n for (var item in binding1) {\n if (!binding1.hasOwnProperty(item)) {\n continue;\n }\n\n if (app.boundElements[binding1[item]] === undefined) {\n app.boundElements[binding1[item]] = [];\n }\n\n app.boundElements[binding1[item]].push({\n element: element,\n target: item\n });\n }\n } else if (atts[i].name === 'lr-event') {\n var binding2 = mvc.bindStringParser(atts[i].value);\n\n app.eventElements.push({\n element: element,\n binding: binding2\n });\n }\n }\n\n for (var j = 0, chldrn = element.childNodes, n = chldrn.length; j < n; j++) {\n if (chldrn[j].nodeType === 1) {\n mvc.scanElements(app, chldrn[j]);\n }\n }\n },\n\n update: function update(appKey, keys) {\n var app = mvc.apps[appKey];\n\n if (typeof keys === 'undefined') {\n keys = app.modelKeys;\n }\n\n for (var i = 0, length1 = keys.length; i < length1; i++) {\n if (!(keys[i] in app.boundElements)) {\n continue;\n }\n\n var boundElement = app.boundElements[keys[i]],\n value = _larouxHelpersJs2['default'].getElement(app.model, keys[i]);\n\n if (value instanceof Function) {\n value = value.call(app.model);\n }\n\n for (var j = 0, length2 = boundElement.length; j < length2; j++) {\n if (boundElement[j].target.substring(0, 6) === 'style.') {\n boundElement[j].element.style[boundElement[j].target.substring(6)] = value;\n } else if (boundElement[j].target.substring(0, 5) === 'attr.') {\n // FIXME removeAttribute on null value?\n boundElement[j].element.setAttribute(boundElement[j].target.substring(5), value);\n } else if (boundElement[j].target.substring(0, 5) === 'prop.') {\n // FIXME removeAttribute on null value?\n boundElement[j].element[boundElement[j].target.substring(5)] = value;\n }\n }\n }\n },\n\n bindStringParser: function bindStringParser(text) {\n var lastBuffer = null,\n buffer = '',\n state = 0,\n result = {};\n\n for (var i = 0, _length2 = text.length; i < _length2; i++) {\n var curr = text.charAt(i);\n\n if (state === 0) {\n if (curr === ':') {\n state = 1;\n lastBuffer = buffer.trim();\n buffer = '';\n continue;\n }\n }\n\n if (curr === ',') {\n state = 0;\n result[lastBuffer] = buffer.trim();\n buffer = '';\n continue;\n }\n\n buffer += curr;\n }\n\n if (buffer.length > 0) {\n result[lastBuffer] = buffer.trim();\n }\n\n return result;\n }\n };\n\n return mvc;\n})();\n\nmodule.exports = exports['default'];\n},{\"../laroux.helpers.js\":5,\"./laroux.dom.js\":15}],19:[function(require,module,exports){\n(function (global){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxJs = require('../laroux.js');\n\nvar _larouxJs2 = _interopRequireDefault(_larouxJs);\n\nvar _larouxHelpersJs = require('../laroux.helpers.js');\n\nvar _larouxHelpersJs2 = _interopRequireDefault(_larouxHelpersJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n // routes - partially taken from 'routie' project\n // can be found at: https://github.com/jgallen23/routie\n var routes = {\n map: {},\n attached: false,\n current: null,\n\n regexConverter: function regexConverter(path, sensitive, strict) {\n var keys = [],\n regexString = path.concat(strict ? '' : '/?').replace(/\\/\\(/g, '(?:/').replace(/\\+/g, '__plus__').replace(/(\\/)?(\\.)?:(\\w+)(?:(\\(.*?\\)))?(\\?)?/g, function (_, slash, format, key, capture, optional) {\n keys.push({ name: key, optional: !!optional });\n slash = slash || '';\n\n return '' + (optional ? '' : slash) + '(?:' + (optional ? slash : '') + (format || '') + (capture || (format && '([^/.]+?)' || '([^/]+?)')) + ')' + (optional || '');\n }).replace(/([\\/.])/g, '\\\\$1').replace(/__plus__/g, '(.+)').replace(/\\*/g, '(.*)');\n\n return {\n regex: new RegExp('^' + regexString + '$', sensitive ? '' : 'i'),\n keys: keys\n };\n },\n\n add: function add(path, callback) {\n routes.addNamed(null, path, callback);\n },\n\n addNamed: function addNamed(name, path, callback) {\n if (!(path in routes.map)) {\n var converted = routes.regexConverter(path);\n\n routes.map[path] = {\n name: name,\n callback: callback,\n params: {},\n keys: converted.keys,\n regex: converted.regex\n };\n } else {\n routes.map[path].callback = callback;\n }\n },\n\n get: function get(path) {\n for (var item in routes.map) {\n if (!routes.map.hasOwnProperty(item)) {\n continue;\n }\n\n var route = routes.map[item],\n match = route.regex.exec(path);\n\n if (!match) {\n continue;\n }\n\n var params = {};\n for (var i = 1, _length = match.length; i < _length; i++) {\n var key = route.keys[i - 1];\n\n if (key !== undefined) {\n params[key.name] = typeof match[i] == 'string' ? decodeURIComponent(match[i]) : match[i];\n }\n }\n\n return {\n route: item,\n resolved: path,\n params: params,\n callback: route.callback\n };\n }\n\n return null;\n },\n\n getNamed: function getNamed(name, params) {\n for (var item in routes.map) {\n if (!routes.map.hasOwnProperty(item)) {\n continue;\n }\n\n var route = routes.map[item],\n path = item;\n\n for (var i = 0, _length2 = route.keys.length; i < _length2; i++) {\n var key = route.keys[i];\n\n path = path.replace(':' + key.name, params[key.name] || '');\n }\n\n if (route.name == name) {\n return {\n route: item,\n resolved: path,\n params: params,\n callback: route.callback\n };\n }\n }\n\n return null;\n },\n\n link: function link(name, params) {\n var route = routes.getNamed(name, params);\n\n if (route === null) {\n return null;\n }\n\n return route.resolved;\n },\n\n exec: function exec(route) {\n var previous = routes.current,\n args = _larouxHelpersJs2['default'].map(route.params, function (value) {\n return value;\n });\n\n routes.current = route;\n args.push({\n previous: previous,\n current: routes.current\n });\n\n return route.callback.apply(global, args);\n },\n\n go: function go(path, silent) {\n var attached = routes.attached;\n\n if (silent && attached) {\n routes.detach();\n }\n\n setTimeout(function () {\n global.location.hash = path;\n\n if (silent && attached) {\n setTimeout(function () {\n routes.attach();\n }, 1);\n }\n }, 1);\n },\n\n goNamed: function goNamed(name, params, silent) {\n var path = routes.link(name, params);\n\n if (path === null) {\n return null;\n }\n\n routes.go(path, silent);\n },\n\n reload: function reload() {\n var hash = location.hash.substring(1),\n route = routes.get(hash);\n\n if (route === null) {\n return;\n }\n\n routes.exec(route);\n },\n\n attach: function attach() {\n global.addEventListener('hashchange', routes.reload, false);\n routes.attached = true;\n },\n\n detach: function detach() {\n global.removeEventListener('hashchange', routes.reload);\n routes.attached = false;\n }\n };\n\n _larouxJs2['default'].ready(routes.attach);\n\n return routes;\n})();\n\nmodule.exports = exports['default'];\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../laroux.helpers.js\":5,\"../laroux.js\":6}],20:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxJs = require('../laroux.js');\n\nvar _larouxJs2 = _interopRequireDefault(_larouxJs);\n\nvar _larouxDomJs = require('./laroux.dom.js');\n\nvar _larouxDomJs2 = _interopRequireDefault(_larouxDomJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n // touch - partially taken from 'tocca.js' project\n // can be found at: https://github.com/GianlucaGuarini/Tocca.js\n var touch = {\n touchStarted: null,\n swipeTreshold: 80,\n precision: 30,\n tapCount: 0,\n tapTreshold: 200,\n longTapTreshold: 800,\n tapTimer: null,\n pos: null,\n cached: null,\n\n events: {\n start: ['touchstart', 'pointerdown', 'MSPointerDown', 'mousedown'],\n end: ['touchend', 'pointerup', 'MSPointerUp', 'mouseup'],\n move: ['touchmove', 'pointermove', 'MSPointerMove', 'mousemove']\n },\n\n locatePointer: function locatePointer(event) {\n if (event.targetTouches) {\n event = event.targetTouches[0];\n }\n\n touch.pos = [event.pageX, event.pageY];\n },\n\n init: function init() {\n var events = [0, navigator.msPointerEnabled ? 2 : 1, 3];\n\n for (var i = 0, _length = events.length; i < _length; i++) {\n _larouxDomJs2['default'].setEventSingle(document, touch.events.start[events[i]], touch.onstart);\n _larouxDomJs2['default'].setEventSingle(document, touch.events.end[events[i]], touch.onend);\n _larouxDomJs2['default'].setEventSingle(document, touch.events.move[events[i]], touch.locatePointer);\n }\n },\n\n onstart: function onstart(event) {\n touch.locatePointer(event);\n touch.cached = [touch.pos[0], touch.pos[1]];\n touch.touchStarted = Date.now();\n /*jslint plusplus: true */\n touch.tapCount++;\n\n var callback = function callback() {\n if (touch.cached[0] >= touch.pos[0] - touch.precision && touch.cached[0] <= touch.pos[0] + touch.precision && touch.cached[1] >= touch.pos[1] - touch.precision && touch.cached[1] <= touch.pos[1] + touch.precision) {\n if (touch.touchStarted === null) {\n _larouxDomJs2['default'].dispatchEvent(event.target, touch.tapCount === 2 ? 'dbltap' : 'tap', {\n innerEvent: event,\n x: touch.pos[0],\n y: touch.pos[1]\n });\n\n touch.tapCount = 0;\n return;\n }\n\n if (Date.now() - touch.touchStarted > touch.longTapTreshold) {\n _larouxDomJs2['default'].dispatchEvent(event.target, 'longtap', {\n innerEvent: event,\n x: touch.pos[0],\n y: touch.pos[1]\n });\n\n touch.touchStarted = null;\n touch.tapCount = 0;\n return;\n }\n\n touch.tapTimer = setTimeout(callback, touch.tapTreshold);\n return;\n }\n\n touch.tapCount = 0;\n };\n\n clearTimeout(touch.tapTimer);\n touch.tapTimer = setTimeout(callback, touch.tapTreshold);\n },\n\n onend: function onend(event) {\n var delta = [touch.pos[0] - touch.cached[0], touch.pos[1] - touch.cached[1]],\n data = {\n innerEvent: event,\n x: touch.pos[0],\n y: touch.pos[1],\n distance: {\n x: Math.abs(delta[0]),\n y: Math.abs(delta[1])\n }\n };\n\n touch.touchStarted = null;\n\n if (delta[0] <= -touch.swipeTreshold) {\n _larouxDomJs2['default'].dispatchEvent(event.target, 'swiperight', data);\n }\n\n if (delta[0] >= touch.swipeTreshold) {\n _larouxDomJs2['default'].dispatchEvent(event.target, 'swipeleft', data);\n }\n\n if (delta[1] <= -touch.swipeTreshold) {\n _larouxDomJs2['default'].dispatchEvent(event.target, 'swipedown', data);\n }\n\n if (delta[1] >= touch.swipeTreshold) {\n _larouxDomJs2['default'].dispatchEvent(event.target, 'swipeup', data);\n }\n }\n };\n\n _larouxJs2['default'].ready(touch.init);\n\n return touch;\n})();\n\nmodule.exports = exports['default'];\n},{\"../laroux.js\":6,\"./laroux.dom.js\":15}],21:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _larouxJs = require('../laroux.js');\n\nvar _larouxJs2 = _interopRequireDefault(_larouxJs);\n\nvar _larouxAnimJs = require('./laroux.anim.js');\n\nvar _larouxAnimJs2 = _interopRequireDefault(_larouxAnimJs);\n\nvar _larouxCssJs = require('./laroux.css.js');\n\nvar _larouxCssJs2 = _interopRequireDefault(_larouxCssJs);\n\nvar _larouxDomJs = require('./laroux.dom.js');\n\nvar _larouxDomJs2 = _interopRequireDefault(_larouxDomJs);\n\nvar _larouxFormsJs = require('./laroux.forms.js');\n\nvar _larouxFormsJs2 = _interopRequireDefault(_larouxFormsJs);\n\nvar _larouxKeysJs = require('./laroux.keys.js');\n\nvar _larouxKeysJs2 = _interopRequireDefault(_larouxKeysJs);\n\nvar _larouxMvcJs = require('./laroux.mvc.js');\n\nvar _larouxMvcJs2 = _interopRequireDefault(_larouxMvcJs);\n\nvar _larouxRoutesJs = require('./laroux.routes.js');\n\nvar _larouxRoutesJs2 = _interopRequireDefault(_larouxRoutesJs);\n\nvar _larouxTouchJs = require('./laroux.touch.js');\n\nvar _larouxTouchJs2 = _interopRequireDefault(_larouxTouchJs);\n\nexports['default'] = (function () {\n 'use strict';\n\n _larouxJs2['default'].extend({\n anim: _larouxAnimJs2['default'],\n css: _larouxCssJs2['default'],\n dom: _larouxDomJs2['default'],\n forms: _larouxFormsJs2['default'],\n keys: _larouxKeysJs2['default'],\n mvc: _larouxMvcJs2['default'],\n routes: _larouxRoutesJs2['default'],\n touch: _larouxTouchJs2['default'],\n\n cached: {\n single: {},\n array: {},\n id: {}\n },\n\n c: function c(selector) {\n if (selector instanceof Array) {\n return _larouxJs2['default'].cached.array[selector] || (_larouxJs2['default'].cached.array[selector] = helpers.toArray(document.querySelectorAll(selector)));\n }\n\n return _larouxJs2['default'].cached.single[selector] || (_larouxJs2['default'].cached.single[selector] = document.querySelector(selector));\n },\n\n id: function id(selector, parent) {\n return (parent || document).getElementById(selector);\n },\n\n idc: function idc(selector) {\n return _larouxJs2['default'].cached.id[selector] || (_larouxJs2['default'].cached.id[selector] = document.getElementById(selector));\n }\n });\n\n if (typeof document !== 'undefined') {\n document.addEventListener('DOMContentLoaded', _larouxJs2['default'].setReady);\n }\n\n return _larouxJs2['default'];\n})();\n\nmodule.exports = exports['default'];\n},{\"../laroux.js\":6,\"./laroux.anim.js\":13,\"./laroux.css.js\":14,\"./laroux.dom.js\":15,\"./laroux.forms.js\":16,\"./laroux.keys.js\":17,\"./laroux.mvc.js\":18,\"./laroux.routes.js\":19,\"./laroux.touch.js\":20}]},{},[21]);\n"],"sourceRoot":"/source/"}