if (!String.prototype.includes) { String.prototype.includes = function () { 'use strict'; return String.prototype.indexOf.apply(this, arguments) !== -1; }; } //extend FileReader if (!FileReader.prototype.readAsBinaryString) { FileReader.prototype.readAsBinaryString = function (fileData) { var binary = ""; var pt = this; var reader = new FileReader(); reader.onload = function (e) { var bytes = new Uint8Array(reader.result); var length = bytes.byteLength; for (var i = 0; i < length; i++) { binary += String.fromCharCode(bytes[i]); } //pt.result - readonly so assign binary pt.content = binary; $(pt).trigger('onload'); } reader.readAsArrayBuffer(file); } } //localStorage persistence var SHIFT_STORAGE_KEY = "dienstplan_chrosey"; var RULE_STORAGE_KEY = "regeln_chrosey"; var shiftStorage = { fetch: function () { 'use strict'; var parsed = JSON.parse(localStorage.getItem(SHIFT_STORAGE_KEY) || '[]'), shifts = []; parsed.forEach(function (el, index) { var shift = Shift.thaw(el); shift.id = index; shifts.push(shift); }); shiftStorage.uid = shifts.length; return shifts; }, save : function (shifts) { 'use strict'; var json = JSON.stringify(shifts) localStorage.setItem(SHIFT_STORAGE_KEY, json); }, count: function () { return JSON.parse(localStorage.getItem(SHIFT_STORAGE_KEY) || '[]').length; } }; var ruleStorage = { fetch: function () { 'use strict'; var parsed = JSON.parse(localStorage.getItem(RULE_STORAGE_KEY)) | []; var rules = parsed.length > 0 ? parsed.map((e, i) => { var r = Rule.thaw(e); r.id = i; return r; }) : Rule.defaults(); ruleStorage.uid = rules.length; return rules; }, save : function (rules) { 'use strict'; var json = JSON.stringify(rules); localStorage.setItem(RULE_STORAGE_KEY, json); } }; Vue.component('ask-format-modal', { template: `