UNPKG

330 kBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack://TPP_API/webpack/universalModuleDefinition","webpack://TPP_API/webpack/bootstrap","webpack://TPP_API/./node_modules/core-js/library/modules/_core.js","webpack://TPP_API/./node_modules/core-js/library/modules/_global.js","webpack://TPP_API/./node_modules/core-js/library/modules/_export.js","webpack://TPP_API/./node_modules/core-js/library/modules/_wks.js","webpack://TPP_API/./node_modules/core-js/library/modules/_an-object.js","webpack://TPP_API/./node_modules/core-js/library/modules/_hide.js","webpack://TPP_API/./node_modules/core-js/library/modules/_ctx.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-dp.js","webpack://TPP_API/./node_modules/core-js/library/modules/_is-object.js","webpack://TPP_API/./node_modules/core-js/library/modules/_descriptors.js","webpack://TPP_API/./node_modules/core-js/library/modules/_fails.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iterators.js","webpack://TPP_API/./node_modules/core-js/library/modules/_a-function.js","webpack://TPP_API/./node_modules/core-js/library/modules/_has.js","webpack://TPP_API/./node_modules/core-js/library/modules/_defined.js","webpack://TPP_API/./node_modules/core-js/library/modules/_cof.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-object.js","webpack://TPP_API/./node_modules/core-js/library/modules/_dom-create.js","webpack://TPP_API/./node_modules/core-js/library/modules/_property-desc.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-integer.js","webpack://TPP_API/./node_modules/core-js/library/modules/_library.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-keys.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-iobject.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-length.js","webpack://TPP_API/./node_modules/core-js/library/modules/_shared-key.js","webpack://TPP_API/./node_modules/core-js/library/modules/_set-to-string-tag.js","webpack://TPP_API/./node_modules/core-js/library/modules/_new-promise-capability.js","webpack://TPP_API/./node_modules/core-js/library/modules/_string-ws.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.string.iterator.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-define.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-create.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iobject.js","webpack://TPP_API/./node_modules/core-js/library/modules/_shared.js","webpack://TPP_API/./node_modules/core-js/library/modules/_uid.js","webpack://TPP_API/./node_modules/core-js/library/modules/_enum-bug-keys.js","webpack://TPP_API/./node_modules/core-js/library/modules/_html.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-call.js","webpack://TPP_API/./node_modules/core-js/library/modules/_is-array-iter.js","webpack://TPP_API/./node_modules/core-js/library/modules/core.get-iterator-method.js","webpack://TPP_API/./node_modules/core-js/library/modules/_classof.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-detect.js","webpack://TPP_API/./node_modules/core-js/library/modules/_species-constructor.js","webpack://TPP_API/./node_modules/core-js/library/modules/_task.js","webpack://TPP_API/./node_modules/core-js/library/modules/_perform.js","webpack://TPP_API/./node_modules/core-js/library/modules/_promise-resolve.js","webpack://TPP_API/./lib/fs-tpp-api-module-wrapper.js","webpack://TPP_API/./lib/fs-tpp-api.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/number/is-nan.js","webpack://TPP_API/./node_modules/core-js/library/fn/number/is-nan.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.number.is-nan.js","webpack://TPP_API/./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-primitive.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/number/parse-int.js","webpack://TPP_API/./node_modules/core-js/library/fn/number/parse-int.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.number.parse-int.js","webpack://TPP_API/./node_modules/core-js/library/modules/_parse-int.js","webpack://TPP_API/./node_modules/core-js/library/modules/_string-trim.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/array/from.js","webpack://TPP_API/./node_modules/core-js/library/fn/array/from.js","webpack://TPP_API/./node_modules/core-js/library/modules/_string-at.js","webpack://TPP_API/./node_modules/core-js/library/modules/_redefine.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-create.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-dps.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-keys-internal.js","webpack://TPP_API/./node_modules/core-js/library/modules/_array-includes.js","webpack://TPP_API/./node_modules/core-js/library/modules/_to-absolute-index.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-gpo.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.array.from.js","webpack://TPP_API/./node_modules/core-js/library/modules/_create-property.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/object/keys.js","webpack://TPP_API/./node_modules/core-js/library/fn/object/keys.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.object.keys.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-sap.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/json/stringify.js","webpack://TPP_API/./node_modules/core-js/library/fn/json/stringify.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/promise.js","webpack://TPP_API/./node_modules/core-js/library/fn/promise.js","webpack://TPP_API/./node_modules/core-js/library/modules/web.dom.iterable.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.array.iterator.js","webpack://TPP_API/./node_modules/core-js/library/modules/_add-to-unscopables.js","webpack://TPP_API/./node_modules/core-js/library/modules/_iter-step.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.promise.js","webpack://TPP_API/./node_modules/core-js/library/modules/_an-instance.js","webpack://TPP_API/./node_modules/core-js/library/modules/_for-of.js","webpack://TPP_API/./node_modules/core-js/library/modules/_invoke.js","webpack://TPP_API/./node_modules/core-js/library/modules/_microtask.js","webpack://TPP_API/./node_modules/core-js/library/modules/_user-agent.js","webpack://TPP_API/./node_modules/core-js/library/modules/_redefine-all.js","webpack://TPP_API/./node_modules/core-js/library/modules/_set-species.js","webpack://TPP_API/./node_modules/core-js/library/modules/es7.promise.finally.js","webpack://TPP_API/./node_modules/core-js/library/modules/es7.promise.try.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/object/assign.js","webpack://TPP_API/./node_modules/core-js/library/fn/object/assign.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.object.assign.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-assign.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-gops.js","webpack://TPP_API/./node_modules/core-js/library/modules/_object-pie.js","webpack://TPP_API/./node_modules/babel-runtime/core-js/object/create.js","webpack://TPP_API/./node_modules/core-js/library/fn/object/create.js","webpack://TPP_API/./node_modules/core-js/library/modules/es6.object.create.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","core","version","__e","global","Math","self","Function","__g","ctx","hide","has","$export","type","source","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","IS_WRAP","W","expProto","target","undefined","C","a","b","this","arguments","length","apply","virtual","R","U","store","uid","USE_SYMBOL","isObject","it","TypeError","dP","createDesc","f","aFunction","fn","that","anObject","IE8_DOM_DEFINE","toPrimitive","O","Attributes","e","exec","toString","slice","defined","document","is","createElement","bitmap","configurable","writable","ceil","floor","isNaN","$keys","enumBugKeys","keys","IObject","toInteger","min","shared","def","TAG","tag","stat","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","$at","String","iterated","_t","_i","point","index","done","LIBRARY","redefine","Iterators","$iterCreate","setToStringTag","getPrototypeOf","ITERATOR","BUGGY","returnThis","Base","NAME","Constructor","next","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","dPs","IE_PROTO","Empty","createDict","iframeDocument","iframe","style","display","appendChild","src","contentWindow","open","write","lt","close","Properties","result","cof","propertyIsEnumerable","split","push","copyright","id","px","random","concat","documentElement","iterator","ret","ArrayProto","Array","classof","getIteratorMethod","ARG","T","tryGet","callee","SAFE_CLOSING","riter","from","skipClosing","safe","arr","iter","SPECIES","D","constructor","defer","channel","port","invoke","html","cel","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","data","args","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","removeChild","setTimeout","set","clear","v","newPromiseCapability","x","promiseCapability","require","ui","hasClass","addClass","removeClass","actionSpecToBuilder","_cache","getInfo","_enabledFallback","_isEnabled","_log","messageReceiverOverride","DEFAULT_CONFIG","origin","autoScanDelay","alwaysDebug","autoReload","deleteSectionEnabled","deletePageWorkflow","workflowMode","config","util","$root","querySelectorAll","filter","byId","previewId","$el","dataset","byNonEmpty","matchAffectedInfo","affected","statusMap","forEach","status","fsIdInfo","previewIdCache","$target","isFunction","val","isString","messageService","ms","MESSAGE_TYPE","storage","serialize","callback","tryParseResult","match","JSON","parse","ignore","handleCallback","tppMessage","response","_response","callbackId","permanent","deserialize","_callbackId","EVENT_HANDLER","setInternalEventHandler","eventHandler","receiveMessage","tpp","log","_messageType","_eventId","payload","_payload","handleOuterEvent","send","message","top","sendMessageInternal","updateReceiverOverride","registerOnMessage","connectApi","console","isEnabled","localStorage","getItem","setEnabled","enabled","setItem","emit","eventName","detail","CustomEvent","bubbles","body","dispatchEvent","fsIdObject","previewIdObjectString","atob","previewIdObject","parsePreviewId","getValue","path","pathSpec","Types","createActionBuilder","builderWith","template","_template","createBuilder","builder","_name","label","_label","context","_context","contextUpdate","element","_element","url","_icon","_previewId","execute","_execute","getOptions","_getOptions","options","build","action","_status","conf","_typeMarker","getStatus","setStatus","getName","getLabel","getIcon","getPreviewId","getElement","getContext","supportsOptions","actionHelper","actionSpec","actionBuilder","createActionFromBuilder","pathString","elements","raw","isFolder","normalized","join","parent","className","classList","contains","RegExp","test","add","remove","replace","renderFrame","tppFrameDecorator","$borders","$buttonContainer","$activeElement","drawBorders","rect","getBoundingClientRect","setAttribute","map","prop","max","enter","leave","removeAttribute","getButtonContainer","disposeBorders","tppBorders","parentElement","renderButtons","$container","$buttons","_buttons","_dropdownButtons","buttonBuilder","_updateButton","button","$element","appendActionIcon","iconUrl","updateButtons","$flyout","innerHTML","$grouptitle","$list","option","$option","_updateDropdownButton","clearButtons","addButton","buttonSpec","$button","actionName","left","width","_addDropdownButton","_addSimpleButton","ActionStore","Common","api","_previewRequestHandlers","_navigationChangeHandlers","_workflowProcessedHandlers","fireDOMEvents","previewElements","error","Event","ELEMENT_REQUESTED","handler","NAVIGATION_CHANGED","workflowInfo","isDeleted","deleted","ELEMENT_DELETED","workflowId","transitionId","WORKFLOW_PROCESSED","Operation","getAffectedWorkflowElements","then","affectedElements","affectedInfo","STATUS_CHANGED","identifier","params","setPreviewElement","addPreviewRequestHandler","addNavigationChangeHandler","addWorkflowProcessedHandler","ping","_project","languages","previewUrl","location","href","Action","createDetail","detailName","executeOperation","language","master","unshift","lang","showEditDialog","CONTENT_CHANGED","showMetaDataDialog","getElementStatus","renderElement","renderStartNode","deleteSection","deletePage","deleteWorkflowUID","startWorkflow","workflow","processWorkflow","transition","createPage","selectedTemplate","ELEMENT_CREATED","createSectionParams","sectionName","position","positionIndex","createChildSection","CHILD_SECTION_CREATED","createSiblingSection","SIBLING_SECTION_CREATED","createDataset","cropImage","resolution","IMAGE_CHANGED","toggleBookmark","getLanguages","getPreviewUrl","showTranslationDialog","Decorate","decorate","initialized","CUSTOM","CREATE_PAGE","icon","Icon","CREATE_CHILD_SECTION","CREATE_SECTION","CREATE_SIBLING_SECTION","DEBUG_STATUS","DEBUG","EDIT_ELEMENT","EDIT","EDIT_META_DATA","DELETE_SECTION","DELETE","elementType","DELETE_PAGE","workflows","deleteWorkflow","current","getDeleteWorkflowUID","START_WORKFLOW","WORKFLOW","allowed","_workflows","storeType","displayName","PROCESS_WORKFLOW","transitions","CROP_IMAGE","resolutions","ADD_BOOKMARK","indexOf","DELETE_BOOKMARK","TRANSLATE","ln","j","defaultDecorationActions","setDefaultButtons","buttons","scan","head","initPreviewId","contextFromAttributes","startsWith","reduce","substr","toLowerCase","initContext","_customActions","frameDecorator","MutationObserver","mutations","mutation","nodes","removedNodes","directMatch","parentMatch","some","observe","subtree","childList","_updateDecoration","customActions","updateContext","updateDecoration","decorator","updatePreviewId","Debug","debug","currentConfig","defaultConfig","enableDebugLog","rawProp","apiInitialized","gitHash","checkVersions","timeout","backendVersion","frontendVersion","TPP_API","INIT","WORKFLOW_STARTED","FIRST","LAST","BEFORE","AFTER","INDEX","PAGE_DRIVE","PAGE_REF_DRIVEN","GROUPACTION","_internal","CommonConstructor","OperationConstructor","DecorateConstructor","DebugConstructor","setMessageReceiver","receiver","enable","initCalled","init","tppConfig","Button","parseInt","reload","common","inIFrame","pingResult","checkForReceiver","receiverFound","connectHandler","$script","getTppCamelCase","str","toUpperCase","setBoolean","strValue","setString","setNumber","querySelector","Number","number","valueOf","$parseInt","$trim","trim","ws","hex","radix","string","fails","spaces","space","ltrim","rtrim","exporter","KEY","ALIAS","exp","FORCE","TYPE","TO_STRING","pos","charCodeAt","charAt","descriptor","getKeys","defineProperties","toIObject","arrayIndexOf","names","toLength","toAbsoluteIndex","IS_INCLUDES","$this","el","fromIndex","toObject","ObjectProto","isArrayIter","createProperty","getIterFn","arrayLike","step","aLen","mapfn","mapping","iterFn","$defineProperty","$JSON","stringify","Promise","TO_STRING_TAG","DOMIterables","Collection","addToUnscopables","_k","Arguments","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","anInstance","forOf","speciesConstructor","task","microtask","newPromiseCapabilityModule","perform","userAgent","promiseResolve","versions","v8","$Promise","isNode","empty","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","notify","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","fail","domain","_h","onHandleUnhandled","exit","onUnhandled","unhandled","isUnhandled","onunhandledrejection","reason","_a","onrejectionhandled","$reject","_d","_w","$resolve","wrapper","executor","err","onFulfilled","onRejected","capability","all","iterable","remaining","$index","alreadyCalled","race","forbiddenField","BREAK","RETURN","un","macrotask","Observer","WebKitMutationObserver","last","flush","navigator","standalone","toggle","node","createTextNode","characterData","DESCRIPTORS","onFinally","callbackfn","assign","gOPS","pIE","$assign","A","K","k","getSymbols","isEnum","getOwnPropertySymbols","$Object"],"mappings":"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","file":"fs-tpp-api.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TPP_API\"] = factory();\n\telse\n\t\troot[\"TPP_API\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 45);\n","var core = module.exports = { version: '2.6.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","module.exports = {};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","module.exports = true;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","// noinspection JSAnnotator\nexport default require(\"./fs-tpp-api.js\");\n// wrapper so the api could be transpiled with babel, but kept in the old form for compatibility","(function (root, factory) {\n /*global module, define, define*/\n if (typeof exports === 'object') {\n // COMMON-JS\n module.exports = factory();\n } else if (typeof define === 'function' && define['amd']) {\n // Asynchronous Module Definition AMD\n define([], factory);\n } else {\n //GLOBAL (e.g. browser)\n root['TPP_API'] = factory();\n }\n}(this, function () {\n 'use strict';\n /* globals Promise */\n\n\n var FRONTEND_VERSION = \"1.2.23\";\n var GIT_HASH = \"eab1dfe7f89e17b8be3a27d397351176b83ae007\";\n\n var messageReceiverOverride = null; // for debugging and tests\n\n var DEFAULT_CONFIG = {\n origin: \"*\", // every origin allowed\n autoScanDelay: null, // disabled,\n alwaysDebug: false, // debug will be enabled by default, \"false\" means debug has to be toggled manually\n autoReload: false, // disabled\n deleteSectionEnabled: false,\n deletePageWorkflow: null,\n workflowMode: 'PAGE_DRIVEN'\n };\n\n var config = {};\n\n var util = {};\n\n /**\n * @private\n * @param {HTMLElement} [$root] - The root to search from, document if not set.\n * @return {[]}\n */\n util.previewElements = function ($root) {\n return [].slice.call(($root || document).querySelectorAll('[data-preview-id]'));\n };\n\n util.filter = {};\n\n /*\n * Filter predicate\n */\n util.filter.byId = function (previewId) {\n return function ($el) {\n return $el.dataset.previewId === previewId;\n };\n };\n\n util.filter.byNonEmpty = function (result) {\n return (!!result);\n };\n\n\n /**\n * This generates a mapper that is initialized by a list of status elements.\n * The generated mapper matches a given element with a previewId against the list\n * of status elements.\n * If there is no match it maps to null.\n * If there is a match it maps to an info object like this:\n * {\n * target, //The HTMLElement that was given.\n * previewId, //The involved previewId as string\n * status //The status object of the store element\n * }\n * @private\n * @param affected\n * A WorkflowResult holding a \"statusList\"\n * @return {Function}\n * A mapper from {HTMLElement}->{target,previewId,status}\n */\n util.filter.matchAffectedInfo = function (affected) {\n\n var statusMap = {};\n if (affected && affected['statusList']) {\n affected['statusList'].forEach(function (status) {\n statusMap[status['id']] = status;\n });\n }\n\n return function ($el) {\n var previewId = $el.dataset.previewId;\n var fsIdInfo = util.previewIdCache(previewId);\n if (fsIdInfo) {\n var id = fsIdInfo['id'].toString();\n var status = statusMap[id];\n if (status && status['storeType'] === fsIdInfo['store']) {\n return {\n previewId: previewId,\n status: status,\n $target: $el\n };\n }\n }\n return null;\n }\n };\n\n\n /**\n * Poor-developers isFunction. Not full lodash version.\n */\n util.isFunction = function (val) {\n return typeof (val) === 'function';\n };\n\n /**\n * Object means arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`\n * Compare with lodash.\n * @param val\n * @return {boolean} true, if val is an 'Object'\n */\n util.isObject = function (val) {\n var type = typeof val\n return val != null && (type == 'object' || type == 'function')\n };\n\n /**\n * Poor-developers isString. Not full lodash version.\n */\n util.isString = function (val) {\n return typeof (val) === 'string';\n };\n\n\n /**\n * Message Service doing all the communication with the\n * fs-tpp-receiver.js located in the ContentCreator parent window.\n *\n * Utilizes Window.postMessage.\n * The Service stores the callbacks, calls them when the matching response-message is received\n * and then remove the callback from storage.\n * @name TppMessageService\n * @private\n * @see {Window}\n * @type {{init, send, serialize, setInternalEventHandler, updateReceiver}}\n */\n // Serialize a callback to an id for postMessage usage\n util.messageService = (function () {\n\n\n var ms = {};\n\n /**\n * Message type of incoming messages from the fs-tpp-receiver in the outer frame.\n * @name TppMessageService.MessageType\n * @private\n */\n var MESSAGE_TYPE = {\n /**\n * @name TppMessageService.MessageType.CALLBACK\n */\n CALLBACK: \"CALLBACK\",\n /**\n * @name TppMessageService.MessageType.EVENT\n */\n EVENT: \"EVENT\"\n };\n\n /// ====== Callback storage ======\n var storage = [null];\n\n /**\n * Stores a callback under a given id.\n * @param {function} callback - The function to be stored.\n * @return {number} - The callback id.\n * Might be null if no function is given.\n */\n ms.serialize = function (callback) {\n if (typeof (callback) === 'function') {\n return storage.push(callback) - 1;\n }\n return null;\n };\n\n /**\n * Invokes a callback for the given callbackId with data as first parameter\n * @param {number} callbackId - A callback id\n * @param {string|Object}data\n * @private\n */\n var deserialize = function (callbackId, data, permanent) {\n if (callbackId && storage[callbackId]) {\n storage[callbackId].call(null, data);\n if (!permanent) {\n delete storage[callbackId];\n }\n }\n };\n\n var tryParseResult = function (result) {\n if (typeof (result) === 'string' && result.match(/^\\s*[\\[{\"]/) !== null) {\n try {\n return JSON.parse(result);\n } catch (ignore) {\n // not a json\n }\n }\n return result;\n };\n\n var handleCallback = function (tppMessage) {\n /** @type {string|Object} */\n var response = tppMessage._response;\n var callbackId = tppMessage._callbackId;\n deserialize(callbackId, tryParseResult(response));\n };\n\n\n // ======= Event Handler ====== //\n /**\n * List of possible event handlers. The handlers translates the internal _messageId\n * These are internal markers of events.\n */\n var EVENT_HANDLER = {};\n var handleOuterEvent = function (tppMessage) {\n var eventHandler = EVENT_HANDLER[tppMessage._eventId];\n if (typeof eventHandler === 'function') {\n var payload = tppMessage._payload;\n eventHandler(tryParseResult(payload));\n }\n };\n\n ms.setInternalEventHandler = function (name, eventHandler) {\n EVENT_HANDLER[name] = eventHandler;\n };\n\n /**\n * Handles incomming messages from the fs-tpp-receiver in the outer frame.\n * It dispatches the diferent types of messages.\n * @param e\n */\n var receiveMessage = function (e) {\n if (typeof (e.data) === 'object' && typeof (e.data.tpp) === 'object') {\n util.log(\"Message Received \", e.data);\n if (e.data.tpp._messageType === MESSAGE_TYPE.CALLBACK) {\n handleCallback(e.data.tpp);\n } else if (e.data.tpp._messageType === MESSAGE_TYPE.EVENT) {\n handleOuterEvent(e.data.tpp);\n }\n }\n };\n\n /**\n * Internal send message to the fs-tpp-receiver.\n * The messageReceiverOverride gives the opportunity to mock the outer frame during testing or write\n * your own connection glue code.\n * @param message\n * @param origin\n */\n var sendMessageInternal = function (message, origin) {\n if (messageReceiverOverride && typeof messageReceiverOverride.postMessage === 'function') {\n // Testing and mocking override\n messageReceiverOverride.postMessage(message, origin);\n } else if (typeof window !== 'undefined' && window['top'] !== window) {\n // Default case\n window.top.postMessage(message, origin);\n }\n };\n\n /**\n * Send a message to the fs-tpp-receiver running in the outer frame.\n * Expect to get a message back of {@link TppMessageService.MessageType.CALLBACK}\n * @private\n * @param {Object} message\n * @param {Function} [callback]\n * @param {string} origin\n */\n ms.send = function (message, origin, callback) {\n if (typeof callback === 'function') {\n message.tpp = message.tpp || {};\n message.tpp._callbackId = ms.serialize(callback);\n }\n sendMessageInternal(message, origin);\n util.log(\"Message send \", message, origin);\n };\n\n /**\n * (Re-)initialize message receiving for unit test mode\n */\n ms.updateReceiverOverride = function () {\n if (messageReceiverOverride && typeof messageReceiverOverride.registerOnMessage === 'function') {\n // testing and mocking\n messageReceiverOverride.registerOnMessage(receiveMessage);\n } // no else (handling here is not exclusive)\n };\n\n /**\n * Send message to receiver so the receiver can send back {@link TppMessageService.MessageType.EVENT} messages.\n */\n ms.connectApi = function (origin, callback) {\n var message = {\n tpp: {connectApi: true}\n };\n ms.send(message, origin, callback);\n };\n\n //init message handler\n if (typeof window !== 'undefined') {\n // Default case\n window.addEventListener('message', receiveMessage);\n }\n return ms;\n })();\n\n\n /**\n * Internal logging util. Stores enabled state within localStorage.\n * It can be enabled without code changes in the browsers dev console:\n * TPP_API.enableDebugLog().\n *\n * @private\n * @type {Function}\n */\n util.log = (function () {\n var LOCAL_STORAGE_DEBUG_LOG_ENABLED = 'tpp_debug_log_enabled';\n var _enabledFallback = false;\n var _isEnabled = function () {\n if (typeof localStorage !== 'undefined') {\n try {\n return localStorage.getItem(LOCAL_STORAGE_DEBUG_LOG_ENABLED) === 'true';\n } catch (e) {\n // localStorage not available\n }\n }\n return _enabledFallback;\n };\n\n var _setEnabled = function (enabled) {\n if (typeof localStorage !== 'undefined') {\n try {\n localStorage.setItem(LOCAL_STORAGE_DEBUG_LOG_ENABLED, enabled);\n } catch (e) {\n // localStorage not available\n }\n }\n _enabledFallback = enabled;\n };\n\n var _log = function debugLogger() {\n if (_isEnabled()) {\n var args = ['%cTPP:%c', 'font-style:italic', ''].concat([].slice.call(arguments));\n // noinspection JSUnresolvedFunction\n console.log.apply(console, args);\n }\n };\n\n _log.isEnabled = _isEnabled;\n _log.setEnabled = _setEnabled;\n\n return _log;\n })();\n\n // EventEmitter\n util.emit = function (eventName, detail, $target) {\n // noinspection JSCheckFunctionSignatures\n var event = new CustomEvent(eventName, {detail: detail, bubbles: true});\n $target = $target || document.body;\n $target.dispatchEvent(event);\n util.log(\"Event emitted\", event);\n };\n\n\n //list the parsed results from previewId-Strings\n util.previewIdCache = function () {\n var _cache = {};\n\n var parsePreviewId = function (previewId) {\n // OCM-390 we do not support uuid.lang format in old frontend api, only for SNAP\n try {\n var previewIdObjectString = atob(previewId);\n var previewIdObject = JSON.parse(previewIdObjectString);\n return JSON.parse(atob(previewIdObject['data-fs-id']));\n } catch (e) {\n util.log(\"Error in previewIdMatchesStatus for\", previewId, e);\n return null;\n }\n };\n\n var getInfo = function (previewId) {\n if (!_cache[previewId]) {\n var fsIdObject = parsePreviewId(previewId);\n if (fsIdObject) {\n _cache[previewId] = fsIdObject;\n }\n }\n return _cache[previewId];\n };\n\n getInfo.clear = function () { _cache = {};};\n return getInfo;\n }();\n\n /**\n *\n * A light variant of underscore/lodash _.get().\n * Can read path expressions like\n * * 'a'\n * * 'a.b.c'\n * * ['a','b','c']\n * But not:\n * * 'a[1].b'\n *\n * Results:\n * * If object is null, undefined, or otherwise 'falsey'\n * * If path is null, undefined, an empty string, or not a string nor an array of String: undefined.\n * * Given a path 'a': object['a']\n * * Give a path 'a.b.c': getPath(['b','c'],object['a']);\n * * If path is []: undefined\n * * Given a path ['a']: object['a']\n * * Given a path ['a','b','c']: getPath(['b','c'],object['a']);\n * @protected\n * @param {string|[]} path\n * @param {Object} object\n * @return {*}\n */\n util.getValue = function (path, object) {\n if (!object || !path) {\n return undefined;\n }\n var pathSpec = [];\n if (typeof path === 'string') {\n pathSpec = path.split('.');\n } else if (path.constructor !== 'Array') {\n pathSpec = path;\n }\n if (pathSpec.length === 0) {\n return undefined;\n } else if (pathSpec.length === 1) {\n return object[pathSpec[0]];\n }\n return util.getValue(pathSpec.slice(1), object[pathSpec[0]]);\n };\n\n\n /**\n * The basic status object of a FirstSpirit element.\n * The documented properties are a subset and describe a fixed API.\n * Properties not documented here may change at any time.\n *\n * @example\n * {\n * \"storeType\": \"PAGESTORE\",\n * \"elementType\": \"Page\",\n * \"displayName\": \"_banner_xml\",\n * \"uid\": \"_banner_xml\",\n * \"released\": true,\n * \"releaseSupported\": true,\n * \"workflows\" : {... }\n * \"permissions\": { ... }\n * }\n *\n * @public\n * @since 1.0.0\n * @name TppElementStatus\n * @property {string} uid - the uid of the element\n * @property {string} displayName - the display name of the element\n * @property {string} elementType - the type of the element\n * @property {string} storeType - the type of the elements store\n * @property {boolean} releaseSupported - 'true' if the given element supports release\n * @property {boolean} release - the current release status of the element (value must be ignored if 'releaseSupported' is false)\n * @property {TppWorkflowStatus} workflows\n * @property {TppPermissionStatus} permissions\n **/\n\n\n /**\n * The descriptor of a FirstSpirit workflow.\n * @example\n * {\n * \"uid\": \"Freigabe Anfordern\",\n * \"displayName\": \"Release request\",\n * \"storeType\": \"TEMPLATESTORE\",\n * \"elementType\": \"Workflow\",\n * \"permissions\": {...}\n * ...\n * }\n * @public\n * @since 1.0.0\n * @name TppWorkflowDescriptor\n * @property {string} uid - the uid of the workflow\n * @property {string} displayName - the display name of the workflow\n * @property {string} storeType - the type of the elements store - in this case always \"TEMPLATESTORE\"\n * @property {string} elementType - the type of the workflow - in this case always \"Workflow\"\n * @property {TppPermissionStatus} permission - the current permissions on the workflow element itself\n */\n\n /**\n * The descriptor of a workflows transition.\n *\n *\n *\n * @example\n * {\n * \"id\": \"8\",\n * \"displayName\": \"Check\",\n * \"uid\": \"Prüfen\"\n * }\n * @public\n * @since 1.0.0\n * @name TppTransitionDescriptor\n * @property {string} id - the id of the transition\n * @property {string} displayName - the display name of the transition\n * @property {string} uid - the uid of the element\n */\n\n /**\n * The current workflow status of the element. Containing running and possible workflows and their status.\n *\n * Called on a Page, the workflow status of the current page will be given.\n * Called on a Section, the workflow status of the page will be given, which contains the section.\n *\n * @example\n * {\n * \"allowed\": [...],\n * \"current\": {...},\n * \"transitions\": [...],\n * \"deleteWorkflow\": null\n * }\n * @public\n * @since 1.0.0\n * @name TppWorkflowStatus\n * @property {[TppWorkflowDescriptor]} allowed - list of all allowed workflows in the current element\n * @property {TppWorkflowDescriptor} current - gives the current running workflow of this element (can be null)\n * @property {[TppTransitionDescriptor]} transitions - gives a list a possible transitions in the running workflow (can be null)\n * @property {TppWorkflowDescriptor} deleteWorkflow - gives a dedicated deleteWorkflow for this element, if one is configured in the FirstSpirit project (can be null)\n **/\n\n\n /**\n * The permission of the current user on the given element.\n * @example\n * {\n * \"see\": true,\n * \"read\": true,\n * \"change\": true,\n * \"delete\": true,\n * \"appendLeaf\": true,\n * \"deleteLeaf\": true,\n * \"release\": true,\n * \"seeMeta\": true,\n * \"changeMeta\": true,\n * \"changePermission\": true\n * }\n * @public\n * @since 1.0.0\n * @name TppPermissionStatus\n * @property {boolean} see\n * @property {boolean} read\n * @property {boolean} change\n * @property {boolean} delete\n * @property {boolean} appendLeaf\n * @property {boolean} deleteLeaf\n * @property {boolean} release\n * @property {boolean} seeMeta\n * @property {boolean} changeMeta\n * @property {boolean} changePermission\n **/\n\n\n /**\n * Fluent builders to create typed objects.\n * Ensures the \"interface\" the object and should provide a stable API.\n *\n * @private Could be made part of the official api.\n */\n util.Types = (function () {\n\n /**\n * Internal representation if a concrete button action in the decorate API.\n *\n * Instances of action will be produced by the API.\n *\n * @public\n * @since 1.0.0\n * @name TppAction\n * @class\n */\n /**\n * @protected\n * @name TppActionBuilder\n * @example\n * var action = createActionBuilder().name('sendMail').execute(...).build();\n *\n * @return {TppActionBuilder}\n */\n var createActionBuilder = function () {\n\n var build = function (template) {\n\n var action = {};\n\n var _status = {};\n\n var conf = Object.create(template);\n\n action._typeMarker = 'TppAction';\n\n /**\n * The current status of the FirstSpirit element connected with this action.\n *\n * This object might be empty, if there is no current element given by a previewId or the\n * information is not fetched yet by using {@link TPP_API.Operation.getElementStatus}.\n *\n * To avoid null- and undefined-checks, the method provides an optional argument path to query a\n * nested object property.\n *\n * @example\n * action.getStatus() // Give the object set with action.setStatus\n * action.getStatus(\"a.b\") // Gives action.getStatus().a.b, if value exists. Otherwise: undefined\n *\n * @public\n * @since 1.0.0\n * @name TppAction#getStatus\n * @method\n * @param {string} [path] - Optional property path to query on status\n * @return {TppElementStatus|*} - the status of the current element. Might be an empty object.\n */\n action.getStatus = function (path) {\n if (path) {\n return util.getValue(path, _status);\n }\n return _status;\n };\n\n /**\n * Set the current status of the action.\n *\n * @public\n * @since 1.0.0\n * @name TppAction#setStatus\n * @method\n * @param status\n */\n action.setStatus = function (status) {\n _status = status;\n };\n\n\n /**\n * The current name of the action.\n *\n * @public\n * @since 1.0.0\n * @name TppAction#getName\n * @method\n * @return {string}\n */\n action.getName = function () {\n return conf._name;\n };\n\n /**\n * The label of the action\n * @public\n * @since 1.0.0\n * @name TppAction#getLabel\n * @method\n * @return {string}\n */\n action.getLabel = function () {\n return conf._label;\n };\n\n /**\n * The icon url of the action\n * @public\n * @since 1.0.0\n * @name TppAction#getIcon\n * @method\n * @return {string}\n */\n action.getIcon = function () {\n return conf._icon;\n };\n\n /**\n * The preview id of the action\n * @public\n * @since 1.0.0\n * @name TppAction#getPreviewId\n * @method\n * @return {string} - can be null.\n */\n action.getPreviewId = function () {\n return conf._previewId;\n };\n\n /**\n * The current DOM element the action is attached to\n * @public\n * @since 1.0.0\n * @name TppAction#getElement\n * @method\n * @return {HTMLElement} - can be null\n */\n action.getElement = function () {\n return conf._element;\n };\n\n /**\n * The context of the action.\n * To avoid null- and undefined-checks, the method provides an optional argument path to query a\n * nested object property.\n *\n * @public\n * @since 1.0.0\n * @name TppAction#getContext\n * @method\n * @param {string} [path] - Optional property path to query on context\n * @return {Object}\n */\n action.getContext = function (path) {\n if (path) {\n return util.getValue(path, conf._context);\n }\n return conf._context;\n };\n\n /**\n * Check if the action is enabled\n * @public\n * @since 1.0.0\n * @name TppAction#isEnabled\n * @method\n * @return {boolean}\n */\n action.isEnabled = function () {\n if (typeof conf._isEnabled === 'function') {\n return !!(conf._isEnabled(action, Array.prototype.slice.call(arguments)));\n }\n return true;\n };\n\n /**\n * Execute the action\n * @public\n * @since 1.0.0\n * @name TppAction#execute\n * @method\n */\n action.execute = function () {\n if (typeof conf._execute === 'function') {\n return conf._execute(action, Array.prototype.slice.call(arguments));\n }\n };\n\n /**\n * Check if the action is configured with options.\n * Compare to {@link TppActionBuilder#options}.\n * @public\n * @since 1.0.0\n * @name TppAction#supportsOptions\n * @return {boolean}\n */\n action.supportsOptions = function () {\n return (!!conf._getOptions);\n };\n\n /**\n * Returns the action's possible options\n * @public\n * @since 1.0.0\n * @name TppAction#getOptions\n * @return {[TppActionOptions]}\n */\n action.getOptions = function () {\n if (typeof conf._getOptions === 'function') {\n return conf._getOptions(action, Array.prototype.slice.call(arguments));\n } else {\n return conf._getOptions; //fixme: freeze the array\n }\n };\n\n return action;\n\n };\n\n /**\n *\n * Creates a copy and sets the values.\n * This is used to make the builder immutable,\n * in the way that every chain-able function\n * gives a new instance of a builder keeping.\n *\n * Object.freeze is not used as an optimization,\n * because the we handle the template here as\n * \"private\" variable\n * @protected\n * @param {Object} template\n * @param {Object} values\n *\n */\n var builderWith = function (template, values) {\n var _template = Object.create(template);\n if (values) {\n _template = Object.assign(_template, values);\n }\n return createBuilder(_template);\n };\n\n\n /**\n * Fluent and immutable API to configure custom buttons.\n * Methods can be chained and they produce a new immutable\n * instance of an action builder.\n *\n * See {@link TPP_API.Button.CUSTOM} for more configuration examples.\n *\n * See {@link TppDecorator} and {@link TPP_API.Decorate.element} for\n * normal use case in decorate Api.\n *\n * @example\n * // Basic API\n *\n * // 1. Configuration of a custom action\n * var actionBuilder = TPP_API.createActionBuilder()\n * .name('sendMail')\n * .execute(...)\n * .options();\n\n * // 2. Immutable usage\n * var basic = TPP_API.createActionBuilder().\n * .isEnable(elementIsWritable)\n * .context({conf : \"some common settings\"});\n *\n * // The two following examples share the same basic properties.\n * // 2.1\n * var rotateActionBuilder = basic\n * .options([{id:'left', label:'left'}, {id : right}])\n * .execute(rotate);\n *\n * // 2.2\n * // basic action builder can be used here as well.\n * var flipActionBuilder = basic.execute(flip);\n *\n * @class\n * @public\n * @since 1.0.0\n * @name TppActionBuilder\n * @type {TppActionBuilder}\n */\n /**\n * @protected\n * @param {Object} template\n */\n var createBuilder = function (template) {\n\n var builder = {};\n builder._typeMarker = 'TppActionBuilder';\n\n /**\n * Internal button name, should be unique.\n * Will also be used for css classes.\n *\n * Defines the result of {@link TppAction#getName}\n *\n * @public\n * @since 1.0.0\n * @name TppActionBuilder#name\n * @method\n * @param {string} name The unique name of the button.\n * @return {TppActionBuilder}\n */\n builder.name = function (name) {\n return builderWith(template, {_name: name});\n };\n\n /**\n * Button label (Currently only used to title dropdown buttons).\n *\n * Defines the result of {@link TppAction#getLabel}.\n * @public\n * @since 1.0.0\n * @name TppActionBuilder#label\n * @method\n * @param {string} label - The readable and translated label of the button.\n * @return {TppActionBuilder}\n */\n builder.label = function (label) {\n return builderWith(template, {_label: label});\n };\n\n /**\n * Provide context, available to action.\n *\n * This is intended to hold fixed configuration for the resulted actions.\n *\n * Variable data will be stored in {@link TppAction#getStatus}.\n * For this reason there is no method to set the status in the action builder but in the current\n * action itself {@link TppAction#setStatus}. And vice versa there is no method to set the context\n * in the {@link TppAction}.\n *\n * Defines the result of {@link TppAction#getContext}.\n *\n * @public\n * @since 1.0.0\n * @name TppActionBuilder#context\n * @method\n * @param {Object} context - An arbitrary object of user data.\n * @return {TppActionBuilder}\n */\n builder.context = function (context) {\n return builderWith(template, {_context: context});\n };\n\n\n /**\n * Update the provided context.\n *\n * This can be used, if the context has to be build up step by step.\n *\n * @name TppActionBuilder#updateContext\n * @public\n * @since 1.1.0\n * @param {Object} contextUpdate - The current object of user data will be updated by Object assign\n * @return {TppActionBuilder}\n * @example\n * builder\n * .context({a:'foo', b:1}); // Set. Context is now: {a: 'foo', b: 1}\n * .updateContext({b: 2}); // Update. Context is now: {a: 'foo', b: 2}\n * .updateContext({c: 'bar'}); // Update. Context is now: {a: 'foo', b: 2, c: 'bar'}\n * .context({b: 3}); // Override. Context is now: {b: 3}\n *\n */\n builder.updateContext = function (contextUpdate) {\n var context = Object.assign({}, template._context, contextUpdate);\n return builderWith(template, {_context: context});\n };\n\n\n /**\n * This will be called internally when used in decorated elements.\n *\n * Defines the result of {@link TppAction#getElement}.\n *\n * It is not necessary to call this manually in the decorate use case.\n *\n * @public\n * @since 1.0.0\n * @name TppActionBuilder#element\n * @method\n * @param element\n * @return {TppActionBuilder}\n */\n builder.element = function (element) {\n return builderWith(template, {_element: element});\n };\n\n /**\n * Icon, dimension should be 24x24 pixels.\n *\n * Defines the result of {@link TppAction#getIcon}\n *\n * @public\n * @since 1.0.0\n * @name TppActionBuilder#icon\n * @param {string} url - The url of the buttons icon.\n * @return {TppActionBuilder}\n */\n builder.icon = function (url) {\n return builderWith(template, {_icon: url});\n };\n\n /**\n * This will be called internally when used in decorated elements.\n *\n * It is not necessary to call this manually in the decorate use case.\n *\n * Use {@link TppDecorator.updatePreviewId} instead to update the preview id for all actions\n * of one element.\n *\n * Defines the result of {@link TppAction#getPreviewId}\n *\n * @public\n * @since 1.0.0\n * @name TppActionBuilder#previewId\n * @method\n * @param {string} previewId - The preview id connected with the current action.\n * @return {TppActionBuilder}\n */\n builder.previewId = function (previewId) {\n return builderWith(template, {_previewId: previewId});\n };\n\n /**\n * Callback will get the current {@link TppAction} as first parameter.\n * The action is given to use the read only properties in this callback.\n * Like: {@link TppAction#getContext}, {@link TppAction#getStatus},\n * {@link TppAction#getOptions}, {@link TppAction#getName}.\n *\n * @public\n * @since 1.0.0\n * @callback TppAction~IsEnabledCallback\n * @param {TppAction} self - The action itself\n * @return {boolean} - true if the button should be enabled and visible.\n */\n /**\n * The call to {@link TppAction#isEnabled} will be delegated to\n * the given callback.\n *\n * @public\n * @since 1.0.0\n * @name TppActionBuilder#isEnabled\n * @method\n * @param {TppAction~IsEnabledCallback} isEnabled - An isEnabled callback\n * @return {TppActionBuilder}\n */\n builder.isEnabled = function (isEnabled) {\n return builderWith(template, {_isEnabled: isEnabled});\n };\n\n\n /**\n * Callback will get the current {@link TppAction} as first parameter.\n * The action is given to use the read only properties in this callback.\n * Like: {@link TppAction#getContext}, {@link TppAction#getStatus},\n * {@link TppAction#getOptions}, {@link TppAction#getName}.\n *\n * The arguments array of the {@link TppAction#execute} call will be given as second parameter.\n * Used in the decorate API: If the {@link TppAction} has options, the selected option will given\n * as first two parameters of this array.\n * @public\n * @since 1.0.0\n * @callback TppAction~ExecuteCallback\n * @param {TppAction} self - The action itself\n * @param {Array} args - An array of arguments given to the {@link TppAction#execute}.\n * args[0] will be the selected Options id\n * args[1] will be the selected Options label\n */\n /**\n * The call to {@link TppAction#execute} will be delegated to\n * the given callback. The decorate api binds this execute to its buttons or options.\n * @public\n * @since 1.0.0\n * @name TppActionBuilder#execute\n * @method\n * @param {TppAction~ExecuteCallback} execute - An executeCallback\n * @return {TppActionBuilder}\n */\n builder.execute = function (execute) {\n return builderWith(template, {_execute: execute});\n };\n\n /**\n * A possible option of a drop down action.\n * The options contains a unique id and a redable and translated label.\n * @public\n * @since 1.0.0\n * @typedef {{id,label}} TppActionOptions\n */\n /**\n * Callback will get the current {@link TppAction} as first parameter.\n * The action is given to use the read only properties in this callback.\n * Like: {@link TppAction#getContext}, {@link TppAction#getStatus},\n * {@link TppAction#getOptions}, {@link TppAction#getName}.\n *\n *\n * The arguments array of the {@link TppAction#getOptions} call will be given as second parameter.\n *\n * @public\n * @since 1.0.0\n * @callback TppAction~GetOptionsCallback\n * @param {TppAction} self - The action itself\n * @param {Array} args - An array of arguments given to the TppAction#getOptions.\n * @return {[TppActionOptions]}\n */\n /**\n * The call to {@link TppAction#getOptions} will be delegated to\n * the given callback or will return the given array.\n * The callback can be used to calculate dynamic options.\n *\n * If the callback or array is given {@link TppAction#supportsOptions} returns true,\n * and a drop down button will be rendered with all given options, instead of a simple button.\n *\n * @public\n * @since 1.0.0\n * @name TppActionBuilder#options\n * @param {TppAction~GetOptionsCallback|[TppActionOptions]} getOptions - Either a callback or a static list of TppActionOptions\n * @return {TppActionBuilder}\n */\n builder.options = function (getOptions) {\n return builderWith(template, {_getOptions: getOptions});\n };\n\n /**\n * Alias for {@link TppActionBuilder#options}.\n * @public\n * @since 1.0.0\n * @name TppActionBuilder#getOptions\n * @param {TppAction~GetOptionsCallback|[TppActionOptions]} getOptions - Either a callback or a static list of TppActionOptions\n * @return {TppActionBuilder}\n */\n builder.getOptions = builder.options;\n\n /**\n * Gives a new instance of {@link TppAction}.\n *\n * It is not necessary to call this manually in the decorate use case.\n *\n * @protected\n * @name TppActionBuilder#build\n * @method\n * @return {TppAction}\n */\n builder.build = function () {\n return build(template);\n };\n\n return builder;\n };\n\n var defaultIcon = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAF1JREFUOE/t00sKACAIRVH3v2n7UNFIb4qzgmZ6kIeKqkrFL0HHoB8+CdAoemzz0Xqc8YYxTie4YYRHYRfPwCaegc3eKOz2uQVrxcq3gg6C9xiD+4ieG+j1ffgk0AB67wNERdYKGwAAAABJRU5ErkJggg==\";\n\n var initialTemplate = {\n _name: null,\n _label: null,\n _previewId: null,\n _element: null,\n _context: {},\n _isEnabled: null,\n _execute: null,\n _getOptions: null,\n _icon: defaultIcon\n };\n\n return builderWith({}, initialTemplate);\n };\n\n\n var actionHelper = (/**\n *\n * Convenience functions to create actions from builder\n * @protected\n * @return {{create}}\n */\n function () {\n var createActionFromBuilder = function (builder, context) {\n if (typeof context === 'object') {\n return builder.context(context).build();\n } else {\n return builder.build();\n }\n };\n\n var actionSpecToBuilder = function (actionSpec) {\n if (actionSpec['_typeMarker'] === 'TppActionBuilder') {\n return actionSpec;\n }\n if (typeof actionSpec === 'function') {\n var builder = actionSpec(util.Types.createActionBuilder());\n if (typeof builder === 'undefined') {\n util.log(\"TppActionBuilderCallback has to return the buttonBuilder!\");\n return null;\n }\n return builder;\n }\n };\n\n /**\n * @return {TppAction}\n */\n var create = function (actionSpec, context) {\n var action = null;\n var actionBuilder = actionSpecToBuilder(actionSpec);\n if (actionBuilder) {\n action = createActionFromBuilder(actionBuilder, context);\n }\n if (actionSpec['_typeMarker'] === 'TppAction') {\n if (!context) {\n action = actionSpec;\n } else {\n util.log(\"Illegal arguments context not allowed with given action\");\n }\n }\n return action\n };\n\n return {\n create: create,\n actionSpecToBuilder: actionSpecToBuilder\n };\n\n })();\n\n return {\n createActionBuilder: createActionBuilder,\n actionHelper: actionHelper\n };\n })();\n\n\n util.path = function (pathString) {\n if (typeof pathString !== 'string') {\n return null;\n }\n var elements = pathString\n .split('/')\n .filter(function (element) {return (element.length > 0); });\n\n if (elements.length === 0) {\n return null;\n }\n\n var isFolder = (pathString[pathString.length - 1] === '/');\n return {\n raw: pathString,\n isFolder: isFolder,\n normalized: elements.join('/'),\n parent: elements.slice(0, -1).join('/'),\n name: elements[elements.length - 1]\n };\n };\n\n\n /**\n * DOM manipulations to create the user interface.\n *\n * @private\n * @type {{renderFrame, renderButtons}}\n */\n util.ui = (function () {\n\n var ui = {};\n\n var hasClass = function (element, className) {\n if (element.classList) {\n return element.classList.contains(className);\n } else {\n return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);\n }\n };\n\n var addClass = function (element, className) {\n if (element.classList) {\n element.classList.add(className);\n } else {\n element.className += ' ' + className;\n }\n };\n\n var removeClass = function (element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else {\n element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n }\n };\n\n\n /**\n * Adds an interactive/mouseover frame to a given element of the external app.\n * @private\n * @function\n */\n ui.renderFrame = function ($el) {\n\n var tppFrameDecorator = {};\n\n var $borders = document.body.appendChild(document.createElement('div'));\n $borders.className = 'tpp-borders';\n\n var $buttonContainer = $borders.appendChild(document.createElement('div'));\n $buttonContainer.className = 'tpp-buttons-container';\n\n var $activeElement = null;\n\n var drawBorders = function () {\n if ($activeElement !== null) {\n var rect = $activeElement.getBoundingClientRect();\n $borders.setAttribute('style', 'opacity: 1; ' + ['top', 'left', 'width', 'height'].map(function (prop) {\n return prop + ': ' + (prop === 'height' ? Math.max(rect[prop], 27) : rect[prop]) + 'px;'\n }).join(' '));\n $buttonContainer.setAttribute('style', 'display: block; ' + ['top', 'left', 'width'].map(function (prop) {\n return prop + ': ' + rect[prop] + 'px;'\n }).join(' '));\n }\n };\n\n var hideBorders = function () {\n $borders.setAttribute('style', 'transition: all 0s;');\n $buttonContainer.removeAttribute('style');\n };\n\n // we expect a window here\n window.addEventListener('scroll', drawBorders);\n\n var enter = function () {\n $activeElement = $el;\n drawBorders();\n };\n\n var leave = function () {\n $activeElement = null;\n setTimeout(function () {\n if ($activeElement === null) {\n hideBorders();\n }\n }, 0);\n };\n\n $el.addEventListener('mouseenter', enter);\n $buttonContainer.addEventListener('mouseenter', enter);\n\n $el.addEventListener('mouseleave', leave);\n $buttonContainer.addEventListener('mouseleave', leave);\n\n tppFrameDecorator.getButtonContainer = function () {\n return $buttonContainer;\n };\n tppFrameDecorator.disposeBorders = function () {\n var tppBorders = $buttonContainer.parentElement;\n if (tppBorders.parentElement) {\n tppBorders.parentElement.removeChild(tppBorders);\n }\n };\n\n return tppFrameDecorator;\n };\n\n\n /**\n * @typedef {{addButton, clearButtons, updateButtons}} TppButtonDecorator\n */\n /**\n * Add buttons panel to the given container element.\n * @private\n * @param $container\n * @returns {TppButtonDecorator}\n */\n ui.renderButtons = function ($container) {\n\n var $buttons = $container.appendChild(document.createElement('span'));\n $buttons.className = 'tpp-buttons';\n\n /** @type {[]} */\n var _buttons = [];\n /** @type {[]} */\n var _dropdownButtons = [];\n\n /** @type TppButtonDecorator */\n var buttonBuilder = {};\n\n var _updateButton = function (status, button) {\n button.action.setStatus(status);\n button.$element.dataset.enabled = button.action.isEnabled();\n if (button.action.isEnabled()) {\n if (hasClass(button.$element, 'tpp-disabled')) {\n removeClass(button.$element, 'tpp-disabled');\n }\n } else {\n if (!hasClass(button.$element, 'tpp-disabled')) {\n addClass(button.$element, 'tpp-disabled');\n }\n }\n };\n\n var _updateDropdownButton = function (status, button) {\n _updateButton(status, button);\n var action = button.action;\n var options = action.getOptions();\n var $flyout = button.$flyout;\n $flyout.innerHTML = '';\n\n var $grouptitle = $flyout.appendChild(document.createElement(\"div\"));\n addClass($grouptitle, \"tpp-workflow-grouptitle\");\n $grouptitle.innerHTML = action.getLabel();\n\n var $list = $flyout.appendChild(document.createElement(\"ul\"));\n options.map(function (option) {\n var $option = document.createElement(\"li\");\n $option.innerHTML = option.label;\n $option.addEventListener('click', function () {\n action.execute(option.id, option.label);\n });\n $list.appendChild($option)\n });\n };\n\n\n /**\n * Creates a button in the given button bar\n * @private\n * @param {TppAction} action\n * @return {void}\n */\n var _addSimpleButton = function (action) {\n var $button = $buttons.appendChild(document.createElement('span'));\n addClass($button, 'tpp-button');\n addClass($button, 'tpp-disabled');\n addClass($button, \"tpp-\" + action.getName());\n $button.dataset.actionName = action.getName();\n $button.dataset.enabled = 'false';\n\n $button.addEventListener('click', function () {\n action.execute();\n });\n\n _buttons.push({\n $element: $button, action: action\n });\n appendActionIcon($button, action.getIcon());\n };\n\n\n /**\n * Creates a drop down button in the given button bar\n * @private\n * @param {TppAction} action\n * @return {void}\n */\n var _addDropdownButton = function (action) {\n var $flyout = $container.appendChild(document.createElement(\"div\"));\n addClass($flyout, 'tpp-workflow-flyout');\n $flyout.addEventListener('mouseover', function () {\n addClass($flyout, 'selected');\n });\n $flyout.addEventListener('mouseout', function () {\n removeClass($flyout, 'selected');\n });\n\n\n var $button = $buttons.appendChild(document.createElement('span'));\n addClass($button, 'tpp-button');\n addClass($button, 'tpp-disabled');\n addClass($button, 'tpp-' + action.getName());\n $button.dataset.actionName = action.getName();\n $button.dataset.enabled = 'false';\n\n $button.addEventListener('mouseover', function () {\n addClass($flyout, 'selected');\n $flyout.style.left = ($button.getBoundingClientRect().left - $container.getBoundingClientRect().left - $flyout.getBoundingClientRect().width + $button.getBoundingClientRect().width) + \"px\";\n });\n\n $button.addEventListener('mouseout', function () {\n removeClass($flyout, 'selected');\n });\n\n _dropdownButtons.push({\n $element: $button, $flyout: $flyout, action: action\n });\n appendActionIcon($button, action.getIcon());\n };\n\n\n var appendActionIcon = function (element, iconUrl) {\n var $image = element.appendChild(document.createElement(\"img\"));\n $image.src = iconUrl;\n };\n\n /**\n * @name TppButtonDecorator.updateButtons\n * @type TppButtonDecorator.updateButtons\n * @private\n */\n buttonBuilder.updateButtons = function (status) {\n _buttons.forEach(function (button) {\n _updateButton(status, button);\n });\n _dropdownButtons.forEach(function (button) {\n _updateDropdownButton(status, button);\n });\n\n };\n\n /**\n * @name TppButtonDecorator.clearButtons\n * @private\n */\n buttonBuilder.clearButtons = function () {\n _buttons = [];\n _dropdownButtons = [];\n $buttons.innerHTML = '';\n };\n\n\n /**\n * @public\n * @since 1.0.0\n * @callback TppActionBuilderCallback\n * @param {TppActionBuilder} _\n * @return {undefined|TppActionBuilder}\n */\n /**\n * @name TppButtonDecorator.addButton\n * @private\n * @param {TppAction|TppActionBuilder|TppActionBuilderCallback} buttonSpec\n * @param {Object} [context]\n * @return {Object} the created action (can be null)\n */\n buttonBuilder.addButton = function (buttonSpec, context) {\n\n var action = util.Types.actionHelper.create(buttonSpec, context);\n if (action) {\n if (action.supportsOptions()) {\n _addDropdownButton(action);\n } else {\n _addSimpleButton(action);\n }\n } else {\n util.log(\"Could not create action from buttonSpec\", buttonSpec);\n }\n return buttonBuilder;\n };\n\n\n return buttonBuilder;\n };\n\n return ui;\n\n })();\n\n //Internal collection of action creators\n var ActionStore = {};\n\n\n // noinspection JSUnusedLocalSymbols to provide same signature for each API component\n /**\n * Basic TPP functions\n *\n * @name TPP_API.Common\n * @public\n * @since 1.0.0\n */\n function Common(api, util, config) {\n //This constructor takes api, util and config for better testability\n\n var common = this;\n\n var _previewRequestHandlers = [];\n var _navigationChangeHandlers = [];\n var _workflowProcessedHandlers = [];\n\n var _language = null;\n\n\n var fireDOMEvents = function (previewId, event, detail) {\n if (!!previewId) {\n util.previewElements()\n .filter(util.filter.byId(previewId))\n .forEach(function ($target) {\n util.emit(event, detail, $target);\n });\n }\n\n if (typeof document !== 'undefined' && typeof document.body !== 'undefined') {\n util.emit(event, detail, document.body);\n }\n };\n\n var fireStatusUpdates = function (response) {\n\n util.previewElements()\n .map(util.filter.matchAffectedInfo(response))\n .filter(util.filter.byNonEmpty)\n .forEach(function (affectedInfo) {\n var detail = {previewId: affectedInfo.previewId, status: affectedInfo.status, context: null};\n util.emit(api.Event.STATUS_CHANGED, detail, affectedInfo.$target);\n });\n };\n\n /**\n * @name TppInternalEventHandler.TPP_PREVIEW_REQUEST\n * @private\n */\n util.messageService.setInternalEventHandler('TPP_PREVIEW_REQUEST', function (payload) {\n if (!payload.error) {\n var previewId = payload.object;\n var detail = {previewId: previewId};\n fireDOMEvents(previewId, api.Event.ELEMENT_REQUESTED, detail);\n _previewRequestHandlers.forEach(function (handler) {handler(previewId);});\n }\n });\n\n /**\n * @name TppInternalEventHandler.TPP_NAVIGATION_CHANGED\n * @private\n */\n util.messageService.setInternalEventHandler('TPP_NAVIGATION_CHANGED', function (payload) {\n if (!payload.error) {\n var previewId = payload.object;\n var detail = {previewId: previewId};\n fireDOMEvents(previewId, api.Event.NAVIGATION_CHANGED, detail);\n _navigationChangeHandlers.forEach(function (handler) {handler(previewId);})\n }\n });\n\n /**\n * @name TppInternalEventHandler.TPP_WORKFLOW_ACTION\n * @private\n */\n util.messageService.setInternalEventHandler('TPP_WORKFLOW_ACTION', function (payload) {\n if (!payload.error) {\n var workflowInfo = payload.object;\n var previewId = workflowInfo.previewId;\n if (workflowInfo.isDeleted) {\n var detail = {\n previewId: workflowInfo.previewId,\n context: null,\n deleted: true\n };\n fireDOMEvents(previewId, api.Event.ELEMENT_DELETED, detail);\n } else {\n var detail = {\n previewId: workflowInfo.previewId,\n workflowId: workflowInfo.workflowId,\n transitionId: workflowInfo.transitionId\n };\n fireDOMEvents(previewId, api.Event.WORKFLOW_PROCESSED, detail);\n _workflowProcessedHandlers.forEach(function (handler) {handler(detail);});\n // Status Update for all affected elements\n api.Operation.getAffectedWorkflowElements(previewId)\n .then(function (affectedElements) {\n fireStatusUpdates(affectedElements);\n });\n }\n }\n });\n\n\n /**\n * Provides access to the WE_API's execute method.\n *\n * The result can be fetched by giving a callback function.\n * If this callback is not set, the function returns a Promise.\n * These are exclusive options.\n *\n * @name TPP_API.Common.execute\n * @public\n * @since 1.0.0\n * @param {string} identifier\n * @param {Object} params\n * @param {Function} [callback] if callback is set, this will be called.\n * @return {Promise|undefined} if callback is not set, this returns a promise\n */\n common.execute = function (identifier, params, callback) {\n var message = {\n tpp: {\n execute: identifier,\n params: params || {}\n }\n };\n if (util.isFunction(callback)) {\n util.messageService.send(message, config.origin, callback);\n } else {\n return new Promise(function (resolve) {\n util.messageService.send(message, config.origin, resolve);\n });\n }\n };\n\n /**\n * Sets Element the ContentCreator should handle as preview element.\n * The PreviewElement of the ContentCreator is given by a PageRef.\n *\n * This has to be controlled by the third party app because a \"page\" in the third party app can possibly contain\n * several first spirit page refs.\n *\n * This delegates to WE_API.Common.setPreviewElement\n *\n * @name TPP_API.Common.setPreviewElement\n * @public\n * @since 1.1.0\n * @param {string} previewId\n * @param {Function} [callback] if callback is set, this will be called when preview element is set\n * @return {Promise|undefined} if callback is not set, this return a promise\n */\n common.setPreviewElement = function (previewId, callback) {\n var message = {\n tpp: {\n setPreviewElement: true,\n previewId: previewId\n }\n };\n if (typeof callback === 'function') {\n util.messageService.send(message, config.origin, callback);\n } else {\n return new Promise(function (resolve) {\n util.messageService.send(message, config.origin, resolve);\n });\n }\n };\n\n /**\n * A callback equivalent to the {@link TPP_API.Event.NAVIGATION_CHANGED}.\n * @public\n * @since 1.1.0\n * @callback TPP_API.Common~PreviewRequestHandler\n * @param {string} previewId\n **/\n /**\n * This can be used to register a handler in case in the ContentCreator a new PreviewElement is requested.\n * This will be triggered for example if an element in a report or search will be triggered via click.\n *\n * How to handle this situation depends on the setup of the third party app. It could be ignored completely, a page\n * reload could be triggered, or an internal re-route without a full page refresh could be triggered.\n *\n * Compare TPP to standard ContentCreator behavior.\n *\n * If TPP is not enabled:\n * * The page change will be triggered by navigating in the preview page or by a click in a report.\n * * The URL of the preview iframe will be changed.\n * * The Page reloads.\n * * The listener of {@link https://docs.e-spirit.com/odfs/template-develo/javascript-apis/contentcreator/common-function/index.html#auf_seitenwechsel_reagieren|WE_API.Common.addPreviewElementListener}\n * * will be called with an FSID as parameter.\n *\n * If TPP is enabled:\n * * The page change will be requested by the a click in a reporter.\n * * The handler of {@link TPP_API.Common.addPreviewRequestHandler|this} very method will be called with a previewId.\n * * The third party app can decide, how to react.\n * * It could ignore the previewId, make a full page refresh, or change the route.\n * * It could notify the ContentCreator that the preview element has changed by calling {@link TPP_API.Common.setPreviewElement}.\n * * This would trigger the listener of {@link https://docs.e-spirit.com/odfs/template-develo/javascript-apis/contentcreator/common-function/index.html#auf_seitenwechsel_reagieren|WE_API.Common.addPreviewElementListener}.\n *\n * @name TPP_API.Common.addPreviewRequestHandler\n * @public\n * @since 1.1.0\n * @param {TPP_API.Common~PreviewRequestHandler} callback\n */\n common.addPreviewRequestHandler = function (callback) {\n if (util.isFunction(callback)) {\n _previewRequestHandlers.push(callback);\n util.log('Registered a new Preview Request Handler');\n }\n };\n\n\n /**\n * A callback equivalent to the {@link TPP_API.Event.NAVIGATION_CHANGED}.\n * @public\n * @since 1.1.0\n * @callback TPP_API.Common~NavigationChangeCallback\n * @param {string} [previewId] - if a new page ref is created the previewId of this PageRef will be send here.\n **/\n /**\n * Callback is called when there are changes in the SiteStore triggered in the outer ContentCreator.\n *\n * @name TPP_API.Common.addNavigationChangeHandler\n * @public\n * @since 1.1.0\n * @param {TPP_API.Common~NavigationChangeCallback} callback\n */\n common.addNavigationChangeHandler = function (callback) {\n if (util.isFunction(callback)) {\n _navigationChangeHandlers.push(callback);\n util.log('Registered a new Navigation Request Handler');\n }\n };\n\n\n /**\n * A callback equivalent to the {@link TPP_API.Event.WORKFLOW_PROCESSED}.\n * @public\n * @callback TPP_API.Common~WorkflowProcessedCallback\n * @param {{previewId, transitionId}} [info] - event info about transition, and the element it is processed on\n **/\n /**\n * Callback is called every time a workflow step was triggered.\n *\n * @name TPP_API.Common.addWorkflowProcessedHandler\n * @public\n * @param {TPP_API.Common~WorkflowProcessedCallback} callback\n */\n common.addWorkflowProcessedHandler = function (callback) {\n if (util.isFunction(callback)) {\n _workflowProcessedHandlers.push(callback);\n util.log('Registered a new Workflow Processed Handler');\n }\n };\n\n\n /**\n * @private internal test method; can be used to check backend and frontend API version\n */\n common.ping = function (callback) {\n\n util.log('Sending PING from fs-tpp-api.js. Version: ' + FRONTEND_VERSION);\n\n var callbackWrapper = function (result) {\n util.log('Receiving PONG from fs-tpp-api-Module. Version: ' + (result.version || 'UNKNOWN'));\n if (typeof callback === 'function') {\n callback(result);\n }\n };\n\n var message = {\n tpp: {ping: true, version: FRONTEND_VERSION}\n };\n\n util.messageService.send(message, config.origin, callbackWrapper);\n }\n }\n\n\n // noinspection JSUnusedLocalSymbols\n /**\n * Provides operations on store elements represented by previewIds.\n * This contains operations to Create, Read, Edit, Delete, and to do workflow stuff on store elements.\n * @name TPP_API.Operation\n * @public\n * @since 1.0.0\n */\n function Operation(api, util, config) {\n //This constructor takes api, util and config for better testability\n\n var operation = this;\n var _project = { languages: [], previewUrl: location.href };\n\n var EXECUTABLE = 'class:TppApi';\n\n // All actions provided by class:TppApi\n var Action = {\n EDIT: 'EDIT',\n EDIT_META_DATA: 'EDIT_META_DATA',\n STATUS: 'STATUS',\n DELETE: 'DELETE',\n DELETE_WORKFLOW: 'DELETE_WORKFLOW',\n RENDER: 'RENDER',\n CREATE_PAGE: 'CREATE_PAGE',\n CREATE_SIBLING_SECTION: 'CREATE_SIBLING_SECTION',\n CREATE_CHILD_SECTION: 'CREATE_CHILD_SECTION',\n CREATE_DATASET: 'CREATE_DATASET',\n WORKFLOW_START: 'WORKFLOW_START',\n WORKFLOW_PROCESS: 'WORKFLOW_PROCESS',\n CROP_IMAGE: 'CROP_IMAGE',\n TOGGLE_BOOKMARK: 'TOGGLE_BOOKMARK',\n PROJECT_INFO: 'PROJECT_INFO',\n TRANSLATION: 'TRANSLATION'\n };\n\n\n var createDetail = function (previewId, context, detailName, response) {\n var detail = {\n previewId: previewId || null,\n context: context || null\n };\n detail[detailName] = response;\n return detail;\n };\n\n\n var executeOperation = function (params) {\n return api.Common.execute(EXECUTABLE, params).then(function (response) {\n if (response.error) {\n return Promise.reject(response.object);\n } else {\n return Promise.resolve(response.object);\n }\n });\n };\n\n executeOperation({ action: Action.PROJECT_INFO }).then(function(response) {\n if(response){\n _project.previewUrl = response.previewUrl;\n response.languages.forEach(function(language) {\n if (language.master) {\n _project.languages.unshift(language.lang);\n } else {\n _project.languages.push(language.lang);\n }\n });\n }\n });\n\n /**\n * @name TPP_API.Operation.getAffectedWorkflowElements\n * @protected\n */\n operation.getAffectedWorkflowElements = function (previewId) {\n var params = {\n action: 'GET_AFFECTED_WORKFLOW_ELEMENTS',\n previewId: previewId,\n workflowMode: config.workflowMode\n };\n return executeOperation(params);\n };\n\n /**\n * Shows a ContentCreator EditDialog for the store element specified by the previewId.\n * Produce a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all elements annotated with the given previewId.\n * Returns the changed content of the given store element as Promise result.\n *\n * @name TPP_API.Operation.showEditDialog\n * @public\n * @since 1.0.0\n * @example\n *\n * //Example 1: Edit and update DOM manually\n * var previewId = ...;\n * TPP_API.Operation\n * .showEditDialog(previewId)\n * .then(content => $(`[data-fs-preview-id=${previewId}]`).innerHTML( App.render(content) ));\n *\n * //Example 2: Edit and Update via Event\n * $(document).on(TPP_API.Event.CONTENT_CHANGED, (e)=>{\n * //Merge content with external data\n * var productInfo = App.getProductInfo(e.context.productId);\n * App.render(e.target, e.detail.content, productInfo);\n * });\n *\n * TPP_API.Operation\n * .showEditDialog(previewId, {productId: 23});\n *\n *\n * @fires TPP_API.Event.CONTENT_CHANGED\n * @param {string} previewId - The previewId of the store element\n * @param {any} [context] - A custom context that will be passed to every fired event.\n * @return {Promise} The rendered content.\n */\n operation.showEditDialog = function (previewId, context) {\n\n var params = {\n action: Action.EDIT,\n previewId: previewId\n };\n\n return executeOperation(params)\n .then(function (response) {\n if (response !== null) {\n // force refresh of preview element to reflect changed state\n api.Common.setPreviewElement();\n\n util.previewElements()\n .filter(util.filter.byId(previewId))\n .forEach(function ($target) {\n var detail = createDetail(previewId, context, 'content', response);\n util.emit(api.Event.CONTENT_CHANGED, detail, $target);\n });\n }\n return response;\n });\n\n };\n\n /**\n * Shows a ContentCreator EditDialog for the MetaData of the store element specified by the previewId.\n * Produce a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all elements annotated with the given previewId.\n * Returns the changed content of the given store element as Promise result.\n *\n * MetaData providing elements have to be configured. For the necessary steps in ContentCreator see https://docs.e-spirit.com/odfs/edocs/admi/firstspirit-ser/project-propert/contentcreator/index.html#text_bild_14.\n *\n * @name TPP_API.Operation.showMetaDialog\n * @public\n * @since 1.2.1\n *\n * @fires TPP_API.Event.CONTENT_CHANGED\n * @param {string} previewId - The previewId of the store element\n * @param {any} [context] - A custom context that will be passed to every fired event.\n * @return {Promise} The rendered content.\n */\n operation.showMetaDataDialog = function (previewId, context) {\n\n var params = {\n action: Action.EDIT_META_DATA,\n previewId: previewId\n };\n\n return executeOperation(params)\n .then(function (response) {\n if (response !== null) {\n // force refresh of preview element to reflect changed state\n api.Common.setPreviewElement();\n\n util.previewElements()\n .filter(util.filter.byId(previewId))\n .forEach(function ($target) {\n var detail = createDetail(previewId, context, 'content', response);\n util.emit(api.Event.CONTENT_CHANGED, detail, $target);\n });\n }\n return response;\n });\n\n };\n\n\n /**\n * Request the status of the store element specified by the previewId.\n * Produce a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all elements annotated with the given previewId.\n * Returns a status object as Promise result.\n *\n * @name TPP_API.Operation.getElementStatus\n * @public\n * @since 1.0.0\n * @fires TPP_API.Event.STATUS_CHANGED\n * @param {string} previewId - The previewId of the store element.\n * @param {any} [context] - A custom context that will be passed to every fired event.\n * @return {Promise} A status object (Currently unstable API)\n */\n operation.getElementStatus = function (previewId, context) {\n\n var params = {\n action: Action.STATUS,\n previewId: previewId,\n workflowMode: config.workflowMode\n };\n\n return executeOperation(params)\n .then(function (response) {\n util.previewElements()\n .filter(util.filter.byId(previewId))\n .forEach(function ($target) {\n var detail = createDetail(previewId, context, 'status', response);\n util.emit(api.Event.STATUS_CHANGED, detail, $target);\n });\n return response;\n });\n\n };\n\n /**\n * Request the content of the store element specified by the previewId.\n * Produces a {@link TPP_API.Event.CONTENT_CHANGED} event on all elements with the given previewId.\n * Gives the rendered Content as Promise-result.\n *\n * @name TPP_API.Operation.renderElement\n * @public\n * @since 1.0.0\n * @fires TPP_API.Event.CONTENT_CHANGED\n * @param {string} previewId - The previewId of the store element.\n * @param {any} [context] - A custom context that will be passed to every event fired.\n * @return {Promise|*} The rendered content of the element as Promise result.\n */\n operation.renderElement = function (previewId, context) {\n\n var params = {\n action: Action.RENDER,\n previewId: previewId\n };\n\n return executeOperation(params)\n .then(function (response) {\n util.previewElements()\n .filter(util.filter.byId(previewId))\n .forEach(function ($target) {\n var detail = createDetail(previewId, context, 'content', response);\n util.emit(api.Event.CONTENT_CHANGED, detail, $target);\n });\n return response;\n });\n\n };\n\n /**\n * Renders the start node of the project without knowing its previewId -\n * as one possibility to fetch bootstrap information.\n *\n * This is a best practise approach but nothing more.\n * The bootstrap process highly depends on your overall project architecture.\n *\n * Fires no event.\n *\n * @param {string} language - The language for the rendering.\n * @return {Promise} The rendered content of the start node (root of site store) as Promise result.\n * @name TPP_API.Operation.renderStartNode\n */\n operation.renderStartNode = function (language) {\n return executeOperation({action: 'RENDER_START_NODE', language: language});\n };\n\n /**\n * Deletes a store element specified by its previewId.\n * Produces a {@link TPP_API.Event.ELEMENT_DELETED} event on all elements annotated with the given previewId.\n * Returns a boolean to indicate success or failure as Promise result.\n *\n * @name TPP_API.Operation.deleteSection\n * @public\n * @since 1.0.0\n * @fires TPP_API.Event.ELEMENT_DELETED\n * @param {string} previewId - The previewId of the store element\n * @param {any} [context} - A custom context that will be passed to every fired event.\n * @return {Promise} A boolean; true if delete was successful.\n */\n operation.deleteSection = function (previewId, context) {\n var params = {\n action: Action.DELETE,\n previewId: previewId\n };\n\n return executeOperation(params)\n .then(function (response) {\n if (response === true) {\n util.previewElements()\n .filter(util.filter.byId(previewId))\n .forEach(function ($target) {\n var detail = createDetail(previewId, context, 'deleted', response);\n util.emit(api.Event.ELEMENT_DELETED, detail, $target);\n });\n }\n return response;\n });\n };\n\n /**\n * Starts a delete workflow for a page.\n *\n * @name TPP_API.Operation.deletePage\n * @public\n * @since 1.0.0\n * @fires TPP_API.Event.WORKFLOW_PROCESSED\n * @param {string} previewId - The previewId of the store element\n * @param {string} deleteWorkflowUID - Uid of the delete workflow.\n * @param {any} [context} - A custom context that will be passed to every event fired.\n * @return {Promise} A boolean; true if delete was successful.\n */\n operation.deletePage = function (previewId, deleteWorkflowUID, context) {\n var params = {\n action: Action.DELETE_WORKFLOW,\n previewId: previewId,\n workflowMode: config.workflowMode\n };\n if (config.deletePageWorkflow !== null) {\n params[\"workflowUID\"] = config.deletePageWorkflow;\n }\n\n\n return executeOperation(params);\n\n };\n\n /**\n * Shows a ContentCreator WorkflowDialog that can be used to start a certain workflow specified by\n * its workflow id and based on the given previewId.\n *\n * If previewId addresses a page element, the workflow is started on that page element.\n * If the previewId addresses a section element, the workflow is started on the page element that\n * contains the section.\n *\n * Produces a {@link TPP_API.Event.WORKFLOW_PROCESSED} event on all elements annotated with the given previewId.\n *\n * Produces a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all elements annotated with a previewId that are affected by the\n * workflow. Affected by the workflow are the page and all sections contained in it (this includes the\n * element addressed by the given previewId).\n *\n * Returns an array of status objects for all affected elements as Promise result.\n *\n * @name TPP_API.Operation.startWorkflow\n * @public\n * @since 1.0.0\n * @fires TPP_API.Event.WORKFLOW_PROCESSED\n * @param {string} previewId - The previewId of the store element\n * @param {string} workflow - The uid or id of the workflow to start\n * @param {any} [context] - A custom context that will be passed to every fired event.\n * @return {Promise} A WorkflowChanged object which holds a list of status elements -\n * one for every element affected by the process.\n */\n operation.startWorkflow = function (previewId, workflow, context) {\n var params = {\n action: Action.WORKFLOW_START,\n previewId: previewId,\n workflow: workflow,\n workflowMode: config.workflowMode\n };\n return executeOperation(params);\n /**\n * Event Handling will be triggered by external event\n * See event Handler for TPP_WORKFLOW_ACTION {@link TppInternalEventHandler.TPP_WORKFLOW_ACTION}\n */\n };\n\n\n /**\n * Processes a running workflow specified by a transition and a store element's previewId.\n *\n * If previewId addresses a page element, then the workflow is continued on that page element.\n * The previewId addresses a section element, then the workflow is continued on the page element that\n * contains the section.\n *\n *\n * Produces a {@link TPP_API.Event.WORKFLOW_PROCESSED} event on all element annotated with the given previewId.\n *\n * Produces a {@link #eventtpp_apieventstatus_changed|TPP_API.Event.STATUS_CHANGED} event on all element annotated with a previewId that is affected by the\n * workflow. Affected by the workflow are the page and all contained sections (which includes the\n * element addressed by the given previewId).\n *\n * Returns a object holding a list of status elements for all affected elements as Promise result.\n *\n *\n * @name TPP_API.Operation.processWorkflow\n * @public\n * @since 1.0.0\n * @fires TPP_API.Event.WORKFLOW_PROCESSED\n * @param {string} previewId - The previewId of the store element\n * @param {string} transition - The uid or id of the transition to process as workflow step\n * @param {any} [context] - A custom context that will be passed to every fired event.\n * @return {Promise} A WorkflowChanged object which holds a list of status elements\n * for every element that was affected by the process.\n */\n operation.processWorkflow = function (previewId, transition, context) {\n\n var params = {\n action: Action.WORKFLOW_PROCESS,\n previewId: previewId,\n transition: transition,\n workflowMode: config.workflowMode\n };\n\n return executeOperation(params);\n /**\n * Event Handling will be triggered by external event\n * See event Handler for TPP_WORKFLOW_ACTION {@link TppInternalEventHandler.TPP_WORKFLOW_ACTION}\n */\n };\n\n /**\n * @protected\n * @typedef {Object} TppCreatePageConfig\n * @property {string} path\n * @property {string} template\n * @property {string} language\n */\n /**\n * Default way to create a new page.\n *\n * The signature is a little different from the other operations because we do not have\n * a previewId for the element yet.\n *\n * The operation starts a page creation with the following behavior:\n * * An editor for the newly created page will be opened\n * * The language to edit, can be set optionally with config.language.\n * * A Page is created with the specified path, and the last path element is used as uid for the page\n * (for the page template see below).\n * * A PageRef referencing this Page is created with the same path as the page.\n * The Template for the Page will be given by config.template, but can be overridden by the selectedTemplate\n * parameter. The template is specified by its uid.\n *\n * @name TPP_API.Operation.createPage\n * @public\n * @since 1.0.0\n * @fires TPP_API.Event.ELEMENT_CREATED\n * @param {HTMLElement} [$element] - The related element to fire the event on.\n * @param {TppCreatePageConfig} config - Configures the creation of the page\n * @param {string} [selectedTemplate] - Overrides the template given in config\n * @return {Promise}\n */\n operation.createPage = function ($element, config, selectedTemplate) {\n var path = util.path(config.path);\n if (path === null) {\n return Promise.reject('Path is not specified correctly in config ' + JSON.stringify(config));\n }\n\n var template = selectedTemplate || config.template;\n var params = {\n action: Action.CREATE_PAGE,\n path: path.parent,\n uid: path.name,\n template: template,\n language: config.language\n };\n\n return executeOperation(params)\n .then(function (response) {\n if ($element) {\n var detail = createDetail(null, config, 'content', response);\n util.emit(api.Event.ELEMENT_CREATED, detail, $element);\n }\n return response;\n });\n };\n\n\n var createSectionParams = function (action, previewId, config, template) {\n var params = {\n action: action,\n previewId: previewId,\n template: template || config.template,\n sectionName: config.sectionName,\n position: config.position,\n body: config.body || null\n };\n if (typeof(config.positionIndex) !== 'undefined') {\n params.positionIndex = ''+config.positionIndex;\n params.position = 'INDEX';\n }\n return params;\n };\n\n\n /**\n * @public\n * @since 1.0.0\n * @typedef {Object} TppCreateChildSectionConfig\n * @property {string} body - Name of the body to create the section in.\n * @property {string} [sectionName] - Name the created section should get. Default value is the uid of the used template.\n * @property {string} [template] - Uid of the section template to be used. If not given the CC template chooser dialog will be shown.\n * @property {TPP_API.SectionPosition} [position] - The position of the new child section.\n * @property {Number} [positionIndex] - If SectionPosition.INDEX was chosen, this gives the index of the newly created Section.\n */\n /**\n * Creates a child section for the page specified by the provided previewId.\n *\n * @name TPP_API.Operation.createChildSection\n * @public\n * @since 1.0.0\n * @fires TPP_API.Event.ELEMENT_CREATED on the $element.\n * @fires TPP_API.Event.CHILD_SECTION_CREATED on all elements specified by config.previewId.\n * @param {string} previewId - Referencing the page to create a child for.\n * @param {HTMLElement} [$element] - The related html element to fire the ELEMENT_CREATED event on.\n * This can be a placeholder for the section to create.\n * @param {TppCreateChildSectionConfig} config - Config parameters for the creation of the section.\n * @param {string} [template] - When provided this overrides the template specified in the config\n * (this parameter can be used if the operation is used in a TppAction context).\n * @return {Promise}\n */\n operation.createChildSection = function (previewId, $element, config, template) {\n var params = createSectionParams(Action.CREATE_CHILD_SECTION, previewId, config, template);\n return executeOperation(params)\n .then(function (response) {\n util.previewElements()\n .filter(util.filter.byId(previewId))\n .forEach(function ($target) {\n var detail = createDetail(previewId, params, 'content', response);\n util.emit(api.Event.CHILD_SECTION_CREATED, detail, $target);\n });\n\n if ($element) {\n var detail = createDetail(null, config, 'content', response);\n util.emit(api.Event.ELEMENT_CREATED, detail, $element);\n }\n });\n };\n\n /**\n * @public\n * @since 1.0.0\n * @typedef {Object} TppCreateSiblingSectionConfig\n * @property {string} [sectionName] - Name the created section should get. Default value is the uid of the used template.\n * @property {string} [template] - Uid of the section template to be used. If not given the CC template chooser dialog will be shown.\n * @property {TPP_API.SectionPosition} [position] - The position of the new child section.\n * @property {Number} [positionIndex] - If SectionPosition.INDEX was chosen, this gives the index of the newly created Section.\n */\n /**\n * Creates a section relative to another section specified by its previewId.\n *\n * @name TPP_API.Operation.createSiblingSection\n * @public\n * @since 1.0.0\n * @fires TPP_API.Event.ELEMENT_CREATED on the $element.\n * @fires TPP_API.Event.SIBLING_SECTION_CREATED on elements matching the previewId.\n * @param {string} previewId - Referencing the section to create a sibling for.\n * @param {HTMLElement} [$element] - The related html element to fire the ELEMENT_CREATED event on.\n * This can be a placeholder for the section to create.\n * @param {TppCreateSiblingSectionConfig} config - Configures the creation of the section.\n * @param {string} [template] - Override the template specified in the config.\n * @return {Promise}\n */\n operation.createSiblingSection = function (previewId, $element, config, template) {\n var params = createSectionParams(Action.CREATE_SIBLING_SECTION, previewId, config, template);\n return executeOperation(params)\n .then(function (response) {\n util.previewElements()\n .filter(util.filter.byId(previewId))\n .forEach(function ($target) {\n var detail = createDetail(previewId, params, 'content', response);\n util.emit(api.Event.SIBLING_SECTION_CREATED, detail, $target);\n });\n\n if ($element) {\n var detail = createDetail(null, params, 'content', response);\n util.emit(api.Event.ELEMENT_CREATED, detail, $element);\n }\n });\n };\n\n\n /**\n * @protected\n * @typedef {Object} TppCreateDatasetConfig\n * @property {string} template\n * @property {string} language\n */\n /**\n * Create a new Dataset.\n *\n * @name TPP_API.Operation.createDataset\n * @public\n * @since 1.2.0\n * @fires TPP_API.Event.ELEMENT_CREATED\n * @param {HTMLElement} [$element] - The related element to fire the event on\n * @param {TppCreateDatasetConfig} config - Configures the creation of the dataset\n * @return {Promise}\n */\n operation.createDataset = function ($element, config) {\n var params = {\n action: Action.CREATE_DATASET,\n template: config.template,\n language: config.language\n };\n\n return executeOperation(params)\n .then(function (response) {\n if ($element) {\n var detail = createDetail(null, config, 'content', response);\n util.emit(api.Event.ELEMENT_CREATED, detail, $element);\n }\n return response;\n });\n };\n\n\n /**\n * @name TPP_API.Operation.cropImage\n * @public\n * @since 1.1.0\n * @param {string} previewId - PreviewId of a media element\n * @param {string | Array.<string>} resolution - a single ResolutionUID or a an array of ResolutionUIDs\n */\n operation.cropImage = function (previewId, resolution) {\n var params = {\n action: Action.CROP_IMAGE,\n previewId: previewId,\n resolution: resolution\n };\n return executeOperation(params)\n .then(function (response) {\n if (response) {\n util.previewElements()\n .filter(util.filter.byId(previewId))\n .forEach(function ($target) {\n var detail = createDetail(previewId, params, 'reference', response);\n util.emit(api.Event.IMAGE_CHANGED, detail, $target);\n });\n }\n })\n }\n\n\n /**\n * Toggles an element to be a bookmark (flagged as master) or not. Bookmarked elements will appear\n * in creation dialogs, like {@link TPP_API.Operation.createChildSection} or {@link TPP_API.Operation.createPage}.\n *\n * @name TPP_API.Operation.toggleBookmark\n * @public\n * @since 1.1.6\n * @param {string} previewId - The previewId of the store element.\n * @return {Promise} Boolean which indicates if the element is now bookmarked or not.\n */\n operation.toggleBookmark = function (previewId) {\n var params = {\n action: Action.TOGGLE_BOOKMARK,\n previewId: previewId\n };\n\n return executeOperation(params).then(function(response) {\n \t// fires a StatusUpdate on registered DOM nodes via Operation.getElementStatus\n \tapi.Operation.getElementStatus(previewId);\n \treturn response;\n });\n };\n\n\n /**\n * Returns all project languages (abbreviations). The first language is always the master language.\n *\n * @name TPP_API.Operation.getLanguages\n * @public\n * @since 1.2.4\n * @return {Array.<string>} - list of languages\n */\n operation.getLanguages = function () {\n return _project.languages;\n };\n\n\n /**\n * Returns the \"External Preview URL\" as set in FirstSpirit.\n *\n * @name TPP_API.Operation.getPreviewUrl\n * @public\n * @since 1.2.4\n * @return {<string>} - the \"External Preview URL\"\n */\n operation.getPreviewUrl = function () {\n return _project.previewUrl;\n };\n\n\n /**\n * Shows the translation help dialogue.\n *\n * Returns the rendered content only if the current language is the same\n * as the given `target` language.\n *\n * @name TPP_API.Operation.showTranslationDialog\n * @public\n * @since 1.2.4\n * @fires TPP_API.Event.CONTENT_CHANGED\n * @param {string} previewId - a PreviewId of DataProvider\n * @param {string} source - the source language\n * @param {string} target - the target language\n * @return {Promise} The rendered content.\n */\n operation.showTranslationDialog = function (previewId, source, target) {\n\n var params = {\n action: Action.TRANSLATION,\n previewId: previewId,\n source: source,\n target: target\n };\n\n return executeOperation(params)\n .then(function (response) {\n if (response !== null) {\n // force refresh of preview element to reflect changed state\n api.Common.setPreviewElement();\n\n util.previewElements()\n .filter(util.filter.byId(previewId))\n .forEach(function ($target) {\n var detail = createDetail(previewId, context, 'content', response);\n util.emit(api.Event.CONTENT_CHANGED, detail, $target);\n });\n }\n return response;\n });\n\n };\n\n\n }\n\n // noinspection JSUnusedLocalSymbols to provide same signature for each API component\n /**\n * This provides a UI to enrich html elements of the third party applications with a basic FirstSpirit style\n * interface. It draws an interactive border around elements and provides a UI element to work with the\n * {@link TPP_API.Operation}.\n *\n * @name TPP_API.Decorate\n * @public\n * @since 1.0.0\n */\n function Decorate(api, util, config) {\n var decorate = this;\n\n var initialized = false;\n\n var ensureInit = function () {\n\n if (!initialized) {\n initialized = true;\n // noinspection JSUndefinedPropertyAssignment\n document.head.appendChild(document.createElement('style')).innerHTML = [\n '.tpp-borders { position: fixed; z-index: 9999999999; opacity: 0; pointer-events: none; box-shadow: 0 0 3px rgba(0,0,0,.5), 0 0 3px rgba(0,0,0,.5) inset; border: 1px solid rgb(181,30,104); transition: opacity 300ms ease-in-out; }',\n '.tpp-buttons-container { position: fixed; display: none; pointer-events: all;}',\n '.tpp-buttons { position: absolute; top: 1px; right: 1px; background: linear-gradient(#626161, #424141); border: 1px solid #B5B5B5; display: inline-block; line-height: 23px; }',\n '.tpp-button { display: block; width: 23px; height: 23px; line-height: 23px; cursor: pointer; position: relative; float:left; text-align: center; }',\n '.tpp-button img {opacity: 0.7;}',\n '.tpp-button:hover img { opacity: 1; }',\n '.tpp-button.tpp-disabled { display : none; }',\n '.tpp-button.tpp-edit { background: linear-gradient(#A9356B, #79053B); }',\n '.tpp-workflow-flyout {font-family: Arial, Helvetica, sans-serif; font-size: 11px; overflow: hidden; cursor: pointer; color: lightgray; background: linear-gradient(#626161, #424141); position: absolute; top: 25px; width: 150px; height: 0px; transition: height .5s ease-out}',\n '.tpp-workflow-flyout li:hover {color:white;}',\n '.tpp-workflow-flyout.selected {height: auto;}',\n '.tpp-workflow-flyout.selected ul {max-height: 300px;}',\n '.tpp-workflow-flyout.selected ul:hover{ overflow-y: auto}',\n '.tpp-workflow-flyout.selected ul::-webkit-scrollbar{ width: 6px; background-color: transparent;}',\n '.tpp-workflow-flyout.selected ul::-webkit-scrollbar-track{ background-color: transparent;}',\n '.tpp-workflow-flyout.selected ul::-webkit-scrollbar-thumb{ background-color: #B4B4B4;}',\n '.tpp-workflow-flyout.selected ul::-webkit-scrollbar-thumb:hover{ background-color: lightgray;}',\n '.tpp-workflow-flyout ul {padding-left: 10px; transition: max-height .5s; max-height: 0; overflow-y: hidden}',\n '.tpp-workflow-flyout li {padding: 5px; display: block;}',\n '.tpp-workflow-flyout li:before {content: \"\\\\00BB\";}',\n '.tpp-workflow-grouptitle {font-weight: bold; padding: 5px; color: black; background-color: lightgray; margin-bottom: 8px;}'\n\n ].join('');\n }\n };\n\n\n var createActionBuilder = util.Types.createActionBuilder;\n\n\n /**\n * @protected\n * @name ActionStore.CUSTOM\n * @type {TppActionBuilder}\n */\n ActionStore.CUSTOM = createActionBuilder();\n\n /**\n * @protected\n * @name ActionStore.CREATE_PAGE\n * @type {TppActionBuilder}\n */\n ActionStore.CREATE_PAGE = createActionBuilder()\n .name('create')\n .label('Create a Page')\n .icon(api.Icon.CREATE_PAGE)\n .isEnabled(function (action) {\n return !action.getStatus().id;\n })\n .execute(function (action, args) {\n var selectedTemplate = (args.length > 0) ? args[0] : null;\n return api.Operation.createPage(action.getElement(), action.getContext(), selectedTemplate);\n });\n\n\n //This should be used to create a section to given page.\n //This can be attaches\n ActionStore.CREATE_CHILD_SECTION = createActionBuilder()\n .name('create_child_section')\n .label('Create a Section')\n .icon(api.Icon.CREATE_SECTION)\n .isEnabled(function (action) {\n return action.getStatus(\"elementType\") === \"Page\" || action.getStatus(\"elementType\") === \"Body\";\n })\n .execute(function (action, args) {\n var selectedTemplate = (args.length > 0) ? args[0] : null;\n var context = Object.assign({}, action.getContext(), {previewId: action.getPreviewId()});\n return api.Operation.createChildSection(action.getPreviewId(), action.getElement(), context, selectedTemplate);\n });\n\n //This should be used to create a section as a sibling\n //The can be attached as a button to every section of a listing\n ActionStore.CREATE_SIBLING_SECTION = createActionBuilder()\n .name('create_sibling_section')\n .label('Create a Sibling-Section')\n .icon(api.Icon.CREATE_SECTION)\n .isEnabled(function (action) {\n return action.getStatus(\"elementType\") === \"Section\";\n })\n .execute(function (action, args) {\n var selectedTemplate = (args.length > 0) ? args[0] : null;\n var context = Object.assign({}, action.getContext(), {previewId: action.getPreviewId()});\n return api.Operation.createSiblingSection(action.getPreviewId(), action.getElement(), context, selectedTemplate);\n });\n\n /**\n * @protected\n * @name ActionStore.DEBUG_STATUS\n * @type {TppActionBuilder}\n */\n ActionStore.DEBUG_STATUS = createActionBuilder()\n .name('debugStatus')\n .label('Turn on Debug-Mode')\n .icon(api.Icon.DEBUG)\n .isEnabled(util.log.isEnabled)\n .execute(function (action) {\n var previewId = action.getPreviewId();\n api.Operation.getElementStatus(previewId).then(function (status) {\n util.log(\"Status received\", previewId, status);\n });\n });\n\n\n /**\n * @protected\n * @name ActionStore.DEBUG_STATUS\n * @type {TppActionBuilder}\n */\n ActionStore.EDIT_ELEMENT = createActionBuilder()\n .name('edit')\n .label('Edit this Element')\n .icon(api.Icon.EDIT)\n .isEnabled(function (action) {\n return action.getStatus(\"permissions.change\") &&\n action.getStatus(\"elementType\") !== \"Body\" &&\n action.getStatus(\"elementType\") !== \"Media\";\n })\n .execute(function (action) {\n return api.Operation.showEditDialog(action.getPreviewId());\n });\n\n\n /**\n * @protected\n * @name ActionStore.DEBUG_STATUS\n * @type {TppActionBuilder}\n */\n ActionStore.EDIT_META_DATA = createActionBuilder()\n .name('editMetaData')\n .label('Edit Meta Data')\n .icon(api.Icon.EDIT_META_DATA)\n .isEnabled(function (action) {\n return action.getStatus(\"permissions.changeMeta\");\n })\n .execute(function (action) {\n return api.Operation.showMetaDataDialog(action.getPreviewId());\n });\n\n\n /**\n * @protected\n * @name ActionStore.DELETE_SECTION\n * @type {TppActionBuilder}\n */\n ActionStore.DELETE_SECTION = createActionBuilder()\n .name('deleteSection')\n .label('Delete this Section')\n .icon(api.Icon.DELETE)\n .isEnabled(function (action) {\n return action.getStatus().elementType === \"Section\"\n && action.getStatus(\"permissions.delete\");\n })\n .execute(function (action) {\n return api.Operation.deleteSection(action.getPreviewId());\n });\n\n ActionStore.DELETE_PAGE = createActionBuilder()\n .name('deletePage')\n .label('Delete this Page')\n .icon(api.Icon.DELETE)\n .isEnabled(function (action) {\n return action.getStatus().elementType === \"Page\"\n && (action.getStatus().workflows.deleteWorkflow !== null || config.deletePageWorkflow !== null) && action.getStatus().workflows.current === null\n })\n .execute(function (action) {\n return api.Operation.deletePage(action.getPreviewId(), getDeleteWorkflowUID(action.getStatus()), action.getContext())\n });\n\n var getDeleteWorkflowUID = function (status) {\n if (config.deletePageWorkflow !== null) {\n return config.deletePageWorkflow;\n } else if (status.workflows.deleteWorkflow !== null) {\n return status.workflows.deleteWorkflow.uid;\n }\n return null;\n };\n\n /**\n * @protected\n * @name ActionStore.START_WORKFLOW\n * @type {TppActionBuilder}\n */\n ActionStore.START_WORKFLOW = createActionBuilder()\n .name('startWorkflow')\n .label('Start a Workflow:')\n .icon(api.Icon.WORKFLOW)\n .isEnabled(function (action) {\n return action.getStatus(\"elementType\") !== \"Body\"\n && action.getStatus(\"elementType\") !== \"Media\"\n && action.getStatus().workflows\n && action.getStatus().workflows.allowed\n && action.getStatus().workflows.allowed.length > 0;\n })\n .getOptions(function (action) {\n var _status = action.getStatus(), _workflows = _status.workflows;\n if (_workflows && _workflows.allowed) {\n var workflows = _workflows.allowed;\n\n if (_status.storeType === 'PAGESTORE' || _status.storeType === 'SITESTORE') {\n if (config.deletePageWorkflow !== null) {\n workflows = workflows.filter(function(workflow) {\n return workflow.uid !== config.deletePageWorkflow;\n });\n } else if (_workflows.deleteWorkflow !== null) {\n workflows = workflows.filter(function(workflow) {\n return workflow.id !== _workflows.deleteWorkflow.id;\n });\n }\n }\n\n return workflows.map(function(workflow) {\n return { id: workflow.id, label: workflow.displayName };\n });\n } else {\n return [];\n }\n })\n .execute(function (action, args) {\n var id = args[0];\n return api.Operation.startWorkflow(action.getPreviewId(), id);\n });\n\n /**\n * @protected\n * @name ActionStore.PROCESS_WORKFLOW\n * @type {TppActionBuilder}\n */\n ActionStore.PROCESS_WORKFLOW = createActionBuilder()\n .name('processWorkflow')\n .label('Process Workflow:')\n .isEnabled(function (action) {\n return action.getStatus(\"elementType\") !== \"Body\"\n && action.getStatus(\"elementType\") !== \"Media\"\n && action.getStatus().workflows && action.getStatus().workflows.current;\n })\n .getOptions(function (action) {\n if (action.getStatus().workflows && action.getStatus().workflows.transitions) {\n return action.getStatus().workflows.transitions.map(function (transition) {\n var displayName = transition.displayName;\n if (transition.target && transition.target.displayName) {\n displayName = transition.target.displayName;\n }\n return {id: transition.id, label: displayName};\n });\n } else {\n return [];\n }\n })\n .execute(function (action, args) {\n var id = args[0];\n return api.Operation.processWorkflow(action.getPreviewId(), id);\n });\n\n /**\n * @protected\n * @name ActionStore.CROP_IMAGE\n * @type {TppActionBuilder}\n */\n ActionStore.CROP_IMAGE = createActionBuilder()\n .name('cropImage')\n .label('Crop image')\n .icon(api.Icon.CROP_IMAGE)\n .isEnabled(function (action) {\n return action.getStatus(\"elementType\") === 'Media'\n && action.getStatus(\"permissions.change\");\n })\n .execute(function (action) {\n var resolution = action.getContext('imageResolution') || action.getContext('imageResolutions') || 'ORIGINAL';\n var resolutions = typeof(resolution) === 'string' ? resolution.split(/\\s*,\\s*/) : resolution;\n var previewId = action.getPreviewId();\n return api.Operation.cropImage(previewId, resolutions);\n });\n\n /**\n * @protected\n * @name ActionStore.ADD_BOOKMARK\n * @type {TppActionBuilder}\n */\n ActionStore.ADD_BOOKMARK = createActionBuilder()\n .name('addBookmark')\n .label('Add bookmark')\n .icon(api.Icon.ADD_BOOKMARK)\n .isEnabled(function (action) {\n return ['Section', 'Page', 'PageRef'].indexOf(action.getStatus('elementType')) !== -1 && !action.getStatus('bookmark');\n })\n .execute(function (action) {\n var previewId = action.getPreviewId();\n return api.Operation.toggleBookmark(previewId);\n });\n\n /**\n * @protected\n * @name ActionStore.DELETE_BOOKMARK\n * @type {TppActionBuilder}\n */\n ActionStore.DELETE_BOOKMARK = createActionBuilder()\n .name('deleteBookmark')\n .label('Delete bookmark')\n .icon(api.Icon.DELETE_BOOKMARK)\n .isEnabled(function (action) {\n return ['Section', 'Page', 'PageRef'].indexOf(action.getStatus('elementType')) !== -1 && action.getStatus('bookmark');\n })\n .execute(function (action) {\n var previewId = action.getPreviewId();\n return api.Operation.toggleBookmark(previewId);\n });\n\n\n /**\n * @protected\n * @name ActionStore.TRANSLATE\n * @type {TppActionBuilder}\n */\n ActionStore.TRANSLATE = createActionBuilder()\n .name('translate')\n .label('Translate')\n .icon(api.Icon.TRANSLATE)\n .isEnabled(function (action) {\n return ['Section', 'Page'].indexOf(action.getStatus('elementType')) !== -1 && api.Operation.getLanguages().length > 1;\n })\n .getOptions(function (action) {\n var languages = api.Operation.getLanguages();\n var options = [];\n\n for (var i=0, ln=languages.length; i<ln; i++) {\n for (var j=0; j<ln; j++) {\n if (i !== j) {\n options.push({ id: [languages[i], languages[j]], label: languages[i] + ' → ' + languages[j] });\n }\n }\n }\n\n return options;\n })\n .execute(function (action, args) {\n return api.Operation.showTranslationDialog(action.getPreviewId(), args[0][0], args[0][1]);\n });\n\n\n /** @type {[TppActionBuilder]}*/\n var INITIAL_DEFAULT_DECORATION_ACTIONS = [\n ActionStore.DEBUG_STATUS,\n ActionStore.EDIT_ELEMENT,\n ActionStore.CREATE_CHILD_SECTION,\n ActionStore.DELETE_SECTION,\n ActionStore.DELETE_PAGE,\n ActionStore.START_WORKFLOW,\n ActionStore.PROCESS_WORKFLOW\n ];\n\n\n var defaultDecorationActions = INITIAL_DEFAULT_DECORATION_ACTIONS;\n\n\n /**\n * Set the list of default buttons added to every decorated element.\n *\n * This does not mean that each of this buttons will be enabled.\n * Each button handle its visibility on its own. ({@link TppActionBuilder#isEnabled})\n *\n * This configuration is global, and should be set only once before decorating all elements.\n *\n * The initial list of default buttons is:\n * TPP_API.Button.DEBUG_STATUS,\n * TPP_API.Button.EDIT_ELEMENT,\n * TPP_API.Button.DELETE_SECTION,\n * TPP_API.Button.DELETE_PAGE,\n * TPP_API.Button.START_WORKFLOW,\n * TPP_API.Button.PROCESS_WORKFLOW\n *\n\n * @name TPP_API.Decorate.setDefaultButtons\n * @public\n * @since 1.1.2\n * @param {[TppActionBuilder]} buttons.\n * @example\n * // Example 1\n * // Workflows only accessible via ContentCreator menu bar,\n * // and every decorated Image has an additional crop button.\n * TPP_API.Decorate.setDefaultButtons([\n * TPP_API.Button.DEBUG_STATUS,\n * TPP_API.Button.EDIT_ELEMENT,\n * TPP_API.Button.DELETE_SECTION,\n * TPP_API.Button.DELETE_PAGE,\n * TPP_API.Button.CROP_IMAGE\n * ])\n *\n * // Example 2\n * // No default buttons set.\n * // Add buttons on each element individually\n * TPP_API.Decorate.setDefaultButtons([]);\n * TPP_API.Decorate.element($el).addButton(TPP_API.Button.EDIT_ELEMENT);\n * TPP_API.Decorate.element($img).addButton(TPP_API.Button.CROP_IMAGE);\n * ...\n */\n decorate.setDefaultButtons = function (buttons) {\n defaultDecorationActions = buttons || [];\n };\n\n\n /**\n * Scans the entire document (or from a given $root) for elements with a data-preview-id attribute.\n *\n * It activates a UI for each of these elements with a mouse-over border and buttons in a\n * ContentCreator like manner.\n *\n * @name TPP_API.Decorate.scan\n * @public\n * @since 1.0.0\n * @param {HTMLElement} [$root=document] - An optional root to perform the search from.\n */\n decorate.scan = function ($root) {\n util.previewElements($root)\n .forEach(function ($el) {\n util.log('[scan] found', $el);\n decorate.element($el, $el.dataset.previewId);\n });\n };\n\n\n /**\n * @protected\n * @param {HTMLElement} $el\n * @param {string} previewId\n * @return {string}\n */\n var initPreviewId = function ($el, previewId) {\n previewId = previewId || $el.dataset.previewId;\n if (previewId) {\n $el.dataset.previewId = previewId;\n }\n return previewId;\n };\n\n /**\n * Initialize context values that could be given\n * via data-tpp-context-* fields on the given element.\n * @protected\n * @param $el\n * @param context {object}\n * @return {object}\n */\n var initContext = function ($el, context) {\n var contextFromAttributes = Object.keys($el.dataset)\n .filter(function (key) { return key.startsWith('tppContext'); })\n .reduce(function (object, key) {\n var name = key.substr('tppContext'.length);\n name = name[0].toLowerCase() + name.slice(1);\n object[name] = $el.dataset[key];\n return object;\n }, {});\n return Object.assign({}, contextFromAttributes, context);\n };\n\n /**\n * @protected\n * @param {TppButtonDecorator} buttons\n * @param {HTMLElement} $el\n * @param {string} previewId\n * @param {[TppActionBuilder]} customActions\n * @param {object} context\n * @return {void}\n */\n var updateDecoration = function (buttons, $el, previewId, customActions, context) {\n buttons.clearButtons();\n if (previewId) {\n defaultDecorationActions.forEach(function (builder) {\n buttons.addButton(builder\n .previewId(previewId)\n .element($el)\n .updateContext(context));\n });\n customActions.forEach(function (builder) {\n buttons.addButton(builder\n .previewId(previewId)\n .element($el)\n .updateContext(context));\n buttons.updateButtons({})\n });\n //initial status\n // noinspection JSIgnoredPromiseFromCall\n api.Operation.getElementStatus(previewId);\n } else {\n customActions.forEach(function (builder) {\n buttons.addButton(builder\n .element($el)\n .updateContext(context));\n buttons.updateButtons({})\n });\n }\n };\n\n /**\n * Creates a blank TppActionBuilder.\n *\n * @name TPP_API.Decorate.createActionBuilder\n * @return {TppActionBuilder}\n */\n decorate.createActionBuilder = util.Types.createActionBuilder;\n\n /**\n * Decorates a single element with a ContentCreator like UI.\n *\n * The UI provides an interactive border and a set of standard buttons.\n *\n * The previewId has either been annotated as a data-preview-id at this element, or can be given\n * as a second parameter. In the latter case the attribute will be set by this function. The parameter\n * takes precedence over the annotated 'data-preview-id' element.\n *\n * The context value can be uses to add context values to button. The context values will be merged using\n * {@link TppActionBuilder#updateContext}. The context values can also be given as data-tpp-* attributes.\n * Currently supported attributes are\n *\n * If no previewId is given, a decoration will be created with less functionality.\n * To give a previewId later on use {@link TppDecorator.updatePreviewId}.\n *\n *\n * @name TPP_API.Decorate.element\n * @public\n * @since 1.0.0\n * @param {HTMLElement} $el - The element to decorate.\n * @param {string} [previewId] - The previewId assigned for the given element.\n * @param {object} [context] - Context value that are assigned to every button.\n * @return {TppDecorator} For adding custom functions.\n */\n decorate.element = function ($el, previewId, context) {\n\n ensureInit();\n\n /** @type {string} */\n var _previewId = initPreviewId($el, previewId);\n\n /** @type {object} */\n var _context = initContext($el);\n\n /** @type {[TppActionBuilder]} */\n var _customActions = [];\n\n var frameDecorator = util.ui.renderFrame($el);\n\n /** @type {TppButtonDecorator} */\n var buttons = util.ui.renderButtons(frameDecorator.getButtonContainer());\n\n // Listen for element deletion to remove also the borders\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n var nodes = Array.from(mutation.removedNodes);\n var directMatch = nodes.indexOf($el) > -1;\n var parentMatch = nodes.some(function (parent) {return parent.contains($el);});\n if (directMatch || parentMatch) {\n frameDecorator.disposeBorders();\n }\n });\n });\n observer.observe(document.body, {\n subtree: true,\n childList: true\n });\n\n $el.addEventListener(api.Event.STATUS_CHANGED, function (event) {\n if (_previewId && _previewId === event.detail.previewId) {\n buttons.updateButtons(event.detail.status);\n }\n });\n\n var _updateDecoration = function () {\n updateDecoration(buttons, $el, _previewId, _customActions, _context);\n };\n\n _updateDecoration();\n\n /**\n * Fluent API to interact with the created decoration.\n * It can be used to create user defined actions and give and update the corresponding previewId.\n *\n * @class\n * @public\n * @since 1.0.0\n * @name TppDecorator\n * @typedef {TppDecorator}\n */\n /**\n * @type {TppDecorator}\n */\n var decorator = {\n /**\n * Adds a user defined button as an action builder to the elements UI.\n *\n * The action builder ({@link TppActionBuilder}) is used to create action instances ({@link TppAction})\n * and render the buttons accordingly.\n *\n * The visibility of the button depends on the {@link TppActionBuilder#isEnabled} callback.\n *\n * Note that the methods {@link TppActionBuilder#previewId} and {@link TppActionBuilder#element}\n * will be called internally by the decorator. So the resulting action has access to this information\n * if available. You can access {@link TppAction#getPreviewId} and {@link TppAction#getElement} in\n * the callbacks given to the action builder. This can be seen in the following example.\n * Therefore the configured action is neither node- nor previewId-specific and\n * can be reused for more than one element decoration.\n *\n * If the element is connected to FirstSpirit content by previewId, the {@link TppAction#getStatus} gives\n * access to the current status of the content.\n *\n * The button can either be configured completely from scratch by using an empty action builder\n * as in the following example -\n * Or by configuring one of the predefined buttons under {@link TPP_API.Button}. See more examples there.\n *\n * @example\n * const $el_A = ... ,$el_B = ... // Some divs containing an image\n * const cropImage = TPP_API.Decorate.createActionBuilder();\n *\n * // 1. configure an crop image button\n * cropImage\n * .name('cropImage')\n * .label('Crop image')\n * .context({\n * minWidth: 200,\n * imageSelector : 'div>img.avatar'\n * })\n * .isEnabled((action)=>{\n * return action.getStatus('permissions.change')\n * })\n * .execute((action)=>{\n *\n * const params = {\n * previewId: action.getPreviewId(),\n * context: action.getContext()\n * }\n *\n * TPP_API.Common\n * .execute('class:CropImage', params)\n * .then((result)=>{\n * MyApp.refreshElement(action.getElement(), result);\n * });\n * });\n *\n *\n * TPP_API.Decorate.element($el_A) // 2. Decorate the element\n * // 3a. Add the element\n * .addButton( cropImage )\n *\n * // 3b. Alternative way to start with a blank action builder\n * .addButton(TPP_API.Button.CUSTOM.name('blurImage'). ... )\n *\n * // 3c. It's also possible to give a callback\n * // that takes a blank action builder as parameter\n * // and returns a configured action builder\n * .addButton( builder => { return builder.name('rotateImage'). ... } );\n *\n *\n * // 4. Reuse the action builder to decorate another element\n * TPP_API.Decorate.element($el_B).addButton( cropImage );\n *\n *\n *\n * @public\n * @since 1.0.0\n * @name TppDecorator.addButton\n * @param {TppActionBuilder|TppActionBuilderCallback} actionSpec\n * @return {TppDecorator}\n */\n addButton: function (actionSpec) {\n var actionBuilder = util.Types.actionHelper.actionSpecToBuilder(actionSpec);\n if (actionBuilder) {\n _customActions.push(actionBuilder);\n _updateDecoration();\n } else {\n util.log('actionSpec has to be of type TppActionBuilder');\n }\n return decorator;\n },\n\n\n /**\n * Enrich the given decoration by a new previewId.\n *\n * This will trigger a refresh of all attached actions and fetch a new status for the given previewId.\n * See {@link TppAction#getStatus} and {@link TPP_API.Operation.getElementStatus} for more information\n *\n *\n *\n * @public\n * @since 1.0.0\n * @name TppDecorator.updatePreviewId\n * @param {string} previewId\n * @return {TppDecorator}\n */\n updatePreviewId: function (previewId) {\n _previewId = previewId;\n $el.dataset.previewId = previewId;\n _updateDecoration();\n return decorator;\n }\n };\n return decorator;\n };\n }\n\n /**\n * Utilities for debugging, testing and support.\n * This not a stable API!!\n *\n * @protected\n * @param api\n * @param util\n * @param config\n * @constructor\n */\n function Debug(api, util, config) {\n var debug = this;\n\n debug.currentConfig = Object.assign({}, config);\n debug.defaultConfig = Object.assign({}, DEFAULT_CONFIG);\n\n debug.enableDebugLog = api.enableDebugLog;\n\n debug.parsePreviewId = function (previewId) {\n if (typeof previewId === 'string') {\n try {\n var raw = JSON.parse(atob(previewId));\n var result = {};\n ['data-fs-id', 'data-fs-attrs'].forEach(function (prop) {\n var rawProp = raw[prop];\n try {\n result[prop] = JSON.parse(atob(rawProp));\n } catch (e) {\n //ignore\n }\n });\n\n return result;\n } catch (e) {\n // console.error(previewId,e);\n return null;\n }\n }\n return null;\n };\n\n debug.apiInitialized = false;\n\n debug.version = FRONTEND_VERSION;\n debug.gitHash = GIT_HASH;\n\n debug.getInfo = function () {\n return {\n version: debug.version,\n gitHash: debug.gitHash,\n config: debug.currentConfig\n }\n };\n\n /**\n * Check version of backend and frontend.\n * Can be used to check communication with backend.\n * It will log information to the console.\n *\n * @name TPP_API.Debug.checkVersions\n * @param {Number} [timeout=5000] - Timeout to wait for the backend.\n * @return {Promise} - Promise resolves to an object with version info.\n * Will be rejected if no connection to backend could be established.\n */\n debug.checkVersions = function (timeout) {\n if (typeof timeout === 'undefined') {\n timeout = 5000;\n }\n\n var pingBackend = function () {\n return new Promise(function (resolve, reject) {\n util.messageService.send({tpp: {ping: true, version: FRONTEND_VERSION}}, config.origin, resolve);\n setTimeout(function () {\n var message = \"No Response from Backend. Timeout [\" + timeout + \"ms]\";\n reject(message)\n }, timeout);\n });\n };\n\n var mapResult = function (result) {\n return {\n backendVersion: result.version,\n frontendVersion: FRONTEND_VERSION\n };\n };\n\n var checkMissmatch = function (result) {\n result['missmatch'] = (result.backendVersion !== result.frontendVersion);\n return result;\n };\n\n return pingBackend()\n .then(mapResult)\n .then(checkMissmatch);\n }\n\n }\n\n\n /**\n * The global object or initial entry point to access the TPP_API.\n * You need to initialize the API using {@link TPP_API.init}.\n *\n * @name TPP_API\n * @public\n * @since 1.0.0\n *\n * @example\n * // Include the script\n * <script src=\"$PATH_TO_MODULE$/lib/fs-tpp-api.js\" data-tpp-init></script>\n *\n * // Alternatively you can use e.g. [jsdelivr.net](https://cdn.jsdelivr.net/npm) with an appropriate version or tag specifier:\n * <script src=\"https://cdn.jsdelivr.net/npm/fs-tpp-api@1.2.21/fs-tpp-api.js\" data-tpp-init></script>\n *\n * // ES6 import\n * import TPP_API from 'fs-tpp-api';\n *\n * // Node\n * const TPP_API = require('fs-tpp-api');\n */\n var TPP_API = function () {\n var api = {};\n\n api.Event = {\n\n /**\n * @private\n * @event TPP_API.Event.INIT\n */\n INIT: 'tpp-init',\n\n /**\n * @event TPP_API.Event.CONTENT_CHANGED\n * @public\n * @since 1.0.0\n * @property {string} previewId\n * @property {any} context\n * @property {string} content\n */\n CONTENT_CHANGED: 'tpp-content-changed',\n\n\n /**\n * @event TPP_API.Event.IMAGE_CHANGED\n * @public\n * @since 1.1.0\n * @property {string} previewId\n * @property {any} context\n * @property {string} reference\n */\n IMAGE_CHANGED: 'tpp-image-changed',\n\n /**\n * Fired when the status of the store element has changed.\n *\n * @event TPP_API.Event.STATUS_CHANGED\n * @public\n * @since 1.0.0\n * @property {string} previewId\n * @property {any} context\n * @property {Object} status\n */\n STATUS_CHANGED: 'tpp-status-changed',\n\n /**\n * Fired when a workflow was started.\n *\n * This event is no longer used and is superseded by {@link TPP_API.Event.WORKFLOW_PROCESSED}.\n *\n * @event TPP_API.Event.WORKFLOW_STARTED\n * @public\n * @since 1.0.0\n * @deprecated since version 1.1.0\n * @property {string} previewId\n * @property {any} context\n * @property {string} workflowId\n */\n WORKFLOW_STARTED: 'tpp-wf-start',\n\n /**\n * Fired on every workflow step.\n *\n * @event TPP_API.Event.WORKFLOW_PROCESSED\n * @public\n * @since 1.0.0\n * @property {string} previewId\n * @property {any} context\n * @property {string} workflowId\n * @property {string} transitionId\n */\n WORKFLOW_PROCESSED: 'tpp-wf-process',\n\n /**\n * Fired when an element was deleted.\n *\n * @event TPP_API.Event.ELEMENT_DELETED\n * @public\n * @since 1.0.0\n * @property {string} previewId\n * @property {any} context\n * @property {boolean} deleted\n */\n ELEMENT_DELETED: 'tpp-element-deleted',\n\n\n /**\n * @event TPP_API.Event.CHILD_SECTION_CREATED\n * @public\n * @since 1.0.0\n * @property {string} previewId - the previewId of the parent page\n * @property {TppCreateChildSectionConfig} context - creation context\n * @property {any} content - the rendered content of the new section\n */\n CHILD_SECTION_CREATED: 'tpp-child-section-created',\n\n /**\n * @event TPP_API.Event.SIBLING_SECTION_CREATED\n * @public\n * @since 1.0.0\n * @property {string} previewId - the previewId of the sibling page\n * @property {TppCreateSiblingSectionConfig} context - creation context\n * @property {string} content - the rendered content of the new section\n */\n SIBLING_SECTION_CREATED: 'tpp-sibling-section-created',\n\n /**\n * Fired when a FirstSpirit element was created.\n *\n * This event is different from the other events, as it does not contain a previewId.\n * It is intended to be fired on a placeholder HTMLElement that stands for the newly created element.\n *\n * @event TPP_API.Event.ELEMENT_CREATED\n * @public\n * @since 1.0.0\n * @property {TppCreateChildSectionConfig|TppCreateSiblingSectionConfig} context - creation context\n * @property {any} content - the rendered content of the newly created element\n */\n ELEMENT_CREATED: 'tpp-element-created',\n\n\n /**\n * Fired when the outer content creator requests to show a certain element for example by clicking it in a report.\n *\n * @event TPP_API.Event.ELEMENT_REQUESTED\n * @public\n * @since 1.1.0\n * @property {string} previewId - the preview\n */\n ELEMENT_REQUESTED: 'tpp-element-requested',\n\n\n /**\n * Fired when there are changes in the SiteStore triggered in the outer ContentCreator.\n * Will be fired on document.body and on all elements annotated with the previewId (if one is set in the event).\n *\n * There are two cases in which this event is fired:\n * * 1. A new PageRef was created, then the previewId parameter is not null and provides the\n * previewId of this PageRef.\n * * 2. The order of sitestore element has changed, then the previewId parameter is null.\n *\n * In both cases the navigation has to be rebuild and newly interpreted in the third party app.\n *\n * @event TPP_API.Event.NAVIGATION_CHANGED\n * @public\n * @since 1.1.0\n * @property {string} [previewId] - If a new page ref is created the previewId of this PageRef will be send here.\n * Otherwise this is null.\n */\n NAVIGATION_CHANGED: 'tpp-navigation-changed'\n\n };\n\n\n /**\n * String constants to define a child position.\n * Used in {@link TPP_API.Operation.createChildSection}.\n * @public\n * @since 1.0.0\n * @name TPP_API.SectionPosition\n * @enum {string}\n */\n api.SectionPosition = {\n /**\n * Insert at first position.\n * @name TPP_API.SectionPosition.FIRST\n * @public\n * @since 1.0.0\n * */\n FIRST: 'FIRST',\n /**\n * Insert at last position.\n * @name TPP_API.SectionPosition.LAST\n * @public\n * @since 1.0.0\n * */\n LAST: 'LAST',\n /**\n * Insert before specified sibling.\n * @name TPP_API.SectionPosition.BEFORE\n * @public\n * @since 1.0.0\n */\n BEFORE: 'BEFORE',\n /**\n * Insert after specified sibling.\n * @name TPP_API.SectionPosition.AFTER\n * @public\n * @since 1.0.0\n */\n AFTER: 'AFTER',\n /**\n * Insert at a specified index.\n * @name TPP_API.SectionPosition.INDEX\n * @public\n * @since 1.0.0\n */\n INDEX: 'INDEX'\n };\n\n\n /**\n * The WorkflowMode is used to set the main store object the workflow is executed on.\n *\n * This is needed to harmonise the behaviour of the tpp workflow buttons and\n * the buttons from the ContentEditor frame who triggers workflow actions.\n *\n * The mode is a global setting that will be given via {@link TPP_API.init}. The setting determines,\n * how the internal buttons behave. So you need to know, how the ContentCreator is configured in your project, to\n * configure the TPP_API accordingly.\n *\n * @public\n * @since 1.1.0\n * @name TPP_API.WorkflowMode\n * @enum {string}\n */\n api.WorkflowMode = {\n /**\n * @name TPP_API.WorkflowMode.PAGE_DRIVEN\n * @public\n * @since 1.1.0\n * The Workflow will be started on the current page object.\n */\n PAGE_DRIVE: 'PAGE_DRIVE',\n\n /**\n * The workflow will be started on the current pageref object.\n * @name TPP_API.WorkflowMode.PAGE_REF_DRIVEN\n * @public\n * @since 1.1.0\n */\n PAGE_REF_DRIVEN: 'PAGE_REF_DRIVE'\n }\n\n\n api.Icon = {\n /**\n * @name TPP_API.Icon.EDIT\n * @public\n * @since 1.0.0\n */\n EDIT: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAAAyElEQVQ4T9WU4QqDMBCDRRBBhiAiyBiMgY/pu9dEWnFSe7mfFkJRz880XltVjx8hhNUSFtlCtWuxFpTPAZwi3MWmG774KcgPhiN5uCKRqSj0RqJEkWLSI7Ecw+XAGsw91MndIYCnVAPoSwbHH1LqigMcnWtwwXF/rZGcC+A/x55YrK7Igs1YSluaHcFOyK0K93/QCDXZfW6A9749g3G9QF9otrIuRXGAAXmfgOxp88TjccgiNv9V6WXOjEUCZqO5ucmPM8vbM3kDZGPFNvxi+34AAAAASUVORK5CYII=\",\n\n /**\n * @name TPP_API.Icon.EDIT_META_DATA\n * @public\n * @since 1.1.2\n */\n EDIT_META_DATA: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAAHjfs0eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpBOUQxQjhFMDAxNDhFMTExOTFGNDlEMUVCNkMxQkEwMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNzgyNTE4RjYxMUMxMUUxQThBRUE5MTJEMzMyRDY1OCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNzgyNTE4RTYxMUMxMUUxQThBRUE5MTJEMzMyRDY1OCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNzdCMUY2OUUwNDhFMTExOTFGNDlEMUVCNkMxQkEwMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBOUQxQjhFMDAxNDhFMTExOTFGNDlEMUVCNkMxQkEwMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlzLg4kAAADDSURBVHjaYvz//z8DDDAxIAEUDkAAMRKnDCCAkJXBGIwgggVJURaSAkaAAEIxGAZY0IwAG8OEZB4juspMJJX/0c0EWwQQQFgtwgVY0PjYdDLiUpyFxp8GcwJGQGIBKF5mIeBMRmQOQACR5EEmBhIAC7EhQZHJjKQozkSTm44cxsQ64z+xQYczKTNQNTQAAoykGCQ3mAkla4JeItt71HAx2S4lZHAWCemFkdqR9x+fL3C5OJOAodMJ+YBaLmakVuQRjEAA4Ow5e6ANBqwAAAAASUVORK5CYII=\",\n\n /**\n * @name TPP_API.Icon.DELETE\n * @public\n * @since 1.0.0\n */\n DELETE: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAADhJREFUeNpi+P//PwMtMMOwNhgZUGQwKWBwGMyApIkQPWrwqMGD3WCSM8fwL90Gh8EAAAAA//8DAF46KxwIo+bGAAAAAElFTkSuQmCC\",\n /**\n * @name TPP_API.Icon.GROUPACTION\n * @public\n * @since 1.0.0\n */\n GROUPACTION: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAAGXljaGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjVFQkNGMTk4RTlCMjExRTBCQTc4Q0QxRkI0ODk1RjA0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjVFQkNGMTk5RTlCMjExRTBCQTc4Q0QxRkI0ODk1RjA0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUVCQ0YxOTZFOUIyMTFFMEJBNzhDRDFGQjQ4OTVGMDQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NUVCQ0YxOTdFOUIyMTFFMEJBNzhDRDFGQjQ4OTVGMDQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4j+SC7AAAApklEQVR42mL8//8/AwgwMUABQAAxAEX+Mz1+/JgBIIAYQXKfP38GKwAIIEYUhSBRuAhAAMEZv3//BjNYWVkZ4ea9f/8ejEEAIIBgKkEEI9wwoDa4VhYQ8ePHDwYo/R+s4vv372DMy8sLMfjnz58MYmJiYDMAAgxuPQj8+/cPzmFiYmKEsVkYkABINxIAa+Dk5GREUQSyDx0AFaGaBHMpCEhJScGtAwDOn1MNwUTjlwAAAABJRU5ErkJggg==\",\n /**\n * @name TPP_API.Icon.DEBUG\n * @public\n * @since 1.0.0\n */\n DEBUG: \"data:image/png;base64,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/GMzLdsAADr7aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzEzOCA3OS4xNTk4MjQsIDIwMTYvMDkvMTQtMDE6MDk6MDEgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChNYWNpbnRvc2gpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDEyLTAxLTEwVDA4OjI1OjU2KzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTctMTEtMTNUMTE6NTE6MzcrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE3LTExLTEzVDExOjUxOjM3KzAxOjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOklDQ1Byb2ZpbGU+c1JHQiBJRUM2MTk2Ni0yLjE8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPgogICAgICAgICAgICA8cmRmOkJhZz4KICAgICAgICAgICAgICAgPHJkZjpsaT54bXAuZGlkOjlFNjJBRUYyQTNDQjExRTE4MzU2ODM4NDZBOTVCODcyPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICAgPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6OTIwOThiYTctNzExMi00MDc1LTkwMmItOTlhNzg2NWIyNjMxPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6MmQ2YjI0MTQtMDVjNy0xMTdiLTg0ZjUtOTUyOTYzZWVhN2Y0PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6NTE1MDE2ZTYtNTZmZi00NmYyLWE3ZDMtYzJmYjRhMjMyZWZjPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjUxNTAxNmU2LTU2ZmYtNDZmMi1hN2QzLWMyZmI0YTIzMmVmYzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxMi0wMS0xMFQwODoyNTo1NiswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjkyMDk4YmE3LTcxMTItNDA3NS05MDJiLTk5YTc4NjViMjYzMTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNy0xMS0xM1QxMTo1MTozNyswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj45NjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjI8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTk8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PqsKpiEAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAJxJREFUeNpi+P//PwMtMMNAGcwKpf/TysXIBnPRyuDN1DBY6D8CnIeKvUGS5yTWYEY0L9+AGvoPKnbk////n9D09BLr4hv/MQEDFjEXfJGKLsCMI2yxGf4AajjZkUfI5SQZvPk/bsCAFO44LSAlueFyOUXp2IXYICDGYA40F7v8////BTUMZoLSq3GkFBZKszQjnuw9+IrNwWcwYADDQCIMDFepgwAAAABJRU5ErkJggg==\",\n /**\n * @name TPP_API.Icon.WORKFLOW\n * @public\n * @since 1.0.0\n */\n WORKFLOW: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAFoTx1HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkE1MUVCNzBCMDE0NDExRTE4MTIwREU0NEQzOTMzM0Y4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkE1MUVCNzBDMDE0NDExRTE4MTIwREU0NEQzOTMzM0Y4Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTUxRUI3MDkwMTQ0MTFFMTgxMjBERTQ0RDM5MzMzRjgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTUxRUI3MEEwMTQ0MTFFMTgxMjBERTQ0RDM5MzMzRjgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz65ABaxAAAAl0lEQVR42mL8//8/AwgwMUABQAAxYogABBBcBAhADEa4DIgDIgACCFkFWN9/ZA5cLxNMPYgGCCAUPcimI2v7j2YTmM+CLoAMAAIIm7EM2FyDbjyGJF6djLgk/+PS+R+JxggeRiQabjRAgOH1CnJooQMWfO5BE2fEpZEBi+nINqLYjjfscDkTXSMjthAiNkKItp2FFOchAwBEcygkEeR08gAAAABJRU5ErkJggg==\",\n /**\n * @name TPP_API.Icon.CREATE_PAGE\n * @public\n * @since 1.0.0\n */\n CREATE_PAGE: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAAHjfs0eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjdFMDhBMzA2NzI3ODExRTE5M0EzQTc5MUI3RjlEQzc2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjdFMDhBMzA3NzI3ODExRTE5M0EzQTc5MUI3RjlEQzc2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6N0UwOEEzMDQ3Mjc4MTFFMTkzQTNBNzkxQjdGOURDNzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6N0UwOEEzMDU3Mjc4MTFFMTkzQTNBNzkxQjdGOURDNzYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz67EEkXAAAAv0lEQVR42mL8//8/AwwwQen/yBxGkABAADESpYwBIICQlf1HlmBiQAWMMAUAAYRiMDYL/qMLYlWJAliQbYYBgADCahEuwILG/4/F+fjdQKzJjHhsYmQhYBiKZoAAIsmDZLv5PwH34zX5P0XOoJpiRnSnsBARIf9xJWVsocFIrJtRbAMIMJJikJJEhzM+8EUsKQYTCkiCFrCQ4DtGIn1EeiKiRhgTG+44g4WFRIOQU/h/fBawkBnzjJS4mNQIRQEAAoouSwxwE+wAAAAASUVORK5CYII=\",\n /**\n * @name TPP_API.Icon.CREATE_SECTION\n * @public\n * @since 1.0.0\n */\n CREATE_SECTION: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAACXBIWXMAAA7CAAAOwgEVKEqAAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAEZJREFUeNpi+P//PwMtMMOwMZgYMLgMHtCgwOtyuhs8YEEx+AwmFuO0iFQX09xgghZTGgRUN5jsoBhwg+lfCAEAAAD//wMA3Is5Dj1O75MAAAAASUVORK5CYII=\",\n /**\n * @name TPP_API.Icon.CROP_IMAGE\n * @public\n * @since 1.1.0\n */\n CROP_IMAGE: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAABGdBTUEAAK/INwWK6QAAAAlwSFlzAAAOwgAADsIBFShKgAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAAAgUlEQVQ4T2P4//8/Ay0wTQwFOXTQGRwJdNVMfEFIrosHr8FA3xINUHxPKChApk7BgncCxa6giZNlMLoDKA5jmItHqMGg8INhUFCAIgpZDMYmOYOANMAwyGBQ7COLIbNxpipikxshdRjyhDTgShWE9BEs3WhmMEGX4SrhyNZIqNYBAOWOEXeO7QWpAAAAAElFTkSuQmCC\",\n /**\n * @name TPP_API.Icon.ADD_BOOKMARK\n * @public\n * @since 1.1.6\n */\n ADD_BOOKMARK: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAAHjfs0eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI3N0ZBOUU5NjEzRTExRTJCNkRDODFGNjk4NDJCRDY3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI3N0ZBOUVBNjEzRTExRTJCNkRDODFGNjk4NDJCRDY3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Mjc3RkE5RTc2MTNFMTFFMkI2REM4MUY2OTg0MkJENjciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Mjc3RkE5RTg2MTNFMTFFMkI2REM4MUY2OTg0MkJENjciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7EpoHcAAABGElEQVR42mL4//8/AxBLgGhGEAEDTAxIACCAcMugcAACiAFqmtl/CIiB8uGqTgFxLLIGgABCMRjdTJDMXyCOQTabE4h1YeayQFUGQ+nLOM0ECCB0QSEgfgsSZ8AC0BXDOIuAeDeS+BIQwYKmORaLgUvw+hcXYGIgAQAEELrJbED8i1iTXwGxGU6jYaENxB/+I8A05BhGj2kQ8EFiH4PSMcgGIwfdU1yRgcuDMfjCmVDQLSGYCKkSKSQpBggwQs6oAGJdII5mIBFgM7gOiL2B2ATNlY+B+A4QLwPiH9gCC1fKQMZ+/zFBHQ61WDELDvv4gfgzEG8H4k9QH5jhSAtYXY4vjGOIDM4l5EQe2YASFy+hJLnRxMUUAQDIWuXpcvA6lwAAAABJRU5ErkJggg==\",\n /**\n * @name TPP_API.Icon.DELETE_BOOKMARK\n * @public\n * @since 1.1.6\n */\n DELETE_BOOKMARK: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAAHjfs0eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjM3RDgzMUQ2NjEzRTExRTJBRTUzQTE0Qzg2NDBGMjZGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjM3RDgzMUQ3NjEzRTExRTJBRTUzQTE0Qzg2NDBGMjZGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzdEODMxRDQ2MTNFMTFFMkFFNTNBMTRDODY0MEYyNkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzdEODMxRDU2MTNFMTFFMkFFNTNBMTRDODY0MEYyNkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6VnafPAAABG0lEQVR42mL4//8/AxBLgGhGEAEDTAxIACCAcMugcAACiAFqmtl/CIiB8hlgEgxIgiDAABBAKAajmwmS+QvEMchmcwKxLsw4FqjKYCh9CeRWrGYCBBC6oBAQvwWJM2AB6IphnEVAvBtJfAmIYEHTHIvFwCW4TMYLmBhIAAABhG4yGxD/ItbkV0BshtNopMj78B8BpiHHMAwjm+yDxD4GpWOQDUYOuqe4IgOXB2PwhTO+oFsMxf9pHykkKQYIMELOqABiXSCOZiARYDO4Doi9gdgEzZWPgfgOEC8D4h/ooYovZSBjv/+YoA6HWqyYBYd9/ED8GYi3A/EnqA/McKQFrC7HF8YxRAbnEnIij2xAjouXIKduZLMG3MUUAQB/1/qqz56eugAAAABJRU5ErkJggg==\",\n /**\n * @name TPP_API.Icon.TRANSLATE\n * @public\n * @since 1.2.4\n */\n TRANSLATE: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAAAINJREFUOE+1kAEKgEAIBHtfnwr6uCXhsbetSWQLA96od9FiZr8gZQdSdiBlB1J2wGIHuJchd3DA4YEq2d7jr8DgWfVusMCXOei4Lr9YXbydRB/riNflxQjGz+tVTrUHdwYs+OUq2V568TREROIsd0bxAo/yE1J2IGUHUnYgZQdSfseWA4mZHgMwLO3eAAAAAElFTkSuQmCC\"\n };\n\n return api;\n }();\n\n\n function initButtonConstants(api) {\n api.Button = {\n\n /**\n * A collection of predefined buttons.\n * @public\n * @since 1.0.0\n * @name TPP_API.Button\n */\n /**\n * Custom button.\n * @public\n * @since 1.0.0\n * @name TPP_API.Button.CUSTOM\n * @type {TppActionBuilder}\n * @example\n *\n * TPP_API.Decorate.element($el).addButton(\n * TPP_API.Button.CUSTOM\n * .context({content_spot: \"banner\"})\n * .name(\"promote-banner\")\n * .label(\"Promote Banner\")\n * .context({\n * type: \"promote\",\n * content_spot: \"banner\"\n * })\n * .icon(\"/icons/promote.png\")\n * .isEnabled((action) =>\n * !isBannerPromoted( action.getPreviewId(), action.getContext().content_spot )\n * .execute((action) =>\n * promoteBanner( action.getPreviewId(), action.getContext().content_spot )\n * );\n *\n * TPP_API.Decorate.element($el).addButton(\n * TPP_API.Button.CUSTOM\n * .context({content_spot: \"carousel\"})\n * .name(\"theme-switch\")\n * .options(\n * (action) => {\n * var options = [{id:\"default\", label:\"Set default theme\"}];\n * if (contentSpotsSupportsTheme(action.getPreviewId(), \"dark\")) {\n * options.push({id:\"dark\", label:\"Set dark theme\"});\n * }\n * if (contentSpotsSupportsTheme(action.getPreviewId(), \"light)) {\n * options.push({id:\"light\", label:\"Set light theme\"});\n * }\n * return options;\n * }\n * )\n * .execute((action, args) =>\n * var theme = args[0];\n * setTheme(action.getPreviewId(), theme);\n * );\n *\n *\n **/\n CUSTOM: ActionStore.CUSTOM,\n\n /**\n * @public\n * @since 1.0.0\n * @name TPP_API.Button.CREATE_PAGE\n * @example\n *\n * // Example A\n *\n * // 1. Create Placeholder\n * // In case you have no data for a current slot on your page, you can render an element $el as a placeholder\n * var $el = MyApp.createPlaceholder();\n *\n * // 2. Decorate it\n * // * $el will be decorated with a border\n * // * If $el has no data-preview-id attribute a CREATE_PAGE button will be rendered\n * // * This Button opens an editor form for a page based on 'template_uid'\n * // * If form is submitted\n * // + a Page will be create in the PageStore under 'path/to/element' with the uid 'uid_of_element'\n * // + a PageRef to this Page will be created in the SiteStore under 'path/to/element' with the uid 'uid_of_element'\n * // + if successful an ELEMENT_CREATED event will be fired\n * var create = TPP_API.Button.CREATE_PAGE.context({\n * template: 'template_uid',\n * path: 'path/to/element/uid_of_element',\n * language: 'en'})\n * var decorator = TPP_API.Decorate.element($el).addButton(create);\n *\n *\n * // 3. Wait for creation\n * $el.addEventListener(TPP_API.EVENT.ELEMENT_CREATED, function(e){\n *\n * // 4. Fill your placeholder with real data\n * var contentData = e.detail.content;\n * $el.innerHTML = MyApp.render(contentData);\n *\n * // 5. Update the decoration\n * // This will update the elements decoration and enable all previewId related buttons.\n * // (Currently the ELEMENT_CREATED event does not have a previewId property.\n * // You have to know where you put it in your content and extract it by yourself.)\n * var previewId = MyApp.extractPreviewId(contentData);\n * decorator.updatePreviewId( previewId );\n *\n * });\n *\n *\n * // Example B\n *\n * // You can also add options to select the\n * var create = Decorate.CREATE_PAGE\n * .context({ path: 'path/to/element/uid_of_element', lang: 'en' })\n * .options([{id : 'template_uid_1', label : 'Basic'}, {id: 'template_uid_2', label: 'Advanced'}])\n *\n * var decorator = Decorate.element($el).addButton(create);\n *\n *\n */\n CREATE_PAGE: ActionStore.CREATE_PAGE,\n\n\n /**\n * This button can be used to decorate a page element. It creates child sections for this page element.\n * That means a new section will be added to the page within a given body/content area.\n *\n * The {@link TppActionBuilder#context} should be called with a parameter of type {@link TppCreateChildSectionConfig}.\n *\n * The section template can be selected in three different ways. Either by the standard ContentCreator dialog,\n * given as a fixed value, or with the TPP buttons drop down capability ({@link TppActionBuilder#options}).\n * See examples for more info about choosing the section template.\n *\n * To handle the creation of the section afterwards see {@link TPP_API.Event.CHILD_SECTION_CREATED} and\n * {@link TPP_API.Event.ELEMENT_CREATED}.\n *\n * @public\n * @since 1.0.0\n * @name TPP_API.Button.CREATE_CHILD_SECTION\n * @example\n *\n * // Assumption for every example:\n * // An html element representing the page is given.\n * // It is annotated with a data-preview-id of a page.\n * // The page element should not be the body element of the whole page even if only on FirstSpirit page is rendered\n * // as a whole page in the third party application.\n * // Instead it could be a title or header element.\n * var $pageElement = ...\n *\n *\n * // Example 1 - Simple case\n * // User is provided a dialog with all possible templates.\n * // At least the name of the body (content area) has to be specified.\n * // This dialog is a standard ContentCreator functionality.\n * // The name of the section will be derived from the uid of the selected template.\n * // The new section will be placed after the given section\n * TPP_API.Decorate.element($pageElement).addButton(Decorate.CREATE_CHILD_SECTION.context({body : \"main\"}));\n *\n * // Example 2 - Preselect the given template.\n * // The button can also be pre-configured to choose a specific section template.\n * TPP_API.Decorate\n * .element($pageElement)\n * .addButton(TPP_API.Button.CREATE_CHILD_SECTION.context(\n * {\n * body: \"main\",\n * template : \"section_template_uid\"\n * }\n * ));\n *\n *\n * // Example 3 - Give a static list of templates.\n * // The section template can also be chosen from a fixed list of templates.\n * // There for the drop down capability of the TppButtons can be used.\n * TPP_API.Decorate\n * .element($pageElement)\n * .addButton(TPP_API.Button.CREATE_CHILD_SECTION\n * .context(\n * {\n * body: \"main\",\n * template : \"section_template_uid\"\n * }\n * )\n * .options(\n * [\n * {id: 'section_template_uid_1', label : 'Basic Section'},\n * {id: 'section_template_uid_2', label : 'Advanced Section'}\n * ]\n * }\n * );\n *\n * // Example 4 - Position and section name\n * // The position and also the name of the new section can be set .\n * // (If there are collisions in the section names a suffix will be appended.)\n * // The object given to the context i\n * TPP_API.Decorate\n * .element($pageElement)\n * .addButton(TPP_API.Button.CREATE_CHILD_SECTION.context(\n * {\n * body: \"left\",\n * template : \"section_template_uid\",\n * position: TPP_API.SectionPosition.LAST,\n * sectionName: \"teaser_entry\"\n * }\n * ));\n */\n CREATE_CHILD_SECTION: ActionStore.CREATE_CHILD_SECTION,\n\n\n /**\n * This button can be used to decorate a section. It creates siblings sections for it.\n * That means a new section will be added to the same body within the same page.\n *\n * The {@link TppActionBuilder#context} should be called with a parameter of type {@link TppCreateSiblingSectionConfig}.\n *\n * The section template can be selected in three different ways. Either by the standard ContentCreator dialog,\n * given as a fixed value, or with the TPP buttons drop down capability ({@link TppActionBuilder#options}).\n * See examples for more info about choosing the section template.\n *\n * To handle the creation of the section afterwards see {@link TPP_API.Event.SIBLING_SECTION_CREATED} and\n * {@link TPP_API.Event.ELEMENT_CREATED}.\n *\n * @public\n * @since 1.0.0\n * @name TPP_API.Button.CREATE_SIBLING_SECTION\n * @example\n *\n * //In every example $section is an html element annotated with the data-preview-id of a section.\n *\n * // Example 1 - Simple case\n * // User is provided a dialog with all possible templates.\n * // This dialog is a standard ContentCreator functionality.\n * // The name of the section will be derived from the uid of the selected template.\n * // The new section will be placed after the given section\n * TPP_API.Decorate\n * .element($section)\n * .addButton(TPP_API.Button.CREATE_SIBLING_SECTION);\n *\n *\n * // Example 2 - Preselect the given template.\n * // The button can also be pre-configured to choose a specific section template.\n * TPP_API.Decorate\n * .element($section)\n * .addButton(TPP_API.Button.CREATE_SIBLING_SECTION.context(\n * { template : \"section_template_uid\" }\n * ));\n *\n *\n * // Example 3 - Give a static list of templates.\n * // The section template can also be chosen from a fixed list of templates.\n * // There for the drop down capability of the TppButtons can be used.\n * TPP_API.Decorate\n * .element($section)\n * .addButton(TPP_API.Button.CREATE_SIBLING_SECTION.options(\n * [\n * {id: 'section_template_uid_1', label : 'Basic Section'},\n * {id: 'section_template_uid_2', label : 'Advanced Section'}\n * ]\n * ));\n *\n * // Example 4 - Position and section name\n * // The position relative to the given section can be set and the name of the section can also be set.\n * // (If there are collisions in the section names a suffix will be appended.)\n * // The object given to the context i\n * TPP_API.Decorate\n * .element($section)\n * .addButton(TPP_API.Button.CREATE_SIBLING_SECTION.context(\n * {\n * template: \"teaser_entry_template_uid\"\n * position: TPP_API.SectionPosition.AFTER,\n * sectionName: \"teaser_entry\"\n * }\n * ));\n *\n * // Example 5 - Full example, decorate every child section with a button.\n * // This should be full example for a list of sibling sections\n *\n * // a) Assume you have given a list of section in your application.\n * // Every section is annotated with its own previewId.\n * <div data-slot=\"teaser\">\n * <div class=\"slot-entry\" data-preview-id=\"...\"/>\n * <div class=\"slot-entry\" data-preview-id=\"...\"/>\n * </div>\n *\n * // b) Decorate each slot entry with a create sibling button.\n * var $slotEntries = document.querySelectorAll('.slot-entry');\n * [].forEach.call($slotEntries, ($section) => {\n * Decorate.element($section).addButton(Decorate.CREATE_SIBLING_SECTION);\n * });\n *\n */\n CREATE_SIBLING_SECTION: ActionStore.CREATE_SIBLING_SECTION,\n\n /**\n * This button adds the ability to edit the element given by the previewId.\n * It supports Sections, Pages and PageRefs.\n * Usually there is no further configuration needed.\n * @public\n * @since 1.1.2\n * @name TPP_API.Button.EDIT_ELEMENT\n *\n */\n EDIT_ELEMENT: ActionStore.EDIT_ELEMENT,\n\n /**\n * This button adds the ability to edit the meta data of the element given by the previewId.\n * Usually there is no further configuration needed.\n * @public\n * @since NEXT_STABLE\n * @name TPP_API.Button.EDIT_META_DATA\n *\n */\n EDIT_META_DATA: ActionStore.EDIT_META_DATA,\n\n /**\n * This button adds the ability to delete the section given by a previewId.\n * Usually there is no further configuration needed.\n * @public\n * @since 1.1.2\n * @name TPP_API.Button.DELETE_SECTION\n *\n */\n DELETE_SECTION: ActionStore.DELETE_SECTION,\n\n /**\n * Dropdown button that shows all available workflow that could currently been started.\n * An element that is decorated with this button, should also be decorated with {@link TPP_API.Button.PROCESS_WORKFLOW}.\n * Either one of them will be shown, depending on the elements workflow state.\n * Usually there is no further configuration needed.\n * @public\n * @since 1.1.2\n * @name TPP_API.Button.START_WORKFLOW\n */\n START_WORKFLOW: ActionStore.START_WORKFLOW,\n\n /**\n * Dropdown button that triggers the translation dialog\n * @public\n * @since 1.2.4\n * @name TPP_API.Button.TRANSLATE\n */\n TRANSLATE: ActionStore.TRANSLATE,\n\n /**\n * Dropdown button that shows all available workflow steps that could currently been taken.\n * An element that is decorated with this button, should also be decorated with {@link TPP_API.Button.START_WORKFLOW}.\n * Either one of them will be shown, depending on the elements workflow state.\n * Usually there is no further configuration needed.\n * @public\n * @since 1.1.2\n * @name TPP_API.Button.PROCESS_WORKFLOW\n */\n PROCESS_WORKFLOW: ActionStore.PROCESS_WORKFLOW,\n\n\n /**\n * Open the crop image dialog for an image given as a previewId.\n * The resolution has to be given as additional context value or will be derived from\n * the decorated tab.\n * @public\n * @since 1.1.0\n * @name TPP_API.Button.CROP_IMAGE\n * @example\n * //\n * // Example 1 - decorate image tag, give previewId and resolution via data-fs-resolution\n * // The previewId for the image can be rendered like this\n * //\n * $CMS_VALUE(previewId:\"fs_image\")$\n *\n * // Assume you have the following image tag\n * <img src=\"...\" alt=\"...\" id=\"headerImage\" data-preview-id=\"...\" data-tpp-context-image-resolution=\"HEADER_640x150\">\n * <img src=\"...\" alt=\"...\" id=\"headerImage\" data-preview-id=\"...\" data-tpp-context-image-resolutions=\"HEADER_640x150, HEADER_1280x300\">\n *\n * // Decorate the image tag\n * var $image = document.getElementById('#headerImage');\n * TPP_API.Decorate.element($image).addButton(TPP_API.Button.CROP_IMAGE);\n *\n * //\n * // Example 2 - decorate image tag, give previewId and resolution via api.\n * //\n * // Assume you have the previewId and resolution fetched via the CaaS\n * var imageResolution = ...;\n * var previewId = ...;\n *\n * // Your image tag does not need the attributes now\n * <img src=\"...\" alt=\"...\" id=\"headerImage\">\n *\n * // Decorate the image tag\n * var $image = document.getElementById('#headerImage');\n * var cropImageButton = TPP_API.Button.CROP_IMAGE.context({imageResolution: imageResolution});\n * TPP_API.Decorate.element($image, previewId).addButton(cropImageButton);\n *\n */\n CROP_IMAGE: ActionStore.CROP_IMAGE,\n\n /**\n * Adds bookmark for element.\n * @public\n * @since 1.1.6\n * @name TPP_API.Button.ADD_BOOKMARK\n */\n ADD_BOOKMARK: ActionStore.ADD_BOOKMARK,\n\n /**\n * Removes bookmark for element.\n * @public\n * @since 1.1.6\n * @name TPP_API.Button.DELETE_BOOKMARK\n */\n DELETE_BOOKMARK: ActionStore.DELETE_BOOKMARK,\n\n /**\n * This button prints debug information to the browser console.\n * It's only visible when debug logging is enabled.\n * {@link TPP_API.enableDebugLog}\n * Usually there is no further configuration needed.\n * @public\n * @since 1.1.2\n * @name TPP_API.Button.DEBUG_STATUS\n **/\n DEBUG_STATUS: ActionStore.DEBUG_STATUS\n };\n\n }\n\n function checkForReceiver(util, common, timeout) {\n\n var inIFrame = function () {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n };\n util.messageService.updateReceiverOverride();\n return new Promise(function (resolve) {\n if (typeof window !== 'undefined' && inIFrame()) {\n util.log(\"This app runs in iframe and uses First Spirit TPP so we assume it is in edit mode. Try to connect with TPP-Api.\");\n var pingResult = null;\n common.ping(function (result) {\n pingResult = result;\n if (result.version !== FRONTEND_VERSION) {\n util.log(\"WARNING: TPP-Module and TPP_API Version missmatch. \" +\n \"TPP_API version: \" + FRONTEND_VERSION + \" TPP-Module Version: \" + result.version);\n }\n });\n\n setTimeout(function () {\n if (!pingResult) {\n util.log(\"WARNING: Could not reach TPP-Module receiver (TIMEOUT=\" + timeout + \"ms). The Module might not be installed or this app runs within an iframe but not in FirstSpirits ContentCreators.\");\n resolve(false);\n } else {\n util.log(\"SUCCESS: Connection to TPP-Module could be established. \" +\n \"TPP_API version: \" + FRONTEND_VERSION + \" TPP-Module Version: \" + pingResult.version);\n resolve(true);\n }\n }, timeout)\n\n } else {\n resolve(false);\n }\n });\n }\n\n function connectHandler(receiverFound, util, config) {\n return new Promise(function (resolve) {\n if (receiverFound) {\n util.messageService.connectApi(config.origin, function () {\n util.log(\"Message handler initialized\");\n resolve(receiverFound);\n });\n } else {\n resolve(receiverFound);\n }\n });\n }\n\n\n /**\n * Added for better testability.\n * Access to the three API-Parts as Constructor.\n * Each of the three parts should not depend on global variables.\n * The TPP_API, util, and config can be given as constructor argument.\n * The iframe communication can be mocked be setting another message receiver,\n * but DOM-Event will be emitted and received (can be partially mocked by changing util.emit);\n * @private\n */\n TPP_API._internal = {\n CommonConstructor: Common,\n OperationConstructor: Operation,\n DecorateConstructor: Decorate,\n DebugConstructor: Debug,\n util: util,\n setMessageReceiver: function (receiver) {\n messageReceiverOverride = receiver;\n util.messageService.updateReceiverOverride();\n }\n };\n\n\n /**\n * Enables the debug log. Setting is stored in localStorage and survives reload.\n * @name TPP_API.enableDebugLog\n * @public\n * @since 1.0.0\n * @param {boolean} [enable=true]\n */\n TPP_API.enableDebugLog = function (enable) {\n enable = typeof (enable) === 'undefined' || enable;\n util.log.setEnabled(enable);\n };\n\n\n var initCalled = false;\n /**\n * The API has to be initialize either by calling TPP_API.init() or by adding a blank data-tpp-init attribute to the the script tag. You should use only one of these methods once.\n * @name TPP_API.init\n * @public\n * @since 1.0.0\n * @example\n * // Default values\n * TPP_API.init({\n * origin: \"*\", // every origin allowed\n *\n * autoScanDelay: null // disabled\n * // This option is deprecated and might be replaced with a observer based solution)\n *\n * alwaysDebug: false, // if true, debug will be enabled by default.\n * // Otherwise debug has to be toggled manually\n *\n * autoReload: false, // disabled\n *\n * deletePageWorkflow: null, // disabled, overrides the default delete workflow configured in project\n *\n * workflowMode: TPP_API.WorkflowMode.PAGE_DRIVEN, // Workflows will be started on PageRef.\n * // This is TPPs initial approach\n * }\n *\n * // Reasonable alternative configuration\n * TPP_API.init({\n * origin: \"https://dev.contentCreatorUrl.com:9000\", // The domain of the outer ContentCreator window.\n * // Restricts communication only to out frame with this domain.\n *\n * autoScanDelay: 1000 // Scan every 1000ms\n * // This option is deprecated and might be replaced\n * // with a observer based solution.\n *\n * alwaysDebug: true, // Debug logging and PP_API.Button.DEBUG_STATUS action is enabled.\n *\n * autoReload: true, // Reloads the whole page on certain actions\n *\n * deletePageWorkflow: null, // Disabled, overrides the default delete workflow configured in project\n *\n * workflowMode: TPP_API.WorkflowMode.PAGE_REF_DRIVEN, // Workflows will be started on PageRefs.\n * // This is the approach more compatible with the actions\n * // accessible the ContentCreator frame.\n *\n * }\n * );\n *\n * @example\n * // Alternatively use data-tpp-* attributes\n *\n * <script src=\"$PATH_TO_MODULE$/lib/fs-tpp-api.js\"\n * data-tpp-init\n * data-tpp-auto-reload=\"true\"></script>\n *\n * // Note, that data-tpp-init has to be always present in the second method, that there is a data-tpp-* prefix and that the camelCase on one side is kebab-case on the other side.\n *\n *\n * @param {Object} tppConfig\n */\n TPP_API.init = function (tppConfig) {\n if (initCalled) {\n console.error('TPP_API.init() was called twice. Please do only one of EITHER calling it directly OR using <script data-tpp-init>');\n }\n initCalled = true;\n\n config = Object.assign({}, DEFAULT_CONFIG, tppConfig);\n\n TPP_API.Common = new Common(TPP_API, util, config);\n TPP_API.Operation = new Operation(TPP_API, util, config);\n TPP_API.Decorate = new Decorate(TPP_API, util, config);\n TPP_API.Debug = new Debug(TPP_API, util, config);\n\n initButtonConstants(TPP_API);\n\n\n if (config.autoScanDelay) {\n setTimeout(TPP_API.Decorate.scan, parseInt(config.autoScanDelay, 10));\n }\n\n if (config.alwaysDebug) {\n util.log.setEnabled(true);\n }\n\n if (config.autoReload) {\n var reloadEvents = [TPP_API.Event.CONTENT_CHANGED, TPP_API.Event.ELEMENT_DELETED];\n reloadEvents.forEach(function (eventName) {\n document.body.addEventListener(eventName, self.location.reload.bind(self.location));\n });\n }\n\n // deprecated - was used in old prototypes\n TPP_API.Decorate.Action = TPP_API.Button;\n TPP_API.Decorate.Icon = TPP_API.Icon;\n\n //Connect with receiver\n var timeout = 800;\n checkForReceiver(util, TPP_API.Common, timeout)\n .then(function (receiverFound) {\n return connectHandler(receiverFound, util, config);\n })\n .then(function () {\n TPP_API.Debug.apiInitialized = true;\n });\n };\n\n\n (/**\n * @private\n * Script tag initialize\n * @param {HTMLElement} $script\n * param {{tppOrigin,tppAlwaysDebug,tppAutoScanDelay,tppAutoReload}} data\n */\n function ($script) {\n if ($script) {\n\n var data = $script.dataset;\n var config = {};\n\n var getTppCamelCase = function (str) {\n return \"tpp\" + str[0].toUpperCase() + str.slice(1);\n };\n\n var setBoolean = function (config, key, data) {\n var strValue = data[getTppCamelCase(key)];\n if (typeof (strValue) !== 'undefined') {\n config[key] = (strValue === 'true');\n }\n };\n\n var setNumber = function (config, key, data) {\n var strValue = data[getTppCamelCase(key)];\n var value = Number.parseInt(strValue);\n if (!Number.isNaN(value)) {\n config[key] = value;\n }\n };\n\n var setString = function (config, key, data) {\n var strValue = data[getTppCamelCase(key)];\n if (typeof (strValue) !== 'undefined') {\n config[key] = strValue;\n }\n };\n\n setString(config, 'origin', data);\n\n setString(config, 'workflowMode', data);\n\n setBoolean(config, 'alwaysDebug', data);\n\n setNumber(config, 'autoScanDelay', data);\n\n setBoolean(config, 'autoReload', data);\n\n setBoolean(config, 'deleteSectionEnabled', data);\n\n setString(config, 'deletePageWorkflow', data);\n\n TPP_API.init(config);\n }\n })(typeof (document) !== 'undefined' && document.querySelector('script[data-tpp-init]'));\n\n /**\n * In setups where you can not control the load order of your scripts you can define this as a global callback.\n * It will be called with TPP_API as parameter.\n * The best way would be to avoid such situations and control the load order of your scripts.\n * @private\n * @name window.TPP_API_LOADED\n *\n * @example\n * window.TPP_API_LOADED=function(TPP_API){\n * // You can use the TPP_API now.\n * // You should initialize and configure it as the first step\n * }\n */\n if (typeof (window) !== 'undefined' && typeof window['TPP_API_LOADED'] === 'function') { // async / deferred usage\n window['TPP_API_LOADED'](TPP_API);\n }\n\n util.log(\"TPP_API loaded.\");\n if (typeof window === 'undefined') {\n util.log(\"The API is not supposed to run on server side. It adds event listeners to the global window object.\");\n }\n\n return TPP_API;\n}))\n;\n","module.exports = { \"default\": require(\"core-js/library/fn/number/is-nan\"), __esModule: true };","require('../../modules/es6.number.is-nan');\nmodule.exports = require('../../modules/_core').Number.isNaN;\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/number/parse-int\"), __esModule: true };","require('../../modules/es6.number.parse-int');\nmodule.exports = require('../../modules/_core').Number.parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = { \"default\": require(\"core-js/library/fn/array/from\"), __esModule: true };","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","module.exports = require('./_hide');\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/json/stringify\"), __esModule: true };","var core = require('../../modules/_core');\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n return $JSON.stringify.apply($JSON, arguments);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/promise\"), __esModule: true };","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","module.exports = function () { /* empty */ };\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else hide(target, key, src[key]);\n } return target;\n};\n","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","exports.f = Object.getOwnPropertySymbols;\n","exports.f = {}.propertyIsEnumerable;\n","module.exports = { \"default\": require(\"core-js/library/fn/object/create\"), __esModule: true };","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n return $Object.create(P, D);\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n"],"sourceRoot":""}
\No newline at end of file