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","FRONTEND_VERSION","GIT_HASH","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","CALLBACK","EVENT","storage","serialize","callback","tryParseResult","match","JSON","parse","ignore","handleCallback","tppMessage","response","_response","callbackId","_callbackId","permanent","deserialize","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","_create2","default","_assign2","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","isFolder","raw","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","$image","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","_promise2","setPreviewElement","addPreviewRequestHandler","addNavigationChangeHandler","addWorkflowProcessedHandler","ping","_project","languages","previewUrl","location","href","Action","EDIT","EDIT_META_DATA","STATUS","DELETE","DELETE_WORKFLOW","RENDER","CREATE_PAGE","CREATE_SIBLING_SECTION","CREATE_CHILD_SECTION","CREATE_DATASET","WORKFLOW_START","WORKFLOW_PROCESS","CROP_IMAGE","TOGGLE_BOOKMARK","PROJECT_INFO","TRANSLATION","createDetail","detailName","executeOperation","language","master","unshift","lang","showEditDialog","CONTENT_CHANGED","showMetaDataDialog","getElementStatus","renderElement","renderStartNode","deleteSection","deletePage","deleteWorkflowUID","startWorkflow","workflow","processWorkflow","transition","createPage","selectedTemplate","_stringify2","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","icon","Icon","CREATE_SECTION","DEBUG_STATUS","DEBUG","EDIT_ELEMENT","DELETE_SECTION","elementType","DELETE_PAGE","workflows","deleteWorkflow","current","getDeleteWorkflowUID","START_WORKFLOW","WORKFLOW","allowed","_workflows","storeType","displayName","PROCESS_WORKFLOW","transitions","resolutions","ADD_BOOKMARK","indexOf","DELETE_BOOKMARK","TRANSLATE","ln","j","INITIAL_DEFAULT_DECORATION_ACTIONS","defaultDecorationActions","setDefaultButtons","buttons","scan","head","initPreviewId","contextFromAttributes","_keys2","startsWith","reduce","substr","toLowerCase","initContext","_customActions","frameDecorator","observer","MutationObserver","mutations","mutation","nodes","_from2","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","_parseInt2","_isNan2","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","catch","capability","all","iterable","remaining","$index","alreadyCalled","race","forbiddenField","BREAK","RETURN","un","macrotask","Observer","WebKitMutationObserver","last","flush","navigator","standalone","toggle","node","createTextNode","characterData","DESCRIPTORS","finally","onFinally","try","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.17\";\n var GIT_HASH = \"58e04854ee7e5216adab8fdb159570d4fa822e68\";\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 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. [unpkg.com](https://unpkg.com) with an appropriate version specifier:\n * <script src=\"https://unpkg.com/fs-tpp-api@1.2.0/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,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\",\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