{"version":3,"sources":["../../tmp/js/slice-core.js"],"names":["s4","Math","floor","random","toString","substring","Slice","uniqueId","ids","pref","id","self","ucfirst","str","charAt","toUpperCase","slice","redraw","element","disp","style","display","offsetHeight","some","arr","predicate","len","length","i","toObject","obj","arrayEach","func","objectEach","prop","hasOwnProperty","objectSome","accessibleProperty","hasProperty","getObjectValue","getObjectValues","Array","isArray","res","value","quickApply","method","args","noop","unitRegExp","RegExp","SliceUnit","toUnitType","unitType","type","result","match","number","Number","unit","scale","toPx","baseValue","pxVal","revPx","resValue","Unit","SliceState","states","current","subStates","state","add","name","subs","Tags","fromValue","concat","is","not","enter","times","ceil","leave","exit","size","reset","State","SliceTags","fromString","tags","list","split","tag","trim","push","strict","contains","builtTags","getAll","has","checkTags","getList","hasAll","allIn","flatPromises","depth","promises","promise","then","SlicePromise","resolve","callFns","fns","types","runTypes","fn","createFns","toAdd","addedList","fnData","addFns","noAdd","run","runResult","reject","plain","rejected","resolved","resolvePromise","rejectPromise","call","always","completed","finaly","resPromise","done","fail","catch","doneFn","failFn","rejPromise","rej","doneFns","failFns","all","pendingLen","resArgs","retPromise","any","allSettled","status","reason","race","pending","Promise","SliceDeferred","Deferred","runPostponed","postponed","item","SlicePostponed","runPostponedAndRemove","active","remove","runNext","runImmidiate","maxActive","refreshData","after","items","refresh","runAfter","variable","linked","apply","setMaxActive","checkFinish","forward","immidiate","action","addRange","splice","max","min","removed","position","indexOf","Postponed","SliceWorkflow","workers","caching","quick","cache","quickCache","createWorker","keys","priority","runWorker","worker","buildWorker","built","handleResult","flow","asObject","expected","runFlow","data","execute","getFlowSettings","arrKeys","filter","key","bind","getFlow","keysLen","getCachedFlow","cacheKey","join","runAll","runDirect","Workflow","SliceWorkflowFactory","resetRequirements","runWorkers","runnableType","quickRunList","quickRunToType","addWorker","addRunnable","setRunnableType","resetRunnableType","setQuickRun","removeQuickRun","addRequirement","removeRequirement","parseRequirements","requirements","rawReq","requirement","presetRequirements","presetRequirementsCount","req","createRequirements","enabled","workerType","exp","checkRequirements","check","filterWorkers","sort","item1","item2","createManager","manager","SliceWorkflowManager","addRunflow","WorkflowFactory","workflow","runflows","setWorkflow","runflow","removeRunflow","work","do","doAll","WorkflowManager","SliceWorkflowPlugin","factory","invalidated","setFactory","hireManager","invalidate","part","Object","getManagerData","update","WorkflowPlugin","sliceEaseDefaults","actionArgs","ease","easeArgs","range","easeOut","t","x","easeInOut","easeIn","newX","pow","easeList","linear","progress","SliceEase","toNumber","isNaN","inFN","outFn","inOutFn","arguments","upCamel","create","manual","options","getDefaults","setEase","setRange","setAction","defaults","easing","start","end","diff","abs","mult","force","delta","sin","acos","a","b","PI","Ease","SliceCheckpointData","checkpointType","baseData","SliceCheckpoint","getMatchData","getRegistered","createMatchData","CheckpointData","checkpointDefaults","checkpointTypes","register","checkpoint","prototype","names","regName","isRegistered","CheckpointType","Checkpoint","setup","hasTags","isCrossedBy","isBefore","progressCheckpointDefaults","SliceProgressCheckpoint","sliceDistanceCheckpointDefaults","distance","distanceLimit","SliceDistanceCheckpoint","limit","sliceTimePassCheckpointDefaults","timeLimit","timePass","SliceTimePassCheckpoint","SliceDelay","toDuration","TimePassCheckpoint","actionDefaults","count","executed","repeatable","isThisAction","isAction","SliceAction","iteration","setOptions","builtOptions","repeat","Action","triggerDefaults","actions","ready","repeatManualy","repeatReady","startManualy","sliceTriggerStates","canceled","clean","failed","init","preparation","started","triggered","updateTags","SliceTriggerTypes","SliceTrigger","trigger","TriggerType","quickValues","preset","maxIterations","Infinity","getDefaultQuickValues","fromScratch","cleanup","updateOptions","prepareReset","prepareRepeat","adjustFlow","addAction","actProp","actPropLen","actionType","setQuickValue","adjustSettings","settings","prepareStart","values","checkpoints","total","totalReset","stop","cancel","canStart","restart","canRepeat","finish","silent","isReady","prepareReady","updateCheckpoints","builtAction","builtType","removeAction","bindAction","getAction","removeQuickValue","get","quickValue","quickName","addCheckpoint","getCheckData","removeCheckpoint","builtKeys","addTags","getCheckpoints","checkData","checkCheckpoint","Trigger","progressDefaults","easeArguments","progressQuickValuesDefaults","progressBuildSettings","SliceProgress","quickValuesDefaults","easings","setProgress","removeEase","easeName","updateProgress","checkpointsASC","Progress","delayDefaults","delay","fps","repeatDelay","delayQuickValuesDefaults","delayLeft","delayTime","tickPass","delayTick","removeTimeout","now","Date","passed","tickTime","passedTime","wait","addTimeout","play","startPlay","delayHoldTick","holdTime","tickHoldTime","continueDelay","delayBuildSettings","fromTime","time","isDate","modifyDuration","duration","substract","getTime","moment","isDuration","asMilliseconds","isMoment","valueOf","timeout","clearTimeout","timeFunc","setTimeout","fpsTime","extendDelay","reduceDelay","startTime","iterationTime","delayProgress","playTime","preparePlay","pause","pauseTime","continue","delayVal","Delay","distanceDefaults","repeatDistance","repeatSpeed","speed","distanceQuickValuesDefaults","distanceLeft","distancePass","playLeft","distanceTime","distanceBuildSettings","distanceTick","tickDistance","SliceDistance","extendDistance","reduceDuration","setPassDistance","Distance","timerDefaults","repeatDuration","timerQuickValuesDefaults","timerBuildSettings","timerTick","SliceTimer","extendDuration","Timer","window"],"mappings":"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","sourcesContent":["/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n/**\r\n * Create id part.\r\n *\r\n * @returns {string} Id part.\r\n */\r\nconst s4 = () => Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1)\r\n\r\n/**\r\n * Slice.\r\n */\r\nclass Slice {\r\n /**\r\n * Create unique id.\r\n *\r\n * @param {object} ids - Ids object.\r\n * @param {string} pref - Id prefix.\r\n * @returns {string} Unique id.\r\n */\r\n static uniqueId (ids, pref) {\r\n let id = `${s4()}${s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`\r\n if (pref) {\r\n id = pref + id\r\n }\r\n if (ids && ids[id]) {\r\n id = self.uniqueId(ids)\r\n }\r\n return id\r\n }\r\n\r\n /**\r\n * Make first letter uppercase.\r\n *\r\n * @param {string} str - Source string.\r\n * @returns {string} String with first letter uppercase.\r\n */\r\n static ucfirst (str) {\r\n return str.charAt(0).toUpperCase() + str.slice(1)\r\n }\r\n\r\n /**\r\n * Force browser to redraw element.\r\n *\r\n * @param {HTMLElement} element - Element to redraw.\r\n */\r\n static redraw (element) {\r\n if (element) {\r\n const disp = element.style.display\r\n element.style.display = 'none'\r\n // eslint-disable-next-line\r\n element.offsetHeight\r\n element.style.display = disp\r\n }\r\n }\r\n\r\n /**\r\n * Test whether at least one element in the array passes the test implemented by the provided function.\r\n *\r\n * @param {Array} arr - Array.\r\n * @param {Function} predicate - Test function.\r\n * @returns {boolean} Pass the test or not.\r\n */\r\n static some (arr, predicate) {\r\n const len = arr.length\r\n let i = 0\r\n for (; i < len; i++) {\r\n if (predicate(arr[i], i)) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Convert string array to object.\r\n *\r\n * @param {Array} arr - Array.\r\n * @returns {boolean} Pass the test or not.\r\n */\r\n static toObject (arr) {\r\n const obj = {}\r\n let i = 0\r\n const len = arr.length\r\n for (; i < len; i++) {\r\n obj[arr[i]] = true\r\n }\r\n return obj\r\n }\r\n\r\n /**\r\n * Go throught each element in array in a fastest way.\r\n * Array shouldn't be modified in the proccess.\r\n *\r\n * @param {Array} arr - Array.\r\n * @param {Function} func - Function to run for each element.\r\n * @returns {boolean} Pass the test or not.\r\n */\r\n static arrayEach (arr, func) {\r\n let i = 0\r\n const len = arr.length\r\n for (; i < len; i++) {\r\n func(arr[i], i)\r\n }\r\n return arr\r\n }\r\n\r\n /**\r\n * Go throught each element in object.\r\n *\r\n * @param {object} obj - Array.\r\n * @param {Function} func - Function to run for each element.\r\n * @returns {boolean} Pass the test or not.\r\n */\r\n static objectEach (obj, func) {\r\n for (const prop in obj) {\r\n if (obj.hasOwnProperty(prop)) {\r\n func(obj[prop], prop)\r\n }\r\n }\r\n return obj\r\n }\r\n\r\n /**\r\n * Test whether at least one element in the object passes the test implemented by the provided function.\r\n *\r\n * @param {object} obj - Object.\r\n * @param {Function} predicate - Test function.\r\n * @returns {boolean} Pass the test or not.\r\n */\r\n static objectSome (obj, predicate) {\r\n for (const prop in obj) {\r\n if (obj.hasOwnProperty(prop) && predicate(obj[prop], prop)) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Check if object has accesible property.\r\n *\r\n * @param {object} obj - Object to check.\r\n * @param {string} prop - Property name.\r\n * @returns {boolean} Whether object has property or not.\r\n */\r\n static accessibleProperty (obj, prop) {\r\n return obj && typeof obj === 'object' && (obj.hasOwnProperty(prop) || typeof obj[prop] === 'function')\r\n }\r\n\r\n /**\r\n * Check if object has own property.\r\n *\r\n * @param {object} obj - Object to check.\r\n * @param {string} prop - Property name.\r\n * @returns {boolean} Whether object has property or not.\r\n */\r\n static hasProperty (obj, prop) {\r\n return obj && typeof obj === 'object' && obj.hasOwnProperty(prop) && typeof obj[prop] !== 'undefined'\r\n }\r\n\r\n /**\r\n * Get object value.\r\n *\r\n * @param {object} obj - Object to check.\r\n * @param {string} prop - Property name.\r\n * @returns {void} Object value.\r\n */\r\n static getObjectValue (obj, prop) {\r\n if (obj && typeof obj === 'object' && obj.hasOwnProperty(prop)) {\r\n return typeof obj[prop] === 'function'\r\n ? obj[prop]()\r\n : obj[prop]\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * Get object values.\r\n *\r\n * @param {object} obj - Object to check.\r\n * @param {Array} arr - Properties array.\r\n * @returns {object} Object values.\r\n */\r\n static getObjectValues (obj, arr) {\r\n if (!Array.isArray(arr)) {\r\n return obj\r\n }\r\n const res = {}\r\n Slice.arrayEach(arr, value => {\r\n if (obj.hasOwnProperty(value)) {\r\n res[value] = obj[value]\r\n }\r\n })\r\n return res\r\n }\r\n\r\n /**\r\n * Quick apply.\r\n *\r\n * @param {object} obj - Object to check.\r\n * @param {string} method - Object method name.\r\n * @param {Array} args - Arguments.\r\n * @returns {boolean} False if not found method result otherwise.\r\n */\r\n static quickApply (obj, method, args) {\r\n if (Slice.accessibleProperty(obj, method)) {\r\n return obj[method](...args)\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Return what it get.\r\n *\r\n * @param {Array} args - Arguments.\r\n * @returns {Array} Passed arguments.\r\n */\r\n static noop (...args) {\r\n return args\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * RegExp to parse px, % units.\r\n */\r\nconst unitRegExp = new RegExp('^((?:[+]|[-])?[0-9]+(?:[.][0-9]+)?)(.*)$')\r\n\r\n/**\r\n * Slice state.\r\n */\r\nclass SliceUnit {\r\n /**\r\n * Parse value to unit type.\r\n *\r\n * @param {string|number} value - String value.\r\n * @returns {object} Object with value and type.\r\n */\r\n static toUnitType (value) {\r\n const unitType = {\r\n type: 'px',\r\n value: 0\r\n }\r\n if (typeof value === 'string') {\r\n const result = value.match(unitRegExp)\r\n const number = Math.floor(result[1]\r\n ? Number(result[1])\r\n : 0)\r\n const unit = result[2]\r\n switch (unit) {\r\n case '%':\r\n unitType.value = number\r\n unitType.type = unit\r\n unitType.scale = number / 100\r\n break\r\n case 'px':\r\n case '':\r\n unitType.value = number\r\n break\r\n }\r\n } else {\r\n unitType.value = value\r\n }\r\n return unitType\r\n }\r\n\r\n /**\r\n * From value to pixels.\r\n *\r\n * @param {string|number} value - Value to transform to pixels.\r\n * @param {string|number} baseValue - Value to take percent from.\r\n * @returns {number} Pixel value.\r\n */\r\n static toPx (value, baseValue) {\r\n let pxVal = 0\r\n if (typeof value === 'string') {\r\n const result = value.match(unitRegExp)\r\n const number = Math.floor(result[1]\r\n ? Number(result[1])\r\n : 0)\r\n const unit = result[2]\r\n switch (unit) {\r\n case '%':\r\n pxVal = number * baseValue / 100\r\n break\r\n case 'px':\r\n case '':\r\n pxVal = number\r\n break\r\n }\r\n } else {\r\n pxVal = value\r\n }\r\n return pxVal\r\n }\r\n\r\n /**\r\n * Calculate base value in pixels.\r\n *\r\n * @param {string|number} value - Result value.\r\n * @param {string|number} resValue - Value to reverce the percentage.\r\n * @returns {number} Base value.\r\n */\r\n static revPx (value, resValue) {\r\n let pxVal = 0\r\n if (typeof value === 'string') {\r\n const result = value.match(unitRegExp)\r\n const number = Math.floor(result[1]\r\n ? Number(result[1])\r\n : 0)\r\n const unit = result[2]\r\n switch (unit) {\r\n case '%':\r\n pxVal = number * resValue / (100 - number)\r\n break\r\n case 'px':\r\n case '':\r\n pxVal = number\r\n break\r\n }\r\n } else {\r\n pxVal = value\r\n }\r\n return pxVal\r\n }\r\n}\r\n\r\nSlice.Unit = SliceUnit\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Slice state.\r\n */\r\nclass SliceState {\r\n /**\r\n * Slice state constructor.\r\n *\r\n * @param {object} states - Predefined states.\r\n */\r\n constructor (states) {\r\n this.states = {}\r\n this.current = {}\r\n if (states) {\r\n Slice.objectEach(states, (subStates, state) => {\r\n this.add(state, subStates)\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Add state.\r\n *\r\n * @param {string} name - State name.\r\n * @param {Array} subStates - The state sub states.\r\n * @returns {SliceState} Current instance.\r\n */\r\n add (name, subStates) {\r\n const subs = Slice.Tags.fromValue(subStates)\r\n if (this.states[name]) {\r\n this.states[name] = this.states[name].concat(subs)\r\n } else {\r\n this.states[name] = subs\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Checks whether the slider is in a specific state or not.\r\n *\r\n * @param {string} name - State name to check.\r\n * @returns {boolean} True when in state, false otherwise.\r\n */\r\n is (name) {\r\n return this.current[name] && this.current[name] > 0\r\n }\r\n\r\n /**\r\n * Checks whether the slider is not at a specific state.\r\n *\r\n * @param {string} name - State name to check.\r\n * @returns {boolean} True when not in state, false otherwise.\r\n */\r\n not (name) {\r\n return !this.is(name)\r\n }\r\n\r\n /**\r\n * Enter a state.\r\n *\r\n * @param {string} name - State name.\r\n * @param {number} times - How meny times enter state.\r\n * @returns {SliceState} Current instance.\r\n */\r\n enter (name, times) {\r\n const number = times && times > 0\r\n ? Math.ceil(times)\r\n : 1\r\n Slice.arrayEach([name].concat(this.states[name] || []), state => {\r\n if (typeof this.current[state] === 'undefined') {\r\n this.current[state] = 0\r\n }\r\n this.current[state] += number\r\n })\r\n return this\r\n }\r\n\r\n /**\r\n * Leaves state.\r\n *\r\n * @param {string} name - State name.\r\n * @returns {SliceState} Current instance.\r\n */\r\n leave (name) {\r\n if (this.is(name)) {\r\n Slice.arrayEach([name].concat(this.states[name] || []), state => {\r\n this.current[state]--\r\n })\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Leaves state.\r\n *\r\n * @param {string} name - The state name.\r\n * @returns {SliceState} Current instance.\r\n */\r\n exit (name) {\r\n if (this.is(name)) {\r\n const size = this.current[name]\r\n Slice.arrayEach([name].concat(this.states[name] || []), state => {\r\n this.current[state] -= size\r\n if (this.current[state] < 0) {\r\n this.current[state] = 0\r\n }\r\n })\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Reset state.\r\n *\r\n * @returns {SliceState} Current instance.\r\n */\r\n reset () {\r\n this.current = {}\r\n return this\r\n }\r\n}\r\n\r\nSlice.State = SliceState\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Slice tags.\r\n */\r\nclass SliceTags {\r\n /**\r\n * Parse tags string to array.\r\n *\r\n * @param {string} str - Tags string.\r\n * @returns {Array} Tags.\r\n */\r\n static fromString (str) {\r\n const tags = []\r\n const list = str.split(',')\r\n let i = 0\r\n let tag\r\n for (; i < list.length; i++) {\r\n tag = list[i].trim()\r\n if (tag) {\r\n tags.push(tag)\r\n }\r\n }\r\n return tags\r\n }\r\n\r\n /**\r\n * Create tags array.\r\n *\r\n * @param {Array|string} value - Tags string.\r\n * @param {boolean} strict - Return array only.\r\n * @returns {Array|boolean} Tags.\r\n */\r\n static fromValue (value, strict) {\r\n return value === true && !strict\r\n ? true\r\n : Array.isArray(value)\r\n ? value\r\n : typeof value === 'string'\r\n ? SliceTags.fromString(value)\r\n : []\r\n }\r\n\r\n /**\r\n * Check if tag is in tags object.\r\n *\r\n * @param {object} tags - Tags object to check.\r\n * @param {void} tag - Tag to check.\r\n * @returns {boolean} Pass check.\r\n */\r\n static contains (tags, tag) {\r\n switch (typeof tag) {\r\n case 'string':\r\n return !Slice.some(tag.split('+'), value => !tags[value.trim()])\r\n default:\r\n return tags[tag]\r\n }\r\n }\r\n\r\n /**\r\n * Constructor.\r\n *\r\n * @param {string} [tags] - Tags.\r\n */\r\n constructor (tags) {\r\n this.tags = SliceTags.fromValue(tags, true)\r\n this.list = false\r\n }\r\n\r\n /**\r\n * Add tags.\r\n *\r\n * @param {string|Array} tags - Tags.\r\n * @returns {self} Current instance.\r\n */\r\n add (tags) {\r\n const builtTags = tags instanceof SliceTags\r\n ? tags.getAll()\r\n : SliceTags.fromValue(tags, true)\r\n this.list = false\r\n this.tags = this.tags.concat(builtTags)\r\n return this\r\n }\r\n\r\n /**\r\n * Check if has keys.\r\n *\r\n * @param {string|Array} [tags] - Tags.\r\n * @returns {boolean} Has keys.\r\n */\r\n has (tags) {\r\n const checkTags = tags instanceof SliceTags\r\n ? tags.getAll()\r\n : SliceTags.fromValue(tags, true)\r\n const list = this.getList()\r\n return Slice.some(checkTags, value => SliceTags.contains(list, value))\r\n }\r\n\r\n /**\r\n * Check if has all keys.\r\n *\r\n * @param {string|Array} [tags] - Tags.\r\n * @returns {boolean} Has keys.\r\n */\r\n hasAll (tags) {\r\n const checkTags = tags instanceof SliceTags\r\n ? tags.getAll()\r\n : SliceTags.fromValue(tags, true)\r\n const list = this.getList()\r\n return !Slice.some(checkTags, value => !SliceTags.contains(list, value))\r\n }\r\n\r\n /**\r\n * Check if all current tags are in provided tags.\r\n *\r\n * @param {string|Array} [tags] - Tags.\r\n * @returns {boolean} Has keys.\r\n */\r\n allIn (tags) {\r\n const list = tags instanceof SliceTags\r\n ? tags.getList()\r\n : Slice.toObject(SliceTags.fromValue(tags, true))\r\n const checkTags = this.tags\r\n return !Slice.some(checkTags, value => !SliceTags.contains(list, value))\r\n }\r\n\r\n /**\r\n * Get object-like list of tags.\r\n *\r\n * @returns {object} Object-like list of tags.\r\n */\r\n getList () {\r\n if (!this.list) {\r\n this.list = Slice.toObject(this.tags)\r\n }\r\n return this.list\r\n }\r\n\r\n /**\r\n * Get array of tags.\r\n *\r\n * @returns {Array} Tags array.\r\n */\r\n getAll () {\r\n return this.tags\r\n }\r\n}\r\n\r\nSlice.Tags = SliceTags\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Create flat array of promises.\r\n *\r\n * @param {number} depth - Flatting depth.\r\n * @param {Array} args - Promises list.\r\n * @returns {Array} Flat array of promises.\r\n */\r\nconst flatPromises = (depth, ...args) => {\r\n const promises = []\r\n Slice.arrayEach(args, promise => {\r\n if (typeof promise === 'object' && typeof promise.then === 'function') {\r\n promises.push(promise)\r\n } else if (depth && Array.isArray(promise)) {\r\n promises.push(...flatPromises(depth - 1, ...promise))\r\n } else {\r\n promises.push(SlicePromise.resolve(promise))\r\n }\r\n })\r\n return promises\r\n}\r\n\r\n/**\r\n * Run functions of provided type.\r\n *\r\n * @param {Array} fns - Functions list.\r\n * @param {Array|string} types - Functions type.\r\n * @param {void} result - Promise result.\r\n */\r\nconst callFns = (fns, types, result) => {\r\n let runTypes\r\n if (Array.isArray(types)) {\r\n runTypes = Slice.toObject(types)\r\n } else if (typeof types === 'string') {\r\n runTypes = {}\r\n runTypes[types] = true\r\n }\r\n Slice.arrayEach(fns, fn => {\r\n if (runTypes[fn.type]) {\r\n fn.fn(result)\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Add functions of provided type.\r\n *\r\n * @param {string} type - Functions type.\r\n * @param {Array} toAdd - Functions to add.\r\n * @param {Array} fns - Optional list of already added functions.\r\n * @returns {Array} - Added functions list or list.\r\n */\r\nconst createFns = (type, toAdd, fns) => {\r\n const addedList = Array.isArray(fns)\r\n ? fns\r\n : []\r\n Slice.arrayEach(toAdd, fn => {\r\n if (typeof fn === 'function') {\r\n const fnData = {\r\n fn,\r\n type\r\n }\r\n addedList.push(fnData)\r\n } else if (Array.isArray(fn)) {\r\n createFns(type, fn, addedList)\r\n }\r\n })\r\n return addedList\r\n}\r\n\r\n/**\r\n * Add functions of provided type.\r\n *\r\n * @param {Array} fns - Functions list.\r\n * @param {string} type - Functions type.\r\n * @param {Array} toAdd - Functions to add.\r\n * @param {boolean} noAdd - Allow adding.\r\n * @param {boolean} run - Run now.\r\n * @param {void} runResult - Run arguments.\r\n */\r\nconst addFns = (fns, type, toAdd, noAdd, run, runResult) => {\r\n const addedList = createFns(type, toAdd)\r\n if (!noAdd) {\r\n fns.push(...addedList)\r\n }\r\n if (run) {\r\n callFns(addedList, type, runResult)\r\n }\r\n}\r\n\r\n/**\r\n * Reject.\r\n *\r\n * @param {SlicePromise} promise - Promise object.\r\n * @param {void} value - Resolve value.\r\n * @returns {self} Current instance.\r\n */\r\nconst reject = (promise, value) => {\r\n if (promise.state.not('completed')) {\r\n // Enter rejected state.\r\n promise.state.reset().enter('rejected')\r\n const fns = promise.fns\r\n promise.fns = []\r\n promise.result = value\r\n callFns(fns, ['fail', 'always'], value)\r\n }\r\n return promise\r\n}\r\n\r\n/**\r\n * Resolve.\r\n *\r\n * @param {SlicePromise} promise - Promise object.\r\n * @param {void} value - Resolve value.\r\n * @returns {self} Current instance.\r\n */\r\nconst resolve = (promise, value) => {\r\n if (promise.state.not('completed')) {\r\n // Enter resolved state.\r\n promise.state.reset().enter('resolved')\r\n const fns = promise.fns\r\n promise.fns = []\r\n promise.result = value\r\n callFns(fns, ['done', 'always'], value)\r\n }\r\n return promise\r\n}\r\n\r\n/**\r\n * Slice deferred.\r\n */\r\nclass SlicePromise {\r\n /**\r\n * Slice deferred constructor.\r\n *\r\n * @param {Function} func - Function to resolve or reject promise.\r\n */\r\n constructor (func) {\r\n this.state = new SliceState({\r\n plain: 'pending',\r\n rejected: 'completed, run, failed, triggered',\r\n resolved: 'completed, run, fulfilled, triggered'\r\n })\r\n this.state.enter('plain')\r\n this.fns = []\r\n const resolvePromise = value => {\r\n resolve(this, value)\r\n }\r\n const rejectPromise = value => {\r\n reject(this, value)\r\n }\r\n func.call(this, resolvePromise, rejectPromise)\r\n }\r\n\r\n /**\r\n * Add callables that will be executed always.\r\n *\r\n * @param {Array} args - Array of functions.\r\n * @returns {self} Current SlicePromise.\r\n */\r\n always (...args) {\r\n const completed = this.state.is('completed')\r\n addFns(this.fns, 'always', args, completed, completed, this.result)\r\n return this\r\n }\r\n\r\n /**\r\n * Add callables that will be executed always.\r\n * The difference between 'always' and 'finaly' is that 'finaly' returns new SlicePromise.\r\n *\r\n * @param {Array} args - Array of functions.\r\n * @returns {self} New SlicePromise.\r\n */\r\n finaly (...args) {\r\n let resPromise\r\n const promise = new SlicePromise(res => {\r\n resPromise = res\r\n })\r\n args.push(result => {\r\n resPromise(result)\r\n })\r\n this.always(...args)\r\n return promise\r\n }\r\n\r\n /**\r\n * Add handlers that will be called when postponed is resolved.\r\n *\r\n * @param {Array} args - Array of functions.\r\n * @returns {self} Current SlicePromise.\r\n */\r\n done (...args) {\r\n addFns(this.fns, 'done', args, this.state.is('completed'), this.state.is('resolved'), this.result)\r\n return this\r\n }\r\n\r\n /**\r\n * Add handlers that will be called when postponed is rejected.\r\n *\r\n * @param {Array} args - Array of functions.\r\n * @returns {self} Current SlicePromise.\r\n */\r\n fail (...args) {\r\n addFns(this.fns, 'fail', args, this.state.is('completed'), this.state.is('rejected'), this.result)\r\n return this\r\n }\r\n\r\n /**\r\n * Add handlers that will be called when postponed is rejected.\r\n * The difference between 'fail' and 'catch' is that 'catch' returns new SlicePromise.\r\n *\r\n * @param {Array} args - Array of functions.\r\n * @returns {self} New SlicePromise.\r\n */\r\n catch (...args) {\r\n return this.then(null, args)\r\n }\r\n\r\n /**\r\n * Add handlers that will be called when postponed is resolved, rejected, or still in progress.\r\n *\r\n * @param {Function|Array} doneFn - A function or array of functions that is called when promise is resolved.\r\n * @param {Function|Array} failFn - An optional function or array of functions that is called\r\n * when promise is rejected.\r\n * @returns {self} New SlicePromise.\r\n */\r\n then (doneFn, failFn) {\r\n let resPromise, rejPromise\r\n const promise = new SlicePromise((res, rej) => {\r\n resPromise = res\r\n rejPromise = rej\r\n })\r\n const doneFns = Array.isArray(doneFn)\r\n ? doneFn\r\n : [doneFn]\r\n const failFns = Array.isArray(failFn)\r\n ? failFn\r\n : [failFn]\r\n doneFns.push(result => {\r\n resPromise(result)\r\n })\r\n failFns.push(result => {\r\n rejPromise(result)\r\n })\r\n const completed = this.state.is('completed')\r\n addFns(this.fns, 'done', doneFns, completed, this.state.is('resolved'), this.result)\r\n addFns(this.fns, 'fail', failFns, completed, this.state.is('rejected'), this.result)\r\n return promise\r\n }\r\n\r\n /**\r\n * Creates new SlicePromise that is already resolved.\r\n *\r\n * @param {void} result - Resolve result.\r\n * @returns {SlicePromise} New SlicePromise.\r\n */\r\n static resolve (result) {\r\n return new SlicePromise(res => {\r\n res(result)\r\n })\r\n }\r\n\r\n /**\r\n * Creates new SlicePromise that is already rejected.\r\n *\r\n * @param {void} result - Rejection result.\r\n * @returns {SlicePromise} New SlicePromise.\r\n */\r\n static reject (result) {\r\n return new SlicePromise(res => {\r\n res(result)\r\n })\r\n }\r\n\r\n /**\r\n * Creates new SlicePromise that is resolved when all provided promises are resolved\r\n * or rejected when atleast one is rejected.\r\n *\r\n * @param {Array} args - Array of promises.\r\n * @returns {SlicePromise} New SlicePromise.\r\n */\r\n static all (...args) {\r\n const promises = flatPromises(1, args)\r\n let pendingLen = promises.length\r\n let resArgs = []\r\n let resPromise, rejPromise\r\n const retPromise = new SlicePromise((res, rej) => {\r\n resPromise = res\r\n rejPromise = rej\r\n })\r\n if (promises.length) {\r\n Slice.arrayEach(promises, promise => {\r\n promise\r\n .then(result => {\r\n if (pendingLen) {\r\n --pendingLen\r\n resArgs.push(result)\r\n if (pendingLen === 0) {\r\n resPromise(resArgs)\r\n }\r\n }\r\n }, result => {\r\n if (pendingLen) {\r\n pendingLen = null\r\n resArgs = null\r\n rejPromise(result)\r\n }\r\n })\r\n })\r\n } else {\r\n resPromise()\r\n }\r\n return retPromise\r\n }\r\n\r\n /**\r\n * Creates new SlicePromise that is resolved when atleast one of provided promises is resolved\r\n * or rejected when all are rejected.\r\n *\r\n * @param {Array} args - Array of promises.\r\n * @returns {SlicePromise} New SlicePromise.\r\n */\r\n static any (...args) {\r\n const promises = flatPromises(1, args)\r\n let pendingLen = promises.length\r\n let resArgs = []\r\n let resPromise, rejPromise\r\n const retPromise = new SlicePromise((res, rej) => {\r\n resPromise = res\r\n rejPromise = rej\r\n })\r\n if (promises.length) {\r\n Slice.arrayEach(promises, promise => {\r\n promise\r\n .then(result => {\r\n if (pendingLen) {\r\n pendingLen = null\r\n resArgs = null\r\n resPromise(result)\r\n }\r\n }, result => {\r\n if (pendingLen) {\r\n --pendingLen\r\n resArgs.push(result)\r\n if (pendingLen === 0) {\r\n rejPromise(resArgs)\r\n }\r\n }\r\n })\r\n })\r\n } else {\r\n resPromise()\r\n }\r\n return retPromise\r\n }\r\n\r\n /**\r\n * Creates new SlicePromise that is resolved when all provided promises are either resolved\r\n * or rejected.\r\n *\r\n * @param {Array} args - Array of promises.\r\n * @returns {SlicePromise} New SlicePromise.\r\n */\r\n static allSettled (...args) {\r\n const promises = flatPromises(1, args)\r\n let pendingLen = promises.length\r\n const resArgs = []\r\n let resPromise\r\n const retPromise = new SlicePromise(res => {\r\n resPromise = res\r\n })\r\n if (promises.length) {\r\n Slice.arrayEach(promises, promise => {\r\n promise\r\n .then(result => {\r\n if (pendingLen) {\r\n --pendingLen\r\n resArgs.push({\r\n status: 'fulfilled',\r\n value: result\r\n })\r\n if (pendingLen === 0) {\r\n resPromise(resArgs)\r\n }\r\n }\r\n }, result => {\r\n if (pendingLen) {\r\n --pendingLen\r\n resArgs.push({\r\n reason: result,\r\n status: 'rejected'\r\n })\r\n if (pendingLen === 0) {\r\n resPromise(resArgs)\r\n }\r\n }\r\n })\r\n })\r\n } else {\r\n resPromise()\r\n }\r\n return retPromise\r\n }\r\n\r\n /**\r\n * Creates new SlicePromise that is resolved or rejected as soon as one of the promises is resolved or rejected.\r\n *\r\n * @param {Array} args - Array of promises.\r\n * @returns {SlicePromise} New SlicePromise.\r\n */\r\n static race (...args) {\r\n const promises = flatPromises(1, args)\r\n let pending = true\r\n let resPromise, rejPromise\r\n const retPromise = new SlicePromise((res, rej) => {\r\n resPromise = res\r\n rejPromise = rej\r\n })\r\n Slice.arrayEach(promises, promise => {\r\n promise\r\n .then(result => {\r\n if (pending) {\r\n pending = false\r\n resPromise(result)\r\n }\r\n }, result => {\r\n if (pending) {\r\n pending = false\r\n rejPromise(result)\r\n }\r\n })\r\n })\r\n return retPromise\r\n }\r\n}\r\n\r\nSlice.Promise = SlicePromise\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Slice deferred.\r\n */\r\nclass SliceDeferred extends SlicePromise {\r\n /**\r\n * Constructor.\r\n */\r\n constructor () {\r\n // Add resolve and reject methods\r\n super(function (resolve, reject) {\r\n this.resolve = resolve\r\n this.reject = reject\r\n })\r\n }\r\n\r\n /**\r\n * Get deferred promise.\r\n *\r\n * @returns {SlicePromise} Current SliceDeferred promise.\r\n */\r\n promise () {\r\n if (!this.promise) {\r\n this.promise = SlicePromise.race(this)\r\n }\r\n return this.promise\r\n }\r\n}\r\n\r\nSlice.Deferred = SliceDeferred\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n *\r\n * @author shininglab\r\n * @typedef {object} Promise Promise object (jQuery)\r\n * @typedef {object} Deferred Deferred object (jQuery)\r\n * @typedef {SlicePostponed|Deferred|Promise} Postponed Postponed object\r\n */\r\n\r\n\r\n/**\r\n * Run postponed.\r\n *\r\n * @param {SlicePostponed} postponed - Postponed object.\r\n * @param {Postponed|Function} item - Runnable item.\r\n * @returns {Promise} Promise.\r\n */\r\nfunction runPostponed (postponed, item) {\r\n let promise\r\n switch (typeof item) {\r\n case 'object':\r\n if (item instanceof SlicePostponed) {\r\n item.run()\r\n }\r\n if (item.always) {\r\n promise = item\r\n } else {\r\n promise = SlicePromise.resolve(item)\r\n }\r\n break\r\n case 'function':\r\n promise = runPostponed(postponed, item())\r\n break\r\n default:\r\n promise = SlicePromise.resolve(item)\r\n break\r\n }\r\n return promise\r\n}\r\n\r\n/**\r\n * Run postponed and remove it.\r\n *\r\n * @param {SlicePostponed} postponed - Postponed object.\r\n * @param {Postponed|Function} item - Runnable item.\r\n * @returns {Promise} Promise.\r\n */\r\nfunction runPostponedAndRemove (postponed, item) {\r\n const promise = runPostponed(postponed, item)\r\n postponed.active.push(promise)\r\n return promise.always(() => {\r\n postponed.remove(promise)\r\n })\r\n}\r\n\r\n/**\r\n * Run next postponed.\r\n *\r\n * @param {SlicePostponed} postponed - Postponed object.\r\n * @param {Postponed|Function} item - Runnable item.\r\n */\r\nfunction runNext (postponed, item) {\r\n const promise = runPostponed(postponed, item)\r\n postponed.active.push(promise)\r\n promise.always(() => {\r\n postponed.remove(promise)\r\n postponed.runNext()\r\n })\r\n}\r\n\r\n/**\r\n * Run postponed immidiately.\r\n *\r\n * @param {SlicePostponed} postponed - Postponed object.\r\n * @param {Postponed|Function} item - Runnable item.\r\n */\r\nfunction runImmidiate (postponed, item) {\r\n if (postponed.maxActive) {\r\n runNext(postponed, item)\r\n } else {\r\n runPostponedAndRemove(postponed, item)\r\n }\r\n}\r\n\r\n/**\r\n * Refresh postponed.\r\n *\r\n * @param {SlicePostponed} postponed - Postponed object.\r\n */\r\nfunction refreshData (postponed) {\r\n postponed.promise = null\r\n postponed.fns = []\r\n postponed.result = null\r\n postponed\r\n .done(result => {\r\n const resArgs = [result]\r\n // Resolve after.\r\n Slice.quickApply(postponed.after, 'resolve', resArgs)\r\n // Resolve all items.\r\n const items = postponed.active.concat(postponed.items)\r\n postponed.items = []\r\n postponed.state.enter('plain')\r\n Slice.arrayEach(items, item => {\r\n Slice.quickApply(item, 'resolve', resArgs)\r\n })\r\n })\r\n .fail(result => {\r\n const resArgs = [result]\r\n // Reject after.\r\n Slice.quickApply(postponed.after, 'reject', resArgs)\r\n // Reject all items.\r\n const items = postponed.active.concat(postponed.items)\r\n postponed.items = []\r\n postponed.state.enter('plain')\r\n Slice.arrayEach(items, item => {\r\n switch (typeof item) {\r\n case 'object':\r\n Slice.quickApply(item, 'reject', resArgs)\r\n break\r\n case 'function':\r\n item()\r\n break\r\n }\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * Refresh postponed.\r\n *\r\n * @param {SlicePostponed} postponed - Postponed object.\r\n */\r\nfunction refresh (postponed) {\r\n if (postponed.state.is('triggered')) {\r\n if (postponed.state.is('completed')) {\r\n postponed.state.exit('rejected').exit('resolved')\r\n refreshData(postponed)\r\n postponed.run()\r\n } else if (postponed.state.is('queued')) {\r\n postponed.runNext()\r\n } else if (postponed.state.is('running')) {\r\n const active = postponed.items\r\n postponed.items = []\r\n Slice.arrayEach(active, item => {\r\n runPostponedAndRemove(postponed, item)\r\n })\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Slice postponed.\r\n */\r\nclass SlicePostponed extends SliceDeferred {\r\n /**\r\n * Constructor.\r\n *\r\n * @param {number} [maxActive] - Maximum active executions.\r\n */\r\n constructor (maxActive) {\r\n super()\r\n refreshData(this)\r\n this.active = []\r\n this.maxActive = maxActive || 0\r\n this.state\r\n .add('queue', 'pending')\r\n .add('queued', 'run, triggered')\r\n .add('runAfter', 'run, pending')\r\n .add('running', 'run, triggered')\r\n this.items = []\r\n this.length = 0\r\n }\r\n\r\n /**\r\n * Set previous postponed object.\r\n *\r\n * @param {Postponed} variable - Postponed object.\r\n * @param {boolean} linked - Link to each other.\r\n * @returns {self} Current instance.\r\n */\r\n runAfter (variable, linked) {\r\n const promise = SlicePromise.race(variable)\r\n this.state.enter('runAfter')\r\n if (linked) {\r\n this.after = variable\r\n promise.always(() => {\r\n this.after = null\r\n })\r\n }\r\n if (this.state.not('triggered')) {\r\n promise\r\n .always(() => {\r\n this.state.exit('runAfter')\r\n })\r\n .done(() => {\r\n this.run()\r\n })\r\n .fail((...args) => {\r\n this.reject.apply(...args)\r\n })\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Set maximum active executions number.\r\n *\r\n * @param {number} value - Executions number.\r\n * @returns {self} Current instance.\r\n */\r\n setMaxActive (value) {\r\n if (this.maxActive !== value) {\r\n this.maxActive = value\r\n if (this.state.is('queued')) {\r\n this.runNext()\r\n }\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Check finished.\r\n * Cleanup everything if all items was executed.\r\n *\r\n * @returns {self} Current instance.\r\n */\r\n checkFinish () {\r\n if (this.state.is('running') && this.state.not('queue')) {\r\n this.resolve('completed')\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Add item.\r\n *\r\n * @param {Postponed|Function} item - Runnable item.\r\n * @param {boolean} forward - Forward item.\r\n * @param {boolean} immidiate - Run item immidiately.\r\n * @returns {self} Current instance.\r\n */\r\n add (item, forward, immidiate) {\r\n if (this.state.is('plain')) {\r\n this.state.exit('plain')\r\n }\r\n this.state.enter('queue')\r\n if (immidiate) {\r\n runImmidiate(this, item)\r\n } else {\r\n const action = forward\r\n ? 'unshift'\r\n : 'push'\r\n this.items[action](item)\r\n refresh(this)\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Add items range.\r\n *\r\n * @param {Array} list - Array of items.\r\n * @param {boolean} forward - Forward item.\r\n * @param {boolean} immidiate - Run item immidiately.\r\n * @returns {self} Current instance.\r\n */\r\n addRange (list, forward, immidiate) {\r\n if (this.state.is('plain')) {\r\n this.state.exit('plain')\r\n }\r\n this.state.enter('queue', list.length)\r\n if (immidiate) {\r\n Slice.arrayEach(list, item => {\r\n runImmidiate(this, item)\r\n })\r\n } else {\r\n this.items = forward\r\n ? list.concat(this.items)\r\n : this.items.concat(list)\r\n refresh(this)\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Run, execute all items.\r\n *\r\n * @returns {self} Current instance.\r\n */\r\n run () {\r\n if (this.state.not('triggered')) {\r\n this.state.enter('running')\r\n if (this.maxActive) {\r\n this.state.enter('queued')\r\n this.runNext()\r\n } else {\r\n const active = this.items\r\n this.items = []\r\n Slice.arrayEach(active, item => {\r\n runPostponedAndRemove(this, item)\r\n })\r\n this.checkFinish()\r\n }\r\n } else if (this.state.is('queued')) {\r\n this.runNext()\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Run next item.\r\n *\r\n * @returns {self} Current instance.\r\n */\r\n runNext () {\r\n this.checkFinish()\r\n if (this.state.not('completed')) {\r\n if (!this.maxActive || this.state.not('running')) {\r\n return this.run()\r\n }\r\n Slice.arrayEach(this.items.splice(\r\n 0,\r\n Math.max(0, Math.min(this.maxActive - this.active.length, this.items.length))\r\n ), item => {\r\n runNext(this, item)\r\n })\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Remove item.\r\n *\r\n * @param {Postponed|Function} item - Runnable item.\r\n * @returns {self} Current instance.\r\n */\r\n remove (item) {\r\n let removed = false\r\n let position = this.items.indexOf(item)\r\n if (position >= 0) {\r\n removed = true\r\n this.items.splice(position, 1)\r\n }\r\n position = this.active.indexOf(item)\r\n if (position >= 0) {\r\n removed = true\r\n this.active.splice(position, 1)\r\n }\r\n if (removed) {\r\n this.state.leave('queue')\r\n this.checkFinish()\r\n }\r\n return this\r\n }\r\n}\r\n\r\nSlice.Postponed = SlicePostponed\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Slice workflow.\r\n */\r\nclass SliceWorkflow {\r\n /**\r\n * Slice Workflow constructor.\r\n *\r\n * @class SliceWorkflow\r\n * @param {Array} workers - List of workers.\r\n * @param {boolean|string} caching - Workflow caching.\r\n * @param {object} [quick] - Quick executions list.\r\n */\r\n constructor (workers, caching, quick) {\r\n this.workers = workers\r\n this.quick = quick || {}\r\n switch (caching) {\r\n case 'all':\r\n this.cache = {}\r\n this.quickCache = {}\r\n break\r\n case 'quick':\r\n this.quickCache = {}\r\n break\r\n case 'no-cache':\r\n this.cache = false\r\n this.quickCache = false\r\n break\r\n default:\r\n this.cache = caching\r\n ? {}\r\n : false\r\n this.quickCache = caching\r\n ? {}\r\n : false\r\n break\r\n }\r\n }\r\n\r\n /**\r\n * Create worker.\r\n *\r\n * @param {Array|string} keys - Worker keys.\r\n * @param {Function} fn - Worker funtion to run.\r\n * @param {number} [priority] - The worker priority, of not set - 0.\r\n * @returns {object} Worker object.\r\n */\r\n static createWorker (keys, fn, priority) {\r\n if (typeof fn !== 'function') {\r\n return null\r\n }\r\n return {\r\n keys,\r\n priority: priority || 0,\r\n run: fn\r\n }\r\n }\r\n\r\n /**\r\n * Default worker execution function.\r\n *\r\n * @param {object} worker - Worker object.\r\n * @param {object} cache - Flow cache.\r\n * @returns {object} Execution result.\r\n */\r\n static runWorker (worker, cache) {\r\n return worker.run(cache)\r\n }\r\n\r\n /**\r\n * Build worker.\r\n *\r\n * @param {object} worker - Worker object.\r\n * @returns {object} Worker object.\r\n */\r\n static buildWorker (worker) {\r\n if (!worker.built) {\r\n worker.keys = Slice.Tags.fromValue(worker.keys)\r\n worker.built = true\r\n }\r\n return worker\r\n }\r\n\r\n /**\r\n * Handle flow result.\r\n *\r\n * @param {object} flow - Flow object.\r\n * @param {object} result - Flow result.\r\n * @returns {object} Flow result.\r\n */\r\n static handleResult (flow, result) {\r\n if (flow.asObject) {\r\n return Slice.getObjectValues(result, flow.expected)\r\n }\r\n return result[flow.expected]\r\n }\r\n\r\n /**\r\n * Run flow.\r\n *\r\n * @param {object} flow - Flow object.\r\n * @param {object} data - Flow data.\r\n * @param {Function} [fn] - Execute function.\r\n * @returns {object} Flow result.\r\n */\r\n static runFlow (flow, data, fn) {\r\n const execute = typeof fn === 'function'\r\n ? fn\r\n : SliceWorkflow.runWorker\r\n if (!flow.cache) {\r\n flow.cache = {}\r\n }\r\n flow.cache = {...data || {}}\r\n flow.cache.list = flow.list\r\n Slice.some(flow.workers, worker => execute.call(this, worker, flow.cache) === false)\r\n return SliceWorkflow.handleResult(flow, flow.cache)\r\n }\r\n\r\n /**\r\n * Get flow settings.\r\n *\r\n * @param {Array|string} keys - Worker keys.\r\n * @returns {object} Flow settings.\r\n */\r\n getFlowSettings (keys) {\r\n let asObject = true\r\n let arrKeys, expected\r\n if (typeof keys === 'string' && this.quick[keys]) {\r\n ({\r\n asObject,\r\n expected,\r\n keys: arrKeys\r\n } = this.quick[keys])\r\n } else {\r\n arrKeys = Slice.Tags.fromValue(keys, true)\r\n }\r\n // Convert array to object for faster go-throught\r\n const list = Slice.toObject(arrKeys)\r\n return {\r\n asObject,\r\n expected,\r\n filter: function (key) {\r\n return Slice.Tags.contains(this, key)\r\n }.bind(list),\r\n keys: arrKeys,\r\n list\r\n }\r\n }\r\n\r\n /**\r\n * Get workers flow.\r\n *\r\n * @param {Array|string} keys - Worker keys.\r\n * @returns {object} Flow object with workers and settings.\r\n */\r\n getFlow (keys) {\r\n const flow = this.getFlowSettings(keys)\r\n const keysLen = flow.keys.length\r\n flow.workers = []\r\n Slice.arrayEach(this.workers, worker => {\r\n SliceWorkflow.buildWorker(worker)\r\n if (worker.keys === true || keysLen && Slice.some(worker.keys, flow.filter)) {\r\n flow.workers.push(worker)\r\n }\r\n })\r\n return flow\r\n }\r\n\r\n /**\r\n * Get cached flow.\r\n *\r\n * @param {Array|string} keys - Worker keys.\r\n * @returns {object} Flow object with workers and settings.\r\n */\r\n getCachedFlow (keys) {\r\n if (!this.cache) {\r\n return null\r\n }\r\n let cache, cacheKey\r\n if (typeof keys === 'string' && this.quick[keys]) {\r\n cache = 'quickCache'\r\n cacheKey = keys\r\n } else {\r\n cacheKey = Array.isArray(keys)\r\n ? keys.join(', ')\r\n : `${keys}`\r\n cache = 'cache'\r\n }\r\n if (!this[cache]) {\r\n return null\r\n }\r\n if (!this[cache].hasOwnProperty(cacheKey)) {\r\n this[cache][cacheKey] = this.getFlow(keys)\r\n }\r\n return this[cache][cacheKey]\r\n }\r\n\r\n /**\r\n * Run all workers.\r\n *\r\n * @param {object} data - Workflow data.\r\n * @param {Function} fn - Execute function.\r\n * @returns {object} Workflow result.\r\n */\r\n runAll (data, fn) {\r\n return SliceWorkflow.runFlow({\r\n asObject: true,\r\n list: {\r\n all: true\r\n },\r\n workers: this.workers\r\n }, data, fn)\r\n }\r\n\r\n /**\r\n * Run workflow part.\r\n *\r\n * @param {Array|string} keys - Workflow keys.\r\n * @param {object} data - Workflow data.\r\n * @param {Function} fn - Execute function.\r\n * @returns {object} Workflow result.\r\n */\r\n run (keys, data, fn) {\r\n const flow = this.getCachedFlow(keys, true)\r\n if (flow === null) {\r\n this.runDirect(keys, fn)\r\n }\r\n return SliceWorkflow.runFlow(flow, data, fn)\r\n }\r\n\r\n /**\r\n * Run workflow part with no caching.\r\n *\r\n * @param {Array|string} keys - Workflow keys.\r\n * @param {object} data - Workflow data.\r\n * @param {Function} fn - Execute function.\r\n * @returns {object} Workflow result.\r\n */\r\n runDirect (keys, data, fn) {\r\n const flow = this.getFlowSettings(keys)\r\n const execute = typeof fn === 'function'\r\n ? fn\r\n : SliceWorkflow.runWorker\r\n const keysLen = flow.keys.length\r\n const cache = {...data || {}}\r\n cache.list = flow.list\r\n Slice.some(this.workers, worker =>\r\n (worker.keys === true || keysLen && Slice.some(worker.keys, flow.filter)) &&\r\n execute.call(this, worker, cache) === false)\r\n return SliceWorkflow.handleResult(flow, cache)\r\n }\r\n}\r\n\r\nSlice.Workflow = SliceWorkflow\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Slice workflow factory.\r\n */\r\nclass SliceWorkflowFactory {\r\n /**\r\n * Slice Workflow constructor.\r\n *\r\n * @class SliceWorkflowFactory\r\n */\r\n constructor () {\r\n this.resetRequirements()\r\n this.workers = []\r\n this.runWorkers = []\r\n this.runnableType = false\r\n this.quickRunList = {}\r\n this.quickRunToType = {}\r\n // Force this on some methods\r\n this.addWorker = this.addWorker.bind(this)\r\n this.addRunnable = this.addRunnable.bind(this)\r\n this.setRunnableType = this.setRunnableType.bind(this)\r\n this.resetRunnableType = this.resetRunnableType.bind(this)\r\n this.setQuickRun = this.setQuickRun.bind(this)\r\n this.removeQuickRun = this.removeQuickRun.bind(this)\r\n this.addRequirement = this.addRequirement.bind(this)\r\n this.removeRequirement = this.removeRequirement.bind(this)\r\n this.resetRequirements = this.resetRequirements.bind(this)\r\n }\r\n\r\n /**\r\n * Parse requirements from string.\r\n *\r\n * @param {string} str - Stringified requirements.\r\n * @returns {object} Requirements object.\r\n */\r\n static parseRequirements (str) {\r\n const requirements = {}\r\n Slice.arrayEach(str.split(','), rawReq => {\r\n let requirement = rawReq.trim()\r\n let value = true\r\n if (requirement.slice(0, 1) === '!') {\r\n value = false\r\n requirement = requirement.slice(1).trim()\r\n }\r\n if (requirement) {\r\n requirements[requirement] = value\r\n }\r\n })\r\n return requirements\r\n }\r\n\r\n /**\r\n * Reset default requirements for workers.\r\n */\r\n resetRequirements () {\r\n this.presetRequirements = {}\r\n this.presetRequirementsCount = 0\r\n }\r\n\r\n /**\r\n * Add default requirements for workers.\r\n *\r\n * @param {string|object} requirement - Required state/states list.\r\n */\r\n addRequirement (requirement) {\r\n let requirements\r\n if (typeof requirement === 'string') {\r\n requirements = SliceWorkflowFactory.parseRequirements(requirement)\r\n } else if (typeof requirement === 'object') {\r\n requirements = requirement\r\n }\r\n if (requirements) {\r\n Slice.objectEach(requirements, (value, req) => {\r\n if (!this.presetRequirements.hasOwnProperty(req)) {\r\n ++this.presetRequirementsCount\r\n }\r\n this.presetRequirements[req] = value\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Remove default requirements for workers.\r\n *\r\n * @param {string|object} requirement - Required state/states list.\r\n */\r\n removeRequirement (requirement) {\r\n let requirements\r\n if (typeof requirement === 'string') {\r\n requirements = SliceWorkflowFactory.parseRequirements(requirement)\r\n } else if (typeof requirement === 'object') {\r\n requirements = requirement\r\n }\r\n if (requirements) {\r\n Slice.objectEach(requirements, (value, req) => {\r\n if (this.presetRequirements.hasOwnProperty(req) &&\r\n this.presetRequirements[req] === requirements[req]) {\r\n delete this.presetRequirements[req]\r\n --this.presetRequirementsCount\r\n }\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Create worker requirements.\r\n *\r\n * @param {boolean|string|object|Array} [value] - Requirements list.\r\n * @returns {boolean|object|Array} Requirements object.\r\n */\r\n createRequirements (value) {\r\n if (this.presetRequirementsCount || value) {\r\n let requirements\r\n if (Array.isArray(value)) {\r\n requirements = []\r\n Slice.arrayEach(value, requirement => {\r\n requirements.push(this.createRequirements(requirement))\r\n })\r\n } else {\r\n requirements = {...this.presetRequirements || {}}\r\n switch (typeof value) {\r\n case 'string':\r\n requirements = Object.assign(requirements, SliceWorkflowFactory.parseRequirements(value))\r\n break\r\n case 'object':\r\n requirements = Object.assign(requirements, value)\r\n break\r\n default:\r\n requirements = this.presetRequirementsCount\r\n ? requirements\r\n : !!value\r\n break\r\n }\r\n }\r\n return requirements\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Create worker.\r\n *\r\n * @param {Array|string} keys - Worker keys.\r\n * @param {Function} fn - Worker funtion to run.\r\n * @param {number} [priority] - The worker priority, of not set - 0.\r\n * @param {boolean|string|object|Array} [requirements] - Worker requirements list.\r\n * @returns {object} Worker object.\r\n */\r\n createWorker (keys, fn, priority, requirements) {\r\n const worker = SliceWorkflow.createWorker(keys, fn, priority)\r\n if (worker) {\r\n worker.requirements = this.createRequirements(requirements)\r\n }\r\n return worker\r\n }\r\n\r\n /**\r\n * Add worker.\r\n *\r\n * @param {Array|string} keys - Worker keys.\r\n * @param {Function} fn - Worker funtion to run.\r\n * @param {number} [priority] - The worker priority, of not set - 0.\r\n * @param {boolean|string|object|Array} [enabled] - Enable/disable worker requirements list.\r\n * @returns {SliceWorkflowFactory} Current SliceWorkflowFactory.\r\n */\r\n addWorker (keys, fn, priority, enabled) {\r\n const worker = this.createWorker(keys, fn, priority, enabled)\r\n if (worker) {\r\n this.workers.push(worker)\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Set default runnable type.\r\n *\r\n * @param {string} name - Plugin name.\r\n * @returns {SliceWorkflowFactory} Current SliceWorkflowFactory.\r\n */\r\n setRunnableType (name) {\r\n this.runnableType = `${name}`\r\n return this\r\n }\r\n\r\n /**\r\n * Reset default runnable type.\r\n *\r\n * @returns {SliceWorkflowFactory} Current SliceWorkflowFactory.\r\n */\r\n resetRunnableType () {\r\n this.runnableType = false\r\n return this\r\n }\r\n\r\n /**\r\n * Add runnable worker.\r\n *\r\n * @param {Array|string} keys - Worker keys.\r\n * @param {Function} fn - Worker funtion to run.\r\n * @param {number} [priority] - The worker priority, of not set - 0.\r\n * @param {boolean|string|object|Array} [enabled] - Enable/disable worker requirements list.\r\n * @param {string} [workerType] - Worker type, when not set or true - default|core workers type.\r\n */\r\n addRunnable (keys, fn, priority, enabled, workerType) {\r\n const worker = this.createWorker(keys, fn, priority, enabled)\r\n const type = !(workerType || this.runnableType) || workerType === true\r\n ? '_'\r\n : workerType || this.runnableType\r\n if (!worker) {\r\n return\r\n }\r\n if (!this.runWorkers[type]) {\r\n this.runWorkers[type] = []\r\n }\r\n this.runWorkers[type].push(worker)\r\n }\r\n\r\n /**\r\n * Set/Add quick runnable.\r\n *\r\n * @param {string} name - Quick runnable name.\r\n * @param {Array|string} [keys] - Workers keys.\r\n * @param {string|Array} [expected] - Expected value(s) to return.\r\n * @param {string} [workerType] - Worker type, when not set or true - default|core workers type.\r\n */\r\n setQuickRun (name, keys, expected, workerType) {\r\n this.removeQuickRun(name)\r\n const type = !(workerType || this.runnableType) || workerType === true\r\n ? '_'\r\n : workerType || this.runnableType\r\n let exp\r\n if (expected) {\r\n exp = expected\r\n if (typeof exp === 'string') {\r\n exp = SliceTags.fromString(exp)\r\n if (exp.length === 1) {\r\n [exp] = exp\r\n }\r\n }\r\n } else {\r\n exp = 'result'\r\n }\r\n if (!this.quickRunList.hasOwnProperty(type)) {\r\n this.quickRunList[type] = {}\r\n }\r\n this.quickRunToType[name] = type\r\n this.quickRunList[type][name] = {\r\n asObject: Array.isArray(exp),\r\n expected: exp,\r\n keys: SliceTags.fromValue(keys)\r\n }\r\n }\r\n\r\n /**\r\n * Remove quick runnable.\r\n *\r\n * @param {string} name - Quick runnable name.\r\n */\r\n removeQuickRun (name) {\r\n if (this.quickRunToType[name]) {\r\n delete this.quickRunList[this.quickRunToType[name]][name]\r\n delete this.quickRunToType[name]\r\n }\r\n }\r\n\r\n /**\r\n * Check worker requirements.\r\n *\r\n * @param {object} requirements - Requirements to check.\r\n * @param {object} check - Requirements check.\r\n * @returns {boolean} Pass or not.\r\n */\r\n static checkRequirements (requirements, check) {\r\n const enabled = !!check\r\n if (Array.isArray(requirements)) {\r\n if (Slice.some(requirements, value => SliceWorkflowFactory.checkRequirements(value, check))) {\r\n return enabled\r\n }\r\n return false\r\n }\r\n if (typeof requirements === 'object') {\r\n for (const requirement in requirements) {\r\n if (requirements[requirement] !== (typeof requirements[requirement] === 'boolean'\r\n ? !!check[requirement]\r\n : check[requirement])) {\r\n return false\r\n }\r\n }\r\n }\r\n return enabled\r\n }\r\n\r\n /**\r\n * Filter workers by requirements.\r\n *\r\n * @param {object} list - List of workers.\r\n * @param {object} requirements - Workers requirements.\r\n * @returns {object} Filtered workers list.\r\n */\r\n static filterWorkers (list, requirements) {\r\n let workers\r\n if (requirements) {\r\n workers = list.filter(worker => SliceWorkflowFactory.checkRequirements(worker.requirements, requirements))\r\n } else {\r\n workers = list.slice(0)\r\n }\r\n workers.sort((item1, item2) => item1.priority - item2.priority)\r\n return workers\r\n }\r\n\r\n /**\r\n * Get workers.\r\n *\r\n * @param {object} requirements - Workers requirements.\r\n * @returns {object} Workers list.\r\n */\r\n createManager (requirements) {\r\n const manager = new SliceWorkflowManager(new SliceWorkflow(\r\n SliceWorkflowFactory.filterWorkers(this.workers, requirements),\r\n true\r\n ))\r\n Slice.objectEach(this.runWorkers, (list, key) => {\r\n manager.addRunflow(key, new SliceWorkflow(\r\n SliceWorkflowFactory.filterWorkers(list, requirements),\r\n true, this.quickRunList[key]\r\n ))\r\n })\r\n manager.quickRunList = this.quickRunList\r\n manager.quickRunToType = this.quickRunToType\r\n return manager\r\n }\r\n}\r\n\r\nSlice.WorkflowFactory = SliceWorkflowFactory\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Slice workflow manager.\r\n */\r\nclass SliceWorkflowManager {\r\n /**\r\n * Slice workflow manager constructor.\r\n *\r\n * @param {SliceWorkflow} workflow - SliceWorkflow object.\r\n * @param {object} runflows - List of runnable SliceWorkflow.\r\n */\r\n constructor (workflow, runflows) {\r\n this.workflow = null\r\n this.runflows = {}\r\n this.quickRunList = {}\r\n this.quickRunToType = {}\r\n if (workflow) {\r\n this.setWorkflow(workflow)\r\n }\r\n if (typeof runflows === 'object') {\r\n Slice.objectEach(runflows, (runflow, name) => {\r\n this.addRunflow(name, runflow)\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Set workerflow.\r\n *\r\n * @param {SliceWorkflow} workflow - SliceWorkflow object.\r\n * @returns {SliceWorkflowManager} Current SliceWorkflowManager.\r\n */\r\n setWorkflow (workflow) {\r\n if (workflow instanceof SliceWorkflow) {\r\n this.workflow = workflow\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Add runnable workerflow.\r\n *\r\n * @param {string} name - Runflow name.\r\n * @param {SliceWorkflow} runflow - Runnable SliceWorkflow object.\r\n * @returns {SliceWorkflowManager} Current SliceWorkflowManager.\r\n */\r\n addRunflow (name, runflow) {\r\n if (runflow instanceof SliceWorkflow) {\r\n this.runflows[name] = runflow\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Remove runnable workerflow.\r\n *\r\n * @param {string} name - Runflow name.\r\n * @returns {SliceWorkflowManager} Current SliceWorkflowManager.\r\n */\r\n removeRunflow (name) {\r\n if (this.runflows.hasOwnProperty(name)) {\r\n delete this.runflows[name]\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Set/Add quick runnable.\r\n *\r\n * @param {string} name - Quick runnable name.\r\n * @param {Array|string} [keys] - Workers keys.\r\n * @param {string|Array} [expected] - Expected value(s) to return.\r\n * @param {string} [workerType] - Worker type, when not set or true - default|core workers type.\r\n */\r\n setQuickRun (name, keys, expected, workerType) {\r\n this.removeQuickRun(name)\r\n const type = !workerType || workerType === true\r\n ? '_'\r\n : workerType || false\r\n let exp\r\n if (expected) {\r\n exp = expected\r\n if (typeof exp === 'string') {\r\n exp = SliceTags.fromString(exp)\r\n if (exp.length === 1) {\r\n [exp] = exp\r\n }\r\n }\r\n } else {\r\n exp = 'result'\r\n }\r\n if (!this.quickRunList.hasOwnProperty(type)) {\r\n this.quickRunList[type] = {}\r\n }\r\n this.quickRunToType[name] = type\r\n this.quickRunList[type][name] = {\r\n asObject: Array.isArray(exp),\r\n expected: exp,\r\n keys: SliceTags.fromValue(keys)\r\n }\r\n }\r\n\r\n /**\r\n * Remove quick runnable.\r\n *\r\n * @param {string} name - Quick runnable name.\r\n */\r\n removeQuickRun (name) {\r\n if (this.quickRunToType[name]) {\r\n delete this.quickRunList[this.quickRunToType[name]][name]\r\n delete this.quickRunToType[name]\r\n }\r\n }\r\n\r\n /**\r\n * Run runflow workers.\r\n *\r\n * @param {Array|string} keys - Worker keys.\r\n * @param {object} data - Workers start data.\r\n * @param {string} [workerType] - Worker type, of not set - '_'.\r\n * @param {Function} [work] - Work to do.\r\n * @returns {object} Workers execution result.\r\n */\r\n run (keys, data, workerType, work) {\r\n const workflow = !workerType && typeof keys === 'string' && this.quickRunToType[keys]\r\n ? this.runflows[this.quickRunToType[keys]]\r\n : this.runflows[workerType && workerType !== true\r\n ? workerType\r\n : '_']\r\n return workflow.run(keys, data, work)\r\n }\r\n\r\n /**\r\n * Run workflow workers.\r\n *\r\n * @param {Array|string} keys - Worker keys.\r\n * @param {object} data - Workers start data.\r\n * @param {Function} work - Work to do.\r\n * @returns {object} Workers execution result.\r\n */\r\n do (keys, data, work) {\r\n return this.workflow.run(keys, data, work)\r\n }\r\n\r\n /**\r\n * Run workflow workers.\r\n *\r\n * @param {object} data - Workers start data.\r\n * @param {Function} work - Work to do.\r\n * @returns {object} Workers execution result.\r\n */\r\n doAll (data, work) {\r\n return this.workflow.runAll(data, work)\r\n }\r\n}\r\n\r\nSlice.WorkflowManager = SliceWorkflowManager\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Slice workflow manager.\r\n */\r\nclass SliceWorkflowPlugin {\r\n /**\r\n * Slice workflow plugin constructor.\r\n *\r\n * @param {SliceWorkflowManager} factory - SliceWorkflowManager object.\r\n */\r\n constructor (factory) {\r\n // SliceWorkflowFactory to create SliceWorkflowManager.\r\n this.factory = null\r\n // Invalidated parts within the update process.\r\n this.invalidated = {}\r\n this.requirements = null\r\n if (factory) {\r\n this.setFactory(factory)\r\n }\r\n }\r\n\r\n /**\r\n * Set factory.\r\n *\r\n * @param {SliceWorkflowFactory} factory - SliceWorkflowFactory object.\r\n * @returns {SliceWorkflowPlugin} Current SliceWorkflowPlugin.\r\n */\r\n setFactory (factory) {\r\n if (factory instanceof SliceWorkflowFactory) {\r\n this.factory = factory\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Hire manager.\r\n *\r\n * @param {object} requirements - Requirements for SliceWorkflowManager.\r\n * @returns {SliceWorkflowPlugin} Current SliceWorkflowPlugin.\r\n */\r\n hireManager (requirements) {\r\n this.requirements = requirements\r\n this.manager = this.factory.createManager(requirements)\r\n return this\r\n }\r\n\r\n /**\r\n * Invalidates the given part of the update routine.\r\n *\r\n * @param {string} [part] - Part to invalidate.\r\n * @returns {Array.} Invalidated parts.\r\n */\r\n invalidate (part) {\r\n if (typeof part === 'string') {\r\n this.invalidated[part] = true\r\n }\r\n return Object.keys(this.invalidated)\r\n }\r\n\r\n /**\r\n * Run runflow workers.\r\n *\r\n * @param {Array|string} keys - Worker keys.\r\n * @param {object} data - Workers start data.\r\n * @param {string} [workerType] - Worker type, of not set - '_'.\r\n * @returns {object} Workers execution result.\r\n */\r\n run (keys, data, workerType) {\r\n return this.manager.run(\r\n keys, data, workerType,\r\n (worker, cache) => worker.run.apply(this, this.getManagerData(cache))\r\n )\r\n }\r\n\r\n /**\r\n * Run runflow workers.\r\n *\r\n * @returns {SliceWorkflowPlugin} Current SliceWorkflowPlugin.\r\n */\r\n update () {\r\n const invalidated = this.invalidated\r\n const work = (worker, cache) => {\r\n let result = worker.run.apply(this, this.getManagerData(cache))\r\n if (result === 're-update') {\r\n Object.assign(this.invalidated, invalidated)\r\n this.update()\r\n result = false\r\n }\r\n return result\r\n }\r\n this.invalidated = {}\r\n if (invalidated.all) {\r\n this.manager.doAll(null, work)\r\n } else {\r\n this.manager.do(Object.keys(invalidated), null, work)\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Get arguments for SliceWorkflowManager workers.\r\n *\r\n * @param {object} cache - Worker cache.\r\n * @returns {Array} Array with workers arguments.\r\n */\r\n getManagerData (cache) {\r\n return [cache]\r\n }\r\n}\r\n\r\nSlice.WorkflowPlugin = SliceWorkflowPlugin\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\nconst sliceEaseDefaults = {\r\n // Easing value rounding or other action: true or 'round', 'ceil', 'foor' or other Math function, or function\r\n action: false,\r\n // Rounding function arguments\r\n actionArgs: false,\r\n // Easing function\r\n ease: 'linear',\r\n // Easing function arguments\r\n easeArgs: false,\r\n // Easing value range\r\n range: [0, 100]\r\n}\r\n\r\nconst easeOut = fn => (t, x) => 1 - fn(1 - t, x)\r\nconst easeInOut = fn => (t, x) => t < 0.5\r\n ? fn(2 * t, x) / 2\r\n : (2 - fn(2 * (1 - t), x)) / 2\r\nconst easeIn = (t, x) => {\r\n const newX = x && x > 0\r\n ? x\r\n : 2\r\n return Math.pow(t, newX)\r\n}\r\n\r\n/**\r\n * Easings list.\r\n */\r\nconst easeList = {\r\n easeIn,\r\n easeInOut: easeInOut(easeIn),\r\n easeOut: easeOut(easeIn),\r\n linear: progress => progress\r\n}\r\n\r\n/**\r\n * Slice ease.\r\n */\r\nclass SliceEase {\r\n /**\r\n * Default options.\r\n */\r\n static defaults = {}\r\n\r\n /**\r\n * Make progress-like number.\r\n *\r\n * @param {void} [progress] - Current progress.\r\n * @returns {number} Progress-like number.\r\n */\r\n static toNumber (progress) {\r\n if (typeof progress === 'number' && !isNaN(progress)) {\r\n return Math.max(Math.min(progress, 1), 0)\r\n }\r\n return progress\r\n ? 1\r\n : 0\r\n }\r\n\r\n /**\r\n * Get/set easing function.\r\n * Will get easing if only name argument is provided,\r\n * and will try to set easing(s) if more arguments are provided.\r\n *\r\n * @param {string} name - Easing name.\r\n * @param {Function} func - Easing function.\r\n * @param {boolean|string} inFN - Ease in function, or wheather to create it.\r\n * @param {boolean|string} outFn - Ease out function, or wheather to create it.\r\n * @param {boolean|string} inOutFn - Ease in-out function, or wheather to create it.\r\n * @returns {object|SliceEase} Returns easing on getting or SliceEase on setting.\r\n */\r\n static ease (name, func, inFN, outFn, inOutFn) {\r\n if (arguments.length < 2) {\r\n if (typeof name === 'string' && easeList.hasOwnProperty(name)) {\r\n return easeList[name]\r\n }\r\n return null\r\n }\r\n const upCamel = Slice.ucfirst(name)\r\n if (inFN === true || typeof inFN === 'undefined') {\r\n easeList[`easeIn${upCamel}`] = func\r\n } else if (typeof inFN === 'function') {\r\n easeList[`easeIn${upCamel}`] = inFN\r\n } else {\r\n easeList[name] = func\r\n }\r\n if (outFn === true || typeof outFn === 'undefined') {\r\n easeList[`easeOut${upCamel}`] = easeOut(func)\r\n } else if (typeof outFn === 'function') {\r\n easeList[`easeOut${upCamel}`] = outFn\r\n }\r\n if (inOutFn === true || typeof inOutFn === 'undefined') {\r\n easeList[`easeInOut${upCamel}`] = easeInOut(func)\r\n } else if (typeof inOutFn === 'function') {\r\n easeList[`easeInOut${upCamel}`] = inOutFn\r\n }\r\n return SliceEase\r\n }\r\n\r\n /**\r\n * Check if easing exists.\r\n *\r\n * @param {string} name - Easing name.\r\n * @returns {boolean} Has easing.\r\n */\r\n static has (name) {\r\n return easeList.hasOwnProperty(name)\r\n }\r\n\r\n /**\r\n * Check if easing exists.\r\n *\r\n * @param {Array} range - Easing range.\r\n * @param {void} [ease] - Easing name or function.\r\n * @param {void} [args] - Easing arguments.\r\n * @param {boolean} [manual] - Run progress manualy.\r\n * @returns {boolean} Has easing.\r\n */\r\n static create (range, ease, args, manual) {\r\n return new SliceEase({\r\n args,\r\n ease,\r\n manual,\r\n range\r\n })\r\n }\r\n\r\n /**\r\n * Constructor.\r\n *\r\n * @param {object} [options] - The options.\r\n */\r\n constructor (options) {\r\n // Ease options.\r\n const built = Object.assign(this.getDefaults(), options || {})\r\n this\r\n .setEase(built.ease, built.args)\r\n .setRange(built.range)\r\n .setAction(built.action, built.actionArgs)\r\n if (!this.manual) {\r\n this.progress(built.progress)\r\n }\r\n }\r\n\r\n /**\r\n * Get default options.\r\n *\r\n * @returns {object} Options.\r\n */\r\n getDefaults () {\r\n return {\r\n ...sliceEaseDefaults,\r\n ...SliceEase.defaults || {}\r\n }\r\n }\r\n\r\n /**\r\n * Set ease function.\r\n *\r\n * @param {void} [ease] - Easing name or function.\r\n * @param {void} [args] - Easing arguments.\r\n * @returns {SliceEase} Current easing.\r\n */\r\n setEase (ease, args) {\r\n let easing\r\n if (ease) {\r\n const type = typeof ease\r\n if (type === 'function') {\r\n easing = ease\r\n } else if (type === 'string' && SliceEase.has(ease)) {\r\n easing = easeList[ease]\r\n } else {\r\n easing = easeList.linear\r\n }\r\n } else {\r\n easing = easeList.linear\r\n }\r\n this.ease = easing\r\n this.args = Array.isArray(args)\r\n ? args\r\n : [args]\r\n return this\r\n }\r\n\r\n /**\r\n * Set ease action or rounding function.\r\n *\r\n * @param {void} [action] - Easing name or function.\r\n * @param {void} [args] - Easing arguments.\r\n * @returns {SliceEase} Current easing.\r\n */\r\n setAction (action, args) {\r\n let built\r\n if (action) {\r\n const type = typeof action\r\n if (type === 'function') {\r\n built = action\r\n } else {\r\n built = type === 'string' && typeof Math[action] === 'function'\r\n ? action\r\n : 'round'\r\n built = Math[built].bind(Math)\r\n }\r\n this.action = built\r\n this.actionArgs = Array.isArray(args)\r\n ? args\r\n : [args]\r\n } else {\r\n this.action = null\r\n this.actionArgs = null\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Set ease range.\r\n *\r\n * @param {void} [range] - Easing range.\r\n * @returns {SliceEase} Current easing.\r\n */\r\n setRange (range) {\r\n this.start = 0\r\n this.end = 100\r\n if (Array.isArray(range)) {\r\n if (range.length > 0 && typeof range[0] === 'number') {\r\n this.start = range[0]\r\n }\r\n if (range.length > 1 && typeof range[1] === 'number') {\r\n this.end = range[1]\r\n }\r\n }\r\n const diff = this.end - this.start\r\n this.diff = Math.abs(diff)\r\n this.mult = this.diff\r\n ? diff / this.diff\r\n : 1\r\n this.value = this.start\r\n return this\r\n }\r\n\r\n /**\r\n * Set progress, get ease value.\r\n *\r\n * @param {void} [progress] - Easing progress.\r\n * @param {boolean} [force] - Force re-count.\r\n * @returns {number} Easing value.\r\n */\r\n progress (progress, force) {\r\n let built = false\r\n if (typeof progress !== 'undefined') {\r\n built = SliceEase.toNumber(progress)\r\n } else if (force) {\r\n built = this.delta\r\n }\r\n if (built !== false) {\r\n let value = this.start + this.mult * this.diff * this.ease(built, this.args)\r\n if (this.action) {\r\n value = this.action(value, ...this.actionArgs)\r\n }\r\n this.delta = built\r\n this.value = value\r\n }\r\n return this.value\r\n }\r\n}\r\n\r\n// Add circ easing.\r\nSliceEase.ease('circ', t => 1 - Math.sin(Math.acos(t)))\r\n// Add back easing\r\nSliceEase.ease('back', (t, x) => {\r\n const newX = x || 1.5\r\n return Math.pow(t, 2) * ((newX + 1) * t - newX)\r\n})\r\n// Add bounce easing\r\nSliceEase.ease('bounce', t => {\r\n for (let a = 0, b = 1; ; a += b, b /= 2) {\r\n if (t >= (7 - 4 * a) / 11) {\r\n return -Math.pow((11 - 6 * a - 11 * t) / 4, 2) + Math.pow(b, 2)\r\n }\r\n }\r\n})\r\n// Add elastic easing\r\nSliceEase.ease('elastic', (t, x) => {\r\n const newX = x && x > 0\r\n ? x\r\n : 10\r\n return Math.pow(2, newX * (t - 1)) * Math.sin(10.5 * Math.PI * t)\r\n})\r\n// Add wave easing\r\nSliceEase.ease('wave', (t, x) => {\r\n const newX = (x && x > 0\r\n ? x\r\n : 2) - 1\r\n return (newX\r\n ? Math.pow(2 - 1 / newX, 2 * (t - 1))\r\n : 1) * Math.sin((2 * newX + 0.5) * Math.PI * t)\r\n})\r\n\r\nSlice.Ease = SliceEase\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Slice checkpoint match.\r\n * Simple helper class.\r\n */\r\nclass SliceCheckpointData {\r\n /**\r\n * Create checkpoint match.\r\n *\r\n * @param {void} value - Checkpoint data.\r\n * @param {void} [checkpointType] - Checkpoint type, if not set - create SliceCheckpoint.\r\n * @param {void} [baseData] - Base data.\r\n * @returns {SliceCheckpoint} New SliceCheckpoint instance.\r\n */\r\n static create (value, checkpointType, baseData) {\r\n if (value instanceof SliceCheckpointData) {\r\n return value\r\n }\r\n const data = {\r\n ...baseData\r\n ? SliceCheckpointData.create(baseData, checkpointType).data\r\n : {},\r\n ...value instanceof SliceCheckpoint\r\n ? value.getMatchData()\r\n : (SliceCheckpoint.getRegistered(checkpointType) || SliceCheckpoint).createMatchData(value)\r\n }\r\n return new SliceCheckpointData(data)\r\n }\r\n\r\n /**\r\n * Constructor.\r\n *\r\n * @param {object} data - Match data.\r\n */\r\n constructor (data) {\r\n this.data = data\r\n }\r\n}\r\n\r\nSlice.CheckpointData = SliceCheckpointData\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Default options.\r\n */\r\nconst checkpointDefaults = {\r\n // Tags\r\n tags: false\r\n}\r\n\r\n/**\r\n * Checkpoint types.\r\n */\r\nconst checkpointTypes = {}\r\n\r\n/**\r\n * Slice checkpoint.\r\n */\r\nclass SliceCheckpoint {\r\n /**\r\n * Default options.\r\n */\r\n static defaults = {}\r\n\r\n /**\r\n * Register checkpoint class for create.\r\n *\r\n * @param {string} name - Registration name.\r\n * @param {void} checkpoint - Checkpoint class.\r\n */\r\n static register (name, checkpoint) {\r\n if (checkpoint.prototype instanceof SliceCheckpoint) {\r\n const names = SliceTags.fromValue(name, true)\r\n Slice.arrayEach(names, regName => {\r\n checkpointTypes[regName] = checkpoint\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Check if checkpoint type is registered.\r\n *\r\n * @param {void} value - Value to check.\r\n * @returns {boolean} Pass check.\r\n */\r\n static isRegistered (value) {\r\n const tags = SliceTags.fromValue(value, true)\r\n if (tags.length) {\r\n return Slice.some(tags, tag => checkpointTypes.hasOwnProperty(tag))\r\n }\r\n try {\r\n if (value.prototype instanceof SliceCheckpoint) {\r\n return Slice.objectSome(\r\n checkpointTypes,\r\n CheckpointType => value.prototype instanceof CheckpointType\r\n )\r\n }\r\n } catch {\r\n /* Empty */\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Get first registered checkpoint type.\r\n *\r\n * @param {void} value - Value to check.\r\n * @returns {SliceCheckpoint|boolean} SliceCheckpoint class or false.\r\n */\r\n static getRegistered (value) {\r\n const tags = SliceTags.fromValue(value, true)\r\n let Checkpoint = false\r\n if (tags.length) {\r\n Slice.some(tags, tag => {\r\n if (checkpointTypes.hasOwnProperty(tag)) {\r\n Checkpoint = checkpointTypes[tag]\r\n return true\r\n }\r\n })\r\n } else {\r\n try {\r\n if (value.prototype instanceof SliceCheckpoint) {\r\n return Slice.objectSome(\r\n checkpointTypes,\r\n CheckpointType => {\r\n if (value.prototype instanceof CheckpointType) {\r\n Checkpoint = value\r\n return true\r\n }\r\n }\r\n )\r\n }\r\n } catch {\r\n /* Empty */\r\n }\r\n }\r\n return Checkpoint\r\n }\r\n\r\n /**\r\n * Create checkpoint.\r\n *\r\n * @param {object} options - Checkpoint options.\r\n * @param {void} [checkpointType] - Checkpoint type, if not set - create SliceCheckpoint.\r\n * @returns {SliceCheckpoint} New SliceCheckpoint instance.\r\n */\r\n static create (options, checkpointType) {\r\n return new (SliceCheckpoint.getRegistered(checkpointType) || SliceCheckpoint)(options)\r\n }\r\n\r\n /**\r\n * Constructor.\r\n *\r\n * @param {object} [options] - The options.\r\n */\r\n constructor (options) {\r\n // Set options.\r\n this.options(options instanceof SliceCheckpointData\r\n ? SliceCheckpointData.data\r\n : options)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getDefaults () {\r\n return {\r\n ...checkpointDefaults,\r\n ...SliceCheckpoint.defaults\r\n }\r\n }\r\n\r\n /**\r\n * Setup.\r\n * For intermal use only.\r\n *\r\n * @param {object} options - The options.\r\n */\r\n setup (options) {\r\n this.tags = new SliceTags(options.tags)\r\n }\r\n\r\n /**\r\n * Set options.\r\n *\r\n * @param {object} options - The options.\r\n * @returns {self} Current instance.\r\n */\r\n options (options) {\r\n this.options = Object.assign(this.getDefaults(), options || {})\r\n this.setup(options)\r\n return this\r\n }\r\n\r\n /**\r\n * Check if has tags.\r\n *\r\n * @param {string|Array} tags - Single or multiple tags.\r\n * @returns {boolean} Has tags.\r\n */\r\n hasTags (tags) {\r\n return this.tags.has(tags)\r\n }\r\n\r\n /**\r\n * Check if checkpoint is crossed by.\r\n *\r\n * @param {void} value - Value to check.\r\n * @returns {boolean} Has tags.\r\n */\r\n isCrossedBy (value) {\r\n const match = SliceCheckpointData.create(value, 'tags')\r\n return this.tags.allIn(match.data.tags)\r\n }\r\n\r\n /**\r\n * Check if checkpoint is before another.\r\n *\r\n * @param {void} value - Checkpoint.\r\n * @returns {boolean} Has tags.\r\n */\r\n isBefore (value) {\r\n const match = SliceCheckpointData.create(value, 'tags')\r\n return this.tags.allIn(match.data.tags)\r\n }\r\n\r\n /**\r\n * Create object to compare.\r\n *\r\n * @returns {object} Match data.\r\n */\r\n getMatchData () {\r\n return {\r\n tags: this.tags\r\n }\r\n }\r\n\r\n /**\r\n * Create object to compare.\r\n *\r\n * @param {void} value - Source data.\r\n * @returns {object} Match data.\r\n */\r\n static createMatchData (value) {\r\n if (value instanceof SliceCheckpoint) {\r\n return value.getMatchData()\r\n }\r\n let data = {}\r\n let tags = value\r\n if (typeof value === 'object') {\r\n data = {\r\n ...value\r\n }\r\n tags = value.tags\r\n }\r\n data.tags = SliceTags.fromValue(tags)\r\n return data\r\n }\r\n}\r\n\r\nSliceCheckpoint.register('base, core, tags', SliceCheckpoint)\r\n\r\nSlice.Checkpoint = SliceCheckpoint\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Default options.\r\n */\r\nconst progressCheckpointDefaults = {\r\n // Progress\r\n progress: false,\r\n // Strict, will also match tags\r\n strict: false\r\n}\r\n\r\n/**\r\n * Slice progress checkpoint.\r\n */\r\nclass SliceProgressCheckpoint extends SliceCheckpoint {\r\n /**\r\n * @inheritdoc\r\n */\r\n static defaults = {}\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getDefaults () {\r\n return {\r\n ...super.getDefaults(),\r\n ...progressCheckpointDefaults,\r\n ...SliceProgressCheckpoint.defaults\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n setup (options) {\r\n this.progress = SliceEase.toNumber(options.progress)\r\n super.setup(options)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n isCrossedBy (value) {\r\n const match = SliceCheckpointData.create(value, 'progress')\r\n return this.progress <= match.progress &&\r\n (!(this.options.strict || match.strict) || super.isCrossedBy(match))\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n isBefore (value) {\r\n const match = SliceCheckpointData.create(value, 'progress')\r\n return this.progress <= match.progress\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getMatchData () {\r\n return {\r\n ...super.getMatchData(),\r\n progress: this.progress,\r\n strict: this.options.strict\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n static createMatchData (value) {\r\n if (value instanceof SliceProgressCheckpoint) {\r\n return value.getMatchData()\r\n }\r\n let data = {}\r\n let progress = value\r\n let strict = false\r\n if (typeof value === 'object') {\r\n data = value\r\n progress = value.progress\r\n strict = !value.strict\r\n }\r\n data.progress = SliceEase.toNumber(progress)\r\n data.strict = strict\r\n return SliceProgressCheckpoint.createMatchData(data)\r\n }\r\n}\r\n\r\nSliceCheckpoint.register('progress, percent', SliceProgressCheckpoint)\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Default options.\r\n */\r\nconst sliceDistanceCheckpointDefaults = {\r\n // Distance\r\n distance: false,\r\n // Distance limit\r\n distanceLimit: false\r\n}\r\n\r\n/**\r\n * Slice progress checkpoint.\r\n */\r\nclass SliceDistanceCheckpoint extends SliceProgressCheckpoint {\r\n /**\r\n * @inheritdoc\r\n */\r\n static defaults = {}\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getDefaults () {\r\n return {\r\n ...super.getDefaults(),\r\n ...sliceDistanceCheckpointDefaults,\r\n ...SliceDistanceCheckpoint.defaults\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n setup (options) {\r\n this.distance = options.distance || 0\r\n const limit = options.distanceLimit === false\r\n ? 0\r\n : Math.max(options.distanceLimit, 0)\r\n super.setup({\r\n ...options,\r\n progress: limit\r\n ? this.distance / limit\r\n : 0\r\n })\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n isCrossedBy (value) {\r\n const match = SliceCheckpointData.create(value, 'distance')\r\n return this.distance <= match.distance &&\r\n (!(this.options.strict || match.strict) || super.isCrossedBy(match))\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n isBefore (value) {\r\n const match = SliceCheckpointData.create(value, 'distance')\r\n return this.distance <= match.distance\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getMatchData () {\r\n return {\r\n ...super.getMatchData(),\r\n distance: this.distance\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n static createMatchData (value) {\r\n if (value instanceof SliceDistanceCheckpoint) {\r\n return value.getMatchData()\r\n }\r\n let data = {}\r\n let distance = value\r\n let limit = 0\r\n if (typeof value === 'object') {\r\n data = value\r\n distance = value.distance\r\n limit = Math.max(value.distanceLimit || 0, 0)\r\n }\r\n data.progress = limit\r\n ? distance / limit\r\n : 0\r\n data.distance = distance\r\n return SliceProgressCheckpoint.createMatchData(data)\r\n }\r\n}\r\n\r\nSliceCheckpoint.register('distance', SliceDistanceCheckpoint)\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Default options.\r\n */\r\nconst sliceTimePassCheckpointDefaults = {\r\n // Time limit passed\r\n timeLimit: false,\r\n // Time passed\r\n timePass: false\r\n}\r\n\r\n/**\r\n * Slice progress checkpoint.\r\n */\r\nclass SliceTimePassCheckpoint extends SliceProgressCheckpoint {\r\n /**\r\n * @inheritdoc\r\n */\r\n static defaults = {}\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getDefaults () {\r\n return {\r\n ...super.getDefaults(),\r\n ...sliceTimePassCheckpointDefaults,\r\n ...SliceTimePassCheckpoint.defaults\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n setup (options) {\r\n this.timePass = SliceDelay.toDuration(options.timePass)\r\n const limit = options.timeLimit === false\r\n ? 0\r\n : SliceDelay.toDuration(options.timeLimit)\r\n super.setup({\r\n ...options,\r\n progress: limit\r\n ? this.timePass / limit\r\n : 0\r\n })\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n isCrossedBy (value) {\r\n const match = SliceCheckpointData.create(value, 'timePass')\r\n return this.timePass <= match.timePass &&\r\n (!(this.options.strict || match.strict) || super.isCrossedBy(match))\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n isBefore (value) {\r\n const match = SliceCheckpointData.create(value, 'timePass')\r\n return this.timePass <= match.timePass\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getMatchData () {\r\n return {\r\n ...super.getMatchData(),\r\n timePass: this.timePass\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n static createMatchData (value) {\r\n if (value instanceof SliceTimePassCheckpoint) {\r\n return value.getMatchData()\r\n }\r\n let data = {}\r\n let timePass = value\r\n let limit = 0\r\n if (typeof value === 'object') {\r\n data = value\r\n timePass = value.timePass\r\n limit = SliceDelay.toDuration(value.timeLimit)\r\n }\r\n data.progress = limit\r\n ? timePass / limit\r\n : 0\r\n data.timePass = SliceDelay.toDuration(timePass)\r\n return SliceProgressCheckpoint.createMatchData(data)\r\n }\r\n}\r\n\r\nSliceCheckpoint.register('duration, delay, timepass, timePass, timer', SliceTimePassCheckpoint)\r\n\r\nSlice.TimePassCheckpoint = SliceTimePassCheckpoint\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Slice trigger default options.\r\n */\r\nconst actionDefaults = {\r\n // Action to execute\r\n action: false,\r\n // Number of times it's been executed\r\n count: 0,\r\n // Been executed atleas once\r\n executed: false,\r\n // Repeatable action\r\n repeatable: true\r\n}\r\n\r\n/**\r\n * Check if current action is the same as provided action.\r\n *\r\n * @param {object|Function} action - Action to check.\r\n * @returns {boolean} The same action or not.\r\n */\r\nfunction isThisAction (action) {\r\n switch (typeof action) {\r\n case 'object':\r\n return action.isAction && action.do === this.do\r\n case 'function':\r\n return action === this.do\r\n default:\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * Slice action.\r\n */\r\nclass SliceAction {\r\n /**\r\n * Default options.\r\n */\r\n static defaults = {}\r\n\r\n /**\r\n * Create checkpoint.\r\n *\r\n * @param {object} value - Action source.\r\n * @returns {SliceAction} New SliceAction instance.\r\n */\r\n static create (value) {\r\n if (value instanceof SliceAction) {\r\n return value\r\n }\r\n return new SliceAction(typeof value === 'object'\r\n ? value\r\n : {\r\n action: value\r\n })\r\n }\r\n\r\n /**\r\n * Constructor.\r\n *\r\n * @param {object} [options] - The options.\r\n */\r\n constructor (options) {\r\n this.iteration = 0\r\n // Trigger options.\r\n this.setOptions(Object.assign(this.getDefaults(), options || {}))\r\n }\r\n\r\n /**\r\n * Get default options.\r\n *\r\n * @returns {object} Options.\r\n */\r\n getDefaults () {\r\n return {\r\n ...actionDefaults,\r\n ...SliceAction.defaults || {}\r\n }\r\n }\r\n\r\n /**\r\n * Set options.\r\n *\r\n * @param {object} options - The options.\r\n * @returns {self} Current instance.\r\n */\r\n setOptions (options) {\r\n const builtOptions = Object.assign(this.getDefaults(), options || {})\r\n this.options = builtOptions\r\n this.id = builtOptions.hasOwnProperty('id')\r\n ? builtOptions.id\r\n : null\r\n this.repeat = builtOptions.repeat\r\n if (builtOptions.hasOwnProperty('executed')) {\r\n this.executed = !!builtOptions.executed\r\n if (typeof builtOptions.executed === 'number') {\r\n this.iteration = Math.max(builtOptions.executed, 0)\r\n } else {\r\n this.iteration = this.executed\r\n ? 1\r\n : 0\r\n }\r\n }\r\n this.action = typeof builtOptions.action === 'function'\r\n ? builtOptions.action\r\n : Slice.noop\r\n return this\r\n }\r\n\r\n /**\r\n * Check action is the same.\r\n *\r\n * @param {void} action - Action to check.\r\n * @param {boolean} strict - Strict match.\r\n * @returns {boolean} Pass check.\r\n */\r\n is (action, strict) {\r\n if (action instanceof SliceAction) {\r\n if (action === this) {\r\n return true\r\n } else if (strict) {\r\n return false\r\n }\r\n return action.action === this.action ||\r\n this.id !== null && this.id === action.id\r\n }\r\n switch (typeof action) {\r\n case 'function':\r\n return action === this.action\r\n default:\r\n return this.id !== null && this.id === action\r\n }\r\n }\r\n\r\n /**\r\n * Do current action.\r\n *\r\n * @param {void} data - Data to pass to action.\r\n * @returns {void} Action result.\r\n */\r\n do (data) {\r\n if (this.executed && !this.repeat) {\r\n return null\r\n }\r\n return this.action(data)\r\n }\r\n}\r\n\r\nSlice.Action = SliceAction\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Slice trigger default options.\r\n */\r\nconst triggerDefaults = {\r\n // Array of actions\r\n actions: false,\r\n // Is ready\r\n ready: true,\r\n // Repeat automaticaly after triggering or by calling repeat method manualy\r\n repeatManualy: false,\r\n // Ready state on repeat\r\n repeatReady: true,\r\n // Repeat after triggering\r\n repeatable: false,\r\n // Start automaticaly after creation or by calling start method manualy\r\n startManualy: false\r\n}\r\n\r\nconst sliceTriggerStates = {\r\n canceled: 'completed, skipped',\r\n clean: true,\r\n done: 'completed, executed',\r\n failed: 'completed, skipped',\r\n init: true,\r\n preparation: 'pending',\r\n ready: 'execute',\r\n removed: true,\r\n started: 'pending',\r\n triggered: 'execute',\r\n updateTags: 'updateCheckpoints'\r\n}\r\n\r\n/**\r\n * Checkpoint types.\r\n */\r\nconst SliceTriggerTypes = {}\r\n\r\n/**\r\n * Slice trigger.\r\n */\r\nclass SliceTrigger {\r\n /**\r\n * Default options.\r\n */\r\n static defaults = {}\r\n\r\n /**\r\n * Checkpoint type.\r\n */\r\n checkpointType = 'tags'\r\n\r\n /**\r\n * Run actions.\r\n *\r\n * @param {object} actions - Object with actions to execute.\r\n * @param {self} trigger - Current instance.\r\n * @param {void} data - Data passed to actions.\r\n */\r\n static run (actions, trigger, data) {\r\n if (typeof actions === 'object') {\r\n Slice.objectEach(actions, action => {\r\n action.do(trigger, data)\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Register checkpoint class for create.\r\n *\r\n * @param {string} name - Registration name.\r\n * @param {void} checkpoint - Checkpoint class.\r\n */\r\n static register (name, checkpoint) {\r\n if (checkpoint.prototype instanceof SliceTrigger) {\r\n const names = SliceTags.fromValue(name, true)\r\n Slice.arrayEach(names, regName => {\r\n SliceTriggerTypes[regName] = checkpoint\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Check if checkpoint type is registered.\r\n *\r\n * @param {void} value - Value to check.\r\n * @returns {boolean} Pass check.\r\n */\r\n static isRegistered (value) {\r\n const tags = SliceTags.fromValue(value, true)\r\n if (tags.length) {\r\n return Slice.some(tags, tag => SliceTriggerTypes.hasOwnProperty(tag))\r\n }\r\n try {\r\n if (value.prototype instanceof SliceTrigger) {\r\n return Slice.objectSome(\r\n SliceTriggerTypes,\r\n TriggerType => value.prototype instanceof TriggerType\r\n )\r\n }\r\n } catch {\r\n /* Empty */\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Get first registered checkpoint type.\r\n *\r\n * @param {void} value - Value to check.\r\n * @returns {SliceTrigger|boolean} SliceTrigger class or false.\r\n */\r\n static getRegistered (value) {\r\n const tags = SliceTags.fromValue(value, true)\r\n let Checkpoint = false\r\n if (tags.length) {\r\n Slice.some(tags, tag => {\r\n if (SliceTriggerTypes.hasOwnProperty(tag)) {\r\n Checkpoint = SliceTriggerTypes[tag]\r\n return true\r\n }\r\n })\r\n } else {\r\n try {\r\n if (value.prototype instanceof SliceTrigger) {\r\n return Slice.objectSome(\r\n SliceTriggerTypes,\r\n TriggerType => {\r\n if (value.prototype instanceof TriggerType) {\r\n Checkpoint = value\r\n return true\r\n }\r\n }\r\n )\r\n }\r\n } catch {\r\n /* Empty */\r\n }\r\n }\r\n return Checkpoint\r\n }\r\n\r\n /**\r\n * Create checkpoint.\r\n *\r\n * @param {object} options - Checkpoint options.\r\n * @param {void} [checkpointType] - Checkpoint type, if not set - create SliceTrigger.\r\n * @returns {SliceTrigger} New SliceTrigger instance.\r\n */\r\n static create (options, checkpointType) {\r\n return new (SliceTrigger.getRegistered(checkpointType) || SliceTrigger)(options)\r\n }\r\n\r\n /**\r\n * Constructor.\r\n *\r\n * @param {object} [options] - The options.\r\n */\r\n constructor (options) {\r\n // Options.\r\n this.options = {}\r\n // Actions list.\r\n this.actions = {}\r\n // Quick values.\r\n this.quickValues = {}\r\n // Preset data.\r\n this.preset = {}\r\n // Flow data.\r\n this.flow = {}\r\n // Max times triggered.\r\n this.maxIterations = Infinity\r\n // Trigger state.\r\n this.state = new SliceState(sliceTriggerStates)\r\n this.state.enter('clean')\r\n this.setOptions(options || {}, true)\r\n }\r\n\r\n /**\r\n * Get default options.\r\n *\r\n * @returns {object} Options.\r\n */\r\n getDefaults () {\r\n return {\r\n ...triggerDefaults,\r\n ...SliceTrigger.defaults || {}\r\n }\r\n }\r\n\r\n /**\r\n * Get default options.\r\n *\r\n * @returns {object} Options.\r\n */\r\n getDefaultQuickValues () {\r\n return {}\r\n }\r\n\r\n /**\r\n * Set options.\r\n *\r\n * @param {object} options - The options.\r\n * @param {boolean} [fromScratch] - Same as creating totaly new instance.\r\n * @returns {self} Current instance.\r\n */\r\n setOptions (options, fromScratch) {\r\n if (fromScratch) {\r\n this.cleanup()\r\n this.options = Object.assign(this.getDefaults(), options || {})\r\n this.init()\r\n } else if (options) {\r\n this.updateOptions(options)\r\n this.options = Object.assign(this.options, options || {})\r\n if (this.iteration === 1) {\r\n this.prepareReset(this.preset)\r\n } else {\r\n this.prepareRepeat(this.preset)\r\n }\r\n if (this.state.is('started')) {\r\n this.adjustFlow(this.flow, this.preset)\r\n this.update()\r\n }\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Update options.\r\n * For intermal use only.\r\n *\r\n * @param {object} options - The options.\r\n */\r\n updateOptions (options) {\r\n if (options.actions && Array.isArray(options.actions)) {\r\n Slice.arrayEach(options.actions, action => {\r\n this.addAction(action)\r\n })\r\n }\r\n const actProp = 'Actions'\r\n const actPropLen = actProp.length\r\n Slice.objectEach(options, (value, name) => {\r\n if (Array.isArray(value) && name.indexOf(actProp, name.length - actPropLen) !== -1) {\r\n const actionType = name.slice(0, name.length - actPropLen)\r\n Slice.arrayEach(value, action => {\r\n this.addAction(action, actionType)\r\n })\r\n }\r\n })\r\n const quickValues = this.getDefaultQuickValues()\r\n if (typeof options.quickValues === 'object') {\r\n Object.assign(quickValues, options.quickValues)\r\n }\r\n Slice.objectEach(quickValues, (value, name) => {\r\n this.setQuickValue(name, value)\r\n })\r\n if (typeof options.repeat === 'number') {\r\n this.maxIterations = Math.max(Math.ceil(options.repeat), 0) + 1\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup.\r\n * For intermal use only.\r\n *\r\n * @returns {boolean} Cleaned or not.\r\n */\r\n cleanup () {\r\n if (this.state.is('clean')) {\r\n return false\r\n }\r\n this.options = {}\r\n this.actions = {}\r\n this.preset = {}\r\n this.flow = {}\r\n this.maxIterations = Infinity\r\n this.state.reset().is('clean')\r\n return true\r\n }\r\n\r\n /**\r\n * Initialize.\r\n * For intermal use only.\r\n */\r\n init () {\r\n this.state.enter('init')\r\n this.updateOptions(this.options)\r\n this.state.exit('init')\r\n this.reset(null, true)\r\n }\r\n\r\n /**\r\n * Prepare to reset.\r\n * For internal use only.\r\n *\r\n * @param {object} preset - Iteration preset.\r\n */\r\n prepareReset (preset) {\r\n this.iteration = 1\r\n preset.ready = this.options.ready\r\n }\r\n\r\n /**\r\n * Prepare to start.\r\n * For internal use only.\r\n *\r\n * @param {object} preset - Iteration preset.\r\n */\r\n prepareRepeat (preset) {\r\n preset.ready = this.options.repeatReady\r\n }\r\n\r\n /**\r\n * Adjust flow.\r\n * For internal use only.\r\n *\r\n * @param {object} flow - Iteration flow.\r\n * @param {void} value - Adjust value.\r\n */\r\n adjustFlow (flow, value) {\r\n this.adjustSettings(flow, value)\r\n }\r\n\r\n /**\r\n * Adjust settings.\r\n * For internal use only.\r\n *\r\n * @param {object} settings - Settings.\r\n * @param {void} value - Adjust value.\r\n */\r\n adjustSettings (settings, value) {\r\n if (typeof value === 'object') {\r\n if (value.hasOwnProperty('ready')) {\r\n settings.ready = !!value.ready\r\n }\r\n } else {\r\n settings.ready = !!value\r\n }\r\n }\r\n\r\n /**\r\n * Prepare to start.\r\n * For internal use only.\r\n *\r\n * @param {object} flow - Iteration flow.\r\n * @param {object} preset - Iteration preset.\r\n */\r\n prepareStart (flow, preset) {\r\n Object.assign(flow, preset)\r\n flow.values = {}\r\n flow.tags = new SliceTags()\r\n flow.checkpoints = []\r\n }\r\n\r\n /**\r\n * Reset.\r\n *\r\n * @param {void} [options] - Start options.\r\n * @param {boolean} total - Total reset or just current iteration.\r\n * @returns {self} Current instance.\r\n */\r\n reset (options, total) {\r\n const startManualy = this.options.startManualy\r\n if (total) {\r\n this.state.reset().enter('preparation')\r\n SliceTrigger.run(this.actions.totalReset, this)\r\n this.preset = {}\r\n this.prepareReset(this.preset)\r\n if (this.state.not('completed')) {\r\n if (this.iteration <= this.maxIterations) {\r\n if (startManualy) {\r\n this.stop(true)\r\n } else {\r\n this.start(options)\r\n }\r\n } else {\r\n this.cancel()\r\n }\r\n }\r\n } else if (this.canStart()) {\r\n const restart = this.state.not('started')\r\n this.state.reset().enter('preparation')\r\n SliceTrigger.run(this.actions.reset, this)\r\n if (restart) {\r\n if (!startManualy || this.iteration > 1 && !this.options.repeatManualy) {\r\n return this.start()\r\n }\r\n } else {\r\n this.state.enter('started')\r\n }\r\n if (options !== null && typeof options !== 'undefined') {\r\n this.adjustSettings(this.preset, options)\r\n }\r\n this.flow = {}\r\n this.prepareStart(this.flow, this.preset)\r\n this.update()\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Check if can start.\r\n *\r\n * @returns {boolean} Can start.\r\n */\r\n canStart () {\r\n return this.state.not('failed')\r\n }\r\n\r\n /**\r\n * Start.\r\n *\r\n * @param {void} [options] - Start options.\r\n * @returns {self} Current instance.\r\n */\r\n start (options) {\r\n if (this.canStart()) {\r\n this.flow = {}\r\n this.state.reset().enter('started')\r\n if (options !== null && typeof options !== 'undefined') {\r\n this.adjustSettings(this.preset, options)\r\n }\r\n this.prepareStart(this.flow, this.preset)\r\n SliceTrigger.run(this.actions.start, this)\r\n this.update()\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Repeat.\r\n *\r\n * @param {void} [options] - Start options.\r\n * @returns {self} Current instance.\r\n */\r\n repeat (options) {\r\n const state = this.state\r\n if (state.is('triggered')) {\r\n if (this.canRepeat()) {\r\n this.preset = {}\r\n this.state.reset().enter('preparation')\r\n SliceTrigger.run(this.actions.repeat, this)\r\n this.prepareRepeat(this.preset)\r\n this.start(options)\r\n } else {\r\n this.finish()\r\n }\r\n } else {\r\n this.reset(options)\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Stop.\r\n *\r\n * @param {boolean} silent - Don't run actions.\r\n * @returns {self} Current instance.\r\n */\r\n stop (silent) {\r\n if (this.canStart()) {\r\n this.flow = {}\r\n this.state.reset()\r\n this.prepareStart(this.flow, this.preset)\r\n if (!silent) {\r\n SliceTrigger.run(this.actions.stop, this)\r\n }\r\n this.update()\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Check if ready.\r\n *\r\n * @returns {boolean} Is ready.\r\n */\r\n isReady () {\r\n return this.flow.ready\r\n }\r\n\r\n /**\r\n * Prepare to update before triggering.\r\n * Used to stabilize flow values.\r\n * For internal use only.\r\n *\r\n * @param {object} flow - Iteration flow.\r\n */\r\n prepareReady (flow) {\r\n flow.ready = true\r\n }\r\n\r\n /**\r\n * Update.\r\n *\r\n * @param {boolean} [ready] - Trigger ready.\r\n * @returns {self} Current instance.\r\n */\r\n update (ready) {\r\n if (this.state.is('started')) {\r\n this.flow.values = {}\r\n if (ready) {\r\n this.prepareReady(this.flow)\r\n }\r\n SliceTrigger.run(this.actions.update, this)\r\n this.updateCheckpoints()\r\n if (this.isReady()) {\r\n this.state\r\n .reset()\r\n .enter('ready')\r\n this.trigger()\r\n }\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Trigger action.\r\n *\r\n * @param {object} data - Action data object.\r\n * @returns {self} Current instance.\r\n */\r\n trigger (data) {\r\n const state = this.state\r\n if (state.is('ready')) {\r\n ++this.iteration\r\n state.exit('ready').enter('triggered')\r\n this.do(data)\r\n if (!this.options.repeatManualy) {\r\n this.repeat()\r\n } else if (!this.canRepeat()) {\r\n this.finish()\r\n }\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Check if can repeat.\r\n *\r\n * @returns {self} Current instance.\r\n */\r\n canRepeat () {\r\n return this.options.repeat && this.iteration < this.maxIterations\r\n }\r\n\r\n /**\r\n * Do trigger action.\r\n *\r\n * @returns {self} Current instance.\r\n */\r\n do () {\r\n SliceTrigger.run(this.actions.trigger, this)\r\n return this\r\n }\r\n\r\n /**\r\n * Cancel action.\r\n *\r\n * @returns {boolean} Canceled.\r\n */\r\n cancel () {\r\n if (this.state.is('completed')) {\r\n return false\r\n }\r\n this.state.reset().enter('canceled')\r\n SliceTrigger.run(this.actions.cancel, this)\r\n return true\r\n }\r\n\r\n /**\r\n * Finish trigger actions.\r\n * Will do 'done' actions and stop triggering any further actions.\r\n *\r\n * @returns {boolean} Canceled.\r\n */\r\n finish () {\r\n if (this.state.is('started')) {\r\n this.flow.values = {}\r\n this.state.reset().enter('done')\r\n SliceTrigger.run(this.actions.done, this)\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Add action.\r\n *\r\n * @param {Function|SliceAction|object} action - Action to execute.\r\n * @param {string} type - Action type.\r\n * @param {boolean} execute - Execute action after adding.\r\n * @param {object} data - Execute action data object.\r\n * @returns {self} Current instance.\r\n */\r\n addAction (action, type, execute, data) {\r\n const builtAction = SliceAction.create(action)\r\n const builtType = type || 'trigger'\r\n let actions = this.actions[builtType]\r\n if (!actions) {\r\n actions = {}\r\n this.actions[builtType] = actions\r\n }\r\n if (builtAction.id === null) {\r\n builtAction.id = Slice.uniqueId(actions)\r\n }\r\n actions[builtAction.id] = builtAction\r\n if (execute || this.state.is('done')) {\r\n builtAction.do(data)\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Remove action.\r\n *\r\n * @param {Function} action - Action to execute.\r\n * @param {string} type - Action type.\r\n * @param {boolean} execute - Execute action after adding.\r\n * @param {object} data - Execute action data object.\r\n * @returns {self} Current instance.\r\n */\r\n removeAction (action, type, execute, data) {\r\n const actionType = type || 'trigger'\r\n const bindAction = this.getAction(action, actionType)\r\n if (bindAction) {\r\n delete this.actions[actionType][bindAction.id]\r\n if (execute) {\r\n bindAction.do(data)\r\n }\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Get action.\r\n *\r\n * @param {Function} action - Action to execute.\r\n * @param {string} type - Action type.\r\n * @returns {object} Action object.\r\n */\r\n getAction (action, type) {\r\n const actions = this.actions[type || 'trigger']\r\n if (actions) {\r\n for (const id in actions) {\r\n if (actions[id].is(action)) {\r\n return actions[id]\r\n }\r\n }\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * Set quick value.\r\n *\r\n * @param {string} name - Quick value name.\r\n * @param {void} value - Quick value, or function to get it.\r\n * @returns {self} Current instance.\r\n */\r\n setQuickValue (name, value) {\r\n this.quickValues[name] = typeof value === 'function'\r\n ? this.quickValues[name] = value\r\n : () => value\r\n return this\r\n }\r\n\r\n /**\r\n * Remove quick value.\r\n *\r\n * @param {string} name - Quick value name.\r\n * @returns {self} Current instance.\r\n */\r\n removeQuickValue (name) {\r\n if (this.quickValues.hasOwnProperty(name)) {\r\n delete this.quickValues[name]\r\n }\r\n if (this.flow.values.hasOwnProperty(name)) {\r\n delete this.flow.values[name]\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Get value(s).\r\n *\r\n * @param {string} [name] - Easing name.\r\n * @returns {void} Ease value, null or all values if 'name' is not provided.\r\n */\r\n get (name) {\r\n const flow = this.flow\r\n if (typeof name === 'undefined') {\r\n Slice.objectEach(this.quickValues, (quickValue, quickName) => {\r\n if (!flow.values.hasOwnProperty(quickName)) {\r\n flow.values[quickName] = quickValue(this)\r\n }\r\n })\r\n return flow.values\r\n }\r\n if (this.quickValues.hasOwnProperty(name)) {\r\n if (!flow.values.hasOwnProperty(name)) {\r\n flow.values[name] = this.quickValues[name](this)\r\n }\r\n return flow.values[name]\r\n }\r\n return flow.values.hasOwnProperty(name)\r\n ? flow.values[name]\r\n : null\r\n }\r\n\r\n /**\r\n * Add checkpoint.\r\n *\r\n * @param {void} value - Checkpoint or options to create it.\r\n * @param {void} [type] - Checkpoint keys.\r\n * @param {boolean} [update] - Update checkpoints.\r\n * @returns {self} Current instance.\r\n */\r\n addCheckpoint (value, type, update) {\r\n if (this.state.is('started')) {\r\n const checkpoint = value instanceof SliceCheckpoint\r\n ? value\r\n : SliceCheckpoint.create(\r\n SliceCheckpointData.create(value, this.checkpointType, this.getCheckData()),\r\n type || this.checkpointType\r\n )\r\n this.flow.checkpoints.push(checkpoint)\r\n if (update) {\r\n this.updateCheckpoints()\r\n }\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Remove checkpoint.\r\n *\r\n * @param {void} [value] - Checkpoint or tags, if not provided - remove all.\r\n * @returns {self} Current instance.\r\n */\r\n removeCheckpoint (value) {\r\n if (this.state.is('started')) {\r\n const flow = this.flow\r\n if (typeof value === 'undefined') {\r\n flow.checkpoints = []\r\n } else if (value instanceof SliceCheckpoint) {\r\n Slice.some(flow.checkpoints, (checkpoint, i) => {\r\n if (checkpoint === value) {\r\n flow.checkpoints.splice(i, 1)\r\n return true\r\n }\r\n })\r\n } else {\r\n const builtKeys = SliceTags.fromValue(value, true)\r\n if (builtKeys.length) {\r\n const checkpoints = flow.checkpoints\r\n let i = checkpoints.length - 1\r\n for (; i >= 0; i--) {\r\n if (checkpoints[i].hasTags(builtKeys)) {\r\n checkpoints.splice(i, 1)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Add tags.\r\n *\r\n * @param {string|Array} tags - Tags.\r\n * @returns {self} Current instance.\r\n */\r\n addTags (tags) {\r\n if (this.state.is('started')) {\r\n this.flow.tags.add(tags)\r\n this.state.enter('updateTags')\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Update checkpoints.\r\n *\r\n * @returns {self} Current instance.\r\n */\r\n updateCheckpoints () {\r\n if (this.state.is('updateCheckpoints') && this.flow.checkpoints.length) {\r\n const checkpoints = this.getCheckpoints()\r\n const checkData = SliceCheckpointData.create(this.getCheckData(), this.checkpointType)\r\n Slice.some(checkpoints.slice(), checkpoint => {\r\n if (!this.checkCheckpoint(checkpoint, checkData)) {\r\n return true\r\n }\r\n })\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Get checkpoints.\r\n *\r\n * @returns {Array} Array of checkpoints.\r\n */\r\n getCheckpoints () {\r\n return this.state.is('started')\r\n ? this.flow.checkpoints\r\n : []\r\n }\r\n\r\n /**\r\n * Get checkpoint data.\r\n * For internal use only.\r\n *\r\n * @returns {object} Checkpoint data.\r\n */\r\n getCheckData () {\r\n return {\r\n tags: this.flow.tags\r\n }\r\n }\r\n\r\n /**\r\n * Check checkpoint.\r\n * For internal use only.\r\n *\r\n * @param {SliceCheckpoint} checkpoint - SliceCheckpoint instance.\r\n * @param {object} checkData - Check data.\r\n * @returns {boolean} Passed check.\r\n */\r\n checkCheckpoint (checkpoint, checkData) {\r\n if (checkpoint.isBefore(checkData)) {\r\n SliceTrigger.run(this.actions.checkpoint, this, {\r\n checkpoint\r\n })\r\n this.removeCheckpoint(checkpoint)\r\n }\r\n return true\r\n }\r\n\r\n /**\r\n * Remove.\r\n */\r\n remove () {\r\n this.cleanup()\r\n this.state.enter('removed')\r\n }\r\n}\r\n\r\nSliceTrigger.register('base, core, direct', SliceTrigger)\r\n\r\nSlice.Trigger = SliceTrigger\r\n\r\n\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Slice time action default options.\r\n */\r\nconst progressDefaults = {\r\n // Default easing function\r\n ease: 'linear',\r\n // Default easing arguments\r\n easeArguments: false,\r\n // State of progress, true or 1 on ready, or float from 0 to 1 for progress\r\n ready: false,\r\n // State of progress on repeating, true or 1 on ready, or float from 0 to 1 for progress\r\n repeatReady: false\r\n}\r\n\r\n/**\r\n * Default quick values.\r\n */\r\nconst progressQuickValuesDefaults = {\r\n progress: trigger => trigger.state.is('started')\r\n ? trigger.flow.progress\r\n : 0\r\n}\r\n\r\nconst progressBuildSettings = (settings, progress) => {\r\n settings.progress = SliceEase.toNumber(progress)\r\n settings.ready = settings.progress === 1\r\n}\r\n\r\n/**\r\n * Slice progress.\r\n */\r\nclass SliceProgress extends SliceTrigger {\r\n /**\r\n * @inheritdoc\r\n */\r\n static defaults = {}\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n checkpointType = 'progress'\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n static quickValuesDefaults = {}\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getDefaults () {\r\n return {\r\n ...super.getDefaults(),\r\n ...progressDefaults,\r\n ...SliceProgress.defaults\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getDefaultQuickValues () {\r\n return {\r\n ...super.getDefaultQuickValues(),\r\n ...progressQuickValuesDefaults,\r\n ...SliceProgress.quickValuesDefaults\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n updateOptions (options) {\r\n this.setEase('percent', SliceEase.create([0, 100], options.ease, options.easeArguments, true))\r\n super.updateOptions(options)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n init () {\r\n this.easings = {}\r\n this.state.add('updateProgress', 'updateCheckpoints')\r\n super.init()\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n isReady () {\r\n return this.flow.progress === 1\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareReset (preset) {\r\n this.iteration = 1\r\n progressBuildSettings(preset, this.options.ready)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareRepeat (preset) {\r\n progressBuildSettings(preset, this.options.repeatReady)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n adjustSettings (settings, value) {\r\n if (typeof value === 'object') {\r\n if (value.hasOwnProperty('progress')) {\r\n progressBuildSettings(settings, value.progress)\r\n }\r\n } else {\r\n progressBuildSettings(settings, value)\r\n }\r\n }\r\n\r\n /**\r\n * Update.\r\n *\r\n * @param {number} [progress] - Current progress.\r\n * @returns {SliceProgress} Current instance.\r\n */\r\n update (progress) {\r\n return this.setProgress(progress)\r\n }\r\n\r\n /**\r\n * Set progress.\r\n *\r\n * @param {number} [progress] - Current progress.\r\n * @returns {boolean} Is ready.\r\n */\r\n setProgress (progress) {\r\n if (this.state.is('started')) {\r\n const flow = this.flow\r\n if (typeof progress === 'number') {\r\n flow.progress = SliceEase.toNumber(progress)\r\n this.state.enter('updateProgress')\r\n }\r\n const ready = this.isReady()\r\n super.update(ready)\r\n return ready\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Set easing.\r\n *\r\n * @param {string} name - Easing name.\r\n * @param {SliceEase} ease - Easing object.\r\n * @returns {SliceProgress} Current instance.\r\n */\r\n setEase (name, ease) {\r\n if (ease instanceof SliceEase) {\r\n this.easings[name] = ease\r\n if (this.quickValues.hasOwnProperty(name)) {\r\n delete this.quickValues[name]\r\n }\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Remove progress action.\r\n *\r\n * @param {string} name - Easing name.\r\n * @returns {SliceProgress} Current instance.\r\n */\r\n removeEase (name) {\r\n if (this.easings.hasOwnProperty(name)) {\r\n delete this.easings[name]\r\n }\r\n if (this.flow.values.hasOwnProperty(name)) {\r\n delete this.flow.values[name]\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n setQuickValue (name, value) {\r\n if (value instanceof SliceEase) {\r\n return this.setEase(name, value)\r\n }\r\n if (this.easings.hasOwnProperty(name)) {\r\n this.removeEase(name)\r\n }\r\n return super.setQuickValue(name, value)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n get (name) {\r\n const flow = this.flow\r\n if (typeof name === 'undefined') {\r\n super.get()\r\n Slice.objectEach(this.easings, (ease, easeName) => {\r\n if (!flow.values.hasOwnProperty(easeName)) {\r\n flow.values[easeName] = ease.progress(flow.progress)\r\n }\r\n })\r\n return flow.values\r\n }\r\n if (this.easings.hasOwnProperty(name)) {\r\n if (!flow.values.hasOwnProperty(name)) {\r\n flow.values[name] = this.easings[name].progress(flow.progress)\r\n }\r\n return flow.values[name]\r\n }\r\n return super.get(name)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getCheckData () {\r\n return {\r\n ...super.getCheckData(),\r\n progress: this.flow.progress,\r\n updateProgress: this.state.is('updateProgress'),\r\n updateTags: this.state.is('updateTags')\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n addCheckpoint (value, type, update) {\r\n if (this.state.is('started')) {\r\n this.flow.checkpointsASC = false\r\n super.addCheckpoint(value, type, update)\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getCheckpoints () {\r\n let checkpoints = []\r\n if (this.state.is('started')) {\r\n const flow = this.flow\r\n checkpoints = flow.checkpoints\r\n // Move all non SliceProgressCheckpoint checkpoint forward and sort the rest\r\n if (!flow.checkpointsASC) {\r\n checkpoints.sort((item1, item2) => item1 instanceof SliceProgressCheckpoint\r\n ? item2 instanceof SliceProgressCheckpoint && item1.isBefore(item2)\r\n ? -1\r\n : 1\r\n : item2 instanceof SliceProgressCheckpoint\r\n ? -1\r\n : 0)\r\n flow.checkpointsASC = true\r\n }\r\n }\r\n return checkpoints\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n checkCheckpoint (checkpoint, checkData) {\r\n if (checkData instanceof SliceProgressCheckpoint) {\r\n if (checkpoint.isCrossedBy(checkData)) {\r\n SliceTrigger.run(this.actions.checkpoint, this, {\r\n checkpoint\r\n })\r\n this.removeCheckpoint(checkpoint)\r\n return true\r\n } else if (checkpoint.isBefore(checkData)) {\r\n return true\r\n }\r\n return false\r\n } else if (!checkData.data.updateTags) {\r\n return true\r\n }\r\n return super.checkCheckpoint(checkpoint, checkData)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n finish () {\r\n if (this.state.is('started')) {\r\n this.flow.progress = 1\r\n return super.finish()\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n cleanup () {\r\n if (super.cleanup()) {\r\n this.easings = null\r\n return true\r\n }\r\n return false\r\n }\r\n}\r\n\r\nSliceTrigger.register('progress, percent', SliceProgress)\r\n\r\nSlice.Progress = SliceProgress\r\n\r\n\r\n/* global moment */\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Default options.\r\n */\r\nconst delayDefaults = {\r\n // Delay to start timer\r\n delay: false,\r\n // Time to do action\r\n fps: 60,\r\n // Repeat delay in milliseconds\r\n repeatDelay: false\r\n}\r\n\r\n/**\r\n * Default quick values.\r\n */\r\nconst delayQuickValuesDefaults = {\r\n delayLeft: trigger => trigger.state.is('waiting')\r\n ? Math.max(trigger.flow.delay - trigger.flow.delayTime, 0)\r\n : 0,\r\n delayTime: trigger => trigger.state.is('waiting')\r\n ? Math.min(trigger.flow.delayTime, trigger.flow.delay)\r\n : trigger.state.is('playing')\r\n ? trigger.flow.delay\r\n : 0,\r\n tickPass: trigger => trigger.state.is('playing')\r\n ? trigger.flow.tickPass\r\n : 0\r\n}\r\n\r\nconst delayTick = trigger => {\r\n SliceDelay.removeTimeout(trigger)\r\n const flow = trigger.flow\r\n const now = Date.now()\r\n const passed = now - flow.tickTime\r\n flow.values = {}\r\n flow.tickPass = passed\r\n flow.delayTime += passed\r\n flow.passedTime += passed\r\n flow.tickTime = now\r\n if (flow.delayTime < flow.delay) {\r\n SliceTrigger.run(trigger.actions.wait, trigger)\r\n SliceDelay.addTimeout(trigger, () => {\r\n delayTick(trigger)\r\n })\r\n } else {\r\n trigger.state\r\n .exit('waiting')\r\n .enter('playing')\r\n flow.delay = Math.min(flow.delayTime, flow.delay)\r\n flow.delayTime = flow.delay\r\n SliceTrigger.run(trigger.actions.play, trigger)\r\n trigger.startPlay()\r\n }\r\n}\r\n\r\nconst delayHoldTick = (trigger, action, fn) => {\r\n SliceDelay.removeTimeout(trigger)\r\n const flow = trigger.flow\r\n const now = Date.now()\r\n flow.values = {}\r\n flow.holdTime += now - flow.tickHoldTime\r\n flow.tickHoldTime = now\r\n if (flow.holdTime < flow.continueDelay) {\r\n if (action) {\r\n SliceTrigger.run(trigger.actions[action], trigger)\r\n }\r\n SliceDelay.addTimeout(trigger, () => {\r\n delayHoldTick(trigger, action, fn)\r\n })\r\n } else {\r\n fn()\r\n }\r\n}\r\n\r\nconst delayBuildSettings = (settings, delay) => {\r\n settings.delay = SliceDelay.toDuration(delay)\r\n}\r\n\r\n/**\r\n * Slice delay.\r\n * Base class, not meant to be used as trigger.\r\n */\r\nclass SliceDelay extends SliceProgress {\r\n /**\r\n * @inheritdoc\r\n */\r\n static defaults = {}\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n static quickValuesDefaults = {}\r\n\r\n /**\r\n * Get duration in milliseconds from now.\r\n *\r\n * @param {number} time - Time in milliseconds.\r\n * @param {boolean} isDate - Time is date.\r\n * @returns {moment|null} Moment object.\r\n */\r\n static fromTime (time, isDate) {\r\n if (typeof time === 'number') {\r\n // If time is more that 1 year it's most likely a date\r\n return Math.max(isDate || isDate !== false && time > 31556952000\r\n ? time - Date.now()\r\n : time, 0)\r\n }\r\n return 0\r\n }\r\n\r\n /**\r\n * Modify duration and return new.\r\n *\r\n * @param {string|Date|moment} duration - Base duration.\r\n * @param {string|Date|moment} value - Modify value.\r\n * @param {boolean} substract - Substract value.\r\n * @returns {number} Duration.\r\n */\r\n static modifyDuration (duration, value, substract) {\r\n let time = SliceDelay.toDuration(duration)\r\n switch (typeof value) {\r\n case 'object':\r\n if (value instanceof Date) {\r\n return SliceDelay.fromTime(value.getTime(), true)\r\n }\r\n if (moment.isDuration(value)) {\r\n return value.asMilliseconds()\r\n }\r\n if (moment.isMoment(value)) {\r\n return SliceDelay.fromTime(value.valueOf(), true)\r\n }\r\n time = Slice.getObjectValue(value, 'getTime')\r\n if (time === null) {\r\n time = Slice.getObjectValue(value, 'milliseconds')\r\n }\r\n break\r\n case 'number':\r\n time = value\r\n break\r\n }\r\n return SliceDelay.toDuration(duration) + (substract\r\n ? -time\r\n : time)\r\n }\r\n\r\n /**\r\n * Get duration in milliseconds from now.\r\n *\r\n * @param {string|Date|moment} value - Milliseconds.\r\n * @returns {moment|null} Moment object.\r\n */\r\n static toDuration (value) {\r\n let time\r\n switch (typeof value) {\r\n case 'object':\r\n if (value instanceof Date) {\r\n return SliceDelay.fromTime(value.getTime(), true)\r\n }\r\n if (moment.isDuration(value)) {\r\n return value.asMilliseconds()\r\n }\r\n if (moment.isMoment(value)) {\r\n return SliceDelay.fromTime(value.valueOf(), true)\r\n }\r\n time = Slice.getObjectValue(value, 'getTime')\r\n if (time === null) {\r\n time = Slice.getObjectValue(value, 'milliseconds')\r\n }\r\n break\r\n case 'number':\r\n time = value\r\n break\r\n }\r\n return SliceDelay.fromTime(time)\r\n }\r\n\r\n /**\r\n * Clear trigger timeout if any.\r\n *\r\n * @param {SliceTrigger} trigger - Trigger instance.\r\n */\r\n static removeTimeout (trigger) {\r\n if (trigger.timeout) {\r\n clearTimeout(trigger.timeout)\r\n trigger.timeout = false\r\n }\r\n }\r\n\r\n /**\r\n * Set trigger timeout.\r\n *\r\n * @param {SliceTrigger} trigger - Trigger instance.\r\n * @param {Function} timeFunc - Timeout function.\r\n */\r\n static addTimeout (trigger, timeFunc) {\r\n if (trigger.timeout) {\r\n clearTimeout(trigger.timeout)\r\n }\r\n trigger.timeout = setTimeout(() => {\r\n trigger.timeout = false\r\n timeFunc()\r\n }, trigger.fpsTime || 0)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n updateOptions (options) {\r\n this.fpsTime = 1000 / options.fps\r\n super.updateOptions(options)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n init () {\r\n this.state\r\n .add('waiting', 'pending')\r\n .add('playing', 'pending')\r\n .add('paused', 'pending')\r\n super.init()\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getDefaults () {\r\n return {\r\n ...super.getDefaults(),\r\n ...delayDefaults,\r\n ...SliceDelay.defaults\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getDefaultQuickValues () {\r\n return {\r\n ...super.getDefaultQuickValues(),\r\n ...delayQuickValuesDefaults,\r\n ...SliceDelay.quickValuesDefaults\r\n }\r\n }\r\n\r\n /**\r\n * Extend delay by some ammout.\r\n *\r\n * @param {string|Date|moment} value - Milliseconds.\r\n * @returns {SliceDelay} Current instance.\r\n */\r\n extendDelay (value) {\r\n if (this.state.is('waiting')) {\r\n this.flow.delay = SliceDelay.modifyDuration(this.flow.duration, value)\r\n this.update()\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Reduce delay by some ammout.\r\n *\r\n * @param {string|Date|moment} value - Milliseconds.\r\n * @returns {SliceDelay} Current instance.\r\n */\r\n reduceDelay (value) {\r\n if (this.state.is('waiting')) {\r\n this.flow.delay = SliceDelay.modifyDuration(this.flow.duration, value, true)\r\n this.update()\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareReset (preset) {\r\n SliceDelay.removeTimeout(this)\r\n this.iteration = 1\r\n this.startTime = Date.now()\r\n delayBuildSettings(preset, this.options.delay)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareRepeat (preset) {\r\n SliceDelay.removeTimeout(this)\r\n delayBuildSettings(preset, this.options.repeatDelay === false\r\n ? this.options.delay\r\n : this.options.repeatDelay)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n adjustSettings (settings, value) {\r\n if (typeof value === 'object') {\r\n if (value.hasOwnProperty('delay')) {\r\n delayBuildSettings(settings, value.delay)\r\n }\r\n } else {\r\n delayBuildSettings(settings, value)\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareStart (flow, preset) {\r\n SliceDelay.removeTimeout(this)\r\n super.prepareStart(flow, preset)\r\n const now = Date.now()\r\n flow.iterationTime = now\r\n flow.tickPass = 0\r\n flow.passedTime = 0\r\n flow.delayTime = 0\r\n flow.tickTime = now\r\n flow.progress = 0\r\n flow.delayProgress = 0\r\n flow.playTime = 0\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareReady () {\r\n SliceDelay.removeTimeout(this)\r\n }\r\n\r\n /**\r\n * Update.\r\n *\r\n * @returns {SliceProgress} Current instance.\r\n */\r\n update () {\r\n const state = this.state\r\n if (state.is('started')) {\r\n if (state.is('paused')) {\r\n super.update()\r\n } else if (state.is('playing')) {\r\n this.startPlay()\r\n } else {\r\n if (state.not('waiting')) {\r\n state.enter('waiting')\r\n }\r\n delayTick(this)\r\n }\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Prepare to play.\r\n * For internal use only.\r\n *\r\n * @param {object} flow - Iteration flow.\r\n */\r\n preparePlay (flow) {\r\n flow.playTime = 0\r\n flow.delay = Math.min(flow.delayTime, flow.delay)\r\n flow.delayTime = flow.delay\r\n }\r\n\r\n /**\r\n * Start play.\r\n * For internal use only.\r\n */\r\n startPlay () {\r\n SliceDelay.removeTimeout(this)\r\n }\r\n\r\n /**\r\n * Play.\r\n *\r\n * @returns {SliceProgress} Current instance.\r\n */\r\n play () {\r\n if (this.state.is('started') && this.state.not('paused')) {\r\n this.state\r\n .exit('waiting')\r\n .enter('playing')\r\n this.flow.tickTime = Date.now()\r\n this.preparePlay(this.flow)\r\n SliceTrigger.run(this.actions.play, this)\r\n this.startPlay()\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Pause timer.\r\n *\r\n * @returns {SliceProgress} Current instance.\r\n */\r\n pause () {\r\n SliceDelay.removeTimeout(this)\r\n if (this.state.is('started') && this.state.not('paused')) {\r\n this.flow.pauseTime = Date.now()\r\n this.state.enter('paused')\r\n SliceTrigger.run(this.actions.pause, this)\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Pause timer.\r\n *\r\n * @param {string|Date|moment} delay - Milliseconds.\r\n * @returns {SliceProgress} Current instance.\r\n */\r\n continue (delay) {\r\n if (this.state.is('paused')) {\r\n const delayVal = SliceDelay.toDuration(delay)\r\n const flow = this.flow\r\n flow.continueDelay = delayVal\r\n if (delay) {\r\n flow.tickHoldTime = Date.now()\r\n flow.holdTime = 0\r\n SliceTrigger.run(this.actions.continueDelay, this)\r\n delayHoldTick(this, 'holdContinue', () => {\r\n this.continue(0)\r\n })\r\n } else {\r\n SliceTrigger.run(this.actions.continue, this)\r\n this.flow.tickTime = Date.now()\r\n this.state.exit('paused')\r\n this.update()\r\n }\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n finish () {\r\n if (this.state.is('started')) {\r\n SliceDelay.removeTimeout(this)\r\n this.flow.delayTime = this.flow.delay\r\n return super.finish()\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n cleanup () {\r\n if (super.cleanup()) {\r\n SliceDelay.removeTimeout(this)\r\n return true\r\n }\r\n return false\r\n }\r\n}\r\n\r\nSlice.Delay = SliceDelay\r\n\r\n\r\n/* global moment */\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Default options.\r\n */\r\nconst distanceDefaults = {\r\n // Distance\r\n distance: false,\r\n // Repeat distance\r\n repeatDistance: false,\r\n // Repeat speed\r\n repeatSpeed: false,\r\n // Speed\r\n speed: false\r\n}\r\n\r\n/**\r\n * Default quick values.\r\n */\r\nconst distanceQuickValuesDefaults = {\r\n distanceLeft: trigger => trigger.state.is('playing')\r\n ? Math.max(trigger.flow.distance - trigger.flow.distancePass, 0)\r\n : trigger.state.is('waiting')\r\n ? trigger.flow.distance\r\n : 0,\r\n distancePass: trigger => trigger.state.is('playing')\r\n ? Math.min(trigger.flow.distancePass, trigger.flow.distance)\r\n : 0,\r\n playLeft: trigger => trigger.state.is('playing')\r\n ? Math.max(trigger.flow.distanceTime - trigger.flow.playTime, 0)\r\n : trigger.state.is('waiting')\r\n ? trigger.flow.distanceTime\r\n : 0,\r\n playTime: trigger => trigger.state.is('playing')\r\n ? Math.min(trigger.flow.playTime, trigger.flow.distanceTime)\r\n : 0\r\n}\r\n\r\nconst distanceBuildSettings = (settings, distance, speed) => {\r\n settings.distance = distance\r\n if (typeof speed !== 'undefined') {\r\n settings.speed = Math.max(speed || 0, 0)\r\n }\r\n settings.distanceTime = settings.speed\r\n ? settings.distance / settings.speed\r\n : Infinity\r\n}\r\n\r\nconst distanceTick = trigger => {\r\n SliceDelay.removeTimeout(trigger)\r\n const flow = trigger.flow\r\n const now = Date.now()\r\n const passed = now - flow.tickTime\r\n flow.tickPass = passed\r\n flow.passedTime += passed\r\n flow.playTime += passed\r\n flow.tickDistance = passed * flow.speed\r\n flow.distancePass += flow.tickDistance\r\n flow.tickTime = now\r\n SliceDelay.addTimeout(trigger, () => {\r\n distanceTick(trigger)\r\n })\r\n trigger.setProgress(flow.distancePass / flow.distance)\r\n}\r\n\r\n/**\r\n * Slice distance.\r\n */\r\nclass SliceDistance extends SliceDelay {\r\n /**\r\n * @inheritdoc\r\n */\r\n static defaults = {}\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n checkpointType = 'distance'\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n static quickValuesDefaults = {}\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getDefaults () {\r\n return {\r\n ...super.getDefaults(),\r\n ...distanceDefaults,\r\n ...SliceDistance.defaults\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getDefaultQuickValues () {\r\n return {\r\n ...super.getDefaultQuickValues(),\r\n ...distanceQuickValuesDefaults,\r\n ...SliceDistance.quickValuesDefaults\r\n }\r\n }\r\n\r\n /**\r\n * Extend distance by some ammout.\r\n *\r\n * @param {number} value - Distance.\r\n * @returns {self} Current instance.\r\n */\r\n extendDistance (value) {\r\n if (this.state.is('started')) {\r\n this.flow.distance += value\r\n this.update()\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Reduce distance by some ammout.\r\n *\r\n * @param {number} value - Distance.\r\n * @returns {self} Current instance.\r\n */\r\n reduceDuration (value) {\r\n if (this.state.is('started')) {\r\n this.flow.duration -= value\r\n this.update()\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareReset (preset) {\r\n super.prepareReset(preset)\r\n distanceBuildSettings(preset, this.options.distance, this.options.speed)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareRepeat (preset) {\r\n super.prepareRepeat(preset)\r\n distanceBuildSettings(preset, this.options.repeatDistance === false\r\n ? this.options.distance\r\n : this.options.repeatDistance, this.options.repeatSpeed === false\r\n ? this.options.speed\r\n : this.options.repeatSpeed)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n adjustSettings (settings, value) {\r\n if (typeof value === 'object') {\r\n super.adjustSettings(settings, value)\r\n distanceBuildSettings(settings, value.hasOwnProperty('distance')\r\n ? value.distance\r\n : settings.distance, value.hasOwnProperty('speed')\r\n ? value.speed\r\n : settings.speed)\r\n } else {\r\n distanceBuildSettings(settings, value)\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareStart (flow, preset) {\r\n super.prepareStart(flow, preset)\r\n flow.distancePass = 0\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareReady (flow) {\r\n super.prepareReady(flow)\r\n flow.distancePass = flow.distance\r\n flow.playTime = flow.distanceTime\r\n }\r\n\r\n /**\r\n * Set passed distance.\r\n *\r\n * @param {number} value - Passed distance.\r\n * @returns {self} Current instance.\r\n */\r\n setPassDistance (value) {\r\n const state = this.state\r\n if (state.is('started')) {\r\n const flow = this.flow\r\n const distance = Math.max(value, 0)\r\n flow.distancePass = Math.min(distance, flow.distance)\r\n if (state.is('playing') && state.not('paused')) {\r\n const now = Date.now()\r\n const passed = now - flow.tickTime\r\n flow.tickPass = passed\r\n flow.passedTime += passed\r\n flow.playTime += passed\r\n flow.tickTime = now\r\n flow.tickDistance = distance - flow.distancePass\r\n }\r\n flow.distanceTime = flow.speed\r\n ? flow.playTime + (flow.distance - flow.distancePass) / flow.speed\r\n : Infinity\r\n this.setProgress(flow.distancePass / flow.distance)\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n preparePlay (flow) {\r\n super.preparePlay(flow)\r\n flow.distancePass = 0\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n startPlay () {\r\n if (this.flow.distance) {\r\n if (this.flow.speed) {\r\n distanceTick(this)\r\n }\r\n } else {\r\n super.setProgress(1)\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getCheckData () {\r\n const flow = this.flow\r\n return {\r\n ...super.getCheckData(),\r\n distance: flow.distancePass,\r\n distanceLimit: flow.distance,\r\n timeLimit: flow.distanceTime,\r\n timePass: flow.playTime\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n finish () {\r\n if (this.state.is('started')) {\r\n const flow = this.flow\r\n flow.passedTime = flow.delay + flow.distanceTime\r\n flow.distancePass = flow.distance\r\n flow.playTime = flow.distanceTime\r\n return super.finish()\r\n }\r\n return false\r\n }\r\n}\r\n\r\nSliceTrigger.register('distance, speed, distancePass, distancepass', SliceDistance)\r\n\r\nSlice.Distance = SliceDistance\r\n\r\n\r\n/* global moment */\r\n/**\r\n * Slice.\r\n * Copyright 2019 shininglab (https://shininglab-code.com/slice).\r\n */\r\n\r\n\r\n/**\r\n * Default options.\r\n */\r\nconst timerDefaults = {\r\n // Time to do action\r\n duration: false,\r\n // Repeat duration in milliseconds\r\n repeatDuration: false\r\n}\r\n\r\n/**\r\n * Default quick values.\r\n */\r\nconst timerQuickValuesDefaults = {\r\n playLeft: trigger => trigger.state.is('playing')\r\n ? Math.max(trigger.flow.duration - trigger.flow.playTime, 0)\r\n : trigger.state.is('waiting')\r\n ? trigger.flow.duration\r\n : 0,\r\n playTime: trigger => trigger.state.is('playing')\r\n ? Math.min(trigger.flow.playTime, trigger.flow.duration)\r\n : 0\r\n}\r\n\r\nconst timerBuildSettings = (settings, duration) => {\r\n settings.duration = SliceDelay.toDuration(duration)\r\n}\r\n\r\nconst timerTick = trigger => {\r\n SliceDelay.removeTimeout(trigger)\r\n const flow = trigger.flow\r\n const now = Date.now()\r\n const passed = now - flow.tickTime\r\n flow.tickPass = passed\r\n flow.passedTime += passed\r\n flow.playTime += passed\r\n flow.tickTime = now\r\n SliceDelay.addTimeout(trigger, () => {\r\n timerTick(trigger)\r\n })\r\n trigger.setProgress(flow.playTime / flow.duration)\r\n}\r\n\r\n/**\r\n * Slice time.\r\n */\r\nclass SliceTimer extends SliceDelay {\r\n /**\r\n * @inheritdoc\r\n */\r\n static defaults = {}\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n checkpointType = 'timePass'\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n static quickValuesDefaults = {}\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getDefaults () {\r\n return {\r\n ...super.getDefaults(),\r\n ...timerDefaults,\r\n ...SliceTimer.defaults\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getDefaultQuickValues () {\r\n return {\r\n ...super.getDefaultQuickValues(),\r\n ...timerQuickValuesDefaults,\r\n ...SliceTimer.quickValuesDefaults\r\n }\r\n }\r\n\r\n /**\r\n * Extend duration by some ammout.\r\n *\r\n * @param {string|Date|moment} value - Milliseconds.\r\n * @returns {self} Current instance.\r\n */\r\n extendDuration (value) {\r\n if (this.state.is('started')) {\r\n this.flow.duration = SliceDelay.modifyDuration(this.flow.duration, value)\r\n this.update()\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Reduce duration by some ammout.\r\n *\r\n * @param {string|Date|moment} value - Milliseconds.\r\n * @returns {self} Current instance.\r\n */\r\n reduceDuration (value) {\r\n if (this.state.is('started')) {\r\n this.flow.duration = SliceDelay.modifyDuration(this.flow.duration, value, true)\r\n this.update()\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareReset (preset) {\r\n super.prepareReset(preset)\r\n timerBuildSettings(preset, this.options.duration)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareRepeat (preset) {\r\n super.prepareRepeat(preset)\r\n timerBuildSettings(preset, this.options.repeatDuration === false\r\n ? this.options.duration\r\n : this.options.repeatDuration)\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n adjustSettings (settings, value) {\r\n if (typeof value === 'object') {\r\n super.adjustSettings(settings, value)\r\n if (value.hasOwnProperty('duration')) {\r\n timerBuildSettings(settings, value.duration)\r\n }\r\n } else {\r\n timerBuildSettings(settings, value)\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n prepareReady (flow) {\r\n super.prepareReady(flow)\r\n flow.playTime = flow.duration\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n startPlay () {\r\n if (this.flow.duration) {\r\n timerTick(this)\r\n } else {\r\n super.setProgress(1)\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n getCheckData () {\r\n return {\r\n ...super.getCheckData(),\r\n timeLimit: this.flow.duration,\r\n timePass: this.flow.playTime\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n finish () {\r\n if (this.state.is('started')) {\r\n const flow = this.flow\r\n flow.passedTime = flow.delay + flow.duration\r\n flow.playTime = flow.duration\r\n return super.finish()\r\n }\r\n return false\r\n }\r\n}\r\n\r\nSliceTrigger.register('duration, delay, timer, timepass, timePass', SliceTimer)\r\n\r\nSlice.Timer = SliceTimer\r\n\r\n\r\n\r\nwindow.Slice = Slice\r\n"],"file":"slice-core.js"}