{"version":3,"file":"fw-dsb-app.umd.min.js","sources":["../../node_modules/regenerator-runtime/runtime.js","../../node_modules/@babel/runtime/helpers/typeof.js","../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inherits.js","../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/isNativeFunction.js","../../node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","../../node_modules/@babel/runtime/helpers/construct.js","../../node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../../node_modules/@babel/runtime/helpers/asyncToGenerator.js","../../source/lib/database.js","../../source/lib/user.js","../../source/lib/content.js","../../source/parts/analytics.js","../../source/parts/eventListners.js","../../source/components/spinner.js","../../source/components/nav.js","../../source/components/dsb-workspace.js","../../source/components/dsb-list/parts/filter.js","../../source/components/dsb-list/parts/template_coverflow.js","../../source/components/dsb-list/parts/template_list.js","../../source/components/dsb-list/dsb-list.js","../../source/components/dsb-stepbar.js","../../source/components/dsb-catchup.js","../../source/components/dsb-reader.js","../../source/components/dsb-post.js","../../source/components/dsb-tasks.js","../../source/components/dsb-quiz.js","../../source/fw-dsb-app.js"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nmodule.exports = _isNativeFunction;","function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nmodule.exports = _isNativeReflectConstruct;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct\");\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct;","var getPrototypeOf = require(\"./getPrototypeOf\");\n\nvar setPrototypeOf = require(\"./setPrototypeOf\");\n\nvar isNativeFunction = require(\"./isNativeFunction\");\n\nvar construct = require(\"./construct\");\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nmodule.exports = _wrapNativeSuper;","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;","\nexport default class DatabaseHandler {\n constructor(\n db_name,\n db_version,\n db_tables = {},\n hooks = null,\n settings = null\n ) {\n\n console.log('DataHandler constructor...');\n this.cache = {}\n this.db = false;\n this.db_name = db_name;\n this.db_version = db_version;\n this.db_tables = db_tables;\n //window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;\n if (!window.indexedDB)\n {\n console.error(\"Your browser doesn't support a stable version of IndexedDB. Such and such feature will not be available.\");\n return false;\n }\n else\n {\n console.log(this.db_name+'|Database:: Ready',this.db_tables);\n }\n }\n\n _setupDB()\n {\n let _this = this;\n return new Promise(function(resolve, reject) {\n\n // If we already have it use the cached one\n if (_this.db)\n {\n resolve();\n }\n else\n {\n _this.db = indexedDB.open(_this.db_name, _this.db_version);\n _this.db.onerror = function(event) {\n console.error(_this.db_name+'|Database::_setupDB '+event.target.errorCode+' Cannot open db '+_this.db_name ,event);\n reject(_this.db_name+'|Database::_setupDB '+event.target.errorCode+' Cannot open db '+_this.db_name);\n };\n _this.db.onupgradeneeded = function(event) {\n let db = event.target.result;\n console.debug(_this.db_name+'|Database::_setupDB Setting up ObjectStoreNames');\n var objectStore;\n // Check for objectStoreNames\n for(let objectStoreName in _this.db_tables)\n {\n objectStore = db.createObjectStore(objectStoreName, { keyPath: 'id', autoIncrement: false});\n console.debug(_this.db_name+'|Database::_setupDB Setting up objectStoreName: '+objectStoreName,_this.db_tables);\n if(('indexes' in _this.db_tables[objectStoreName]) && ('default' in _this.db_tables[objectStoreName]))\n {\n for(let i = 0; i < _this.db_tables[objectStoreName].indexes.length; i++)\n {\n let thisIndex = _this.db_tables[objectStoreName].indexes[i];\n if((thisIndex in _this.db_tables[objectStoreName].default) || (('generated_onupdate' in _this.db_tables[objectStoreName]) && (thisIndex in _this.db_tables[objectStoreName].generated_onupdate)))\n {\n console.debug(_this.db_name+'|Database::_setupDB Adding index to'+objectStoreName+':'+thisIndex,_this.db_tables);\n objectStore.createIndex(thisIndex, thisIndex, { unique: false });\n }\n else\n {\n console.error(_this.db_name+'|Database::_setupDB Index '+thisIndex+' not in fields ' ,_this.db_tables);\n }\n }\n }\n }\n };\n\n // Fires once the database is opened (and onupgradeneeded completes, if\n // onupgradeneeded was called)\n _this.db.onsuccess = function(event) {\n // Set the db variable to our database so we can use it!\n _this.db = event.target.result;\n console.debug(_this.db_name+'|Database::_setupDB Setup done' );\n resolve();\n }\n }\n });\n }\n\n close()\n {\n this.db.close();\n }\n\n handles_table(name)\n {\n if(name in this.db_tables)\n {\n return true;\n }\n return false;\n }\n\n async upsert(objectStoreName, id, data={})\n {\n await this._setupDB();\n let _this = this;\n return new Promise((resolve, reject) => {\n try\n {\n if(_this.db)\n {\n var thisTransaction = _this.db.transaction(objectStoreName, \"readwrite\");\n let thisObjectStore = thisTransaction.objectStore(objectStoreName);\n data.id=id;\n if((objectStoreName in _this.db_tables) && ('generated_onupdate' in _this.db_tables[objectStoreName]))\n {\n for(let thisField in _this.db_tables[objectStoreName].generated_onupdate)\n {\n switch(_this.db_tables[objectStoreName].generated_onupdate[thisField])\n {\n case \"date\":\n data[thisField] = Math.floor(+new Date() / 1000);\n break;\n default:\n break;\n }\n }\n }\n thisObjectStore.put(data);\n thisTransaction.oncomplete = function(event) {\n console.debug(_this.db_name+'|Database:: upsert /'+objectStoreName+'/'+id+' success',data);\n resolve(id);\n };\n thisTransaction.onerror = function(event) {\n reject('Error['+event.target.errorCode+'] Cannot PUT');\n }\n }\n else\n {\n throw \"Missing database connection!\";\n }\n }\n catch(ex)\n {\n console.error(_this.db_name+'|Database.upsert:: /'+objectStoreName+'/'+id,data ,ex);\n reject('error:'+_this.db_name+'|Database.upsert:: /'+objectStoreName+'/'+id);\n }\n });\n }\n\n async get(objectStoreName,query_type='all',query_value='next')\n {\n\n await this._setupDB();\n let _this = this;\n let sort='id';\n return new Promise((resolve, reject) => {\n\n try\n {\n if(_this.db)\n {\n var thisTransaction = _this.db.transaction(objectStoreName, \"readonly\");\n let thisObjectStore = thisTransaction.objectStore(objectStoreName);\n thisTransaction.onerror = function(event) {\n reject('thisTransactionError['+event.target.errorCode+'] Cannot GET');\n }\n\n let onerror = function(event) {\n reject('Error['+event.target.errorCode+'] Cannot GET');\n }\n var thisObjectStoreRequest = null;\n\n switch(query_type)\n {\n case \"id\":\n if(query_value.length<=0)\n {\n throw 'query_value<=0 please enter a query_value';\n }\n //thisObjectStore.index(sort);\n thisObjectStoreRequest = thisObjectStore.get(query_value);\n thisObjectStoreRequest.onerror=onerror;\n thisObjectStoreRequest.onsuccess = function(event) {\n console.debug(_this.db_name+'|Database:: get by '+objectStoreName+'/id ('+query_value+') success',event.target.result);\n resolve(event.target.result);\n };\n break;\n case \"index\":\n if(query_value.length<=0)\n {\n throw 'query_value<=0 please enter a query_value';\n }\n\n let theseIndexes = [];\n let theseIndexes_values = [];\n for(let anIndex in query_value)\n {\n theseIndexes.push(anIndex);\n theseIndexes_values.push(query_value[anIndex]);\n }\n\n if(theseIndexes.length == 1)\n {\n let thisObjectStoreIndex = thisObjectStore.index(theseIndexes[0]);\n var singleKeyRange = IDBKeyRange.only(theseIndexes_values[0]);\n let thisObjectStoreIndexCursor = thisObjectStoreIndex.openCursor(singleKeyRange);\n thisObjectStoreIndexCursor.onerror=onerror;\n let allResults = [];\n thisObjectStoreIndexCursor.onsuccess = function(event) {\n var cursor = event.target.result;\n if (cursor != null)\n {\n allResults.push(cursor.value);\n cursor.continue();\n }\n else\n {\n console.debug(_this.db_name+'|Database:: get where '+objectStoreName+'/index ('+theseIndexes[0]+' = '+theseIndexes_values[0]+') success',allResults);\n resolve(allResults);\n }\n };\n }\n else\n {\n throw 'Only one index is allowed not '+theseIndexes.length;\n }\n break;\n case \"all\":\n thisObjectStoreRequest = thisObjectStore.openCursor(null, query_value=='prev' ? 'prev' : 'next');\n thisObjectStoreRequest.onerror=onerror;\n let allResults = [];\n thisObjectStoreRequest.onsuccess = function(event) {\n let cursor = event.target.result;\n if (cursor != null) {\n allResults.push(cursor.value);\n cursor.continue();\n } else {\n console.debug(_this.db_name+'|Database:: get '+objectStoreName+'/all ('+query_value+') success',allResults);\n resolve(allResults);\n }\n }\n break;\n default:\n throw 'Unknown query_type='+query_type;\n break;\n }\n }\n else\n {\n throw \"Missing database connection!\";\n }\n }\n catch(ex)\n {\n console.error(_this.db_name+'|Database.get:: /'+objectStoreName+'/'+query_type+'/'+query_value ,ex);\n reject('error:'+_this.db_name+'|Database.get:: /'+objectStoreName+'/'+query_type+'/'+query_value);\n }\n });\n\n }\n}\n\n\n","import databaseHandler from './database.js';\n\nexport default class UserHandler {\n constructor({\n hooks = null,\n settings = null\n } = {}) {\n\n console.log('UserHandler constructor...');\n this.cache = {}\n this.token = '';\n this.url = '';\n this.status = '';\n this.profile = null;\n this.refresh_url = '';\n this.initial_load = false;\n this.local_db = false;\n this.last_checked_online=false;\n this._offline=false;\n this.offline_user=false;\n }\n\n async init(url,refresh,settings)\n {\n this.refresh_url = refresh;\n this.settings=settings;\n\n let _this = this;\n\n this.url = url;\n this.initial_load = true;\n\n let _log = this._log;\n\n if(!('online_check_url' in this.settings) || this.settings.online_check_url===false)\n {\n if('app_path' in this.settings)\n {\n this.settings.online_check_url=(this.settings.app_path.endsWith('/') ? this.settings.app_path.slice(0, -1) : this.settings.app_path)+'/manifest.part.json';\n }\n else\n {\n this.settings.online_check_url=false;\n }\n }\n\n if(!('online_check_timeout' in this.settings))\n {\n this.settings.online_check_timeout='5000';\n }\n\n this.env = {\n init:function(force)\n {\n try\n {\n if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0,4)))\n {\n this.isMobile = true;\n }\n else\n {\n this.isMobile = false;\n }\n\n\n // Check for cookies\n this.cookieEnabled = navigator.cookieEnabled;\n if (!this.cookieEnabled){\n document.cookie = \"testcookie\";\n this.cookieEnabled = document.cookie.indexOf(\"testcookie\")!=-1;\n }\n\n // Check for PWA support\n this.pwa_supportsmanifest = ('relList' in HTMLLinkElement.prototype && document.createElement('link').relList.supports('manifest')?true:false);\n\n //Set Useragent\n this.userAgent=navigator.userAgent;\n\n // Set Browser\n this.browser='unknown';\n if (/rv:11.0/i.test(navigator.userAgent)) {\n this.browser=\"IE\";\n }\n\n if (/MSIE 10/i.test(navigator.userAgent)) {\n this.browser=\"IE_10\";\n }\n else if (/MSIE 9/i.test(navigator.userAgent)) {\n this.browser=\"IE_9\";\n\n }else if (/Edge\\/\\d./i.test(navigator.userAgent)){\n this.browser=\"IE_EDGE\";\n }\n\n if(navigator.userAgent.includes('Chrome') &&\n !navigator.userAgent.includes('Chromium') &&\n !navigator.userAgent.includes('OPR') &&\n !navigator.userAgent.includes('Edge') &&\n !navigator.userAgent.includes('SamsungBrowser'))\n {\n this.browser=\"Chrome\";\n }\n\n if(navigator.userAgent.includes('SamsungBrowser'))\n {\n this.browser=\"SamsungBrowser\";\n }\n\n if(navigator.userAgent.includes('Firefox') || navigator.userAgent.includes('Seamonkey') || navigator.userAgent.includes('Focus'))\n {\n this.browser=\"Firefox\";\n }\n\n\n if(navigator.userAgent.includes('Safari') &&\n !navigator.userAgent.includes('Chrome') &&\n !navigator.userAgent.includes('Chromium') &&\n !navigator.userAgent.includes('Android'))\n {\n this.browser=\"Safari\";\n if(navigator.userAgent.includes('CriOS'))\n {\n this.browser=\"Safari/Chrome\";\n }\n else if(navigator.userAgent.includes('FxiOS'))\n {\n this.browser=\"Safari/Firefox\";\n }\n else if(navigator.userAgent.includes('DuckDuckGo'))\n {\n this.browser=\"Safari/DuckDuckGo\";\n }\n else if(navigator.userAgent.includes('EdgiOS'))\n {\n this.browser=\"Safari/EdgiOS\";\n }\n\n }\n\n // Set OS\n this.OS = 'unknown';\n let clientStrings = [\n {s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/},\n {s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/},\n {s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/},\n {s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/},\n {s:'Windows Vista', r:/Windows NT 6.0/},\n {s:'Windows Server 2003', r:/Windows NT 5.2/},\n {s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/},\n {s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/},\n {s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/},\n {s:'Windows 98', r:/(Windows 98|Win98)/},\n {s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/},\n {s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},\n {s:'Windows CE', r:/Windows CE/},\n {s:'Windows 3.11', r:/Win16/},\n {s:'Android', r:/Android/},\n {s:'Open BSD', r:/OpenBSD/},\n {s:'Sun OS', r:/SunOS/},\n {s:'Chrome OS', r:/CrOS/},\n {s:'Linux', r:/(Linux|X11(?!.*CrOS))/},\n {s:'iOS', r:/(iPhone|iPad|iPod)/},\n {s:'Mac OS X', r:/Mac OS X/},\n {s:'Mac OS', r:/(Mac OS|MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},\n {s:'QNX', r:/QNX/},\n {s:'UNIX', r:/UNIX/},\n {s:'BeOS', r:/BeOS/},\n {s:'OS/2', r:/OS\\/2/},\n {s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\\/Teoma|ia_archiver)/}\n ];\n for (let id in clientStrings) {\n let cs = clientStrings[id];\n if (cs.r.test(navigator.userAgent)) {\n this.OS = cs.s;\n break;\n }\n }\n\n this.OSVersion = 'unknown';\n\n\n if (/Windows/.test(this.OS)) {\n this.OSVersion = /Windows (.*)/.exec(this.OS)[1];\n this.OS = 'Windows';\n }\n\n switch (this.OS) {\n case 'Mac OS':\n case 'Mac OS X':\n this.OSVersion = /(?:Android|Mac OS|Mac OS X|MacPPC|MacIntel|Mac_PowerPC|Macintosh) ([\\.\\_\\d]+)/.exec(navigator.userAgent)[1];\n break;\n case 'Android':\n this.isMobile = true;\n this.OSVersion = /(?:Android|Mac OS|Mac OS X|MacPPC|MacIntel|Mac_PowerPC|Macintosh) ([\\.\\_\\d]+)/.exec(navigator.userAgent)[1];\n break;\n case 'iOS':\n this.isMobile = true;\n this.OSVersion = /OS (\\d+)_(\\d+)_?(\\d+)?/.exec(navigator.appVersion);\n this.OSVersion = this.OSVersion[1] + '.' + this.OSVersion[2] + '.' + (this.OSVersion[3] | 0);\n break;\n }\n\n if (/Mac OS/.test(this.OS) && navigator.maxTouchPoints && navigator.maxTouchPoints > 1) {\n this.OS = 'iOS';\n this.isMobile = true;\n }\n\n this.OS = this.OS.replace(' ','').toLowerCase();\n this.OSVersion = this.OSVersion.replace(' ','').toLowerCase();\n this.browser = this.browser.replace(' ','').toLowerCase();\n\n }\n catch(ex)\n {\n _this._log(\"error\",\"env.init\",ex);\n }\n\n this.viewPortSizes = {};\n },\n get: function()\n {\n return {'os':this.OS,\n 'os_version':this.OSVersion,\n 'browser':this.browser,\n 'viewport': this.viewPort,\n 'pwa_support':{'manifest':this.pwa_supportsmanifest},\n 'is_mobile':this.isMobile,\n 'isInstalled':this.isInstalled,\n 'userAgent':this.userAgent\n };\n },\n getOS: function()\n {\n return this.OS;\n },\n getOSVersion: function()\n {\n return this.OSVersion;\n },\n isInstalled:function()\n {\n let result = false;\n // For iOS\n if(window.navigator.standalone)\n {\n result = true;\n }\n\n // For Android\n if(window.matchMedia('(display-mode: standalone)').matches)\n {\n result = true;\n }\n return result;\n\n },\n print: function()\n {\n _this._log(\"info\",\"env.getOS/env.getOSVersion/env.userAgent/env.Browser\",this.getOS()+'/'+this.getOSVersion()+'/'+this.userAgent+'/'+this.browser);\n _this._log(\"info\",\"env.isInstalled\",this.isInstalled());\n _this._log(\"info\",\"env.getViewport\",\"Width:\"+window.innerWidth+', Viewport is '+this.viewPort);\n _this._log(\"info\",\"env.getDimentions\",\"fullheight:\"+this.dimentions.fullheight+', fullwidth:'+this.dimentions.fullwidth);\n },\n refreshViewPort:function(){\n let dsb_app_defines = document.createElement(\"div\");\n dsb_app_defines.setAttribute('id','dsb_app_defines');\n dsb_app_defines.innerHTML = `
`;\n document.querySelector('dsb-app').append(dsb_app_defines);\n this.viewPortSizes.large=document.getElementById( \"dsb_app_defines-large\" ).offsetWidth;\n this.viewPortSizes.medium=document.getElementById( \"dsb_app_defines-medium\" ).offsetWidth;\n this.viewPortSizes.small=document.getElementById( \"dsb_app_defines-small\" ).offsetWidth;\n this.viewPortSizes.xsmall=document.getElementById( \"dsb_app_defines-xsmall\" ).offsetWidth;\n document.getElementById( \"dsb_app_defines\" ).remove();\n this.dimentions={};\n this.dimentions.fullheight=getComputedStyle(document.documentElement).getPropertyValue('--fullheight');\n this.dimentions.fullwidth=getComputedStyle(document.documentElement).getPropertyValue('--fullheight');\n this.getDimentions();\n this.isInstalled();\n this.getOS();\n this.getOSVersion();\n this.print();\n return this.getViewport(true);\n },\n getViewport:function(force){\n if(force)\n {\n var width = window.innerWidth;\n if(width<=this.viewPortSizes.medium && width>this.viewPortSizes.small)\n {\n this.viewPort='medium';\n }\n else if(width<=this.viewPortSizes.small && width>this.viewPortSizes.xsmall)\n {\n this.viewPort='small';\n }\n else if(width<=this.viewPortSizes.xsmall)\n {\n this.viewPort='xsmall';\n }\n else\n {\n this.viewPort='large';\n }\n }\n return this.viewPort;\n },\n getDimentions:function(force){\n return this.dimentions;\n },\n isViewport: function(_portSize)\n {\n let portSize = [];\n if(!Array.isArray(_portSize))\n {\n portSize.push(_portSize );\n }\n else\n {\n portSize = _portSize;\n }\n\n for(let i = 0; i < portSize.length; i++)\n {\n //console.log(\"testing..\"+this.viewPort.toLowerCase()+\" == \"+portSize[i].toLowerCase());\n if(this.viewPort.toLowerCase()===portSize[i].toLowerCase())\n {\n return true;\n }\n }\n return false;\n },\n };\n this.env.init();\n\n window.onresize = function() {\n _this.env.getViewport(true);\n _this.env.print();\n }\n\n // Listen to ServiceWorker\n window.addEventListener(\"fw-pwa-serviceworker_event\", e => {\n try\n {\n if(('detail' in e) && ('type' in e.detail))\n {\n switch(e.detail.type)\n {\n case \"event\":\n switch(e.detail.data)\n {\n case \"offline\":\n //_this._log('debug','fw-pwa-serviceworker_event','Offline Mode set.');\n //_this.last_checked_online = Math.floor(+new Date() / 1000);\n //_this.offline=true;\n _this.is_offline(true);\n break;\n case \"online\":\n //_this._log('debug','fw-pwa-serviceworker_event','Online Mode set.');\n //_this.last_checked_online = Math.floor(+new Date() / 1000);\n _this.offline=false;\n _this.is_offline(false);\n break;\n default:\n break;\n }\n break;\n case \"set_offline_mode\":\n\n break;\n default:\n break;\n }\n }\n }\n catch(ex)\n {\n console.error('fw-pwa-serviceworker_event:: Error occured in detail',ex);\n }\n });\n\n window.addEventListener('offline', function(e) {\n _this._log('debug','window.offline','Offline Mode set.');\n _this.last_checked_online = Math.floor(+new Date() / 1000);\n _this.offline=true;\n _this.is_offline(true);\n });\n\n window.addEventListener('online', function(e) {\n _this._log('debug','window.online','Online Mode set.');\n _this.last_checked_online = Math.floor(+new Date() / 1000);\n _this.offline=false;\n _this.is_offline(false);\n });\n\n // Setup user\n this.status = 'failed';\n this.profile = null;\n\n // Get profile from JWT\n if(await this._refresh_profile_from_token())\n {\n // Setup IndexDB\n this._setupDB();\n\n // Connect to user endpoint\n await this._connect_to_endpoint();\n\n }\n else\n {\n return false;\n }\n }\n\n async _connect_to_endpoint()\n {\n try\n {\n this.status = 'connecting';\n this._log('debug','init',\"Connecting to user endpoint\",this.url);\n // Set user\n this.dsbClient = new DatastoreBuilderClient({\n //endpoint: 'http://localhost:8000/fw/v1',\n endpoint: this.url,\n headers: {'Authorization': 'Bearer '+this.token, 'Content-Type': 'application/json'},\n bootstrap: '',\n hooks: ''\n });\n let init = await this.dsbClient.init();\n //TODO Test result to check token is all good\n this.status = 'complete';\n }\n catch(ex)\n {\n await this.is_offline('maintenance');\n this._log('error','reload',\"Cannot connect to DatastoreBuilderClient\", ex);\n }\n }\n\n hasJWTExpired()\n {\n if(this.profile && ('exp' in this.profile))\n {\n if(Math.floor(+new Date() / 1000) < this.profile.exp)\n {\n return false;\n }\n this._log('error','hasJWTExpired','Session seems to have expired',this.profile.exp);\n }\n return true;\n }\n\n async renew_session(changelayout = false)\n {\n if(this.refresh_url.length > 0)\n {\n return new Promise((resolve, reject) => {\n let didTimeOut = false;\n this._log('debug','renew_session',\"Running...\",this.refresh_url);\n let refresh_url = this.refresh_url+'&redirect='+encodeURIComponent(window.location.origin+'/wp-content/themes/pm-one-fwi/assets/images/fw-avatar.svg');\n try\n {\n let _this = this;\n //this._deleteCookie('pm_sso_jwt','/','/');\n document.cookie = \"pm_sso_jwt=/;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/\";\n if(!this._getCookie('pm_sso_jwt'))\n {\n const timeout = setTimeout(function() {\n didTimeOut = true;\n reject(new Error('Request timed out @'+_this.settings.online_check_timeout));\n }, _this.settings.online_check_timeout);\n\n this._log('debug','renew_session','Trying for a refresh with iframe to \"'+refresh_url+'\"');\n var iframe = document.createElement(\"iframe\");\n iframe.setAttribute('src',refresh_url);\n iframe.setAttribute('class','hidden');\n iframe.onload = function() {\n clearTimeout(timeout);\n _this._log('debug','renew_session/iframe','iframe loaded',this);\n if(!didTimeOut)\n {\n _this._log('debug','renew_session/iframe','iframe returning true, deleting iframe',this);\n iframe.remove();\n resolve(true);\n }\n }\n document.body.append(iframe);\n return true;\n }\n else\n {\n this._log('error','renew_session','Cannot delete pm_sso_jwt cookie!')\n this.status = 'failed';\n //window.dispatchEvent(new CustomEvent('dsb-pwa-base_update', {detail: {\"layout\":\"login\"}}));\n reject('no-cookies');\n }\n }\n catch(ex)\n {\n this_log('error','renew_session',this.refresh_url,ex);\n this.status = 'failed';\n reject('error');\n }\n });\n }\n return false;\n }\n\n\n async _refresh_profile_from_token(auto_renew=true,force_login_on_fail=false)\n {\n this.token = this._getCookie(`pm_sso_jwt`);\n if(!this.token)\n {\n this._log('info','_refresh_profile_from_token','Missing token... '+(auto_renew?' running renew_session()':'auto_renew is off'));\n if(auto_renew)\n {\n await this.renew_session();\n return this._refresh_profile_from_token(false,force_login_on_fail);\n }\n else\n {\n if(force_login_on_fail)\n {\n return this.run_login_redirect(force_login_on_fail);\n }\n else\n {\n return false;\n }\n }\n }\n else\n {\n this._log('info','_refresh_profile_from_token','Ok found token, processing... ');\n var base64Url = this.token.split('.')[1];\n var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n var jsonPayload = decodeURIComponent(atob(base64).split('').map(function(c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n\n this.profile = JSON.parse(jsonPayload);\n\n if(this.hasJWTExpired())\n {\n this._log('info','_refresh_profile_from_token','JWT is Expired... '+(auto_renew?' running renew_session()':'auto_renew is off'));\n if(auto_renew)\n {\n await this.renew_session();\n return this._refresh_profile_from_token(false);\n }\n else\n {\n if(force_login_on_fail)\n {\n return this.run_login_redirect(force_login_on_fail);\n }\n else\n {\n return false;\n }\n }\n }\n else\n {\n this._log('info','_refresh_profile_from_token','Tokens fine and hasnt expired');\n }\n }\n return true;\n }\n\n get_login_url()\n {\n if(('login_url' in this.settings) && this.settings.login_url.length > 0)\n {\n return this.settings.login_url;\n }\n return false;\n }\n\n run_login_redirect(type=false)\n {\n if(('login_url' in this.settings) && this.settings.login_url.length > 0)\n {\n switch(type)\n {\n case \"change_layout\":\n this._log('debug','run_login_redirect','Launched layout login'+this.settings.login_url);\n //window.dispatchEvent(new CustomEvent('dsb-pwa-transient_modal', {detail: {content:component}}));\n window.dispatchEvent(new CustomEvent('dsb-pwa-base_update', {detail: {\"layout\":\"login\"}}));\n default:\n this._log('debug','run_login_redirect','Redirecting to '+this.settings.login_url);\n window.location = this.settings.login_url;\n break;\n }\n return true;\n }\n return false;\n }\n\n async is_loggedin(role='',auto_renew=true,force_login_on_fail=false)\n {\n this._log('debug','is_loggedin','Checking for',{'role':role,'auto_renew':auto_renew});\n if(this.hasJWTExpired() && auto_renew)\n {\n if(await this._refresh_profile_from_token(auto_renew))\n {\n return this.is_loggedin(role,false);\n }\n else\n {\n if(force_login_on_fail)\n {\n return this.run_login_redirect(force_login_on_fail);\n }\n return false;\n }\n }\n else\n {\n this._log('debug','is_loggedin','JWT has not expired');\n if(this.profile)\n {\n if('role' in this.profile)\n {\n if(role)\n {\n if(role == this.profile.role)\n {\n return true;\n }\n return false;\n }\n else\n {\n switch(this.profile.role)\n {\n case \"registered\":\n this._log('info','is_loggedin',\"Logged in as Registered user\");\n return true;\n case \"subscriber\":\n this._log('info','is_loggedin',\"Logged in as Subscriber user\");\n return true;\n case \"editor\":\n this._log('info','is_loggedin',\"Logged in as Editor user\");\n return true;\n case \"administrator\":\n this._log('info','is_loggedin',\"Logged in as Administrator user\");\n return true;\n case \"author\":\n this._log('info','is_loggedin',\"Logged in as Author user\");\n return true;\n default:\n this._log('info','is_loggedin',\"NOT Logged, Unknown role\",this.profile.role);\n return false;\n }\n }\n }\n }\n }\n return false;\n }\n\n _setupDB()\n {\n if(this.profile && ('guid' in this.profile))\n {\n let db_tables = {};\n db_tables.local={\n \"default\":{\n 'id':'string',\n 'status':'string',\n 'data':'object',\n 'expirationdate':'date'\n },\n \"generated_onupdate\":{\n \"lastupdate\":\"date\"\n },\n \"indexes\":['status','expirationdate','lastupdate']\n };\n\n db_tables.data={\n \"default\":{\n 'id':'string',//type|name|link|iteration\"\n 'type':'string',\n 'name':'string',\n 'link':'string',// link_type|link_value\n 'status':'string',\n 'expirationdate':'date',\n 'createddate':'date',\n 'acl':'string',\n 'record':'object'\n },\n \"generated_onupdate\":{\n \"lastupdate\":\"date\"\n },\n \"indexes\":['type','status','link','name','expirationdate','acl','createddate','lastupdate']\n };\n\n db_tables.synch_pending={\n \"default\":{\n 'id':'int',\n 'status':'string',\n 'target':'string',\n 'params':'string',\n 'data':'object'\n },\n \"generated_onupdate\":{\n \"lastupdate\":\"date\"\n },\n \"indexes\":['status','target','lastupdate']\n };\n\n /**\n db_tables.readprogress={\n \"default\":{\n 'id':'int',\n 'status':'string',\n 'source':'string'\n },\n \"generated_onupdate\":{\n \"lastupdate\":\"date\"\n },\n \"indexes\":['status','source','lastupdate']\n };\n\n db_tables.general={\n \"default\":{\n 'id':'string',\n 'type':'string',\n 'data':'object',\n 'metadata':'object'\n },\n \"generated_onupdate\":{\n \"lastupdate\":\"date\"\n },\n \"indexes\":['type','lastupdate']\n };\n db_tables.readlater={\n \"default\":{\n 'id':'string',\n 'title':'string',\n 'thumbnail':'path',\n 'type':'string',\n 'source':'string',\n 'metadata':'object'\n },\n \"generated_onupdate\":{\n \"lastupdate\":\"date\"\n },\n \"indexes\":['type','source','lastupdate']\n };\n */\n\n this.local_db = new databaseHandler('fw-workbench_userdata__'+this.profile.guid,'1',db_tables);\n }\n else\n {\n console.error('dsb-app - UserHandler._setupDB:: Missing userid!');\n }\n }\n\n isConnected()\n {\n\n if(this.status == 'complete')\n {\n return true;\n }\n return false;\n }\n\n isPending()\n {\n if(this.status == 'pending')\n {\n return true;\n }\n return false;\n }\n\n resetUser()\n {\n this.profile = null;\n }\n\n getUserCookie(cname)\n {\n if(this.profile && ('guid' in this.profile))\n {\n return this._getCookie(cname+'___'+this.profile.guid);\n }\n return false;\n }\n\n setUserCookie(cname, cvalue, exdays)\n {\n if(this.profile && ('guid' in this.profile))\n {\n return this._setCookie(cname+'___'+this.profile.guid ,cvalue, exdays, '/',window.location.hostname);\n }\n return false;\n }\n\n deleteUserCookie(cname)\n {\n if(this.profile && ('guid' in this.profile))\n {\n return this._deleteCookie(cname+'___'+this.profile.guid ,'/', window.location.hostname);\n }\n return false;\n }\n\n _getCookie(cname) {\n var name = cname + \"=\";\n var decodedCookie = decodeURIComponent(document.cookie);\n var ca = decodedCookie.split(';');\n for(var i = 0; i = 365){\n years++;\n d -= 365;\n }else if(d >= 30){\n months++;\n d -= 30;\n }else if(d >= 7){\n weeks++;\n d -= 7;\n }else{\n days++;\n d--;\n }\n };\n return {\n years, months, weeks, days, total\n };\n };\n\n if(!isNaN(timestamp))\n {\n date = new Date(timestamp * 1000);\n }\n else\n {\n // Assume mysql timestamp\n /**\n console.debug(timestamp);\n let t = timestamp.split(/[- :]/);\n console.debug(t);\n date = new Date(Date.UTC(t[0], t[1]-1, t[2], t[3], t[4], t[5]));\n console.debug(date);\n */\n date = new Date(timestamp);\n }\n\n switch(format)\n {\n\n case \"since\":\n //calculate time difference\n var time_difference = new Date().getTime() - date.getTime();\n\n //calculate days difference by dividing total milliseconds in a day\n let dwmy = calculateTimimg(Math.trunc(time_difference / (1000 * 60 * 60 * 24)));\n\n let _return_date = [];\n\n if(('years' in dwmy) && dwmy.years>0)\n {\n _return_date.push(dwmy.years+' year'+(dwmy.years == 1?'':'s'));\n }\n\n if(('months' in dwmy) && dwmy.months>0)\n {\n _return_date.push(dwmy.months+' month'+(dwmy.months == 1?'':'s'));\n }\n\n if(('weeks' in dwmy) && dwmy.weeks>0)\n {\n _return_date.push(dwmy.weeks+' week'+(dwmy.weeks == 1?'':'s'));\n }\n\n if(('days' in dwmy) && dwmy.days>0)\n {\n _return_date.push(dwmy.days+' day'+(dwmy.days == 1?'':'s'));\n }\n\n return_date = dwmy;\n\n return_date.string = _return_date.join(\", \");\n\n break;\n default:\n const nth = function(d) {\n if (d > 3 && d < 21) return 'th';\n switch (d % 10) {\n case 1: return \"st\";\n case 2: return \"nd\";\n case 3: return \"rd\";\n default: return \"th\";\n }\n }\n\n var months = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n var year = date.getFullYear();\n var month = months[date.getMonth()];\n var day = date.getDate();\n\n // Hours part from the timestamp\n var hours = date.getHours();\n // Minutes part from the timestamp\n var minutes = \"0\" + date.getMinutes();\n\n // Will display time in YYYY/MM/DD 10:30:23 format\n if(show_time)\n {\n return_date = day+''+nth(day)+' '+month+' '+year+' at '+hours + ':' + minutes.substr(-2);\n }\n else\n {\n return_date = day+''+nth(day)+' '+month+' '+year;\n }\n }\n\n return return_date;\n }\n\n get_status()\n {\n return this.status;\n }\n\n async is_offline(suggested_offline_status=false,force=false)\n {\n let _this=this;\n let didTimeOut = false;\n let run_fetch = true;\n if(!_this.settings.online_check_url)\n {\n _this._log('error','Missing online check url!');\n run_fetch=false;\n }\n else\n {\n //_this._log('debug','Fetch using online_check_url...',_this.settings.online_check_url);\n }\n\n if(suggested_offline_status)\n {\n force=true;\n }\n\n if(!force)\n {\n let last_five_min = ((Math.floor(+new Date() / 1000))-(5 * 60));\n if(_this.last_checked_online && (_this.last_checked_online > last_five_min))\n {\n //_this._log('debug','is_offline','Skipping check '+_this.last_checked_online+' > '+last_five_min);\n run_fetch=false;\n }\n else\n {\n //_this._log('debug','is_offline','Will check '+_this.last_checked_online+' > '+last_five_min);\n }\n }\n else\n {\n _this._log('debug','is_offline','Check forced!');\n }\n\n return new Promise(function(resolve, reject) {\n if(!run_fetch)\n {\n //_this._log('warning','is_offline','fetch off',run_fetch);\n resolve(_this.offline);\n }\n else\n {\n _this._log('log','is_offline','Looking for net....');\n const timeout = setTimeout(function() {\n didTimeOut = true;\n reject(new Error('Request timed out @'+_this.settings.online_check_timeout));\n }, _this.settings.online_check_timeout);\n\n fetch(_this.settings.online_check_url+'#sw:no-cache')\n .then(function(response) {\n // Clear the timeout as cleanup\n clearTimeout(timeout);\n if(!didTimeOut) {\n _this._log('log','is_offline','fetch worked', response);\n if(('status' in response) && response.status != 503)\n {\n _this.last_checked_online = Math.floor(+new Date() / 1000);\n resolve(false);\n }\n else\n {\n resolve(true);\n }\n }\n })\n .catch(function(err) {\n _this._log('error','is_offline','fetch failed! ', err);\n\n // Rejection already happened with setTimeout\n if(didTimeOut) return;\n // Reject with error\n reject(err);\n });\n }\n })\n .then(function(response) {\n\n if(typeof response == \"boolean\")\n {\n _this.offline=response;\n }\n else\n {\n _this.offline=suggested_offline_status;\n }\n if(_this._offline!=_this.offline)\n {\n if(_this.offline)\n {\n _this._log('info','is_offline','Offline (inherited)',[_this.offline,response]);\n }\n else\n {\n _this._log('info','is_offline','Online',_this.offline,response);\n }\n window.dispatchEvent(new CustomEvent('fw-workspace-offline_status', {detail:_this.offline}));\n }\n _this._offline=_this.offline;\n return _this.offline;\n })\n .catch(function(err) {\n _this.offline=true;\n _this._log('error','is_offline','Offline', err);\n if(_this._offline!=_this.offline)\n {\n window.dispatchEvent(new CustomEvent('fw-workspace-offline_status', {detail:_this.offline}));\n }\n _this._offline=_this.offline;\n return _this.offline;\n });\n }\n\n _log(type,source,message,data='')\n {\n let _message = 'fw-workbench/UserHandler::'+source+'- '+message;\n switch(type)\n {\n case \"debug\":\n console.debug(_message,data);\n break;\n case \"warning\":\n console.warn(_message,data);\n case \"info\":\n console.info(_message,data);\n break;\n case \"error\":\n console.error(_message,data);\n break;\n default:\n console.log(_message,data);\n }\n }\n\n has_localdb()\n {\n return (this.local_db?true:false);\n }\n\n getDate()\n {\n return Math.floor(+new Date() / 1000) ;\n }\n\n async resetCache(target)\n {\n if(target)\n {\n this.cache[target] = {};\n }\n else\n {\n this.cache = {};\n }\n console.info('dsb-app - UserHandler:: Reset Cache');\n }\n\n async _sha256(message) {\n\n // encode as UTF-8\n const msgBuffer = new TextEncoder('utf-8').encode(message);\n\n // hash the message\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);\n\n // convert ArrayBuffer to Array\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n\n // convert bytes to hex string\n const hashHex = hashArray.map(b => ('00' + b.toString(16)).slice(-2)).join('');\n return hashHex;\n }\n\n async get(target,query,firstOnly = false, force = false)\n {\n\n let id = target+\"|\"+query+\"|\"+firstOnly;\n let json = {};\n\n if(!force)\n {\n let clean_target = target.replace('local_','');\n if(this.has_localdb && this.local_db.handles_table(clean_target))\n {\n let indexes = Object.fromEntries(new URLSearchParams(query));\n let data = false;\n if('id' in indexes)\n {\n data = this.local_db.get(clean_target,'id',indexes.id);\n }\n else\n {\n data = this.local_db.get(clean_target,'index',indexes);\n }\n if(firstOnly && Array.isArray(data))\n {\n return data[0];\n }\n return data;\n }\n else\n {\n if(target in this.cache)\n {\n if(id in this.cache[target])\n {\n return this.cache[target][id];\n }\n }\n }\n }\n\n if(this.offline)\n {\n console.error('dsb-app - UserHandler.get:: Offline');\n return false;\n }\n\n switch(target)\n {\n default:\n json = await this.dsbClient.get(target,query);\n break;\n }\n\n if('data' in json)\n {\n if(firstOnly)\n {\n if(Array.isArray(json.data))\n {\n if(Object.keys(json.data).length === 0)\n {\n //Ok\n }\n else\n {\n json.data = json.data[0];\n }\n }\n }\n if (json.state)\n {\n if(!(target in this.cache))\n {\n this.cache[target] = {};\n }\n this.cache[target][id] = json.data;\n }\n\n return json.data;\n }\n return false;\n }\n\n async post(target,data,allow_offline=false)\n {\n\n if(target.startsWith('local_') || target==='local')\n {\n allow_offline=true;\n }\n\n if(this.offline)\n {\n if(!allow_offline)\n {\n console.error('dsb-app - UserHandler.post:: Offline');\n return false;\n }\n }\n else\n {\n // Reset cache for this target\n if(target in this.cache)\n {\n this.cache[target] = {};\n }\n }\n\n target = target.split('?');\n let params = '';\n if(target[1])\n {\n params = target[1];\n }\n target = target[0];\n let json = {};\n try\n {\n switch(target)\n {\n case \"local\":\n if(this.has_localdb && ('id' in data))\n {\n return await this.local_db.upsert('local',data.id,data);\n }\n break;\n case \"local_data\":\n if(this.has_localdb)\n {\n return await this.local_db.upsert('data',data.id,data);\n }\n break;\n /**\n case \"readprogress\":\n if(!('id' in data))\n {\n throw 'Missing id in readprogress';\n }\n let done_localdb = false;\n let done_remotedb = false;\n let done_synchpending = false;\n let all_readprogress = false;\n if(this.has_localdb)\n {\n done_localdb = await this.local_db.upsert('readprogress',data.id, data);\n all_readprogress = await this.local_db.get('readprogress','all');\n all_readprogress = {'type':'record','name':'readprogress','status':'published','data':all_readprogress}\n }\n if(!this.offline)\n {\n if(all_readprogress)\n {\n json = await this.dsbClient.post('data',params,all_readprogress);\n if (json.state && json.state == 'success')\n {\n done_remotedb = true;\n }\n }\n }\n\n\n if(!done_remotedb && all_readprogress)\n {\n done_synchpending = this.local_db.upsert('synch_pending',\"readprogress\",{'status':'qued','target':target,'params':params,'data':all_readprogress});\n }\n\n return (!done_remotedb?(!done_localdb?'error_localdb':(!done_synchpending?'error_synchpending':'synch_pending')):'success');\n break;\n */\n case \"data\":\n json = await this.dsbClient.post(target,params,data);\n if (json.state)\n {\n return json.data;\n }\n break;\n case \"cpd\":\n let remove = ['id','user_id','progress', 'points','status', 'created_date', 'update_date'];\n for(let i =0; i {\n let decodedKey = decodeURIComponent(key);\n let decodedValue = decodeURIComponent(value);\n\n if(mode == \"process\")\n {\n switch(decodedValue)\n {\n case \"{{today}}\":\n decodedValue = _this.format_date('now','Y-m-d');\n break;\n case \"{{today_timestamp}}\":\n decodedValue = _this.format_date('now','timestamp_y-m-d');\n break;\n case \"{{tomorrow}}\":\n decodedValue = _this.format_date('tomorrow','Y-m-d');\n break;\n default:\n break;\n }\n }\n\n // This key is part of an array\n if (decodedKey.endsWith(\"[]\")) {\n decodedKey = decodedKey.replace(\"[]\", \"\");\n params[decodedKey] || (params[decodedKey] = []);\n params[decodedKey].push(decodedValue);\n // Just a regular parameter\n } else {\n params[decodedKey] = decodedValue;\n }\n });\n if(mode=='diff')\n {\n let diff={};\n for(let _param_key in _params)\n {\n if(_param_key in params)\n {\n if(params[_param_key] == _params[_param_key])\n {\n if(!('same' in diff))\n {\n diff.same={};\n }\n diff.same[_param_key]=params[_param_key];\n }\n else\n {\n if(!('changed' in diff))\n {\n diff.changed={};\n }\n diff.changed[_param_key]={};\n diff.changed[_param_key].from=params[_param_key];\n diff.changed[_param_key].to=_params[_param_key];\n }\n }\n else\n {\n if(!('missing' in diff))\n {\n diff.missing={};\n }\n diff.missing[_param_key]=_params[_param_key];\n }\n }\n return diff;\n }\n else\n {\n // Update with _params\n for(let _param_key in _params)\n {\n params[_param_key] = _params[_param_key];\n }\n\n if(mode=='cleanse')\n {\n // Remove missing\n for(let param_key in params)\n {\n if(!(param_key in _params))\n {\n delete params[param_key];\n }\n }\n }\n }\n return params;\n };\n if(mode=='diff')\n {\n if(typeof params !== 'object')\n {\n params =getQueryParams(params);\n }\n return getQueryParams(query,params,mode)\n }\n else if(mode=='object')\n {\n return getQueryParams(query,params,mode);\n }\n else\n {\n let thisQueryString=[];\n let url_params = getQueryParams(query,params,mode);\n for(let aUrl_paramsKey in url_params)\n {\n if(Array.isArray(url_params[aUrl_paramsKey]))\n {\n for(let i=0;i300)\n {\n throw {code: result.code, message: result.message,data:result};\n }\n else\n {\n return result;\n }\n }\n else\n {\n throw {code:500,message:'result not an object',result};\n }\n\n\n return false;\n }\n\n applyFilter(name,value)\n {\n return this.dsbClient.applyFilter(name, value );\n }\n\n\n format_date(timestamp, format='default',show_time=false)\n {\n var date = null;\n\n var return_date = '';\n\n const calculateTimimg = function (d){\n let months = 0, years = 0, days = 0, weeks = 0, total = d;\n while(d){\n if(d >= 365){\n years++;\n d -= 365;\n }else if(d >= 30){\n months++;\n d -= 30;\n }else if(d >= 7){\n weeks++;\n d -= 7;\n }else{\n days++;\n d--;\n }\n };\n return {\n years, months, weeks, days, total\n };\n };\n\n switch(timestamp)\n {\n case \"now\":\n case \"today\":\n date = new Date();\n break;\n case \"tomorrow\":\n date = new Date();\n date.setDate(date.getDate() + 1);\n default:\n if(!isNaN(timestamp))\n {\n date = new Date(timestamp * 1000);\n }\n else\n {\n // Assume mysql timestamp\n /**\n console.debug(timestamp);\n let t = timestamp.split(/[- :]/);\n console.debug(t);\n date = new Date(Date.UTC(t[0], t[1]-1, t[2], t[3], t[4], t[5]));\n console.debug(date);\n */\n date = new Date(timestamp);\n }\n break;\n }\n\n switch(format)\n {\n case \"timestamp_y-m-d\":\n return_date = new Date(date.getFullYear()+\"-\"+((\"0\" + (date.getMonth() + 1)).slice(-2))+\"-\"+((\"0\" + (date.getDate())).slice(-2))).getTime()/1000;\n break;\n case \"Y-m-d\":\n return_date = date.getFullYear()+\"-\"+((\"0\" + (date.getMonth() + 1)).slice(-2))+\"-\"+((\"0\" + (date.getDate())).slice(-2));\n break;\n case \"since\":\n //calculate time difference\n var time_difference = new Date().getTime() - date.getTime();\n\n //calculate days difference by dividing total milliseconds in a day\n let dwmy = calculateTimimg(Math.trunc(time_difference / (1000 * 60 * 60 * 24)));\n\n let _return_date = [];\n\n if(('years' in dwmy) && dwmy.years>0)\n {\n _return_date.push(dwmy.years+' year'+(dwmy.years == 1?'':'s'));\n }\n\n if(('months' in dwmy) && dwmy.months>0)\n {\n _return_date.push(dwmy.months+' month'+(dwmy.months == 1?'':'s'));\n }\n\n if(('weeks' in dwmy) && dwmy.weeks>0)\n {\n _return_date.push(dwmy.weeks+' week'+(dwmy.weeks == 1?'':'s'));\n }\n\n if(('days' in dwmy) && dwmy.days>0)\n {\n _return_date.push(dwmy.days+' day'+(dwmy.days == 1?'':'s'));\n }\n\n return_date = dwmy;\n\n return_date.string = _return_date.join(\", \");\n\n break;\n default:\n const nth = function(d) {\n if (d > 3 && d < 21) return 'th';\n switch (d % 10) {\n case 1: return \"st\";\n case 2: return \"nd\";\n case 3: return \"rd\";\n default: return \"th\";\n }\n }\n\n var months = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n var year = date.getFullYear();\n var month = months[date.getMonth()];\n var day = date.getDate();\n\n // Hours part from the timestamp\n var hours = date.getHours();\n // Minutes part from the timestamp\n var minutes = \"0\" + date.getMinutes();\n\n // Will display time in YYYY/MM/DD 10:30:23 format\n if(show_time)\n {\n return_date = day+''+nth(day)+' '+month+' '+year+' at '+hours + ':' + minutes.substr(-2);\n }\n else\n {\n return_date = day+''+nth(day)+' '+month+' '+year;\n }\n }\n\n return return_date;\n }\n\n}\n\n\n","export default function(){\n let _this = this;\n let ga_matrix = {};\n ga_matrix['sitesection1']='dimension5';\n ga_matrix['sitesection2']='dimension1';\n ga_matrix['sitesection3']='dimension3';\n ga_matrix['sitesection4']='dimension6';\n ga_matrix['aboutness']='dimension13';\n\n ga_matrix['pagename']='dimension7';\n ga_matrix['pubdate']='dimension4';\n ga_matrix['contentid']='dimension9';\n ga_matrix['contenttype']='dimension2';\n ga_matrix['contenthierachy']='dimension8';\n ga_matrix['author']='dimension14';\n ga_matrix['formtype']='dimension16';\n ga_matrix['advertisername']='dimension17';\n ga_matrix['category_id']='dimension18';\n\n ga_matrix['userdemographic']='dimension19';\n ga_matrix['userid']='dimension10';\n ga_matrix['usertype']='dimension11';\n ga_matrix['userentitlement']='dimension12';\n ga_matrix['authstatus']='dimension15';\n\n window.addEventListener(\"dsb-pwa-page_view\", e => {\n try\n {\n if (typeof ga === 'function')\n {\n let customDimensions = {};\n let page_url = location.pathname+location.hash;\n // gwa_pageName & gwa_aboutness & gwa_contentType & gwa_ContentId & gwa_author\n if('detail' in e)\n {\n if('append' in e.detail)\n {\n page_url = page_url+\"/-/\"+e.detail.append;\n }\n\n if('customDimensions' in e.detail)\n {\n customDimensions = e.detail.customDimensions;\n }\n else if('gwa' in e.detail)\n {\n customDimensions = e.detail.gwa;\n }\n\n if('date' in e.detail && !('pubdate' in customDimensions))\n {\n customDimensions.pubdate = e.detail.date;\n }\n\n if('id' in e.detail && !('contentid' in customDimensions))\n {\n customDimensions.contentid = e.detail.id;\n }\n\n if('author' in e.detail && !('author' in customDimensions))\n {\n customDimensions.author = e.detail.author;\n }\n\n if('taxonomies' in e.detail && !('aboutness' in customDimensions))\n {\n customDimensions.aboutness = [];\n if(e.detail.taxonomies !== null && typeof Array.isArray(e.detail.taxonomies))\n {\n let sitesection_count = 2;\n for(let i = 0; i < e.detail.taxonomies.length; i++)\n {\n if(sitesection_count<5)\n {\n customDimensions['sitesection'+sitesection_count] = e.detail.taxonomies[i];\n }\n customDimensions.aboutness.push(e.detail.taxonomies[i]);\n sitesection_count++;\n }\n }\n }\n\n if('types' in e.detail && !('contenttype' in customDimensions))\n {\n customDimensions.contenttype = [];\n if(e.detail.types !== null && Array.isArray(e.detail.types))\n {\n for(let i = 0; i < e.detail.types.length; i++)\n {\n customDimensions.contenttype.push(e.detail.types[i]);\n }\n }\n }\n\n if('title' in e.detail)\n {\n customDimensions['contenttitle'] = e.detail.title;\n _this._update_DocumentTitle(customDimensions['contenttitle']);\n ga('set', 'title', customDimensions['contenttitle']);\n }\n }\n\n // Add user dimensions\n customDimensions = this.dsbClient.user._updateCustomDimensions(customDimensions);\n\n\n //customDimensions.account = 'account';\n\n // Set defaults\n customDimensions.sitesection1 = 'fwi-pwa';\n\n if(!('contenthierachy' in customDimensions))\n {\n customDimensions.contenthierachy = [];\n customDimensions.contenthierachy.push(customDimensions.sitesection1);\n\n // Setup contenthierachy\n let contenthierachy_parts = ['sitesection2','sitesection3','sitesection4','contenttitle'];\n for(let i = 0; i < contenthierachy_parts.length; i++)\n {\n if(contenthierachy_parts[i] in customDimensions)\n {\n customDimensions.contenthierachy.push(customDimensions[contenthierachy_parts[i]]);\n }\n }\n customDimensions.contenthierachy = customDimensions.contenthierachy.join('|');\n }\n\n if(!('pagename' in customDimensions))\n {\n customDimensions.pagename = customDimensions.contenthierachy;\n }\n\n // Collapse aboutness\n if(!('aboutness' in customDimensions) || (Array.isArray(customDimensions.aboutness) && customDimensions.aboutness.length == 0))\n {\n // Set Aboutness\n customDimensions.aboutness = [];\n\n if('sitesection2' in customDimensions)\n {\n customDimensions.aboutness.push(customDimensions.sitesection2);\n }\n if('sitesection3' in customDimensions)\n {\n customDimensions.aboutness.push(customDimensions.sitesection3);\n }\n if('sitesection4' in customDimensions)\n {\n customDimensions.aboutness.push(customDimensions.sitesection4);\n }\n }\n if(Array.isArray(customDimensions.aboutness))\n {\n customDimensions.aboutness = customDimensions.aboutness.join('|');\n }\n\n // Collapse contenttype\n if(!('contenttype' in customDimensions) || (Array.isArray(customDimensions.contenttype) && customDimensions.contenttype.length == 0))\n {\n // Set contenttype\n customDimensions.contenttype = [];\n customDimensions.contenttype.push('unknown');\n }\n if(Array.isArray(customDimensions.contenttype))\n {\n customDimensions.contenttype = customDimensions.contenttype.join('|');\n }\n\n // Remove contenttitle (not used)\n if('contenttitle' in customDimensions)\n {\n delete customDimensions['contenttitle'];\n }\n\n\n for(let aDimensions in customDimensions)\n {\n if(typeof customDimensions[aDimensions] == 'string')\n {\n customDimensions[aDimensions] = customDimensions[aDimensions].toLowerCase();\n }\n\n if(aDimensions.toLowerCase() in ga_matrix)\n {\n ga('set', ga_matrix[aDimensions.toLowerCase()], customDimensions[aDimensions]);\n }\n else\n {\n console.error('dsb-pwa-page_view:: Unknown customDimension (GWA) tag \"'+aDimensions+'\"!',ga_matrix);\n }\n }\n\n console.debug('dsb-pwa-page_view::',customDimensions);\n\n ga('set', 'page', page_url);\n ga('send', 'pageview')\n }\n else\n {\n console.error('dsb-pwa-page_view:: GA is not available');\n }\n }\n catch(ex)\n {\n console.error('dsb-pwa-page_view:: Error occured in detail',ex);\n }\n });\n}\n","export default function() {\n let _this = this;\n if(!this.DEBUG){\n if(!window.console) window.console = {};\n var methods = [\"log\", \"debug\", \"warn\", \"info\"];\n for(var i=0;i {\n if('detail' in e)\n {\n let update = e.detail;\n if('appname' in update)\n {\n document.getElementById(\"dsb-pwa_appname\").innerHTML = update.appname;\n }\n if('app_tab_title' in update)\n {\n _this._app_tab_title = update.app_tab_title;\n _this._update_DocumentTitle();\n }\n if('title' in update)\n {\n document.getElementById(\"dsb-pwa_title\").innerHTML = update.title;\n }\n if('layout' in update)\n {\n _this.setAttribute(`layout`, update.layout);\n _this._render();\n }\n }\n });\n\n window.addEventListener(\"dsb-pwa-append_tray\", e => {\n try\n {\n if('detail' in e)\n {\n if(('onclick' in e.detail) && ('icon' in e.detail))\n {\n let tray_id = 'dsb-pwa_tray';\n if(('tray_id' in e.detail))\n {\n tray_id = e.detail.tray_id;\n }\n else if('iam' in e.detail)\n {\n if(typeof e.detail.iam == 'object' && e.detail.iam instanceof HTMLElement)\n {\n tray_id = window.getTrayId(e.detail.iam);\n }\n else\n {\n throw \"e.detail.iam should be instanceof HTMLElement\";\n }\n }\n else\n {\n throw \"Missing tray target. Either (string)detail.tray_id or (HTMLElement)detail.iam of caller\";\n }\n\n let workspace = window.getWorkspace(document.getElementById(tray_id));\n\n if(workspace == null || typeof workspace !== 'object')\n {\n throw 'Missing workspace!';\n }\n\n if(('init_append' in e.detail) && 'parentNode' in workspace)\n {\n workspace.parentNode.append(e.detail.init_append);\n }\n\n let tray_item_id = tray_id+'__'+e.detail.name;\n\n let element = document.createElement('div');\n element.setAttribute('class',e.detail.icon+' icon-clickable');\n if('name' in e.detail)\n {\n element.id = tray_item_id;\n }\n element.onclick = function(){e.detail.onclick};\n\n if(('online_only' in e.detail) && e.detail.online_only === true)\n {\n // If online only the item wil have click events removed and dissabled class added\n element.classList.add('fw_workspace__online_only');\n element.setAttribute('data-offlineonly_toggleClass','dissable-icon');\n }\n\n if('icon_size' in e.detail)\n {\n element.setAttribute('style','margin-left: 0px;font-size: '+e.detail.icon_size+';');\n }\n else\n {\n element.setAttribute('style','margin-left: 0px;font-size: 30px;');\n }\n if(('overlay' in e.detail) && (e.detail.overlay))\n {\n element.onclick = function(){\n if(!this.classList.contains('active'))\n {\n // Set active item\n let tray_items = this.parentElement.querySelectorAll(`div`);\n if(tray_items !== undefined || tray_items.length > 0)\n {\n for(let i = 0; i < tray_items.length; i++)\n {\n if(tray_items[i].classList.contains('active'))\n {\n tray_items[i].click();\n }\n }\n }\n }\n this.classList.toggle('active');\n if(workspace !== null || typeof workspace == 'object')\n {\n workspace.querySelector('.dsb-workspace-overlay').classList.toggle('show');\n }\n e.detail.onclick();\n };\n\n //workspace.querySelector('.dsb-workspace-overlay').setAttribute('data-trayId',tray_id);\n\n workspace.querySelector('.dsb-workspace-overlay').onclick=function(){\n //this.getAttribute('data-trayId')\n let tray_items = document.getElementById(tray_id).parentElement.querySelectorAll(`div`);\n if(tray_items !== undefined || tray_items.length > 0)\n {\n for(let i = 0; i < tray_items.length; i++)\n {\n console.error(tray_items[i]);\n if(tray_items[i].classList.contains('active'))\n {\n tray_items[i].click();\n }\n }\n }\n };\n }\n else\n {\n element.onclick = function(){e.detail.onclick()};\n }\n element.innerHTML = ' ';\n document.getElementById(tray_id).prepend(element);\n }\n }\n }\n catch(ex)\n {\n console.error('dsb-pwa-append_tray:: Error occured in detail',ex,e);\n }\n });\n\n window.addEventListener(\"dsb-pwa-trigger_tray\", e => {\n try\n {\n if('detail' in e)\n {\n let tray_id = 'dsb-pwa_tray';\n if(('tray_id' in e.detail))\n {\n tray_id = \"dsb-pwa_tray__\"+e.detail.tray_id;\n }\n if(('name' in e.detail))\n {\n document.getElementById(tray_id+\"__\"+e.detail.name).click();\n\n }\n else\n {\n console.error('dsb-pwa-trigger_tray:: No name supplied?');\n }\n }\n }\n catch(ex)\n {\n console.error('dsb-pwa-trigger_tray:: Error occured in detail',ex);\n }\n });\n\n window.addEventListener(\"dsb-pwa-toggle_full_screen\", e => {\n try\n {\n if('detail' in e)\n {\n if(('source_id' in e.detail))\n {\n let elem = document.getElementById(e.source_id);\n if (elem.requestFullscreen) {\n elem.requestFullscreen();\n } else if (elem.webkitRequestFullscreen) { /* Safari */\n elem.webkitRequestFullscreen();\n } else if (elem.msRequestFullscreen) { /* IE11 */\n elem.msRequestFullscreen();\n }\n }\n else\n {\n console.error('dsb-pwa-toggle_full_screen:: detail.source_id missing');\n }\n }\n else\n {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.webkitExitFullscreen) { /* Safari */\n document.webkitExitFullscreen();\n } else if (document.msExitFullscreen) { /* IE11 */\n document.msExitFullscreen();\n }\n }\n }\n catch(ex)\n {\n console.error('dsb-pwa-toggle_full_screen:: Error occured in detail',ex);\n }\n });\n\n window.addEventListener(\"dsb-pwa-add_modal\", e => {\n try\n {\n if('detail' in e)\n {\n if(!('id' in e.detail))\n {\n e.detail.id=_this._createUUID();\n }\n let zindex = false;\n if(('iam' in e.detail))\n {\n zindex = window.getZIndex(e.detail.iam);\n }\n\n\n let element = document.createElement('dsb-modal');\n element.id = 'dsb-add_modal__'+e.detail.id;\n\n let workspace = document.createElement(\"dsb-workspace\");\n let html = `\n
\n
    \n
  • \n
  • \"Farmers
  • \n
  • \n
    \n  \n
    \n
  • \n
\n
`;\n if('content' in e.detail)\n {\n if(e.detail.content instanceof HTMLElement)\n {\n if(e.detail.content.tagName == 'DSB-WORKSPACE')\n {\n workspace = e.detail.content;\n }\n else\n {\n workspace.append(e.detail.content);\n }\n }\n else\n {\n workspace.innerHTML = e.detail.content;\n }\n }\n\n var overlay = document.createElement(\"div\");\n overlay.setAttribute(`class`,\"dsb-workspace-overlay\");\n workspace.append(overlay);\n\n element.innerHTML = html;\n element.append(workspace);\n this.append(element);\n\n if(zindex)\n {\n element.style.zIndex = zindex+1;\n }\n\n document.getElementById(`dsb-pwa_tray_close__`+e.detail.id+``).onclick = function(){\n document.getElementById(element.id).classList.toggle('show');\n // Reset app title\n _this._update_DocumentTitle('');\n };\n\n this.add_feedback('dsb-pwa_tray__'+e.detail.id);\n }\n }\n catch(ex)\n {\n console.error('dsb-pwa-add_modal:: Error occured in detail',ex);\n }\n });\n\n window.addEventListener(\"fw-workspace-check_for_update\", e => {\n try\n {\n if(('check_for_update' in _this.setting) && _this.setting.check_for_update=='on')\n {\n if(('app_hash_url' in _this.setting) && ('app_hash' in _this.setting) && ('app_name' in _this))\n {\n\n let didTimeOut = false;\n const timeout = setTimeout(function() {\n didTimeOut = true;\n reject(new Error('Request timed out @'+_this.setting.app_hash_url));\n }, 5000);\n\n fetch(_this.setting.app_hash_url+'#sw:no-cache')\n .then(function(response) {\n // Clear the timeout as cleanup\n clearTimeout(timeout);\n\n if(!didTimeOut) {\n if(response.ok)\n {\n response.json().then(hash =>\n {\n if(hash !== null && typeof hash === 'object' && _this.app_name in hash && 'hash' in hash[_this.app_name])\n {\n let has_update = false;\n if(hash[_this.app_name].hash !== _this.setting.app_hash)\n {\n has_update=true;\n _this._log('info','event:fw-workspace-check_for_update','New update found',{\"my_hash\":_this.setting.app_hash,\"your_hash\":hash[_this.app_name].hash});\n }\n else\n {\n _this._log('info','event:fw-workspace-check_for_update','No updates',{\"my_hash\":_this.setting.app_hash,\"your_hash\":hash[_this.app_name].hash});\n }\n\n let update_indicator = document.getElementById('fw_workspace__update_indicator');\n if(update_indicator!==null && typeof update_indicator === 'object' && update_indicator instanceof HTMLElement)\n {\n if(has_update)\n {\n update_indicator.style.setProperty('--flash-color_from','#4a4a4a');\n update_indicator.style.setProperty('--flash-color_to','#d2222a');\n update_indicator.classList='m-icon-update icon-clickable flash-color';\n }\n else\n {\n update_indicator.classList='icon-refresh icon-clickable';\n }\n }\n\n }\n else\n {\n _this._log('error','event:fw-workspace-check_for_update','Response for fetch('+_this.setting.app_hash_url+') malformed!',hash);\n }\n });\n\n }\n else\n {\n _this._log('error','event:fw-workspace-check_for_update','Response for fetch('+_this.setting.app_hash_url+') error!',response);\n }\n }\n })\n .catch(function(err) {\n _this._log('error','event:fw-workspace-check_for_update','fetch failed! ', err);\n // Rejection already happened with setTimeout\n clearTimeout(timeout);\n if(didTimeOut) return;\n // Reject with error\n reject(err);\n });\n\n\n }\n else\n {\n _this._log('warn','event:fw-workspace-check_for_update','Update checking off, no app_hash_url or app_hash found!');\n }\n }\n else\n {\n _this._log('debug','event:fw-workspace-check_for_update','Update checking off');\n }\n }\n catch(ex)\n {\n _this._log('error','event:fw-workspace-check_for_update','Unexpected error', ex);\n }\n });\n\n window.addEventListener(\"fw-workspace-offline_status\", e => {\n try\n {\n let offline_element = document.getElementsByClassName('fw_workspace__offline_indicator');\n for (var i = 0; i < offline_element.length; i++)\n {\n if(offline_element[i] && offline_element[i] instanceof HTMLElement)\n {\n if('detail' in e)\n {\n if(e.detail)\n {\n offline_element[i].style.display = 'inline-block';\n }\n else\n {\n offline_element[i].style.display = 'none';\n }\n }\n }\n }\n\n offline_element = document.getElementsByClassName('fw_workspace__online_only');\n for (var i = 0; i < offline_element.length; i++)\n {\n if(offline_element[i] && offline_element[i] instanceof HTMLElement)\n {\n if('detail' in e)\n {\n let toggleClass = offline_element[i].getAttribute('data-offlineonly_toggleClass');\n if(e.detail)\n {\n if('onclick' in offline_element[i])\n {\n offline_element[i]._fw_workspace__online_only__onclick=offline_element[i].onclick;\n offline_element[i].onclick=function(){};\n if(!offline_element[i].classList.contains(toggleClass))\n {\n offline_element[i].classList.add(toggleClass);\n }\n }\n }\n else\n {\n if('_fw_workspace__online_only__onclick' in offline_element[i])\n {\n offline_element[i].onclick=offline_element[i]._fw_workspace__online_only__onclick;\n if(offline_element[i].classList.contains(toggleClass))\n {\n offline_element[i].classList.remove(toggleClass);\n }\n }\n }\n }\n }\n }\n\n }\n catch(ex)\n {\n console.error('fw-workspace-offline_status:: Error occured in detail',ex);\n }\n });\n\n window.addEventListener(\"fw-workspace-add_scheduled_task\", e => {\n try\n {\n if('detail' in e)\n {\n if(('slot' in e.detail) && ('task' in e.detail) && typeof e.detail.task === 'function')\n {\n if(!(e.detail.slot in this._cronIntervals))\n {\n switch(e.detail.slot)\n {\n case \"1min\":\n this._cronIntervals[e.detail.slot]=[];\n this._cronIntervals[e.detail.slot].push(e.detail.task);\n setInterval(function(){\n for(let i=0; i {\n try\n {\n if('detail' in e)\n {\n if('message' in e.detail)\n {\n let message_panel = document.getElementById('fw_workspace__message_stack');\n if(message_panel && message_panel instanceof HTMLElement)\n {\n // Ok\n }\n else\n {\n let message_panel_target = null;\n if(('iam' in e.detail))\n {\n message_panel_target = window.getWorkspace(e.detail.iam);\n }\n else\n {\n message_panel_target = window.getWorkspace(_this);\n }\n\n if(message_panel_target instanceof HTMLElement)\n {\n let message_panel = document.createElement(\"div\");\n message_panel.id='fw_workspace__message_stack';\n message_panel.classList='slidedown-message hide';\n message_panel.style=\"display:none\";\n message_panel.onclick=function(){\n message_panel.classList='slidedown-message hide';\n };\n message_panel_target.prepend(message_panel);\n setTimeout(function(){\n message_panel.classList='slidedown-message show';\n message_panel.style=\"\";\n },2000);\n\n }\n else\n {\n _this._log('error','event:fw-workspace-trigger_message','Cannot find workspace');\n }\n }\n let message_panel_content = document.createElement(\"div\");\n message_panel_content.innerHTML=e.detail.message;\n message_panel.append(message_panel_content);\n if(('onclick' in e.detail) && typeof e.detail.onclick == 'function')\n {\n message_panel.onclick=e.detail.onclick;\n }\n }\n else\n {\n _this._log('error','event:fw-workspace-trigger_message','e.detail.message missing');\n }\n\n\n }\n else\n {\n _this._log('error','event:fw-workspace-trigger_message','e.detail is missing');\n }\n }\n catch(ex)\n {\n _this._log('error','event:fw-workspace-trigger_message','General error has occured',ex);\n }\n });\n\n window.addEventListener(\"dsb-pwa-transient_modal\", e => {\n try\n {\n if('detail' in e)\n {\n if(('content' in e.detail) && e.detail.content instanceof HTMLElement)\n {\n\n let hide = [];\n if('hide' in e.detail)\n {\n hide = e.detail.hide;\n }\n\n let id = _this._createUUID();\n let modal = document.createElement('dsb-modal');\n modal.id = 'dsb-add_modal__'+id;\n\n modal.innerHTML = `\n `+(hide.indexOf('header')<0?`\n
\n
    \n
  • \n
  • \"Farmers
  • \n
  • \n `+(hide.indexOf('refresh')<0?`\n
    \n  \n
    \n `:'')+`\n `+(hide.indexOf('close')<0?`\n
    \n  \n
    \n `:'')+`\n
    \n  \n
    \n
  • \n
\n
\n `:'')+`\n \n `;\n this.append(modal);\n\n if('action' in e.detail && e.detail.action == 'refresh')\n {\n document.getElementById(`dsb-pwa_tray_rebuild__`+id+``).className='icon-refresh icon-rotate icon-clickable';\n }\n\n let workspace = modal.querySelector('dsb-workspace');\n if(workspace != null && typeof workspace === 'object')\n {\n var overlay = document.createElement(\"div\");\n overlay.setAttribute(`class`,\"dsb-workspace-overlay\");\n workspace.innerHTML = ``;\n workspace.append(overlay);\n workspace.append(e.detail.content);\n let feedback_aside_iframe=document.getElementById(\"feedback_aside_dsb-pwa_tray__\"+id);\n if(feedback_aside_iframe != null && typeof feedback_aside_iframe === 'object')\n {\n if(e.detail.content != null && typeof e.detail.content === 'object' && `link_path` in e.detail.content && e.detail.content.link_path != null)\n {\n feedback_aside_iframe.setAttribute('data-append_location','/modal/'+e.detail.content.link_path);\n console.log('Updating feedback_aside data-append_location to /modal/'+e.detail.content.link_path);\n }\n }\n }\n else\n {\n throw \"workspace missing for modal \"+modal.id;\n }\n\n if(hide.indexOf('close')<0)\n {\n document.getElementById(`dsb-pwa_tray_close__`+id+``).onclick = function(){\n // Reset app title\n _this._update_DocumentTitle('');\n // Delete Modal\n modal.outerHTML=\"\";\n };\n }\n\n if(hide.indexOf('refresh')<0)\n {\n document.getElementById(`dsb-pwa_tray_rebuild__`+id+``).onclick = function(){\n // Reset app title\n _this._update_DocumentTitle('');\n // Delete Modal\n modal.outerHTML=\"\";\n // Rebuild\n if('reset' in e.detail.content && typeof e.detail.content.reset == 'function')\n {\n e.detail.content.reset();\n }\n else\n {\n e.detail.content.innerHTML = '';\n }\n window.dispatchEvent(new CustomEvent('dsb-pwa-transient_modal', {detail: {content:e.detail.content,action:'refresh',hide:hide}}));\n };\n }\n\n if(hide.indexOf('feedback')<0)\n {\n this.add_feedback('dsb-pwa_tray__'+id);\n }\n\n if(!modal.classList.contains('show'))\n {\n if('action' in e.detail && e.detail.action == 'refresh')\n {\n // Ok, do nothing\n }\n else\n {\n if('mode' in e.detail)\n {\n modal.classList.add(e.detail.mode);\n }\n else\n {\n modal.classList.add('fadeIn');\n }\n }\n modal.classList.toggle('show');\n }\n\n }\n else\n {\n throw \"Missing detail.content or not instanceof HTMLElement... nothing to do!\";\n }\n }\n }\n catch(ex)\n {\n console.error('dsb-pwa-add_modal:: Error occured in detail',ex);\n }\n });\n\n window.addEventListener(\"dsb-pwa-trigger_modal\", e => {\n try\n {\n if('detail' in e)\n {\n if(('id' in e.detail))\n {\n let modal = document.getElementById('dsb-add_modal__'+e.detail.id);\n if(modal != null)\n {\n if(('append' in e.detail))\n {\n let workspace = modal.querySelector('dsb-workspace');\n if(workspace != null && typeof workspace === 'object')\n {\n let overlay = workspace.querySelector('.dsb-workspace-overlay')\n workspace.innerHTML = ``;\n workspace.append(overlay);\n workspace.append(e.detail.append);\n let feedback_aside_iframe=document.getElementById(\"feedback_aside_dsb-pwa_tray__\"+e.detail.id);\n if(feedback_aside_iframe != null && typeof feedback_aside_iframe === 'object')\n {\n if(e.detail.append != null && typeof e.detail.append === 'object' && `link_path` in e.detail.append && e.detail.append.link_path != null)\n {\n feedback_aside_iframe.setAttribute('data-append_location','/modal/'+e.detail.append.link_path);\n console.log('Updating feedback_aside data-append_location to /modal/'+e.detail.append.link_path);\n }\n }\n }\n }\n\n if(!modal.classList.contains('show'))\n {\n modal.classList.toggle('show');\n }\n }\n }\n }\n }\n catch(ex)\n {\n console.error('dsb-pwa-trigger_tray:: Error occured in detail',ex);\n }\n });\n\n window.addEventListener(\"dsb-app-throwError\", e => {\n\n let _type = '';\n if('type' in e)\n {\n _type = e.type;\n }\n\n let _message = '';\n if('message' in e)\n {\n _message = e.message;\n }\n\n switch(_type)\n {\n default:\n console.error(message);\n break;\n }\n });\n\n window.addEventListener(\"dsb-pwa-throwError\", e => {\n\n if('detail' in e)\n {\n let _type = '';\n if('type' in e.detail)\n {\n _type = e.detail.type;\n }\n\n let _message = '';\n if('message' in e.detail)\n {\n _message = e.detail.message;\n }\n\n console.error('Error: Type='+_type,_message);\n\n switch(_type)\n {\n default:\n break;\n }\n }\n else\n {\n console.error(e);\n }\n });\n\n window.addEventListener(\"dsb-pwa-add_pulldown_refresh\", e => {\n try\n {\n if('detail' in e)\n {\n\n if('iam' in e.detail)\n {\n if(typeof e.detail.iam == 'object' && e.detail.iam )\n {\n let _this = e.detail.iam;\n\n if('_refresh' in _this && typeof _this._refresh == 'function')\n {\n const pStart = { x: 0, y: 0 };\n const pCurrent = { x: 0, y: 0 };\n\n let refresh_panel_target = false;\n let refresh_panel = document.createElement(\"div\");\n refresh_panel.classList='pulldown-refresh';\n refresh_panel.innerHTML = ``;\n\n console.debug('dsb-pwa-add_pulldown_refresh:: Setting up',_this);\n\n let loadPulldown = async function() {\n // Find workspace\n if(!refresh_panel_target)\n {\n refresh_panel_target = window.getWorkspace(_this);\n if(!(refresh_panel_target instanceof HTMLElement))\n {\n refresh_panel_target = _this;\n }\n }\n // Pulldown refresh\n if(!(refresh_panel_target.querySelector('.pulldown-refresh') instanceof HTMLElement))\n {\n console.debug('dsb-pwa-add_pulldown_refresh:: Adding pulldown_refresh panel',_this);\n refresh_panel.classList='pulldown-refresh';\n refresh_panel_target.prepend(refresh_panel);\n }\n\n if(refresh_panel.classList.contains('hide'))\n {\n refresh_panel.classList='pulldown-refresh';\n }\n\n if(!refresh_panel.classList.contains('show'))\n {\n console.debug('dsb-pwa-add_pulldown_refresh:: Refreshing...',_this);\n refresh_panel.classList.add('show');\n let _refresh = await _this._refresh();\n refresh_panel.classList.remove('show');\n refresh_panel.classList.add('hide');\n }\n else\n {\n console.error('do nothing...');\n }\n };\n _this.addEventListener(\"touchstart\", e => {\n try\n {\n if (typeof e[\"targetTouches\"] !== \"undefined\") {\n let touch = e.targetTouches[0];\n pStart.x = touch.screenX;\n pStart.y = touch.screenY;\n } else {\n pStart.x = e.screenX;\n pStart.y = e.screenY;\n }\n }\n catch(ex)\n {\n console.error('DSBWorkspace-touchstart:: Error occured in detail',ex,e);\n }\n });\n _this.addEventListener(\"touchmove\", e => {\n try\n {\n if (typeof e[\"changedTouches\"] !== \"undefined\") {\n let touch = e.changedTouches[0];\n pCurrent.x = touch.screenX;\n pCurrent.y = touch.screenY;\n } else {\n pCurrent.x = e.screenX;\n pCurrent.y = e.screenY;\n }\n let changeY = pStart.y < pCurrent.y ? Math.abs(pStart.y - pCurrent.y) : 0;\n if (_this.scrollTop === 0) {\n if (changeY > 100) loadPulldown();\n }\n }\n catch(ex)\n {\n console.error('dsb-pwa-add_pulldown_refresh:: Error occured in detail',ex,e);\n }\n });\n _this.addEventListener(\"touchend\", e => {\n try\n {\n if (_this.scrollTop === 0 && !refresh_panel) {\n console.error('Ok.. at top and no loading...');\n }\n }\n catch(ex)\n {\n console.error('DSBWorkspace-touchend:: Error occured in detail',ex,e);\n }\n });\n }\n else\n {\n throw \"e.detail.iam needs to expose a '_refresh' function\";\n }\n }\n else\n {\n throw \"e.detail.iam should be instanceof HTMLElement\";\n }\n }\n else\n {\n throw \"e.detail.iam missing\";\n }\n }\n else\n {\n throw \"e.detail missing\";\n }\n }\n catch(ex)\n {\n console.error('dsb-pwa-add_pulldown_refresh:: Error occured in detail',ex);\n }\n });\n\n\n window.fw_workbench = {};\n\n window.fw_workbench.getAppStyleProperties = function (type,property)\n {\n switch(type)\n {\n case \"app\":\n return getComputedStyle(document.querySelector('dsb-app'))[property];\n case \"header\":\n return getComputedStyle(document.querySelector('dsb-app > header'))[property];\n case \"nav\":\n return getComputedStyle(document.querySelector('dsb-app > nav'))[property];\n case \"workspace\":\n return getComputedStyle(document.querySelector('dsb-app > dsb-workspace'))[property];\n default:\n break;\n }\n return false;\n }\n\n window.fw_workbench.getApp = function ()\n {\n let app = document.querySelector('dsb-app');\n if(app != null && typeof app === 'object' && app instanceof HTMLElement)\n {\n return app;\n }\n return false;\n }\n\n // thanks to Craig Buckler: https://www.sitepoint.com/javascript-generate-lighter-darker-color/\n window.fw_workbench.getColorLuminance = function(hex, lum){\n\n // validate hex string\n hex = String(hex).replace(/[^0-9a-f]/gi, '');\n if (hex.length < 6) {\n hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];\n }\n lum = lum || 0;\n\n // convert to decimal and change luminosity\n var rgb = \"#\", c, i;\n for (i = 0; i < 3; i++) {\n c = parseInt(hex.substr(i*2,2), 16);\n c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);\n rgb += (\"00\"+c).substr(c.length);\n }\n\n return rgb;\n };\n\n window.fw_workbench.smoothScroll = function(target,to=0)\n {\n var smoothScrollFeature = 'scrollBehavior' in document.documentElement.style;\n var i = parseInt(target.scrollTop);\n if ( i != to ) {\n if (!smoothScrollFeature) {\n to = parseInt(to);\n if (i < to) {\n var int = setInterval(function() {\n if (i > (to-20)) i += 1;\n else if (i > (to-40)) i += 3;\n else if (i > (to-80)) i += 8;\n else if (i > (to-160)) i += 18;\n else if (i > (to-200)) i += 24;\n else if (i > (to-300)) i += 40;\n else i += 60;\n target.scroll(0, i);\n if (i >= to) clearInterval(int);\n }, 15);\n }\n else {\n var int = setInterval(function() {\n if (i < (to+20)) i -= 1;\n else if (i < (to+40)) i -= 3;\n else if (i < (to+80)) i -= 8;\n else if (i < (to+160)) i -= 18;\n else if (i < (to+200)) i -= 24;\n else if (i < (to+300)) i -= 40;\n else i -= 60;\n target.scroll(0, i);\n if (i <= to) clearInterval(int);\n }, 15);\n }\n }\n else {\n target.scroll({\n top: to,\n behavior: 'smooth'\n });\n }\n }\n };\n\n window.getZIndex = function (e) {\n var z = window.document.defaultView.getComputedStyle(e).getPropertyValue('z-index');\n if (isNaN(z)) return window.getZIndex(e.parentNode);\n return z;\n };\n\n window.getWorkspace = function (e) {\n let aParent = e.parentNode;\n if(aParent != null && typeof aParent === 'object')\n {\n let workspace = aParent.querySelector('dsb-workspace');\n if(workspace != null && typeof workspace === 'object')\n {\n return workspace;\n }\n return window.getWorkspace(aParent);\n }\n return false;\n };\n window.getTrayId = function (e) {\n let aParent = e.parentNode;\n if(aParent != null && typeof aParent === 'object')\n {\n let tray = aParent.querySelector('.tray');\n if(tray != null && typeof tray === 'object' && ('id' in tray && tray.id.startsWith('dsb-pwa_tray')))\n {\n return tray.id;\n }\n return window.getTrayId(aParent);\n }\n return false;\n };\n\n }\n","export default class extends HTMLElement {\n constructor() {\n super();\n console.log('Init MAASpinner');\n }\n\n get type() {\n return this.getAttribute('type');\n }\n\n set type(newValue){\n this.setAttribute('type', newValue);\n }\n\n connectedCallback() {\n let copy = this.innerHTML;\n\n switch(this.getAttribute('type'))\n {\n case \"inline-small\":\n this.innerHTML = `\n
\n \n
\n `;\n break;\n default:\n if(copy)\n {\n this.innerHTML = `\n
\n \n `+copy+`\n
\n `;\n }\n else\n {\n this.innerHTML = `\n
\n \n
\n `;\n }\n break;\n }\n }\n}\n\n","export default class MAANav extends HTMLElement {\n constructor() {\n super();\n console.log('Init MAANav');\n this.attachShadow({ mode: 'open' });\n this.menuBtn = this.shadowRoot.querySelector('[menuBtn]');\n }\n\n get type() {\n return this.getAttribute('type');\n }\n\n set type(newValue){\n this.setAttribute('type', newValue);\n }\n\n _toggleMenu()\n {\n alert('_toggleMenu');\n }\n\n connectedCallback() {\n switch(this.type)\n {\n case `top`:\n this.menuBtn.addEventListener('click', this._toggleMenu);\n this.innerHTML = `\n
    \n
  • \"Farmers
  • \n
  • Menu
  • \n
  • Title
  • \n
  • Task Bar
  • \n
\n `;\n break;\n case `primary`:\n this.innerHTML = `\n
    \n
  • 1
  • \n
  • 3
  • \n
\n `;\n break;\n }\n }\n}\n\n","export default class extends HTMLElement {\n\n static get observedAttributes() {\n return ['service'];\n }\n\n constructor() {\n super();\n console.log('Init DSBWorkspace');\n //this._setupSwipe();\n this.tabs = {};\n this.global_loader = true;\n }\n\n init()\n {\n this.setAttribute(`id`, 'dsb-workspace_'+this._createUUID());\n }\n\n get settings() {\n\n let settings = this.getAttribute('settings');\n if(typeof settings !== 'object')\n {\n settings = JSON.parse(settings);\n }\n return settings;\n }\n\n set settings(newValue){\n this.setAttribute('settings', newValue);\n }\n\n render()\n {\n return this._render();\n }\n\n setTab(name, content, active=false, render=true){\n this.tabs[name] = {'name':name, 'content':content, 'active': active};\n if(render)\n {\n return this._render();\n }\n return true;\n }\n\n removeTab(name, render=true)\n {\n if(name in this.tabs)\n {\n delete this.tabs[name];\n if(render)\n {\n return this._render();\n }\n return true;\n }\n return false;\n }\n\n reset()\n {\n this.tabs = {};\n this.innerHTML = ``;\n return true;\n }\n\n switchTab(name)\n {\n if(name in this.tabs)\n {\n let thisTab = document.getElementById(this.tabs[name].id);\n console.log(this.tabs[name].id);\n console.log(thisTab);\n thisTab.dispatchEvent(new MouseEvent(\"click\", {\n \"view\": window,\n \"bubbles\": true,\n \"cancelable\": false\n }));\n return true;\n }\n return false;\n }\n\n getTab(id)\n {\n try\n {\n return this.tabs[id];\n }\n catch(ex)\n {\n throw ex;\n }\n }\n\n setDSBClient(dsbClient){\n this.dsbClient=dsbClient;\n }\n\n connectedCallback()\n {\n return this._render();\n }\n\n attributeChangedCallback(name, oldValue, newValue)\n {\n console.log('attributeChangedCallback..'+name);\n return this._render();\n }\n\n _createUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n _setupSwipe()\n {\n\n let _this = this;\n const pStart = { x: 0, y: 0 };\n const pCurrent = { x: 0, y: 0 };\n const cards = document.querySelectorAll(\".card\");\n const main = document.querySelector(\"body > div\");\n let isLoading = false;\n var refresh_panel = false;\n\n let loadPulldown = function() {\n isLoading = true;\n\n // Pulldown refresh\n if(!refresh_panel)\n {\n refresh_panel = document.createElement(\"div\");\n refresh_panel.classList='pulldown-refresh show';\n refresh_panel.innerHTML = ``;\n _this.prepend(refresh_panel);\n _this.global_loader = false;\n _this._render();\n /**\n setTimeout(() => {\n refresh_panel.style.transform = `translateY(100px)`;\n }, 2000);\n */\n }\n\n /**\n main.style.transform = `translateY(0px)`;\n setTimeout(() => {\n main.style.transform = `translateY(-100px)`;\n isLoading = false;\n for (const card of cards) {\n card.style.transform = `rotateX(0deg)`;\n }\n }, 2000);\n */\n };\n\n let lastPosition = null\n this.addEventListener(\"touchstart\", e => {\n try\n {\n if (typeof e[\"targetTouches\"] !== \"undefined\") {\n let touch = e.targetTouches[0];\n pStart.x = touch.screenX;\n pStart.y = touch.screenY;\n } else {\n pStart.x = e.screenX;\n pStart.y = e.screenY;\n }\n }\n catch(ex)\n {\n console.error('DSBWorkspace-touchstart:: Error occured in detail',ex,e);\n }\n });\n this.addEventListener(\"touchmove\", e => {\n try\n {\n if (typeof e[\"changedTouches\"] !== \"undefined\") {\n let touch = e.changedTouches[0];\n pCurrent.x = touch.screenX;\n pCurrent.y = touch.screenY;\n } else {\n pCurrent.x = e.screenX;\n pCurrent.y = e.screenY;\n }\n let changeY = pStart.y < pCurrent.y ? Math.abs(pStart.y - pCurrent.y) : 0;\n //const rotation = changeY < 100 ? changeY * 30 / 100 : 30;\n if (_this.scrollTop === 0 && !isLoading) {\n if (changeY > 100) loadPulldown();\n //for (const card of cards) card.style.transform = `rotateX(${rotation}deg)`;\n }\n /**\n if(thisPosition+5 < lastPosition)\n {\n // Pulldown refresh\n var refresh_panel = document.createElement(\"div\");\n refresh_panel.class='pulldown-refresh fadeIn';\n refresh_panel.innerHTML = ``;\n this.prepend(refresh_panel);\n e.preventDefault();\n }\n */\n }\n catch(ex)\n {\n console.error('DSBWorkspace-touchmove:: Error occured in detail',ex,e);\n }\n });\n this.addEventListener(\"touchend\", e => {\n try\n {\n if (_this.scrollTop === 0 && !isLoading) {\n //for (const card of cards) card.style.transform = `rotateX(0deg)`;\n console.error('Ok.. at top and no loading...');\n\n }\n }\n catch(ex)\n {\n console.error('DSBWorkspace-touchend:: Error occured in detail',ex,e);\n }\n });\n }\n\n async _render()\n {\n let has_tabs = (Object.keys(this.tabs).length>0?true:false);\n if(has_tabs)\n {\n this.innerHTML = ``;\n }\n\n var nav_panel = document.createElement(\"nav\");\n var tabs_panel = document.createElement(\"ul\");\n\n var tab_count = 0;\n var has_active = false;\n\n var on_click = function()\n {\n // Set active item\n let menu_li = this.parentElement.querySelectorAll(`li`);\n if(menu_li !== undefined || menu_li.length > 0)\n {\n for(let i = 0; i < menu_li.length; i++)\n {\n if(menu_li[i].classList.contains('active'))\n {\n menu_li[i].classList.remove('active');\n let thisSection = document.getElementById(menu_li[i].id+'_section');\n thisSection.style.display='none';\n }\n }\n }\n this.classList.add('active');\n let thisSection = document.getElementById(this.id+'_section');\n thisSection.style.display='block';\n };\n\n if(has_tabs)\n {\n for(var tab in this.tabs)\n {\n let tab_id = this.id+`_tab_`+tab;\n let _link = document.createElement(\"li\");\n _link.innerHTML = this.tabs[tab].name;\n _link.setAttribute(`data-controller_id`, this.id);\n _link.setAttribute(`data-task_id`, tab);\n _link.setAttribute(`data-has_parts`, false);\n _link.onclick = on_click;\n _link.setAttribute(`id`, tab_id);\n if(this.tabs[tab].active)\n {\n _link.classList.add('active');\n }\n\n this.tabs[tab].id = tab_id;\n\n tabs_panel.append(_link);\n let section_panel = document.createElement(\"section\");\n section_panel.setAttribute(`id`, tab_id+'_section');\n section_panel.innerHTML = ``;\n if(`content` in this.tabs[tab])\n {\n if(this.tabs[tab].content instanceof HTMLElement)\n {\n section_panel.append(this.tabs[tab].content);\n }\n else\n {\n section_panel.innerHTML = this.tabs[tab].content;\n }\n }\n\n if(this.tabs[tab].active && !has_active)\n {\n has_active=true;\n }\n else\n {\n section_panel.style.display='none';\n }\n\n this.append(section_panel);\n tab_count++;\n }\n\n if(has_active)\n {\n let spinner = document.getElementById(this.id+'_spinner');\n spinner.remove();\n }\n\n if(tab_count > 1)\n {\n nav_panel.append(tabs_panel);\n this.prepend(nav_panel);\n }\n }\n return;\n }\n}\n\n\n","export default function(settings, raw_query, controller){\n\n if(typeof controller === 'object' && `_contentElements` in controller)\n {\n if(!(`filter` in controller._contentElements) || !(controller._contentElements.filter instanceof HTMLElement))\n {\n console.debug('Settings up filter...',settings);\n controller._contentElements.filter=document.createElement(\"form\");\n controller._contentElements.filter.target=\"\";\n controller._contentElements.filter.setAttribute('style','padding-bottom:10px;padding-top:10px;border-bottom:2px solid grey;margin-bottom:10px;');\n }\n\n let has_actions = false;\n\n if(`keyword` in settings)\n {\n console.debug('Adding keyword...',settings);\n let keyword_component = document.createElement(\"input\");\n keyword_component.type=\"text\";\n keyword_component.name=settings.keyword;\n keyword_component.value=(settings.keyword in raw_query?raw_query[settings.keyword]:'');\n keyword_component.placeholder=\"Please enter a keyword\";\n controller._contentElements.filter.append(keyword_component);\n has_actions=true;\n }\n\n console.error(raw_query);\n\n if(has_actions)\n {\n console.debug('Adding submit...',settings);\n let searchButton_component = document.createElement(\"input\");\n searchButton_component.value=\"Search\";\n searchButton_component.type = 'submit';\n if(controller.dsbClient.user.is_offline())\n {\n searchButton_component.disabled = true;\n }\n else\n {\n controller._contentElements.filter.addEventListener('submit', async event => {\n // submit event detected\n event.preventDefault()\n\n const formData = new FormData(event.target);\n const entries = formData.entries();\n let submission = Object.fromEntries(entries);\n let del=[];\n\n let query = controller.dsbClient.content.processQuery(controller.query,submission,'object');\n for(let akey in query)\n {\n if(query[akey].length == 0)\n {\n delete query[akey]\n }\n }\n query['_[skip]']=0;\n controller.setAttribute('query',controller.dsbClient.content.processQuery(query));\n\n });\n }\n controller._contentElements.filter.append(searchButton_component);\n }\n\n return controller._contentElements.filter;\n }\n else\n {\n throw \"controller._contentElements is not an object!\";\n }\n\n}\n","\nmodule.exports = {\n init: async function(parent,settings){\n this._parent=parent;\n this._settings=settings;\n this._has_post_rendered=false;\n this._ref_card_noresults=false;\n this._has_refreshed = false;\n this._scroll_to_top_element=false;\n this._slide_number=0;\n this._after_render = function(){};\n this._start_date = new Date();\n this._start_date=new Date(this._start_date.getFullYear(),this._start_date.getMonth()-1,this._start_date.getDate()).getTime()/1000;\n this._update_count=0;\n console.debug('dsb-list(coverflow): Init',this._start_date);\n this._postid_to_cardid={};\n },\n get_list_count: function(){\n let number = 0\n if(!this._ref_card_noresults)\n {\n number = this._parent._contentElements.list.childNodes.length;\n if(isNaN(number))\n {\n number = 0;\n }\n }\n console.error('get_list_count',number,this._parent._contentElements.list.getElementsByTagName('li'),this._parent._contentElements.list);\n return number;\n },\n pre_render: async function(DATA){\n console.debug('dsb-list(coverflow): pre_render');\n let _this = this;\n\n //Setup hide all posts\n this.hide_all_posts=function(){\n _this._parent._log('debug','coverflow.pre_render','coverflow_actions:hide_all_posts,');\n let list = _this._parent._contentElements.list.querySelectorAll(\".coverflow_post\");\n if(list !== undefined || list.length > 0)\n {\n for(let i = 0; i < list.length; i++)\n {\n list[i].style.display='none';\n }\n }\n\n list = _this._parent._contentElements.list.querySelectorAll(\".coverflow_slidedownbutton\");\n if(list !== undefined || list.length > 0)\n {\n for(let i = 0; i < list.length; i++)\n {\n list[i].style.display='inline-block';\n }\n }\n }\n\n this.display_dir='LTR';\n // Add step progress bar\n this.progress_steps_component = document.createElement(\"dsb-stepbar\");\n let progress_steps_settings = {'active_color':'#fcdc18','default_color':'#000','complete_color':'green','size':'10px','progress_mode':'stage'};\n if((`add_order` in _this._parent.settings) && _this._parent.settings.add_order == 'prepend')\n {\n progress_steps_settings['add_order']='prepend';\n this.display_dir='RTL';\n }\n else\n {\n progress_steps_settings['add_order']='append';\n }\n this.progress_steps_component.setAttribute(`settings`, JSON.stringify(progress_steps_settings));\n this.progress_steps_component.setHeader(function(header,data){\n\n let text = header.querySelector(\"[data-stepbar='stats']\");\n if(!(text instanceof HTMLElement))\n {\n text = document.createElement(\"span\");\n text.setAttribute('data-stepbar','stats');\n text.style.display=\"inline-block\";\n header.append(text);\n }\n let test_message = data.count+'/'+data.total+' of today\\'s articles read';\n\n if(data.total==0)\n {\n text.innerHTML = '';\n }\n else\n {\n text.innerHTML = test_message;\n }\n\n let countdown = header.querySelector(\"[data-stepbar='countdown']\");\n if(!(countdown instanceof HTMLElement))\n {\n countdown = document.createElement(\"span\");\n countdown.style.display='block';\n countdown.id=\"coverflow_countdown-\"+_this._parent._createUUID();\n countdown.setAttribute('data-stepbar','countdown');\n countdown.innerHTML='...';\n header.append(countdown);\n let update_countdown=function(){\n var toDate=new Date();\n var tomorrow=new Date();\n tomorrow.setHours(24,0,0,0);\n var diffMS=tomorrow.getTime()/1000-toDate.getTime()/1000;\n var diffHr=Math.floor(diffMS/3600);\n diffMS=diffMS-diffHr*3600;\n var diffMi=Math.floor(diffMS/60);\n diffMS=diffMS-diffMi*60;\n var diffS=Math.floor(diffMS);\n var result=((diffHr<10)?\"\"+diffHr:diffHr);\n result+=\" hours \"+((diffMi<10)?\"0\"+diffMi:diffMi);\n result+=\" minutes until daily reset\";\n countdown.innerHTML=result;\n\n let currentDate = new Date();\n currentDate=new Date(currentDate.getFullYear(),currentDate.getMonth()-1,currentDate.getDate()).getTime()/1000;\n\n if(!isNaN(_this._start_date) && !isNaN(currentDate))\n {\n if((_this._start_date < currentDate) && !_this._has_refreshed)\n {\n console.debug('dsb-list(coverflow): refreshing...('+_this._start_date+' < '+currentDate+')');\n _this.user_status('clear')\n window.dispatchEvent(new CustomEvent('fw-pwa-serviceworker_action', {detail: {type:'purge_pages'}}));\n\n // Wait 5 seconds then repopulate\n setInterval(function(){\n _this._has_refreshed = true;\n _this._parent._refresh();\n },5000);\n }\n\n _this._update_count++;\n\n if(_this._update_count >= 5)\n {\n console.debug('dsb-list(coverflow): updating...');\n _this._update_count = 0;\n _this._parent._update();\n }\n }\n\n }\n update_countdown();\n setInterval(function(){\n update_countdown();\n },60000);\n }\n\n\n });\n _this._parent._contentElements.top.append(this.progress_steps_component);\n\n // Add complete step\n /**\n let _tmp_message={};\n _tmp_message.type=\"coverflow_complete_message\";\n _tmp_message.title=\"All done! Come back tomorrow for more\";\n if(`coverflow_complete_message` in _this._parent.settings)\n {\n _tmp_message.title=_this._parent.settings.coverflow_complete_message;\n }\n DATA.push(_tmp_message);\n */\n // Enable swipe\n //_this._contentElements.list\n\n\n },\n _log(type,source,message,data='')\n {\n this._parent._log(type,'coverflow.'+source,message,data);\n },\n post_render: async function(DATA){\n if(!this._has_post_rendered)\n {\n this._has_post_rendered=true;\n console.debug('dsb-list(coverflow): post_render');\n let _this = this;\n\n if(this._parent._contentElements.bottom instanceof HTMLElement)\n {\n this._scroll_to_top_element = document.createElement(\"span\");\n this._scroll_to_top_element.classList.add('m-icon-up');\n this._scroll_to_top_element.classList.add('icon-clickable');\n /**\n this._scroll_to_top_element.onmouseover=function(){\n if(!this.classList.contains('hover'))\n {\n this.classList.add('hover');\n }\n };\n this._scroll_to_top_element.onmouseout=function(){\n if(this.classList.contains('hover'))\n {\n this.classList.remove('hover');\n }\n };\n */\n this._scroll_to_top_element.style=\"display:none;opacity:0;font-size: 3em; position: fixed; bottom: 10px; right: 10px; text-align: center;vertical-align: middle;\";\n this._scroll_to_top_element.onclick = function(e){\n let workspace = window.getWorkspace(_this._parent);\n if(('fw_workbench' in window) && ('smoothScroll' in window.fw_workbench))\n {\n window.fw_workbench.smoothScroll(workspace);\n }\n }\n this._parent._contentElements.bottom.append(this._scroll_to_top_element);\n }\n\n if(this._parent._contentElements.list instanceof HTMLElement)\n {\n this._parent._contentElements.middle.classList.add('swipe');\n this._swipe_handler(this._parent._contentElements.list);\n this._parent._contentElements.list.style.setProperty('--other-elements-height',this._parent._contentElements.top.offsetHeight+'px');\n\n if(this.display_dir=='RTL')\n {\n // Select 1st\n let last_card = parseInt(this._parent._contentElements.list.style.getPropertyValue('--n'));\n this._parent._contentElements.list.coverflow_select(0);\n _this.progress_steps_component.setStep('coverflow_card_'+last_card,'active',false);\n }\n else\n {\n // Select last\n let last_card = parseInt(this._parent._contentElements.list.style.getPropertyValue('--n'));\n this._parent._contentElements.list.coverflow_select(last_card-1);\n _this.progress_steps_component.setStep('coverflow_card_'+last_card,'active',false);\n }\n\n // Setup for read\n this.user_status('get_data').then(function(data) {\n for(let i = 0; i`;\n refresh_panel_target.prepend(refresh_panel);\n\n let loadPulldown = async function()\n {\n if(!refresh_panel.classList.contains('show'))\n {\n console.debug('dsb-list(coverflow):loadPulldown: Refreshing...',this_panel);\n let this_panel = document.getElementById(refresh_panel_id);\n this_panel.style=\"\";\n this_panel.classList='pulldown-refresh show';\n let _refresh = await _parent._parent._update();\n setInterval(function(){\n this_panel.classList='pulldown-refresh hide';\n },2000);\n }\n else\n {\n console.error('do nothing...');\n }\n };\n\n let getCard = function (e)\n {\n let aParent = e.parentNode;\n if(aParent != null && typeof aParent === 'object')\n {\n let card = aParent.querySelector('.card');\n if(card != null && typeof card === 'object')\n {\n return card;\n }\n return getCard(aParent);\n }\n return false;\n };\n\n let i = 0, x0 = null,x0_hold = null, y0 = null,locked = false,refresh_data=false, swipeXlocked = false, awaiting_move = false, w, ini, fin, rID = null, anf, n, _i, original_i;\n\n let locked_card = null;\n let last_scrollpercentage = null;\n let scroll_to_top = false;\n\n\n let is_coverflow_xlock_shown = false;\n _this.coverflow_xlock_shown = function()\n {\n if(!swipeXlocked)\n {\n swipeXlocked='shown';\n awaiting_move = true;\n locked = true;\n is_coverflow_xlock_shown=true;\n\n //refresh_data=false;\n }\n }\n _this.coverflow_select = function(new_i)\n {\n i = new_i;\n _setPropertyI(i);\n x0 = null;\n y0 = null;\n locked = false;\n refresh_data=false;\n swipeXlocked = false;\n awaiting_move = false;\n _this.coverflow_update();\n }\n\n let onstopAni = function(){\n let current_card_number = parseInt(_this.style.getPropertyValue('--i'));\n console.debug('dsb-list(coverflow): move/onstopAni - setting setStep active',_parent.progress_steps_component,current_card_number);\n\n if(!isNaN(current_card_number))\n {\n if(_parent.display_dir=='RTL')\n {\n current_card_number=N-current_card_number;\n if(current_card_number<0)\n {\n current_card_number=0;\n }\n }\n else\n {\n current_card_number=current_card_number+1;\n }\n _parent.progress_steps_component.setStep('coverflow_card_'+current_card_number,'active',false);\n }\n _parent.hide_all_posts();\n };\n\n function stopAni() {\n console.debug('dsb-list(coverflow): stopAni');\n cancelAnimationFrame(rID);\n rID = null;\n onstopAni();\n };\n\n function ani(cf = 0) {\n let new_i = ini + (fin - ini)*TFN['ease-in-out'](cf/anf);\n\n if(cf==0 && anf==0 && isNaN(new_i))\n {\n // Ok skipping, just a click on a card\n }\n else\n {\n _setPropertyI(new_i);\n }\n\n console.debug('dsb-list(coverflow): ani',cf,anf,new_i);\n if(cf === anf) {\n stopAni();\n return\n }\n\n rID = requestAnimationFrame(ani.bind(this, ++cf))\n };\n\n function unify(e) {\treturn e.changedTouches ? e.changedTouches[0] : e };\n\n function lock(e) {\n\n awaiting_move = false;\n // Skip lock if clickable\n if(e.target instanceof HTMLElement && e.target.classList.contains('icon-clickable'))\n {\n return;\n }\n\n x0_hold = unify(e).clientX;\n\n if(!swipeXlocked)\n {\n x0 = unify(e).clientX;\n y0 = unify(e).clientY;\n locked = true;\n }\n };\n\n function _setPropertyI(i)\n {\n console.error('dsb-list(coverflow): Setting i to '+i);\n if(i==-1)\n {\n i=1;\n }\n _this.style.setProperty('--i',i);\n }\n\n function drag(e) {\n if(locked)\n {\n let card = getCard(e.target);\n if(!swipeXlocked && !awaiting_move)\n {\n e.preventDefault();\n original_i = _i;\n let dx = unify(e).clientX - x0, f = +(dx/w).toFixed(2);\n\n _i=i - f;\n\n // Check for vertical movement\n let Xdiff=Math.abs(x0-unify(e).clientX);\n let Ydiff=Math.abs(y0-unify(e).clientY);\n let _Ydiff=(y0-unify(e).clientY);\n console.debug('dsb-list(coverflow): '+x0+'/'+y0+' ['+unify(e).clientX+'/'+unify(e).clientY+'] - '+Ydiff+', id='+card.id,card);\n\n //if(Ydiff>40 && Ydiff>Xdiff)\n if(_Ydiff>40 && Xdiff<10)\n {\n console.debug('dsb-list(coverflow): Locking swipeX on '+card.id);\n //console.error('PULLDOWN','Locking swipeX',Ydiff,Xdiff,Math.abs(Ydiff),Math.abs(Xdiff));\n swipeXlocked=true;\n awaiting_move=true;\n let _new_i = Math.floor(original_i)*+1;\n //_this.style.setProperty('--i', (_new_i>0?_new_i:1));\n _setPropertyI(_new_i);\n }\n else\n {\n //console.error('PULLDOWN',_Ydiff,Ydiff,Xdiff);\n if(_Ydiff<-40 && Xdiff>-10 && Xdiff<10)\n {\n refresh_data=true;\n }\n swipeXlocked=false;\n _setPropertyI(_i);\n }\n\n }\n else\n {\n if(workspace)\n {\n console.debug('dsb-list(coverflow): Looking at workspace.scrollTop='+workspace.scrollTop);\n\n if(workspace.scrollTop < 10)\n {\n let Xdiff = 0;\n let unlock=false;\n if(x0_hold>0)\n {\n Xdiff=Math.abs(x0_hold-unify(e).clientX);\n x0=x0_hold;\n console.debug('dsb-list(coverflow): Looking at workspace.scrollTop(x0_hold)',x0_hold,unify(e).clientX,Xdiff);\n }\n else\n {\n console.debug('dsb-list(coverflow): Looking at workspace.scrollTop(x0)',x0,unify(e).clientX,Xdiff);\n Xdiff=(x0-unify(e).clientX)*+1;\n }\n\n if(Xdiff>40)\n {\n unlock=true;\n }\n\n //let Xdiff=Math.abs(x0-unify(e).clientX);\n\n if(unlock)\n {\n console.debug('dsb-list(coverflow): UN-Locking swipeX on '+e.target.id);\n // _this.style.setProperty('--i', Math.floor(original_i)*+1);\n _setPropertyI(i);\n _parent.hide_all_posts();\n swipeXlocked=false;\n awaiting_move=true;\n\n scroll_to_top=false;\n last_scrollpercentage=null;\n _parent._scroll_to_top_element._view_state='';\n _parent._scroll_to_top_element.style.display = 'none';\n console.debug('dsb-list(coverflow): Resetting --i to '+i);\n }\n else\n {\n e.stopPropagation();\n }\n }\n /**\n else\n {\n // Check for vertical movement\n let _Ydiff=(y0-unify(e).clientY);\n\n console.error(_Ydiff,y0,unify(e).clientY);\n if(y0=0)\n {\n _setPropertyI(card_i);\n }\n }\n card_element.coverflow_actions('scroll_to_posttop');\n }\n\n let scroll_percentage = ((workspace.scrollTop/workspace.scrollHeight)*100);\n if(scroll_percentage > 10)\n {\n if(swipeXlocked!=='clicked')\n {\n let card_element = getCard(e.target);\n card_element.coverflow_actions('read_post');\n locked_card = card_element;\n swipeXlocked='clicked';\n }\n\n if(_parent._scroll_to_top_element && _parent._scroll_to_top_element instanceof HTMLElement)\n {\n console.error('dsb-list(coverflow): Looking at _scroll_to_top_element',_parent._scroll_to_top_element._view_state,last_scrollpercentage, scroll_percentage,Math.abs(last_scrollpercentage-scroll_percentage));\n if(last_scrollpercentage!=='locked' && _parent._scroll_to_top_element._view_state!=='shown')\n {\n console.error('@check',scroll_to_top,scroll_percentage);\n if(last_scrollpercentage !== null && !isNaN(last_scrollpercentage) && (last_scrollpercentage>scroll_percentage))\n {\n scroll_to_top=true;\n }\n else\n {\n scroll_to_top=false;\n }\n\n if(scroll_to_top)\n {\n console.error('@locked',last_scrollpercentage,scroll_percentage);\n last_scrollpercentage='locked';\n let op_in = _parent._scroll_to_top_element.style.opacity; // initial opacity\n if(op_in == 0)\n {\n op_in = 0.1;\n }\n let _scroll_to_top_element_timer_in = setInterval(function () {\n if (op_in >= 1 || isNaN(op_in)){\n console.error('@shown, wait 5');\n clearInterval(_scroll_to_top_element_timer_in);\n _parent._scroll_to_top_element.style.opacity = 1;\n _parent._scroll_to_top_element.style.filter = 'alpha(opacity=' + (1 * 100) + \")\";\n let op_out=1;\n setTimeout(function(){\n let _scroll_to_top_element_timer_out = setInterval(function () {\n if (op_out <= 0.1 || isNaN(op_out)){\n console.error('@hidden');\n clearInterval(_scroll_to_top_element_timer_out);\n _parent._scroll_to_top_element.style.display = 'none';\n _parent._scroll_to_top_element._view_state='shown';\n _parent._scroll_to_top_element.style.opacity = 0;\n _parent._scroll_to_top_element.style.filter = 'alpha(opacity=' + (0 * 100) + \")\";\n }\n else\n {\n console.error('@hiding',op_out);\n _parent._scroll_to_top_element.style.opacity = op_out;\n _parent._scroll_to_top_element.style.filter = 'alpha(opacity=' + (parseFloat(op_out) * 100) + \")\";\n op_out -= parseFloat(op_out) * 0.1;\n }\n }, 50);\n },5000);\n }\n _parent._scroll_to_top_element.style.display = 'block';\n console.error('@showing',op_in);\n _parent._scroll_to_top_element.style.opacity = op_in;\n _parent._scroll_to_top_element.style.filter = 'alpha(opacity=' + (parseFloat(op_in) * 100) + \")\";\n op_in += parseFloat(op_in) * 0.1;\n }, 10);\n }\n else\n {\n last_scrollpercentage=scroll_percentage;\n }\n }\n else\n {\n if(scroll_percentage<=1)\n {\n console.error('@forcehide',scroll_percentage);\n _parent._scroll_to_top_element.style.display = 'none';\n scroll_to_top=false;\n }\n\n if(_parent._scroll_to_top_element._view_state=='shown')\n {\n console.error('@skip',last_scrollpercentage,scroll_percentage,Math.abs(last_scrollpercentage-scroll_percentage));\n if(last_scrollpercentage 2)\n {\n scroll_to_top=true;\n }\n last_scrollpercentage=scroll_percentage;\n }\n }\n }\n }\n e.stopPropagation();\n }\n else\n {\n e.stopPropagation()\n e.preventDefault();\n let dx = unify(e).clientX - x0,\n s = Math.sign(dx),\n f = +(s*dx/w).toFixed(2);\n\n ini = i - s*f;\n\n if((i > 0 || s < 0) && (i < N - 1 || s > 0) && f > .2) {\n i -= s;\n f = 1 - f\n }\n\n fin = i;\n anf = Math.round(f*NF);\n n = 2 + Math.round(f)\n ani();\n x0 = null;\n locked = false;\n locked_card=null;\n }\n awaiting_move=false;\n\n // Refresh data\n if(refresh_data)\n {\n // Force onto one card\n let card_i = getCard(e.target).id;\n card_i=card_i.replace('coverflow_card_','');\n if(!isNaN(card_i))\n {\n if(_parent.display_dir=='RTL')\n {\n card_i=N-card_i;\n }\n else\n {\n card_i=card_i-1;\n }\n\n if(card_i>=0)\n {\n _setPropertyI(card_i);\n }\n }\n loadPulldown();\n refresh_data=false;\n swipeXlocked=false;\n awaiting_move=true;\n }\n }\n };\n\n function size() { w = window.innerWidth };\n\n _this.coverflow_update();\n\n addEventListener('resize', size, false);\n\n _this.addEventListener('mousedown', lock, false);\n _this.addEventListener('touchstart', lock, false);\n\n _this.addEventListener('mousemove', drag, false);\n _this.addEventListener('touchmove', drag, false);\n\n _this.addEventListener('mouseup', move, false);\n _this.addEventListener('touchend', move, false);\n\n let observeTarget = new MutationObserver(function (e) {\n _this.coverflow_update();\n });\n observeTarget.observe(_this, { childList: true });\n }\n catch(ex)\n {\n console.error('dsb-list(coverflow): _swipe_handler',ex);\n }\n\n },\n user_status: async function(task,id=false)\n {\n if(this._parent.dsbClient.user.has_localdb())\n {\n try\n {\n\n let new_data = {\n 'id':'coverflow_today',\n 'status':'published',\n 'data':[]\n }\n\n switch(task)\n {\n case \"get_data\":\n let current_data = await this._parent.dsbClient.user.get('local','id=coverflow_today');\n if(typeof current_data === 'object' && 'data' in current_data)\n {\n return current_data.data;\n }\n else\n {\n return [];\n }\n return\n break;\n case \"update\":\n if(id && !(isNaN(id)))\n {\n let current_data = await this._parent.dsbClient.user.get('local','id=coverflow_today');\n this._log('debug','handle_read_status',current_data);\n if(!current_data)\n {\n current_data = new_data;\n }\n\n if(!('expirationdate' in current_data) || !current_data.expirationdate)\n {\n let currentDate = new Date();\n current_data.expirationdate = new Date(currentDate.getFullYear(),currentDate.getMonth()-1,currentDate.getDate()+1).getTime()/1000\n }\n if(current_data.data.indexOf(id)<0)\n {\n current_data.data.push(id);\n }\n return await this._parent.dsbClient.user.post('local',current_data);\n }\n else\n {\n throw \"Id is not a number\";\n }\n break;\n case \"clear\":\n return await this._parent.dsbClient.user.post('local',new_data);\n }\n }\n catch(ex)\n {\n this._log('error','handle_read_status','Thrown error for task='+task+'; id='+id,ex);\n return false;\n }\n }\n },\n render: async function(LIST_POSITION,CURRENT_DATA,ITEM,ITEM_SETTINGS) {\n console.debug('dsb-list(coverflow): render');\n let _this = this;\n _this._parent.classList.add('coverflow');\n\n let service = _this._parent.dsbClient.content.default_service;\n\n ITEM.classList.add('item');\n\n let card_element = document.createElement(\"div\");\n card_element.classList.add('card');\n\n if(LIST_POSITION==1)\n {\n //ITEM.classList.add('active');\n }\n\n let item_title = document.createElement(\"h2\");\n\n if(\"no-results\" == CURRENT_DATA.type)\n {\n item_title.innerHTML = 'Nothing yet today...';\n item_title.style.width=\"100%\";\n item_title.style.textAlign=\"center\";\n card_element.id='coverflow_card_noresults';\n card_element.append(item_title);\n let item_icon = document.createElement(\"span\");\n item_icon.style=\"display:block;text-align:center;font-size:200px\";\n item_icon.classList.add(\"icon-schedule\");\n item_title.prepend(item_icon);\n ITEM.append(card_element);\n this._ref_card_noresults=card_element;\n }\n else\n {\n\n if(this._ref_card_noresults)\n {\n this._ref_card_noresults.remove();\n this._ref_card_noresults=false;\n }\n\n if('title' in CURRENT_DATA)\n {\n //item_title.innerHTML = LIST_POSITION+'@'+CURRENT_DATA.title;\n item_title.innerHTML = CURRENT_DATA.title;\n card_element.id='coverflow_card_'+LIST_POSITION;\n }\n else\n {\n console.error('Unknown title');\n }\n\n if(\"section\" == CURRENT_DATA.type)\n {\n service = 'static';\n item_title.style.textAlign='center';\n }\n\n let advertiser_logo = null;\n\n if('author' in CURRENT_DATA)\n {\n if('type' in CURRENT_DATA.author)\n {\n switch(CURRENT_DATA.author.type)\n {\n case \"advert\":\n let advertiser_logo_img = this._parent.dsbClient.content.applyFilter(`formatData_lookup`, [ `author_advertiser_logo`, CURRENT_DATA.author.id ] );\n if(advertiser_logo_img)\n {\n advertiser_logo = document.createElement(\"div\");\n advertiser_logo.classList.add('advertiser-logo');\n advertiser_logo.setAttribute('style','background-image:url('+advertiser_logo_img+')');\n advertiser_logo.classList.add('circle-image');\n }\n break;\n default:\n break;\n }\n }\n }\n\n // Background images\n if('show-thumbnail' in ITEM_SETTINGS)\n {\n switch(ITEM_SETTINGS['show-thumbnail'])\n {\n case \"top\":\n let content_block = document.createElement(\"div\");\n content_block.classList.add('content-block');\n content_block.append(item_title);\n card_element.classList.add(`layout-image-top`);\n\n if('images' in CURRENT_DATA)\n {\n if('large' in CURRENT_DATA.images)\n {\n let content_thumbnail = document.createElement(\"div\");\n content_thumbnail.classList.add('content-thumbnail');\n if(CURRENT_DATA.images.large.endsWith('.svg'))\n {\n content_thumbnail.setAttribute('style', 'background-image:url('+CURRENT_DATA.images.large+');background-size: auto 100%;background-position: top;');\n }\n else\n {\n //content_thumbnail.setAttribute('style', 'background-image:linear-gradient( to top, transparent 70%, #353535 ),url('+CURRENT_DATA.images.large+')');\n content_thumbnail.setAttribute('style', 'background-image:url('+CURRENT_DATA.images.large+')');\n\n }\n card_element.append(content_thumbnail);\n if(advertiser_logo != null && typeof advertiser_logo === 'object' && advertiser_logo instanceof HTMLElement)\n {\n content_block.append(advertiser_logo);\n }\n //this._settings.imageObserver.observe(ITEM);\n }\n }\n card_element.append(content_block);\n break;\n case \"background\":\n card_element.append(item_title);\n if('images' in CURRENT_DATA)\n {\n if('large' in CURRENT_DATA.images)\n {\n card_element.classList.add(`layout-image-background`);\n let overlay_bottom = document.createElement(\"span\");\n overlay_bottom.classList.add('overlay-bottom');\n card_element.append(overlay_bottom);\n let overlay_top = document.createElement(\"span\");\n overlay_top.classList.add('overlay-top');\n card_element.append(overlay_top);\n card_element.setAttribute('style', 'background-image:url('+CURRENT_DATA.images.large+')');\n //this._settings.imageObserver.observe(ITEM);\n if(advertiser_logo != null && typeof advertiser_logo === 'object' && advertiser_logo instanceof HTMLElement)\n {\n card_element.append(advertiser_logo);\n }\n }\n }\n break;\n case \"icon\":\n if('icon' in CURRENT_DATA)\n {\n let content_block = document.createElement(\"div\");\n content_block.classList.add('content-block');\n let item_icon = document.createElement(\"span\");\n item_icon.classList.add(CURRENT_DATA.icon);\n item_icon.style.height=\"\";\n content_block.append(item_icon);\n content_block.append(item_title);\n card_element.classList.add(`layout-icon`);\n card_element.append(content_block);\n }\n break;\n default:\n console.error(ITEM_SETTINGS['show-thumbnail']+' not supported in coverflow');\n card_element.classList.add(`layout-no-image`);\n card_element.append(item_title);\n if(advertiser_logo != null && typeof advertiser_logo === 'object' && advertiser_logo instanceof HTMLElement)\n {\n card_element.append(advertiser_logo);\n }\n break;\n }\n }\n\n ITEM.id=\"coverflow_\"+CURRENT_DATA.id;\n this.progress_steps_component.setStep(card_element.id,'');\n this.progress_steps_component.setStep(card_element.id,(LIST_POSITION==1?'active':''),true,\n function(){\n let card_id = this.getAttribute('alt');\n card_id=parseInt(card_id.replace('coverflow_card_',''));\n if(_this.display_dir=='RTL')\n {\n _this._parent._contentElements.list.coverflow_select(parseInt(_this._parent._contentElements.list.style.getPropertyValue('--n'))-card_id);\n }\n else\n {\n _this._parent._contentElements.list.coverflow_select(card_id-1);\n }\n _this.progress_steps_component.setStep('coverflow_card_'+card_id,'active',false);\n }\n );\n this._postid_to_cardid[CURRENT_DATA.id]=card_element.id;\n\n let coverflow_component = document.createElement(\"dsb-post\");\n coverflow_component.setDSBClient(_this._parent.dsbClient);\n coverflow_component.setAttribute(`service`, service);\n coverflow_component.setAttribute('post_id', CURRENT_DATA.id);\n coverflow_component.setAttribute(`settings`, JSON.stringify({'base_update':'off','header':'off','clean_body':'on','page_view_onload':'off','pulldown_refresh':'off','lazy_images':'off'}));\n coverflow_component.innerHTML = ``;\n coverflow_component.style.display='none';\n coverflow_component.style.width='var(--fullwidth)';\n coverflow_component.style.position='relative';\n coverflow_component.classList.add('coverflow_post');\n\n card_element.coverflow_actions=function(action)\n {\n switch(action)\n {\n case \"show_post\":\n _this._parent._log('debug','coverflow.render','coverflow_actions:show_post,',coverflow_component);\n _this.hide_all_posts();\n coverflow_component.style.display='inline-block';\n coverflow_slidedownbutton.style.display='none';\n break;\n case \"scroll_to_posttop\":\n _this._parent._log('debug','coverflow.render','coverflow_actions:scroll_to_top,',coverflow_component);\n let workspace = window.getWorkspace(_this._parent);\n if(('fw_workbench' in window) && ('smoothScroll' in window.fw_workbench) && ('getAppStyleProperties' in window.fw_workbench))\n {\n let scroll_to = parseInt(coverflow_component.getBoundingClientRect().top)-parseInt(window.fw_workbench.getAppStyleProperties('header','height').replace('px',''))-parseInt(getComputedStyle(document.documentElement).getPropertyValue(\"--safe-top\"));\n window.fw_workbench.smoothScroll(workspace,scroll_to);\n }\n break;\n case \"read_post\":\n _this._parent._log('debug','coverflow.render','coverflow_actions:read_post,',coverflow_component);\n _this.user_status('update',coverflow_component.getAttribute('post_id')).then(function(data) {\n coverflow_component.page_view();\n _this.progress_steps_component.setStep(card_element.id,'complete');\n });\n /**\n _this._parent.dsbClient.user.post('readprogress',{\"id\":coverflow_component.getAttribute('post_id'),\"status\":\"read\",\"source\":\"coverflow_today\"},true).then(function(data) {\n coverflow_component.page_view();\n _this.progress_steps_component.setStep(card_element.id,'complete');\n _this.handle_read_status('record',coverflow_component.getAttribute('post_id'));\n });\n */\n break;\n default:\n break;\n }\n\n };\n\n let coverflow_slidedownbutton = document.createElement(\"span\");\n coverflow_slidedownbutton.classList.add('m-icon-down');\n coverflow_slidedownbutton.classList.add('icon-clickable');\n coverflow_slidedownbutton.classList.add('coverflow_slidedownbutton');\n coverflow_slidedownbutton.style=\"font-size: 3em; position: absolute; bottom: 0px; right: 1px; z-index: 1;width: 100%;text-align: center;vertical-align: middle;\";\n coverflow_slidedownbutton.onclick = function(e){\n card_element.coverflow_actions('show_post');\n _this._parent._contentElements.list.coverflow_xlock_shown();\n card_element.coverflow_actions('scroll_to_posttop');\n }\n card_element.append(coverflow_slidedownbutton);\n\n ITEM.append(card_element);\n\n let coverflow_nav_slideupbutton = document.createElement(\"span\");\n coverflow_nav_slideupbutton.classList.add('m-icon-up');\n coverflow_nav_slideupbutton.classList.add('icon-clickable');\n coverflow_nav_slideupbutton.style=\"padding:5px;font-size:3em;font-color:#fff;background-color:#5a5a5a;text-align:middle;position:absolute;bottom:10px;right:1px;\";\n coverflow_nav_slideupbutton.onclick = function(){\n let workspace = window.getWorkspace(_this._parent);\n if(('fw_workbench' in window) && ('smoothScroll' in window.fw_workbench))\n {\n window.fw_workbench.smoothScroll(workspace);\n }\n }\n\n\n let coverflow_nav_nextbutton = document.createElement(\"span\");\n coverflow_nav_nextbutton.classList.add('m-icon-right');\n coverflow_nav_nextbutton.classList.add('icon-clickable');\n coverflow_nav_nextbutton.style=\"padding:5px;font-size:3em;font-color:#fff;background-color:#5a5a5a;text-align:middle;position:absolute;bottom:10px;left:1px;\";\n coverflow_nav_nextbutton.onclick = function(){\n let workspace = window.getWorkspace(_this._parent);\n- workspace.scroll({\n top: 0,\n behavior: \"smooth\"\n });\n let li = _this._parent._contentElements.list.querySelectorAll(\"li\");\n let next = false;\n if(li !== undefined || li.length > 0)\n {\n for(let i = 0; i < li.length; i++)\n {\n if(next)\n {\n next=false;\n li[i].classList.add('active');\n this._parent._contentElements.list.style.setProperty('--i',i);\n this.progress_steps_component.setStep(li[i].id,'active');\n\n }\n else if(li[i].classList.contains('active'))\n {\n li[i].classList.remove('active');\n }\n\n if(li[i].id == ITEM.id)\n {\n next=true;\n this.progress_steps_component.setStep(li[i].id,'complete',false);\n }\n }\n }\n }\n\n let coverflow_nav = document.createElement(\"div\");\n coverflow_nav.style=\"position:relative;height:calc(10px + 3em);\"\n //coverflow_nav.append(coverflow_nav_nextbutton);\n coverflow_nav.append(coverflow_nav_slideupbutton);\n coverflow_component.appendContent(coverflow_nav);\n ITEM.append(coverflow_component);\n _this._after_render();\n }\n }\n}\n","\nmodule.exports = {\n init: async function(parent,settings){\n this._parent=parent;\n this._settings=settings;\n this.grid_layout_end = 0;\n },\n pre_render: async function(DATA){\n this.data_length = DATA.length;\n },\n render: async function(LIST_POSITION,CURRENT_DATA,ITEM,ITEM_SETTINGS) {\n\n let _this = this._parent;\n _this.classList.add('list-view');\n let grid_size = 0;\n\n ITEM.classList.add('item');\n\n if(`layout-grid` in ITEM_SETTINGS)\n {\n grid_size = ITEM_SETTINGS[`layout-grid`];\n\n if(this.grid_layout_end==0)\n {\n this.grid_layout_end=grid_size\n }\n\n this.grid_layout_end--;\n\n if(this.grid_layout_end<1 || LIST_POSITION == this.data_length)\n {\n ITEM.classList.add('layout-grid-row-end');\n this.grid_layout_end=0;\n }\n\n switch(grid_size)\n {\n case \"2\":\n ITEM.classList.add('layout-grid-2');\n break;\n case \"3\":\n ITEM.classList.add('layout-grid-3');\n break;\n case \"4\":\n ITEM.classList.add('layout-grid-4');\n break;\n case \"5\":\n ITEM.classList.add('layout-grid-5');\n break;\n case \"6\":\n ITEM.classList.add('layout-grid-6');\n break;\n default:\n break;\n }\n\n }\n\n switch(CURRENT_DATA.type)\n {\n case \"collection\":\n ITEM.onclick = function(){\n let component = document.createElement(\"dsb-reader\");\n component.setDSBClient(_this.dsbClient);\n component.setAttribute(`service`, `post`);\n component.setAttribute('collection_id', CURRENT_DATA.id);\n component.innerHTML = ``;\n window.dispatchEvent(new CustomEvent('dsb-pwa-transient_modal', {detail: {content:component}}));\n }\n break;\n default:\n ITEM.onclick = function(){\n let component = document.createElement(\"dsb-post\");\n component.setDSBClient(_this.dsbClient);\n component._navigationHandler = function(direction){\n return function__navigateItems(direction,i);\n };\n component.setAttribute(`service`, 'post');\n component.setAttribute('post_id', CURRENT_DATA.id);\n component.setAttribute(`settings`, JSON.stringify({'clean_body':'on','pulldown_refresh':'off'}));\n component.innerHTML = ``;\n window.dispatchEvent(new CustomEvent('dsb-pwa-transient_modal', {detail: {content:component}}));\n //window.location.hash = \"/single/post/\"+CURRENT_DATA.type+\"/\"+CURRENT_DATA.id;\n return;\n };\n break;\n }\n\n\n if('author' in CURRENT_DATA)\n {\n if('type' in CURRENT_DATA.author)\n {\n switch(CURRENT_DATA.author.type)\n {\n case \"advert\":\n ITEM.classList.add('author-advert');\n break;\n default:\n break\n }\n }\n }\n\n if(`show-thumbnail` in ITEM_SETTINGS)\n {\n\n let item_image = document.createElement(\"span\");\n item_image.classList.add('thumbnail');\n let attach_to_item = false;\n let image_size = \"medium\";\n let _post_image = this._settings.default_image;\n switch(ITEM_SETTINGS['show-thumbnail'])\n {\n case \"right\":\n ITEM.classList.add(`layout-image-right`);\n break;\n case \"top\":\n ITEM.classList.add(`layout-image-top`);\n image_size = \"medium\";\n if(grid_size && grid_size<5)\n {\n image_size = \"large\";\n }\n break;\n case \"left\":\n ITEM.classList.add(`layout-image-left`);\n break;\n case \"bottom\":\n ITEM.classList.add(`layout-image-bottom`);\n image_size = \"medium\";\n if(grid_size && grid_size<5)\n {\n image_size = \"large\";\n }\n break;\n case \"background\":\n ITEM.classList.add(`layout-image-background`);\n image_size = \"large\";\n attach_to_item=true;\n break;\n default:\n break;\n\n }\n\n if('images' in CURRENT_DATA)\n {\n if(image_size in CURRENT_DATA.images)\n {\n _post_image = CURRENT_DATA.images[image_size];\n }\n }\n\n if(!attach_to_item)\n {\n item_image.setAttribute('data-img', _post_image);\n this._settings.imageObserver.observe(item_image);\n }\n else\n {\n ITEM.setAttribute('data-img', _post_image);\n this._settings.imageObserver.observe(ITEM);\n }\n ITEM.append(item_image);\n\n }\n\n let item_title = document.createElement(\"h2\");\n if('title' in CURRENT_DATA)\n {\n item_title.innerHTML = CURRENT_DATA.title;\n ITEM.append(item_title);\n }\n else\n {\n console.error('Unknown title');\n }\n\n\n if(`show-excerpt` in ITEM_SETTINGS && (ITEM_SETTINGS[`show-excerpt`] == \"true\"))\n {\n if('excerpt' in CURRENT_DATA)\n {\n let item_excerpt = document.createElement(\"p\");\n item_excerpt.innerHTML = CURRENT_DATA.excerpt;\n ITEM.append(item_excerpt);\n }\n }\n\n if('taxonomies' in CURRENT_DATA)\n {\n if('category' in CURRENT_DATA.taxonomies)\n {\n if(`show_all-categories` in ITEM_SETTINGS)\n {\n if('list' in CURRENT_DATA.taxonomies.category)\n {\n let item_metadata = document.createElement(\"ul\");\n for(let ii = 0; ii < CURRENT_DATA.taxonomies.category.list.length; ii++)\n {\n let item_metadata_li = document.createElement(\"li\");\n item_metadata_li.innerHTML = await _this.dsbClient.content.applyFilter(`formatData_lookup`, [ `primary_cat_slug`, CURRENT_DATA.taxonomies.category.list[ii] ] );\n item_metadata.append(item_metadata_li);\n }\n ITEM.append(item_metadata);\n }\n }\n else\n {\n if('primary_id' in CURRENT_DATA.taxonomies.category)\n {\n let item_metadata = document.createElement(\"ul\");\n let item_metadata_li = document.createElement(\"li\");\n let this_tax = await _this.dsbClient.content.applyFilter(`formatData_lookup`, [ `all_cat_obj`, CURRENT_DATA.taxonomies.category.primary_id ]);\n if(typeof this_tax === 'object' && `root_parent` in this_tax)\n {\n this_tax = _this.dsbClient.content.applyFilter(`formatData_lookup`, [ `all_cat_obj`, this_tax.root_parent ]);\n }\n item_metadata_li.innerHTML = this_tax.name;\n item_metadata.append(item_metadata_li);\n ITEM.append(item_metadata);\n if(ITEM.classList.contains(`layout-image-background`))\n {\n item_metadata_li.classList.add(this_tax.slug+'-category-bg-color');\n item_metadata_li.style.padding=\"10px\";\n item_metadata_li.style.lineHeight=\"5px\";\n }\n else\n {\n item_metadata_li.classList.add(this_tax.slug+'-category-font-col');\n }\n\n }\n }\n }\n }\n }\n}\n","// Parts\nvar TEMPLATES = {};\nimport filterHandler from './parts/filter.js';\n\n//Coverflow view\nimport template_coverflow from './parts/template_coverflow.js';\nTEMPLATES.coverflow = template_coverflow;\n\n//List view\nimport template_list from './parts/template_list.js';\nTEMPLATES.list = template_list;\n\nexport default class extends HTMLElement {\n\n static get observedAttributes() {\n return ['settings','query'];\n }\n\n constructor() {\n super();\n console.log('Init DSBList');\n this.modal_id = this._createUUID();\n this._id = this._createUUID();\n this._contentElements={};\n this._contentElements.list=null;\n this._contentElements.loader=null;\n this._contentElements.filter=null;\n this._contentElements.top=null;\n this._contentElements.middle=null;\n this._contentElements.bottom=null;\n this._update_skip = [];\n this._update_running = false;\n\n console.log('this.modal_id='+this.modal_id);\n //window.dispatchEvent(new CustomEvent('dsb-pwa-add_modal', {detail: {id:this.modal_id}}));\n //window.dispatchEvent(new CustomEvent('dsb-pwa-append_tray', {detail: {tray_id: this.modal_id}}));\n }\n\n get service() {\n return this.getAttribute('service');\n }\n\n set service(newValue){\n this.setAttribute('service', newValue);\n }\n\n get view_mode() {\n return this.getAttribute('view_mode');\n }\n\n set view_mode(newValue){\n this.setAttribute('view_mode', newValue);\n }\n\n get settings() {\n if(!this._settings)\n {\n if(typeof this.getAttribute('settings') === 'object' && this.getAttribute('settings') !== null)\n {\n this._settings = this.getAttribute('settings');\n }\n else\n {\n this._settings = JSON.parse(``+this.getAttribute('settings')+``);\n }\n\n if(this._settings == null)\n {\n this._settings = {};\n }\n }\n return this._settings;\n }\n\n set settings(newValue){\n if(typeof newValue === 'object' && newValue !== null)\n {\n this._settings = newValue;\n }\n else\n {\n this.setAttribute('settings', newValue);\n }\n }\n\n get query() {\n return this.getAttribute('query');\n }\n\n set query(newValue){\n this.setAttribute('query', newValue);\n }\n\n get root_path() {\n return this.getAttribute('root_path');\n }\n\n set root_path(newValue){\n this.setAttribute('root_path', newValue);\n }\n\n get title() {\n return this.getAttribute('title');\n }\n\n set title(newValue){\n this.setAttribute('title', newValue);\n }\n\n get type() {\n return this.getAttribute('type');\n }\n\n set type(newValue){\n this.setAttribute('type', newValue);\n }\n\n\n setDSBClient(dsbClient){\n this.dsbClient=dsbClient;\n }\n\n _log(type,source,message,data='')\n {\n let _message = 'dsb-app/Component/DSBList::'+source+'- '+message;\n switch(type)\n {\n case \"debug\":\n console.debug(_message,data);\n break;\n case \"warning\":\n console.warn(_message,data);\n break;\n case \"error\":\n console.error(_message,data);\n break;\n default:\n console.log(_message,data);\n }\n }\n\n _createUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n async _refresh()\n {\n this.is_refresh = true;\n this._contentElements={};\n this._contentElements.list=null;\n this._contentElements.loader=null;\n this._contentElements.filter=null;\n this._contentElements.top=null;\n this._contentElements.middle=null;\n this._contentElements.bottom=null;\n return this._render();\n }\n\n async _update()\n {\n\n let test_mode = false;\n if(!this._update_running)\n {\n this._update_running = true;\n if(test_mode)\n {\n //let _raw_query = this.dsbClient.content.processQuery(this.query,{},'object');\n //this.setAttribute('query',this.dsbClient.content.processQuery(this.query,{'_[limit]':parseInt(_raw_query['_[limit]'])+1}));\n //this.setAttribute('query',this.dsbClient.content.processQuery(this.query,{'type':'post'}));\n //await this._render('update');\n }\n else\n {\n this.dsbClient.user.is_offline(false,true);\n this._log('debug','_update','Checking for updates...');\n await this._render('update');\n }\n this._update_running = false;\n }\n\n }\n\n\n connectedCallback() {\n return this._render();\n }\n\n attributeChangedCallback(name, oldValue, newValue)\n {\n if(`settings` == name && oldValue != null)\n {\n console.log('dsb-list::attributeChangedCallback: '+name,oldValue,newValue);\n this._settings = null;\n return this._render();\n }\n if(`query` == name && oldValue != null)\n {\n let diff = this.dsbClient.content.processQuery(oldValue,newValue,'diff');\n console.debug('dsb-list::attributeChangedCallback: '+name,oldValue,newValue,diff);\n\n // Check for changes\n let mode=null;\n if(('missing' in diff) && Object.keys(diff.missing).length > 0)\n {\n mode='default';\n }\n if(('changed' in diff) && Object.keys(diff.changed).length > 0)\n {\n mode='default';\n if(('_[skip]' in diff.changed) && Object.keys(diff.changed).length == 1)\n {\n mode='append';\n }\n else if(('_[limit]' in diff.changed) && Object.keys(diff.changed).length == 1)\n {\n mode='update';\n }\n\n }\n mode='update';\n return this._render(mode);\n }\n }\n\n async _render(mode=null)\n {\n try\n {\n if(mode!==null)\n {\n this.view_mode=mode;\n }\n else if(this.view_mode == null)\n {\n this.view_mode = 'default';\n }\n\n console.debug('dsb-list::_render view_mode overide='+mode,this.view_mode);\n let _this = this;\n let _raw_query = _this.dsbClient.content.processQuery(this.query,{},'object');\n\n let function__navigateItems = function(direction,current_id){\n\n if(this._contentElements.list instanceof HTMLUListElement)\n {\n let next_li = this._contentElements.list.getElementsByTagName(\"li\")[(current_id+1)];\n if(next_li instanceof HTMLLIElement)\n {\n return next_li.click();\n }\n else\n {\n console.error('function__navigateItems: Not found next LI');\n }\n }\n //_this.setAttribute('query',_this.dsbClient.content.processQuery(_this.query,{'_[skip]':parseInt(_raw_query['_[skip]'])+parseInt(_raw_query['_[limit]'])}));\n\n }\n\n if(this.view_mode=='default')\n {\n if(this._contentElements.list instanceof HTMLElement || this._contentElements.filter instanceof HTMLElement)\n {\n this._contentElements.list = document.createElement(\"div\");\n this._contentElements.list.innerHTML = ``;\n }\n else\n {\n this.innerHTML = ``;\n }\n }\n\n\n let json = await this.dsbClient.content.get(this.service,\"?\"+this.dsbClient.content.processQuery(this.query,{},'process')+'#sw:fresh',true);\n if (json.state)\n {\n // get any injected results\n if(`insert` in this.settings && typeof this.settings.insert === 'object' && this.settings.insert !== null)\n {\n for(let aNewItem in this.settings.insert)\n {\n if(typeof this.settings.insert[aNewItem] === 'object' && this.settings.insert[aNewItem] !== null && 'data' in this.settings.insert[aNewItem])\n {\n if(!Array.isArray(json.data))\n {\n json.data = [];\n }\n if(!json.data.indexOf(aNewItem))\n {\n json.data.push(this.settings.insert[aNewItem].data);\n }\n else\n {\n json.data.splice((parseInt(aNewItem)-1), 0, this.settings.insert[aNewItem].data);\n }\n }\n }\n }\n\n var infinateScrollObserver = false;\n\n // Setup search\n if(`show-search` in this.settings && !(this._contentElements.filter instanceof HTMLFormElement))\n {\n filterHandler(this.settings['show-search'],_raw_query, this);\n }\n\n // Remove loader\n if(this._contentElements.loader instanceof HTMLElement)\n {\n if(infinateScrollObserver instanceof IntersectionObserver)\n {\n infinateScrollObserver.unobserve(this._contentElements.loader);\n }\n this._contentElements.loader.remove();\n this._contentElements.loader=null;\n }\n\n if(!(`template` in this.settings))\n {\n this.settings.template = 'default';\n }\n\n\n if(this.settings.template == 'default')\n {\n this.settings.template = 'list';\n }\n\n if(json.data.length==0)\n {\n if(this.view_mode=='append' || this.view_mode=='update')\n {\n return;\n }\n }\n\n /**\n else\n {\n let noresults_message = `Sorry, there are no results\n

\n Suggestions\n

    \n
  • Make sure that all words are spelled correctly.
  • \n
  • Try different keywords.
  • \n
  • Try more general keywords.
  • \n
\n

\n `;\n\n this._contentElements.list = document.createElement(\"div\");\n this._contentElements.list.innerHTML = noresults_message;\n }\n\n\n */\n //}\n //else\n //{\n // Setup list\n if(this.view_mode=='default' || !(this._contentElements.list instanceof HTMLUListElement))\n {\n this._contentElements.list = document.createElement(\"ul\");\n }\n\n // Setup Top\n if(this.view_mode=='default' || !(this._contentElements.top instanceof HTMLElement))\n {\n this._contentElements.top = document.createElement(\"div\");\n this._contentElements.top.classList.add('top');\n }\n\n // Setup Middle\n if(this.view_mode=='default' || !(this._contentElements.middle instanceof HTMLElement))\n {\n this._contentElements.middle = document.createElement(\"div\");\n this._contentElements.middle.classList.add('middle');\n }\n\n // Setup bottom\n if(this.view_mode=='default' || !(this._contentElements.bottom instanceof HTMLElement))\n {\n this._contentElements.bottom = document.createElement(\"div\");\n this._contentElements.bottom.classList.add('bottom');\n }\n\n // Setup Infinate scroll\n if(`navigation` in this.settings && (`infinate_scroll` == this.settings.navigation) && (('_[limit]' in _raw_query) && json.data.length>=_raw_query['_[limit]']))\n {\n // Create Observer\n var infinateScrollObserver = new IntersectionObserver(function(entries, observer) {\n entries.forEach(function(entry) {\n if (entry.isIntersecting) {\n _this.setAttribute('query',_this.dsbClient.content.processQuery(_this.query,{'_[skip]':parseInt(_raw_query['_[skip]'])+parseInt(_raw_query['_[limit]'])}));\n }\n });\n });\n this._contentElements.loader = document.createElement(\"li\");\n this._contentElements.loader.classList.add('item');\n this._contentElements.loader.innerHTML = \"\";\n }\n\n let default_image = '../images/default-image.svg';\n if(_this.dsbClient.content.app_path)\n {\n default_image = _this.dsbClient.content.app_path+'/images/default-image.svg';\n }\n\n let missing_image = '../images/fwi-logo-grey.svg';\n if(_this.dsbClient.content.app_path)\n {\n missing_image = _this.dsbClient.content.app_path+'/images/fwi-logo-grey.svg';\n }\n\n var functon_imageExists = function(url, callback) {\n var img = new Image();\n img.onload = function() { callback(true,url); };\n img.onerror = function() { callback(false,url); };\n img.src = url;\n }\n var imageObserver = new IntersectionObserver(function(entries, observer) {\n entries.forEach(function(entry) {\n if (entry.isIntersecting) {\n var image = entry.target;\n functon_imageExists(image.dataset.img,function(exists,img){\n if(exists)\n {\n image.setAttribute('style', 'background-image:url('+img+')');\n }\n else\n {\n image.setAttribute('style', 'background-image:url('+missing_image+');background-size: auto;');\n }\n imageObserver.unobserve(image);\n });\n\n }\n });\n });\n\n\n // Setup item handler\n if(this.view_mode=='default')\n {\n // Run init\n if((this.settings.template in TEMPLATES) && `init` in TEMPLATES[this.settings.template])\n {\n await TEMPLATES[this.settings.template].init(_this,{'imageObserver':imageObserver,'default_image':default_image,'missing_image':missing_image});\n }\n\n // Run pre_render\n if((this.settings.template in TEMPLATES) && `pre_render` in TEMPLATES[this.settings.template])\n {\n await TEMPLATES[this.settings.template].pre_render(json.data);\n }\n }\n\n // Set item position\n let list_position = 0;\n if((this.settings.template in TEMPLATES) && `get_list_count` in TEMPLATES[this.settings.template])\n {\n list_position = TEMPLATES[this.settings.template].get_list_count();\n }\n else\n {\n list_position = this._contentElements.list.childNodes.length;\n }\n\n\n if(json.data.length == 0)\n {\n // Run render\n if((this.settings.template in TEMPLATES) && `render` in TEMPLATES[this.settings.template])\n {\n let item = document.createElement(\"li\");\n await TEMPLATES[this.settings.template].render(0,{type:'no-results'},item,{});\n this._contentElements.list.append(item);\n }\n else\n {\n throw 'Missing template '+this.settings.template;\n }\n }\n else\n {\n\n // Itterate through results\n for(let i = 0; i < json.data.length; i++)\n {\n let current_data = json.data[i];\n if(typeof current_data === 'object' && 'type' in current_data)\n {\n let item_settings = {};\n for(let aSetting in this.settings)\n {\n if(aSetting != `item`)\n {\n item_settings[aSetting] = this.settings[aSetting];\n }\n }\n\n if(`item` in this.settings && ( list_position in this.settings.item))\n {\n for(let aSetting in this.settings.item[list_position])\n {\n item_settings[aSetting] = this.settings.item[list_position][aSetting];\n }\n }\n\n // If we're updating and already have this id in _update_skip... skip we already have it.\n let _skipable_id = this.settings.template+'_'+('type' in current_data?current_data.type+'_':'unknowntype')+current_data.id;\n if(this.view_mode=='update' && (('updatable' in item_settings) && item_settings.updatable == 'true'))\n {\n if(this._update_skip.indexOf(_skipable_id) > -1)\n {\n this._log('debug','_render/'+this.settings.template,'Skipping as we already have \"'+_skipable_id+'\" in _update_skip ('+list_position+')',this._update_skip);\n continue;\n }\n }\n\n if(i==0 && list_position>0)\n {\n list_position=list_position+1;\n }\n else\n {\n list_position++;\n }\n\n let item = document.createElement(\"li\");\n let item_title = '';\n\n // Run render\n if((this.settings.template in TEMPLATES) && `render` in TEMPLATES[this.settings.template])\n {\n item.setAttribute('data-uid',_skipable_id);\n this._update_skip.push(_skipable_id);\n await TEMPLATES[this.settings.template].render(list_position,current_data,item,item_settings);\n }\n else\n {\n throw 'Missing template '+this.settings.template;\n }\n\n if((`add_order` in this.settings) && this.settings.add_order == 'prepend')\n {\n this._contentElements.list.prepend(item);\n }\n else\n {\n this._contentElements.list.append(item);\n }\n }\n else\n {\n throw 'Missing type in json.data';\n }\n }\n }\n\n // Add infinate scroll\n if(infinateScrollObserver)\n {\n infinateScrollObserver.observe(this._contentElements.loader);\n this._contentElements.list.append(this._contentElements.loader);\n }\n //}\n\n if(this.view_mode=='default')\n {\n this.innerHTML = '';\n }\n\n if(this.view_mode=='default')\n {\n if(this._contentElements.top instanceof HTMLElement)\n {\n this.append(this._contentElements.top);\n }\n\n if(this._contentElements.filter instanceof HTMLElement)\n {\n this.append(this._contentElements.filter);\n }\n if(this._contentElements.middle instanceof HTMLElement && this._contentElements.list instanceof HTMLElement)\n {\n this._contentElements.middle.append(this._contentElements.list);\n this.append(this._contentElements.middle);\n }\n\n if(this._contentElements.bottom instanceof HTMLElement)\n {\n this.append(this._contentElements.bottom);\n }\n\n // Run post\n if((this.settings.template in TEMPLATES) && `post_render` in TEMPLATES[this.settings.template])\n {\n await TEMPLATES[this.settings.template].post_render();\n }\n }\n }\n else\n {\n throw json.state;\n }\n }\n catch(ex)\n {\n try\n {\n console.error('dsb-list:: Error',ex);\n // Run post\n if((`template` in this.settings) && (this.settings.template in TEMPLATES) && `error` in TEMPLATES[this.settings.template])\n {\n await TEMPLATES[this.settings.template].error(ex);\n }\n else\n {\n let is_offline = await this.dsbClient.user.is_offline();\n if(is_offline)\n {\n if(is_offline == 'maintenance')\n {\n this.innerHTML = `\n
\n
\n

Maintenance work ongoing...

\n

Sorry we are currently performing maintenance please click here to try again or check back later.

\n
\n
`;\n }\n else\n {\n this.innerHTML = `\n
\n
\n

Offline

\n

Sorry, offline version not available.
Please try again later when you have an internet connection :)

\n
\n
`;\n }\n }\n else\n {\n this.innerHTML = `\n
\n
\n

Sorry an error has occured.

\n

Please try again by clicking here or try again later.

\n
\n
`;\n }\n }\n }\n catch(ex)\n {\n console.error('dsb-list:: Error in error handling!',ex);\n this.innerHTML = `\n
\n
\n

Sorry an error has occured.

\n

Please try again by clicking here or try again later.

\n
\n
`;\n }\n return;\n }\n }\n}\n\n\n","export default class extends HTMLElement {\n\n static get observedAttributes() {\n return ['settings'];\n }\n\n constructor() {\n super();\n console.log('Init DSBStepBar');\n this._steps={};\n this.messages=null;\n this._contentElements={};\n this._contentElements.list=null;\n this._contentElements.bar=null;\n this._contentElements.progress=null;\n this._contentElements.progress_header=null;\n }\n\n get settings() {\n if(!this._settings)\n {\n if(typeof this.getAttribute('settings') === 'object' && this.getAttribute('settings') !== null)\n {\n this._settings = this.getAttribute('settings');\n }\n else\n {\n this._settings = JSON.parse(``+this.getAttribute('settings')+``);\n }\n\n if(this._settings == null)\n {\n this._settings = {};\n }\n }\n return this._settings;\n }\n\n set settings(newValue){\n if(typeof newValue === 'object' && newValue !== null)\n {\n this._settings = newValue;\n }\n else\n {\n this.setAttribute('settings', newValue);\n }\n }\n\n attributeChangedCallback(name, oldValue, newValue)\n {\n if(`settings` == name && oldValue != null)\n {\n console.log('dsb-stepbar::attributeChangedCallback: '+name,oldValue,newValue);\n for(let aStep in this._steps)\n {\n if(this._steps[aStep].component instanceof HTMLUListElement)\n {\n delete this._step[aStep].component;\n }\n }\n return this._render();\n }\n }\n\n setHeader(message)\n {\n this._update();\n this.message = message;\n this._refreshHeader();\n }\n\n _refreshHeader()\n {\n if(this.message instanceof Function)\n {\n this.message(this._contentElements.progress_header,this._getStats());\n }\n else\n {\n this._contentElements.progress_header.innerHTML = this.message;\n }\n }\n\n setStep(name,status='default',upsert_mode=true,onclick_function=false)\n {\n if(name in this._steps)\n {\n let status_change=false;\n if(this._steps[name].status!==status)\n {\n status_change=true;\n }\n if(onclick_function && typeof onclick_function === 'function' )\n {\n this._steps[name].component.onclick=onclick_function;\n this._steps[name].component.style.cursor='pointer';\n }\n\n if(status=='active')\n {\n status_change=false;\n for(let _step in this._steps)\n {\n if(this._steps[_step].component.classList.contains('active'))\n {\n this._steps[_step].component.classList.remove('active');\n }\n }\n this._steps[name].component.classList.add('active');\n this._steps[name].component.style.height=(parseInt(this._steps[name].component.style.width)*2);\n this._steps[name].component.style.width=(parseInt(this._steps[name].component.style.width)*2);\n /**\n if(typeof this.settings === 'object' && this.settings !== null && 'active_color' in this.settings)\n {\n this._steps[aStep].component.style.borderColor=this.settings.active_color;\n }\n */\n return;\n }\n else\n {\n this._steps[name].status=status;\n this._refresh_step(name,status_change);\n }\n }\n else if(upsert_mode)\n {\n this._steps[name]={'name':name,'status':status};\n this._refresh_step(name,true);\n }\n }\n\n _refresh_step(aStep,refresh_progress=false)\n {\n if(aStep in this._steps)\n {\n if(!(`progress_mode` in this.settings))\n {\n this.settings.progress_mode = 'percentage';\n }\n\n if(!(`size` in this.settings))\n {\n this.settings.size = '10px';\n }\n\n\n if(!('component' in this._steps[aStep]) || !(this._steps[aStep].component instanceof HTMLLIElement))\n {\n this._steps[aStep].component = document.createElement(\"li\");\n this._update(this._steps[aStep].component);\n }\n\n // Run settings\n\n if(this.settings !== null && 'size' in this.settings)\n {\n this._steps[aStep].component.style.height=this.settings.size;\n this._steps[aStep].component.style.width=this.settings.size;\n if(this._contentElements.progress instanceof HTMLElement)\n {\n let width_size = (parseInt(this.settings.size)*0.1);\n this._contentElements.progress.style.height=(width_size>1?width_size:1);\n this._contentElements.progress_background.style.height=(width_size>1?width_size:1);\n }\n }\n\n\n // Run label\n if('label' in this._steps[aStep])\n {\n this._steps[aStep].component.setAttribute('alt',this._steps[aStep].label);\n }\n\n if('name' in this._steps[aStep])\n {\n this._steps[aStep].component.setAttribute('alt',this._steps[aStep].name);\n }\n if('status' in this._steps[aStep])\n {\n if('complete' == this._steps[aStep].status)\n {\n this._steps[aStep].component.classList.add('complete');\n /**\n if(typeof this.settings === 'object' && this.settings !== null && 'complete_color' in this.settings)\n {\n this._steps[aStep].component.style.borderColor=this.settings.complete_color;\n this._steps[aStep].component.style.background=this.settings.complete_color;\n if(this._contentElements.progress instanceof HTMLElement)\n {\n this._contentElements.progress.style.background=this.settings.complete_color;\n }\n }\n */\n }\n\n if(refresh_progress && (this._contentElements.progress instanceof HTMLElement))\n {\n let stats = this._getStats();\n if(this.settings !== null && 'progress_mode' in this.settings && `percentage` == this.settings.progress_mode)\n {\n this._contentElements.progress.style.width=((stats.count/stats.total)*100)+'%';\n }\n else if(this.settings !== null && 'progress_mode' in this.settings && `stage` == this.settings.progress_mode)\n {\n this._contentElements.progress.style.width=((100/(stats.total-1))*stats.count)+'%';\n }\n\n if(parseInt(this._contentElements.progress.style.width.replace('%','')) > 100)\n {\n this._contentElements.progress.style.width = '100%';\n }\n\n }\n this._refreshHeader();\n }\n return this._steps[aStep].component;\n }\n else\n {\n console.error('DSBStepBar:: Missing step '+aStep);\n }\n }\n\n _getStats()\n {\n let _count =0;\n let _total = 0;\n for(let _step in this._steps)\n {\n _total++;\n if(('status' in this._steps[_step]))\n {\n if('complete' == this._steps[_step].status)\n {\n _count++;\n }\n }\n }\n return {'count':_count,'total':_total};\n }\n\n _update(item=null)\n {\n if(!(this._contentElements.progress instanceof HTMLElement))\n {\n this.innerHTML = '';\n\n this._contentElements.progress_header = document.createElement(\"span\");\n this._contentElements.progress_header.classList.add('progress-header');\n this.append(this._contentElements.progress_header)\n\n this._contentElements.bar = document.createElement(\"div\");\n this._contentElements.bar.classList.add('bar');\n\n this._contentElements.progress_background = document.createElement(\"span\");\n this._contentElements.progress_background.classList.add('progress-background');\n this._contentElements.bar.append(this._contentElements.progress_background);\n this._contentElements.progress = document.createElement(\"span\");\n this._contentElements.progress.classList.add('progress');\n this._contentElements.bar.append(this._contentElements.progress);\n\n this.append(this._contentElements.bar);\n }\n\n if(!(this._contentElements.list instanceof HTMLUListElement))\n {\n this._contentElements.list = document.createElement(\"ul\");\n this._contentElements.bar.append(this._contentElements.list);\n }\n\n if(item instanceof HTMLLIElement)\n {\n if(typeof this.settings === 'object' && this.settings !== null && 'add_order' in this.settings && ( this.settings.add_order=='prepend'))\n {\n this._contentElements.list.prepend(item);\n }\n else\n {\n this._contentElements.list.append(item);\n }\n }\n return;\n }\n\n connectedCallback() {\n this._render();\n }\n\n _render()\n {\n //let copy = this.innerHTML;\n this._update();\n\n for(let aStep in this._steps)\n {\n this._refresh_step(aStep,true);\n }\n }\n}\n\n","export default class extends HTMLElement {\n\n static get observedAttributes() {\n return ['settings'];\n }\n\n constructor() {\n super();\n console.log('Init DSBCatchup');\n this.modal_id = this._createUUID();\n console.log('this.modal_id='+this.modal_id);\n //window.dispatchEvent(new CustomEvent('dsb-pwa-add_modal', {detail: {id:this.modal_id}}));\n //window.dispatchEvent(new CustomEvent('dsb-pwa-append_tray', {detail: {tray_id: this.modal_id}}));\n }\n\n get service() {\n return this.getAttribute('service');\n }\n\n set service(newValue){\n this.setAttribute('service', newValue);\n }\n\n get settings() {\n if(!this._settings)\n {\n if(typeof this.getAttribute('settings') === 'object' && this.getAttribute('settings') !== null)\n {\n this._settings = this.getAttribute('settings');\n }\n else\n {\n this._settings = JSON.parse(``+this.getAttribute('settings')+``);\n }\n\n if(this._settings == null)\n {\n this._settings = {};\n }\n }\n return this._settings;\n }\n\n set settings(newValue){\n if(typeof newValue === 'object' && newValue !== null)\n {\n this._settings = newValue;\n }\n else\n {\n this.setAttribute('settings', newValue);\n }\n }\n\n get query() {\n return this.getAttribute('query');\n }\n\n set query(newValue){\n this.setAttribute('query', newValue);\n }\n\n get root_path() {\n return this.getAttribute('root_path');\n }\n\n set root_path(newValue){\n this.setAttribute('root_path', newValue);\n }\n\n get title() {\n return this.getAttribute('title');\n }\n\n set title(newValue){\n this.setAttribute('title', newValue);\n }\n\n get type() {\n return this.getAttribute('type');\n }\n\n set type(newValue){\n this.setAttribute('type', newValue);\n }\n\n nextPage()\n {\n console.error('Next page action fired...');\n }\n\n setDSBClient(dsbClient){\n this.dsbClient=dsbClient;\n }\n\n _createUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n\n connectedCallback() {\n return this._render();\n }\n\n attributeChangedCallback(name, oldValue, newValue)\n {\n if(`settings` == name && oldValue != null)\n {\n console.log('dsb-list::attributeChangedCallback: '+name,oldValue,newValue);\n this._settings = null;\n return this._render();\n }\n }\n\n async _render()\n {\n try\n {\n let _this = this;\n let json = await this.dsbClient.content.get(this.service,\"?\"+this.query);\n if (json.state) {\n // Some API data found, but *could* be 404 - 0 results!\n let html,template,format = ``;\n\n //window.dispatchEvent(new CustomEvent('dsb-pwa-base_update', {detail: {appname: (this.title!=null && this.title.length>0?this.title:'List'), title: ''}}));\n\n this.classList.add('list-view');\n let list = document.createElement(\"ul\");\n let default_image = '../images/default-image.svg';\n if(_this.dsbClient.content.app_path)\n {\n default_image = _this.dsbClient.content.app_path+'/images/default-image.svg';\n }\n\n let missing_image = '../images/fwi-logo-grey.svg';\n if(_this.dsbClient.content.app_path)\n {\n missing_image = _this.dsbClient.content.app_path+'/images/fwi-logo-grey.svg';\n }\n\n var functon_imageExists = function(url, callback) {\n var img = new Image();\n img.onload = function() { callback(true,url); };\n img.onerror = function() { callback(false,url); };\n img.src = url;\n }\n var imageObserver = new IntersectionObserver(function(entries, observer) {\n entries.forEach(function(entry) {\n if (entry.isIntersecting) {\n var image = entry.target;\n functon_imageExists(image.dataset.img,function(exists,img){\n if(exists)\n {\n image.setAttribute('style', 'background-image:url('+img+')');\n }\n else\n {\n image.setAttribute('style', 'background-image:url('+missing_image+');background-size: auto;');\n }\n imageObserver.unobserve(image);\n });\n\n }\n });\n });\n\n\n for(let i = 0; i < json.data.length; i++)\n {\n let current_data = json.data[i];\n if(typeof current_data === 'object' && 'type' in current_data)\n {\n let item_settings = {};\n for(let aSetting in this.settings)\n {\n if(aSetting != `item`)\n {\n item_settings[aSetting] = this.settings[aSetting];\n }\n }\n\n if(`item` in this.settings && ( i in this.settings.item))\n {\n for(let aSetting in this.settings.item[i])\n {\n item_settings[aSetting] = this.settings.item[i][aSetting];\n }\n }\n\n\n switch(current_data.type)\n {\n default:\n let item = document.createElement(\"li\");\n item.classList.add('item');\n let grid_size = 0;\n\n if(`layout-grid` in item_settings)\n {\n grid_size = item_settings[`layout-grid`];\n switch(grid_size)\n {\n case \"2\":\n item.classList.add('layout-grid-2');\n break;\n case \"3\":\n item.classList.add('layout-grid-3');\n break;\n case \"4\":\n item.classList.add('layout-grid-4');\n break;\n case \"5\":\n item.classList.add('layout-grid-5');\n break;\n case \"6\":\n item.classList.add('layout-grid-6');\n break;\n\n default:\n break;\n }\n\n }\n\n switch(current_data.type)\n {\n case \"collection\":\n item.onclick = function(){\n let component = document.createElement(\"dsb-reader\");\n component.setDSBClient(_this.dsbClient);\n component.setAttribute(`service`, `post`);\n component.setAttribute('collection_id', current_data.id);\n component.innerHTML = ``;\n //window.dispatchEvent(new CustomEvent('dsb-pwa-trigger_modal', {detail: {id:_this.modal_id,append:component}}));\n window.dispatchEvent(new CustomEvent('dsb-pwa-transient_modal', {detail: {content:component}}));\n }\n break;\n default:\n item.onclick = function(){\n let component = document.createElement(\"dsb-post\");\n component.setDSBClient(_this.dsbClient);\n component.setAttribute(`service`, 'post');\n component.setAttribute('post_id', current_data.id);\n component.innerHTML = ``;\n //window.dispatchEvent(new CustomEvent('dsb-pwa-trigger_modal', {detail: {id:_this.modal_id,append:component}}));\n window.dispatchEvent(new CustomEvent('dsb-pwa-transient_modal', {detail: {content:component}}));\n //window.location.hash = \"/single/post/\"+current_data.type+\"/\"+current_data.id;\n return;\n };\n break;\n }\n\n\n if('author' in current_data)\n {\n if('type' in current_data.author)\n {\n switch(current_data.author.type)\n {\n case \"advert\":\n item.classList.add('author-advert');\n break;\n default:\n break\n }\n }\n }\n\n if(`show-thumbnail` in item_settings)\n {\n\n let item_image = document.createElement(\"span\");\n item_image.classList.add('thumbnail');\n let attach_to_item = false;\n let image_size = \"medium\";\n let _post_image = default_image;\n switch(item_settings['show-thumbnail'])\n {\n case \"right\":\n item.classList.add(`layout-image-right`);\n break;\n case \"top\":\n item.classList.add(`layout-image-top`);\n image_size = \"medium\";\n if(grid_size && grid_size<5)\n {\n image_size = \"large\";\n }\n break;\n case \"left\":\n item.classList.add(`layout-image-left`);\n break;\n case \"bottom\":\n item.classList.add(`layout-image-bottom`);\n image_size = \"medium\";\n if(grid_size && grid_size<5)\n {\n image_size = \"large\";\n }\n break;\n case \"background\":\n item.classList.add(`layout-image-background`);\n image_size = \"large\";\n attach_to_item=true;\n break;\n default:\n break;\n\n }\n\n if('images' in current_data)\n {\n if(image_size in current_data.images)\n {\n _post_image = current_data.images[image_size];\n }\n }\n\n if(!attach_to_item)\n {\n item_image.setAttribute('data-img', _post_image);\n imageObserver.observe(item_image);\n }\n else\n {\n item.setAttribute('data-img', _post_image);\n imageObserver.observe(item);\n }\n item.append(item_image);\n\n }\n\n let item_title = document.createElement(\"h2\");\n if('title' in current_data)\n {\n item_title.innerHTML = current_data.title;\n item.append(item_title);\n }\n else\n {\n console.error('Unknown title');\n }\n\n\n if(`show-excerpt` in item_settings && (item_settings[`show-excerpt`] == \"true\"))\n {\n if('excerpt' in current_data)\n {\n let item_excerpt = document.createElement(\"p\");\n item_excerpt.innerHTML = current_data.excerpt;\n item.append(item_excerpt);\n }\n }\n\n if('taxonomies' in current_data)\n {\n if('category' in current_data.taxonomies)\n {\n if(`show_all-categories` in item_settings)\n {\n if('list' in current_data.taxonomies.category)\n {\n let item_metadata = document.createElement(\"ul\");\n for(let ii = 0; ii < current_data.taxonomies.category.list.length; ii++)\n {\n let item_metadata_li = document.createElement(\"li\");\n item_metadata_li.innerHTML = await this.dsbClient.content.applyFilter(`formatData_lookup`, [ `primary_cat_slug`, current_data.taxonomies.category.list[ii] ] );\n item_metadata.append(item_metadata_li);\n }\n item.append(item_metadata);\n }\n }\n else\n {\n if('primary_id' in current_data.taxonomies.category)\n {\n let item_metadata = document.createElement(\"ul\");\n let item_metadata_li = document.createElement(\"li\");\n let this_tax = await this.dsbClient.content.applyFilter(`formatData_lookup`, [ `all_cat_obj`, current_data.taxonomies.category.primary_id ]);\n if(typeof this_tax === 'object' && `root_parent` in this_tax)\n {\n this_tax = this.dsbClient.content.applyFilter(`formatData_lookup`, [ `all_cat_obj`, this_tax.root_parent ]);\n }\n item_metadata_li.innerHTML = this_tax.name;\n item_metadata.append(item_metadata_li);\n item.append(item_metadata);\n item_metadata.classList.add(this_tax.slug+'-category-font-col');\n }\n }\n }\n }\n\n list.append(item);\n\n\n /**\n //div class=\"\" style=\"cursor:pointer;\" onclick=\"pwa.route(this);\" data-service=\"`+this.service+`\" data-id=\"{{id}}\" data-type=\"{{type}}\">\n template = `{{#data}}\n
\n
\n
\n
\n
\n
\n
\n {{title}}\n

{{extract}}

\n
\n
\n
\n
\n {{/data}}`;\n this.innerHTML = this.dsbClient.content.format(json.data, JSON.parse(`{\"x\":{\"fields\":[{\"key\":\"id\",\"label\":\"id\"},{\"key\":\"title\",\"label\":\"title\"},{\"key\":\"type\",\"label\":\"type\"},{\"key\":\"url\",\"label\":\"url\"},{\"key\":\"images.medium\",\"label\":\"image\"}]},\"y\":{\"show\":false},\"caption\":\"\",\"sort\":{\"rows\":{\"column\":\"\",\"order\":\"asc\",\"type\":\"string\"}}}`) , `mustache`, template);\n return;\n */\n }\n }\n else\n {\n throw 'Missing type in json.data';\n }\n }\n this.innerHTML = '';\n if(`infinate_scroll` in this.settings)\n {\n var scrollObserver = new IntersectionObserver(function(entries, observer) {\n entries.forEach(function(entry) {\n if (entry.isIntersecting) {\n console.error('Ok end of page');\n }\n });\n });\n let item_loader = document.createElement(\"li\");\n item_loader.classList.add('item');\n item_loader.innerHTML = \"\";\n scrollObserver.observe(item_loader);\n list.append(item_loader);\n }\n this.append(list);\n }\n else\n {\n throw json.state;\n }\n }\n catch(ex)\n {\n console.error('dsb-list:: Error',ex);\n this.innerHTML = `\n
\n
\n

Sorry an error has occured.

\n

Please try again by clicking here or try again later.

\n
\n
`;\n return;\n }\n }\n}\n\n\n","export default class extends HTMLElement {\n constructor() {\n super();\n console.log('Init DSBReader');\n this.path = [];\n }\n\n get service() {\n return this.getAttribute('service');\n }\n\n set service(newValue){\n this.setAttribute('service', newValue);\n }\n\n get collection_id() {\n return this.getAttribute('collection_id');\n }\n\n set collection_id(newValue){\n\n if(!Array.isArray(newValue))\n {\n newValue = newValue.split(',');\n }\n let collection_id = 0;\n for (let i = 0; i < newValue.length; i++) {\n if(i == 0)\n {\n collection_id = newValue[i];\n }\n else\n {\n if(newValue[i])\n {\n this.path.push(newValue[i]);\n }\n }\n }\n this.setAttribute('collection_id', collection_id);\n }\n\n get type() {\n return this.getAttribute('type');\n }\n\n set type(newValue){\n this.setAttribute('type', newValue);\n }\n\n async getCPDSchemes()\n {\n let _json = await this.dsbClient.content.get(this.service,\"?type[in][]=cpd_scheme\");\n this.cpd_schemes = {};\n if(_json.state)\n {\n let data = {};\n let _cpd_schemes = _json.data;\n if(_cpd_schemes.length > 0)\n {\n for(var schemes in _cpd_schemes)\n {\n this.cpd_schemes[_cpd_schemes[schemes].id] =_cpd_schemes[schemes];\n }\n }\n }\n else\n {\n throw \"No data found!\";\n }\n }\n\n\n setDSBClient(dsbClient){\n this.dsbClient=dsbClient;\n }\n\n reset()\n {\n if(this.data)\n {\n delete this.data;\n }\n }\n\n setData(_data)\n {\n let data = {};\n this.data = {};\n if(_data[0])\n {\n data = _data[0];\n }\n\n if('document' in data)\n {\n if('sections' in data.document)\n {\n this.data.sections = data.document.sections;\n }\n else if('parts' in data.document)\n {\n this.data.sections = data.document.parts;\n }\n\n if('metadata' in data.document)\n {\n if('cpd_points' in data.document.metadata)\n {\n this.data.schemes = data.document.metadata.cpd_points;\n }\n }\n\n if('scheme' in data.document)\n {\n this.data.schemes = data.document.scheme;\n }\n\n if('author' in data.document)\n {\n this.data.author = data.document.author;\n\n if('type' in this.data.author)\n {\n if(this.data.author.type == 'advert')\n {\n this.data.advertiser_logo = this.dsbClient.content.applyFilter(`formatData_lookup`, [ `author_advertiser_logo`, this.data.author.id ] );\n }\n }\n }\n\n this.data.content = {};\n\n if('id' in data.document)\n {\n this.data.content.id = data.document.id;\n }\n if('title' in data.document)\n {\n this.data.content.title = data.document.title;\n }\n if('images' in data.document)\n {\n if('large-card' in data.document.images)\n {\n this.data.content.image = data.document.images['large-card'];\n }\n }\n if('content' in data.document)\n {\n if('rendered' in data.document.content)\n {\n this.data.content.body = data.document.content.rendered;\n }\n }\n if('post_widgets' in data.document)\n {\n this.data.content.post_widgets = data.document.post_widgets;\n }\n\n this.data.taxonomies = {};\n\n if('taxonomies' in data.document)\n {\n this.data.taxonomies = data.document.taxonomies;\n }\n }\n }\n\n async _getUserDataByStatus(status,field=false, all=true)\n {\n let current_user_data = await this.dsbClient.user.get('cpd', '?type=collection&link_type='+this.service+'&status='+status+'&name[sort]=desc'+(all==false?'&_[limit]=1':''),(all==false?true:false));\n\n if(typeof current_user_data === 'object' && current_user_data !== null)\n {\n if(field)\n {\n if(field in current_user_data)\n {\n return current_user_data[field];\n }\n }\n else\n {\n return current_user_data;\n }\n }\n return false;\n }\n\n async _getUserData(path, field=false, all=false)\n {\n let current_user_data = await this.dsbClient.user.get('cpd', '?type=collection&link_type='+this.service+'&link_value='+path+'&iteration[sort]=desc'+(all==false?'&_[limit]=1':''),(all==false?true:false));\n\n if(typeof current_user_data === 'object' && current_user_data !== null)\n {\n if(field)\n {\n if(field in current_user_data)\n {\n return current_user_data[field];\n }\n }\n else\n {\n return current_user_data;\n }\n }\n return false;\n }\n\n async _getUserDataPointsHistory(path)\n {\n let current_user_data = await this._getUserData(path,false,true);\n if(typeof current_user_data === 'object' && current_user_data !== null)\n {\n if(!Array.isArray(current_user_data))\n {\n let _current_user_data = [];\n _current_user_data.push(current_user_data);\n current_user_data = _current_user_data;\n }\n\n let return_data = {};\n\n for(let i = 0; i
\n `;\n panel.classList.toggle('show');\n if(!(panel.classList.contains('show')))\n {\n panel.innerHTML = ``;\n }\n\n try\n {\n let userdata = await _this._getUserDataByStatus('active');\n if(typeof userdata === 'object' && userdata !== null)\n {\n // Task Panel\n var nav_task_panel = document.createElement(\"dsb-tasks\");\n nav_task_panel.init();\n nav_task_panel.setDSBClient(_this.dsbClient);\n nav_task_panel.setAttribute('data-target_type','window');\n nav_task_panel.setAttribute('class','active_collection');\n nav_task_panel.header = \"Active collections\";\n\n let hash = location.hash;\n if(hash.indexOf(\"#/\") > -1)\n {\n hash = hash.substring((hash.indexOf(\"#/\")+2),hash.length);\n }\n hash = hash.split(\"/\");\n let current_id = hash.pop();\n hash = hash.join('/');\n\n for(let active_collection in userdata)\n {\n if('name' in userdata[active_collection])\n {\n var task = {};\n task.name = userdata[active_collection].name;\n task.task = true;\n task.type = 'task_notick';\n task.modal_mode = false;\n\n if(current_id == userdata[active_collection].link_value)\n {\n task.active = true;\n }\n task.uid = 'active_collection_'+userdata[active_collection].id;\n task.hash_url = hash + '/'+userdata[active_collection].link_value;\n task.progress = 0;\n if('progress' in userdata[active_collection])\n {\n let current_user_progress_total = 0;\n let current_user_progress_complete = 0;\n for(let part in userdata[active_collection].progress)\n {\n current_user_progress_total++;\n if(userdata[active_collection].progress[part])\n {\n current_user_progress_complete++;\n }\n }\n\n if(current_user_progress_total != 0)\n {\n task.progress = Math.floor((current_user_progress_complete/current_user_progress_total)*100);\n }\n\n if(task.progress == 100)\n {\n task.progress = 99;\n }\n }\n\n if(('update_date' in userdata[active_collection]) && userdata[active_collection].update_date!=null)\n {\n task.last_update = userdata[active_collection].update_date;\n }\n else if(('created_date' in userdata[active_collection]) && userdata[active_collection].created_date!=null)\n {\n task.last_update = userdata[active_collection].created_date;\n }\n\n nav_task_panel.addTask(task);\n }\n }\n panel.innerHTML = ``;\n nav_task_panel.addHook('on_render_complete',function(){\n nav_task_panel.refreshActive();\n });\n panel.append(nav_task_panel);\n }\n }\n catch(ex)\n {\n console.error(ex);\n panel.innerHTML = `\n
\n
\n

Sorry an error has occured.

\n

Please try again later.

\n
\n
`;\n }\n\n\n },icon: 'icon-view_list',\n init_append:resume_aside,\n overlay:true\n }}));\n\n try\n {\n\n if (typeof this.data == 'undefined')\n {\n let _json = await this.dsbClient.content.get(this.service,this.collection_id);\n if(_json.state)\n {\n await this.setData(_json.data);\n }\n else\n {\n throw \"No data found!\";\n }\n }\n\n var workspaces_modal_panel = document.createElement(\"dsb-workspace\");\n workspaces_modal_panel.init();\n workspaces_modal_panel.setDSBClient(this.dsbClient);\n\n if('advertiser_logo' in this.data)\n {\n if(this.data.advertiser_logo.length > 0)\n {\n this.classList.add('advertiser');\n this.classList.add('advertiser-category-col');\n workspaces_modal_panel.classList.add('advertiser');\n workspaces_modal_panel.classList.add('advertiser-category-col');\n }\n }\n else if('taxonomies' in this.data)\n {\n if('category' in this.data.taxonomies)\n {\n if('primary_id' in this.data.taxonomies.category)\n {\n this.data.primary_cat = this.dsbClient.content.applyFilter(`formatData_lookup`, [ `primary_cat_slug`, this.data.taxonomies.category.primary_id ] );\n this.classList.add(this.data.primary_cat);\n this.classList.add(this.data.primary_cat+'-category-col');\n workspaces_modal_panel.classList.add(this.data.primary_cat);\n workspaces_modal_panel.classList.add(this.data.primary_cat+'-category-col');\n }\n }\n }\n\n var aside_panel = document.createElement(\"aside\");\n var nav_panel = document.createElement(\"nav\");\n\n // Workspace panel\n var workspaces_panel = document.createElement(\"dsb-workspace\");\n workspaces_panel.init();\n workspaces_panel.setDSBClient(this.dsbClient);\n\n // Task Panel\n var nav_task_panel = document.createElement(\"dsb-tasks\");\n nav_task_panel.init();\n nav_task_panel.setDSBClient(this.dsbClient);\n\n\n // Get user progress\n let current_user_progress = {};\n let current_user_progress_complete = 0;\n\n let function__refresh_current_user_progress = async function(){\n current_user_progress = await _this._getUserData(_this.data.content.id, 'progress');\n current_user_progress_complete = 0;\n if(typeof current_user_progress === 'object' && current_user_progress !== null)\n {\n let current_user_progress_total = 0;\n for(let asection in current_user_progress)\n {\n current_user_progress_total++;\n if(current_user_progress[asection])\n {\n current_user_progress_complete++;\n }\n }\n if(current_user_progress_total != 0)\n {\n current_user_progress_complete = Math.floor((current_user_progress_complete/current_user_progress_total)*100);\n }\n }\n }\n\n await function__refresh_current_user_progress();\n\n let current_user_data_points_history = await this._getUserDataPointsHistory(_this.data.content.id);\n console.info('dsb-reader: data_points_history',current_user_data_points_history);\n\n let current_user_data_scheme_membership_ids = await this._getUserSchemeMembershipIds();\n console.info('dsb-reader: scheme_member_ids',current_user_data_scheme_membership_ids);\n\n console.info('dsb-reader: schemes',this.data.schemes);\n\n\n // Get schemes\n var current_schemes = {};\n if('schemes' in this.data)\n {\n await this.getCPDSchemes();\n for(let i = 0; i 0)\n {\n current_schemes[this_scheme_id].pattern=lookup_Scheme.settings.codevalidationpattern;\n }\n if('codevalidationmessage' in lookup_Scheme.settings && lookup_Scheme.settings.codevalidationmessage.length > 0)\n {\n current_schemes[this_scheme_id].pattern_message=lookup_Scheme.settings.codevalidationmessage;\n }\n if('color' in lookup_Scheme.settings && lookup_Scheme.settings.color.length > 0)\n {\n current_schemes[this_scheme_id].color=lookup_Scheme.settings.color;\n }\n if('color_text' in lookup_Scheme.settings && lookup_Scheme.settings.color_text.length > 0)\n {\n current_schemes[this_scheme_id].color_text=lookup_Scheme.settings.color_text;\n }\n }\n }\n else\n {\n current_schemes[this_scheme_id].title=this.dsbClient.content.applyFilter(`formatData_lookup`, [ `cpd_scheme_name`, this_scheme_id ] );\n }\n\n current_schemes[this_scheme_id].completed = false;\n\n if( 'points' in this.data.schemes[i])\n {\n current_schemes[this_scheme_id].points=this.data.schemes[i].points;\n }\n else\n {\n current_schemes[this_scheme_id].points=0;\n }\n\n if( 'codes' in this.data.schemes[i])\n {\n current_schemes[this_scheme_id].codes=this.data.schemes[i].codes;\n if(this_scheme_id in current_user_data_points_history)\n {\n if('codes' in current_user_data_points_history[this_scheme_id])\n {\n for(let i = 0; i < current_user_data_points_history[this_scheme_id].codes.length; i++)\n {\n for(let ii = 0; ii < current_schemes[this_scheme_id].codes.length; ii++)\n {\n if(current_schemes[this_scheme_id].codes[ii].indexOf(current_user_data_points_history[this_scheme_id].codes[i]) != -1)\n {\n current_schemes[this_scheme_id].completed = true;\n //i = current_user_data_points_history[this_scheme_id].codes.length;\n break;\n }\n }\n }\n }\n }\n }\n else\n {\n current_schemes[this_scheme_id].codes=[];\n }\n }\n }\n }\n\n console.info('dsb-reader: current_schemes',current_schemes);\n\n var hook__route_task_click = async function(target, task)\n {\n target.reset();\n let content = document.createElement(\"dsb-post\");\n content.setDSBClient(target.dsbClient);\n content.setAttribute(`settings`, JSON.stringify({'clean_body':'on','pulldown_refresh':'off'}));\n\n\n if( `post_data` in task)\n {\n content.setPostData(task.post_data);\n }\n else\n {\n content.setAttribute('post_id', task.target_id);\n }\n content.setAttribute('service', task.target);\n\n let tabs = {};\n\n if( `tabs` in task)\n {\n for(let i = 0; i < task.tabs.length; i++)\n {\n tabs[task.tabs[i].name]={'name':task.tabs[i].name,'content':task.tabs[i].content, 'status': false};\n }\n }\n\n var footer = {};\n\n if('back_id' in task)\n {\n let back_button = document.createElement(\"button\");\n back_button.setAttribute('task-id',task.back_id);\n back_button.setAttribute('class','grey');\n back_button.innerHTML = \"Back\";\n back_button.setAttribute('data-open_task',false);\n back_button.setAttribute('data-open_task_uid',task.uid);\n if('type' in task)\n {\n if(task.type == 'read')\n {\n back_button.setAttribute('data-open_task',task.task_id);\n back_button.innerHTML = \"Back (Mark as unread)\";\n }\n }\n back_button.onclick = async function(){\n if(!_this.dsbClient.user.is_offline())\n {\n let open_task = this.getAttribute('data-open_task');\n let open_task_uid = this.getAttribute('data-open_task_uid');\n if(open_task != 'false' && open_task_uid)\n {\n let cpd = await _this._getUserData(_this.data.content.id);\n if(cpd)\n {\n if(typeof cpd.data === 'object' && cpd.data !== null)\n {\n // Nice :)\n }\n else\n {\n cpd.data = {};\n }\n cpd.type = 'collection';\n cpd.link_type = _this.service;\n cpd.link_value = _this.data.content.id;\n cpd.name = _this.data.content.title;\n cpd.data['part_'+open_task_uid]=false;\n let returned = await _this.dsbClient.user.post('cpd', cpd);\n if('result' in returned)\n {\n if(returned.result)\n {\n nav_task_panel.setDone(open_task, false);\n }\n }\n }\n }\n }\n\n document.getElementById(this.getAttribute('task-id')).dispatchEvent(new MouseEvent(\"click\", {\n \"view\": window,\n \"bubbles\": true,\n \"cancelable\": false\n }));\n };\n footer.back = back_button;\n }\n\n if('next_id' in task)\n {\n let next_button = document.createElement(\"button\");\n next_button.setAttribute('task-id',task.next_id);\n next_button.setAttribute('data-complete_task',false);\n next_button.setAttribute('data-complete_task_uid',task.uid);\n if('type' in task)\n {\n if(task.type == 'read')\n {\n next_button.setAttribute('data-complete_task',task.task_id);\n }\n }\n next_button.setAttribute('name','next');\n next_button.onclick = async function(){\n if(!_this.dsbClient.user.is_offline())\n {\n let complete_task = this.getAttribute('data-complete_task');\n let complete_task_uid = this.getAttribute('data-complete_task_uid');\n if(complete_task != 'false' && complete_task_uid)\n {\n let cpd = await _this._getUserData(_this.data.content.id);\n if(cpd)\n {\n if(typeof cpd.data === 'object' && cpd.data !== null)\n {\n // Nice :)\n }\n else\n {\n cpd.data = {};\n }\n cpd.type = 'collection';\n cpd.link_type = _this.service;\n cpd.link_value = _this.data.content.id;\n cpd.name = _this.data.content.title;\n cpd.data['part_'+complete_task_uid]=true;\n let returned = await _this.dsbClient.user.post('cpd', cpd);\n if('result' in returned)\n {\n if(returned.result)\n {\n nav_task_panel.setDone(complete_task);\n }\n }\n }\n }\n }\n document.getElementById(this.getAttribute('task-id')).dispatchEvent(new MouseEvent(\"click\", {\n \"view\": window,\n \"bubbles\": true,\n \"cancelable\": false\n }));\n };\n if('back_id' in task)\n {\n next_button.innerHTML = \"Next\";\n if(task.type == 'read')\n {\n next_button.innerHTML = \"Next (Mark as read)\";\n }\n footer.next = next_button;\n }\n else\n {\n next_button.innerHTML = \"Start\";\n await function__refresh_current_user_progress();\n\n //History Tab\n let current_user_data_points_history = await _this._getUserData(_this.data.content.id,false,true);\n if(current_user_data_points_history)\n {\n let history_panel = document.createElement(\"section\");\n history_panel.setAttribute(`class`, `message`);\n let history_panel_ol = document.createElement(\"ol\");\n for(let i = 0; i < current_user_data_points_history.length; i++)\n {\n if(current_user_data_points_history[i].status == 'complete')\n {\n let _li = document.createElement(\"li\");\n _li.setAttribute(`class`,`icon-job-done-outline`);\n let entry = '';\n if('points' in current_user_data_points_history[i])\n {\n for(let mySchemePoint in current_user_data_points_history[i].points)\n {\n if(mySchemePoint in current_schemes)\n {\n entry+=current_user_data_points_history[i].points[mySchemePoint].points+\" points from \"+current_schemes[mySchemePoint].title+\" (\"+current_user_data_points_history[i].points[mySchemePoint].code+\") using the Member ID \"+current_user_data_points_history[i].points[mySchemePoint].member_id;\n }\n }\n }\n _li.innerHTML = `Completed `+_this.dsbClient.user.format_date(current_user_data_points_history[i].update_date)+'
'+entry;\n history_panel_ol.append(_li);\n }\n }\n\n if(history_panel_ol.childNodes.length > 0)\n {\n history_panel.append(history_panel_ol);\n tabs['History'] = {'name':'History','content':history_panel, 'status': false};\n }\n }\n\n if(current_user_progress_complete > 0)\n {\n let detail_panel = document.createElement(\"section\");\n let message_panel = document.createElement(\"section\");\n message_panel.setAttribute(`class`, `message`);\n let message_ol = document.createElement(\"ol\");\n message_panel.append(message_ol);\n let aMessage = document.createElement(\"li\");\n if(current_user_progress_complete == 100)\n {\n try\n {\n let current_user_data = await _this._getUserData(_this.data.content.id,false,false);\n aMessage.setAttribute(`class`,`icon-check-circ done`);\n if('status' in current_user_data)\n {\n switch(current_user_data.status)\n {\n case \"complete\":\n aMessage.innerHTML=`Well done. You completed this collection on the `+_this.dsbClient.user.format_date(current_user_data.update_date);\n\n let retake_input = document.createElement(\"input\");\n retake_input.type = 'button';\n retake_input.value = 'Re-take';\n retake_input.setAttribute('task-id',task.next_id);\n retake_input.setAttribute('class','grey');\n retake_input.onclick = async function(){\n let returned = await _this.dsbClient.user.post('cpd?action=iteration', {'type': current_user_data.type, 'link_type': current_user_data.link_type, 'link_value': current_user_data.link_value, 'name': current_user_data.name, 'iteration':current_user_data.iteration});\n if(returned)\n {\n window.location.reload(true);\n return;\n }\n else\n {\n aMessage.setAttribute(`class`,`icon-error`);\n aMessage.innerHTML=`Sorry, an error seems to have occured.
Please try again later.`;\n console.error(`dsb-reader::hook__route_task_click - reset error`,returned);\n }\n };\n\n if(_this.dsbClient.user.is_offline())\n {\n retake_input.disabled = true;\n }\n\n if('part_overview' in current_user_data.data)\n {\n let points_summary = '';\n let retake_summary = [];\n let count_points = 0;\n if('points' in current_user_data)\n {\n for(let current_schemes_id in current_schemes)\n {\n if(typeof current_user_data.points === 'object' && current_user_data.points !== null)\n {\n if(current_schemes_id in current_user_data.points)\n {\n count_points++;\n points_summary+=\"
  • \"+current_user_data.points[current_schemes_id].points+\" points from \"+current_schemes[current_schemes_id].title+\" (\"+current_user_data.points[current_schemes_id].code+\") using the Member ID \"+current_user_data.points[current_schemes_id].member_id+\"
  • \";\n if(!current_schemes[current_schemes_id].completed)\n {\n retake_summary.push(current_schemes[current_schemes_id].title+\" have updated their code\");\n }\n }\n else\n {\n retake_summary.push(current_schemes[current_schemes_id].title+\" have not been notified (no Member ID provided)\");\n }\n }\n else\n {\n retake_summary.push(current_schemes[current_schemes_id].title+\" have not been notified (no Member ID provided)\");\n }\n }\n\n if(count_points == 0)\n {\n detail_panel.append(retake_input);\n }\n }\n\n if(points_summary.length == 0)\n {\n //points_summary = `You gained 0 points as no schemes are attached to this collection.`;\n }\n else\n {\n let result_p = document.createElement(\"p\");\n points_summary=\"We have notified the following schemes:
      \"+points_summary+\"
    \";\n result_p.innerHTML = points_summary;\n detail_panel.append(result_p);\n }\n\n if(retake_summary.length > 0)\n {\n let retake_panel = document.createElement(\"section\");\n let retake_message = document.createElement(\"section\");\n retake_message.setAttribute(`class`, `message`);\n //retake_panel.setAttribute(`style`,'margin-top:10px;border-top:1px solid;');\n let retake_panel_ol = document.createElement(\"ol\");\n\n for(let i = 0; i < retake_summary.length; i++)\n {\n let _li = document.createElement(\"li\");\n _li.setAttribute(`class`,`icon-warning done`);\n _li.innerHTML = retake_summary[i];\n retake_panel_ol.append(_li);\n }\n\n\n let retake_p1 = document.createElement(\"p\");\n retake_p1.innerHTML = \"You have not claimed points from all schemes.\";\n let retake_p2 = document.createElement(\"p\");\n retake_p2.innerHTML = \"To gain points from unclaimed schemes please retake the collection by clicking the button below\";\n\n retake_panel.append(retake_p1);\n retake_message.append(retake_panel_ol);\n retake_panel.append(retake_message);\n retake_panel.append(retake_p2);\n retake_panel.append(retake_input);\n detail_panel.append(retake_panel);\n }\n\n }\n else\n {\n throw `Sorry an unexpected error has occured (missing overview). Please try again later.`;\n }\n break;\n default:\n if(`Quiz` in tabs)\n {\n aMessage.innerHTML=`Well done. You have completed this collection.
    Now please complete the form below and click the \"Submit to schemes\" button`;\n let preamble = document.createElement(\"p\");\n preamble.innerHTML = `Please check or enter your Scheme member ID below for submission to CPD scheme.
    If no member ID is added your completion will not be registered with the CPD scheme.`;\n detail_panel.append(preamble);\n tabs[`Quiz`].content.setAttribute(`submit_button_name`,`Submit to schemes`)\n tabs[`Quiz`].content.setAttribute(`data-record_data`,`scheme_member_ids`)\n let form = document.createElement(\"section\");\n form.setAttribute(`class`, `form__cpd_schemes`);\n form.append(tabs[`Quiz`].content);\n detail_panel.append(form);\n }\n else\n {\n throw `Sorry, and unexpected error has occured (missing CPD scheme form). Please try again later.`;\n }\n break;\n }\n }\n else\n {\n throw `Sorry, your current status on this collection appears to be unknown.
    Please re-submit the last section or report this issue.`;\n }\n }\n catch(ex)\n {\n aMessage.innerHTML = ex;\n aMessage.setAttribute(`class`,`icon-error`);\n console.error(ex);\n }\n\n // Tidy\n if(`Quiz` in tabs)\n {\n delete tabs[`Quiz`];\n }\n\n message_ol.append(aMessage);\n content.appendContent(message_panel);\n if(detail_panel.childNodes.length > 0)\n {\n content.appendContent(detail_panel);\n }\n }\n else\n {\n aMessage.setAttribute(`class`,`icon-info`);\n aMessage.innerHTML=`You are `+current_user_progress_complete+`% through this collection.`;\n next_button.innerHTML = \"Resume\";\n next_button.setAttribute('task-id',nav_task_panel.getNextNotDoneTaskId());\n content.addFooter(next_button);\n message_ol.append(aMessage);\n content.appendContent(message_panel);\n delete tabs[`Quiz`];\n }\n }\n else\n {\n delete tabs[`Quiz`];\n content.addFooter(next_button);\n }\n }\n }\n\n target.setTab('Document', content, true, false);\n\n for(let i in tabs)\n {\n if(tabs[i].name == 'Quiz')\n {\n tabs[i].content.resetFooter();\n if('next' in footer)\n {\n tabs[i].content.addFooter(footer.next);\n }\n\n tabs[i].content.setAttribute(`data-caller_id`,task.task_id);\n\n let next_button = document.createElement(\"button\");\n next_button.innerHTML = \"Next\";\n next_button.onclick = function(){\n target.switchTab('Quiz');\n };\n\n footer.next = next_button;\n }\n target.setTab(tabs[i].name, tabs[i].content, false, false);\n }\n\n for(var element in footer)\n {\n content.addFooter(footer[element]);\n }\n\n target.render();\n\n };\n\n let target_modal_id = 'reader_'+this._createUUID();\n nav_task_panel.addHook('route', hook__route_task_click);\n nav_task_panel.setAttribute(`data-target_modal`, 'dsb-add_modal__'+target_modal_id);\n nav_task_panel.setAttribute(`data-target_panel`, workspaces_panel.getAttribute('id'));\n nav_task_panel.setAttribute(`data-target_modal_panel`, workspaces_modal_panel.getAttribute('id'));\n\n window.dispatchEvent(new CustomEvent('dsb-pwa-add_modal', {detail: {\"id\":target_modal_id,\"content\":workspaces_modal_panel}}));\n\n /**\n let modal = document.querySelector('dsb-modal > dsb-modal-workspace');\n modal.innerHTML = ``;\n modal.append(workspaces_modal_panel);\n */\n\n var collection_card = document.createElement(\"div\");\n collection_card.setAttribute(`class`, `category-bg-color`);\n collection_card.innerHTML = ``;\n var collection_card_html = document.createElement(\"span\");\n collection_card_html.classList.add('detail_panel');\n collection_card_html.innerHTML = ``;\n\n //base_update.appname = 'Collection';\n\n var overview_task = {};\n overview_task.name = 'Overview';\n overview_task.active = false;\n overview_task.type = 'overview';\n overview_task.uid = `overview`;\n overview_task.modal_mode = false;\n if(modal_mode)\n {\n overview_task.hidden = true;\n }\n overview_task.questions = [];\n for(var scheme_id in current_schemes)\n {\n let aquestion = {\n 'uid' :'scheme_'+scheme_id,\n 'question':current_schemes[scheme_id].title,\n 'pattern':current_schemes[scheme_id].pattern,\n 'pattern_message':current_schemes[scheme_id].pattern_message,\n 'type': 'text'\n };\n\n if(typeof current_user_data_scheme_membership_ids === 'object' && current_user_data_scheme_membership_ids !== null)\n {\n if(scheme_id in current_user_data_scheme_membership_ids)\n {\n aquestion.value = current_user_data_scheme_membership_ids[scheme_id];\n }\n }\n\n overview_task.questions.push(aquestion);\n }\n\n if('content' in this.data)\n {\n if('id' in this.data.content)\n {\n overview_task.target_id = this.data.content.id;\n overview_task.target = this.service;\n }\n\n if('body' in this.data.content)\n {\n overview_task.post_data = {};\n overview_task.post_data.title = 'Overview';\n overview_task.post_data.body = this.data.content.body;\n overview_task.post_data.document = {};\n overview_task.post_data.document.title = 'Overview';\n overview_task.post_data.document.content = {};\n overview_task.post_data.document.content.rendered = this.data.content.body;\n }\n\n if('title' in this.data.content)\n {\n //base_update.title = this.data.content.title;\n let h2 = document.createElement(\"h2\");\n h2.innerHTML = this.data.content.title;\n collection_card_html.append(h2);\n }\n\n if('advertiser_logo' in this.data)\n {\n let advertiser_logo_panel = document.createElement(\"span\");\n advertiser_logo_panel.classList.add('advertiser_panel');\n let advertiser_logo_title = document.createElement(\"h3\");\n advertiser_logo_title.innerHTML = `Advertiser collection`;\n let advertiser_logo = document.createElement(\"div\");\n advertiser_logo.setAttribute('style','background-image:url('+this.data.advertiser_logo+')');\n advertiser_logo.classList.add('circle-image');\n advertiser_logo_panel.append(advertiser_logo_title);\n advertiser_logo_panel.append(advertiser_logo);\n collection_card.append(advertiser_logo_panel);\n }\n\n\n if('image' in this.data.content)\n {\n //collection_card.setAttribute(`src`,this.data.content.image);\n }\n\n if('taxonomies' in this.data)\n {\n if('category' in this.data.taxonomies)\n {\n if('primary_id' in this.data.taxonomies.category)\n {\n this.classList.add(this.data.taxonomies.category.primary_id);\n }\n }\n }\n }\n\n // Setup schemes\n if('schemes' in this.data)\n {\n var cpd_points = document.createElement(\"ul\");\n cpd_points.setAttribute(`class`,'cpd_points');\n let count_schemes = 0;\n for(var scheme_id in current_schemes)\n {\n count_schemes++;\n let _link = document.createElement(\"li\");\n _link.innerHTML = ``+current_schemes[scheme_id].points+``+current_schemes[scheme_id].title+``;\n cpd_points.append(_link);\n }\n if(count_schemes > 0)\n {\n collection_card_html.append(cpd_points);\n }\n else\n {\n cpd_points=null;\n }\n }\n collection_card.append(collection_card_html);\n\n if(Array.isArray(this.path))\n {\n if(this.path.length==0)\n {\n overview_task.active = true;\n }\n }\n\n window.dispatchEvent(new CustomEvent('dsb-pwa-base_update', {detail: base_update}));\n\n // Check data for sections and root subsections\n if('sections' in this.data)\n {\n if(this.data.sections.length == 1)\n {\n this.data.sections = this.data.sections[0].parts;\n this.data.sections.unshift(overview_task);\n }\n else\n {\n nav_task_panel.addTask(overview_task);\n }\n }\n else\n {\n throw \"No sections found!\";\n }\n\n var set_tabs = async function(item, path)\n {\n item.tabs = [];\n if(`questions` in item)\n {\n if((`type` in item) && item.type == 'overview')\n {\n // Leave as overview\n }\n else\n {\n item.type = 'quiz';\n if(item.questions.length == 0)\n {\n item.type = 'read';\n }\n }\n\n\n if(current_user_progress)\n {\n if(`part_`+item.uid in current_user_progress)\n {\n if(current_user_progress[`part_`+item.uid] == true)\n {\n item.done=true;\n }\n }\n }\n\n if(item.questions.length > 0)\n {\n let quiz = document.createElement(\"dsb-quiz\");\n quiz.setDSBClient(_this.dsbClient);\n\n if(item.type == 'quiz')\n {\n quiz.addSetting('show_count',true);\n quiz.addSetting('show_incorrect_ans',true);\n }\n\n quiz.init();\n quiz.setAttribute('source_id', path);\n quiz.setAttribute('source_type', _this.service);\n quiz.setAttribute('name', _this.data.content.title);\n\n quiz.addHook('on_complete',async function(controller, data=false){\n let overview_task = '0';\n try\n {\n if(controller.hasAttribute('data-caller_id'))\n {\n let current_task = controller.getAttribute('data-caller_id').split(\"-\");\n if(current_task.length == 2)\n {\n overview_task=current_task[0]+'-0';\n }\n }\n\n if(controller.hasAttribute('data-record_data'))\n {\n let record_data = controller.getAttribute('data-record_data');\n\n switch(record_data)\n {\n case \"scheme_member_ids\":\n if('part_overview' in data)\n {\n for(let scheme_key in data.part_overview)\n {\n let scheme_id = scheme_key.split('question_scheme_');\n if(scheme_id.length == 2)\n {\n scheme_id = scheme_id[1];\n }\n current_user_data_scheme_membership_ids[scheme_id] = data.part_overview[scheme_key];\n }\n }\n\n let returned = await _this.dsbClient.user.post('data', {'type': 'profile', 'name': 'scheme_member_ids', 'data':current_user_data_scheme_membership_ids, 'status': 'published'});\n if(!returned)\n {\n console.error(`dsb-reader::hook__on_complete - record scheme_member_ids error`,returned);\n throw `Sorry, an error seems to have occured.
    Please try again later.`\n }\n else\n {\n window.location.reload(true);\n }\n break;\n defalut:\n break;\n }\n }\n\n }\n catch(ex)\n {\n console.error(ex);\n }\n await _this.dsbClient.user.resetCache();\n nav_task_panel.openByTaskNo(overview_task);\n });\n\n quiz.addHook('on_success',function(controller){\n nav_task_panel.setDone(controller.getAttribute('data-caller_id'));\n });\n\n quiz.addHook('on_fail',function(controller){\n nav_task_panel.setDone(controller.getAttribute('data-caller_id'),false);\n });\n\n for(let ii = 0; ii < item.questions.length; ii++)\n {\n quiz.setQuestion(item.uid, item.questions[ii].uid, item.questions[ii].question, (('options' in item.questions[ii])?item.questions[ii].options:{}), item.questions[ii].type, (('value' in item.questions[ii])?item.questions[ii].value:''),(('pattern' in item.questions[ii])?item.questions[ii].pattern:''),(('pattern_message' in item.questions[ii])?item.questions[ii].pattern_message:''));\n }\n item.tabs.push({'name': 'Quiz', 'content': quiz});\n }\n }\n }\n\n for(var section in this.data.sections)\n {\n\n let task = {};\n task.name = this.data.sections[section].name;\n task.target = this.service;\n task.active = false;\n if('active' in this.data.sections[section])\n {\n task.active = this.data.sections[section].active;\n }\n\n task.done = false;\n\n if('done' in this.data.sections[section])\n {\n task.done = this.data.sections[section].done;\n }\n\n if('hidden' in this.data.sections[section])\n {\n task.hidden = this.data.sections[section].hidden;\n }\n\n if('modal_mode' in this.data.sections[section])\n {\n task.modal_mode = this.data.sections[section].modal_mode;\n }\n\n task.type = 'item';\n\n let path = ''+this.data.content.id;\n\n let post_id = '';\n\n if('target_id' in this.data.sections[section])\n {\n post_id = this.data.sections[section].target_id;\n }\n else if('type_id' in this.data.sections[section])\n {\n post_id = this.data.sections[section].type_id;\n }\n\n if('questions' in this.data.sections[section])\n {\n task.questions = this.data.sections[section].questions;\n task.type = 'quiz';\n }\n\n if('type' in this.data.sections[section])\n {\n task.type = this.data.sections[section].type;\n }\n\n if('uid' in this.data.sections[section])\n {\n task.uid = this.data.sections[section].uid;\n }\n\n if('body' in this.data.sections[section])\n {\n task.post_content = this.data.sections[section].body;\n }\n\n if('post_data' in this.data.sections[section])\n {\n task.post_data = this.data.sections[section].post_data;\n }\n\n if(post_id)\n {\n task.target_id = post_id;\n }\n else\n {\n continue;\n }\n\n\n if(Array.isArray(this.path))\n {\n if(this.path.indexOf(task.target_id)>-1)\n {\n task.active = true;\n }\n }\n\n await set_tabs(task, path);\n\n if(`parts` in this.data.sections[section])\n {\n let overview_task = {};\n overview_task.name = 'Overview';\n overview_task.target = task.target;\n overview_task.uid = `overview`;\n overview_task.type = 'overview';\n overview_task.active = task.active;\n overview_task.target_id = task.target_id;\n if('post_content' in task)\n {\n overview_task.post_data = {};\n overview_task.post_data.title = 'Overview';\n overview_task.post_data.body = task.post_content;\n overview_task.post_data.document = {};\n overview_task.post_data.document.content = {};\n overview_task.post_data.document.content.rendered = task.post_content;\n overview_task.questions = [];\n for(var scheme_id in current_schemes)\n {\n overview_task.questions.push({\n 'uid' :'scheme_'+scheme_id,\n 'question':current_schemes[scheme_id].title,\n 'pattern':current_schemes[scheme_id].pattern,\n 'pattern_message':current_schemes[scheme_id].pattern_message,\n 'type': 'text'\n });\n }\n }\n task.parts = this.data.sections[section].parts;\n task.parts.unshift(overview_task);\n for(let i = 0; i < task.parts.length; i++)\n {\n task.parts[i].active = false;\n task.parts[i].done = false;\n if(Array.isArray(this.path))\n {\n if(this.path.indexOf(task.parts[i].uid)>0)\n {\n task.parts[i].active = true;\n }\n }\n await set_tabs(task.parts[i], path);\n }\n }\n\n nav_task_panel.addTask(task);\n }\n\n nav_panel.append(nav_task_panel);\n\n\n // Clean\n this.innerHTML = ``;\n\n this.append(collection_card);\n this.append(nav_panel);\n this.append(workspaces_panel);\n nav_task_panel.refreshActive();\n\n return;\n }\n catch(ex)\n {\n console.error('dsb-reader:: Error',ex);\n this.classList.add('error');\n this.innerHTML = `\n
    \n
    \n

    Sorry an error has occured.

    \n

    Please try again by clicking here or try again later.

    \n
    \n
    `;\n return;\n }\n }\n}\n\n\n","export default class extends HTMLElement {\n\n /**\n static get observedAttributes() {\n return ['post_id', 'service'];\n }\n */\n\n constructor() {\n super();\n console.log('Init DSBPost');\n this.post_data = [];\n this.append_content = [];\n this.footer = [];\n this.is_refresh = false\n this._navigationHandler = null;\n this.page_view_settings = false;\n\n }\n\n get service() {\n return this.getAttribute('service');\n }\n\n set service(newValue){\n this.setAttribute('service', newValue);\n }\n\n get settings() {\n\n let settings = this.getAttribute('settings');\n if(typeof settings !== 'object')\n {\n settings = JSON.parse(settings);\n }\n return settings;\n }\n\n set settings(newValue){\n this.setAttribute('settings', newValue);\n }\n\n get template_path() {\n return this.getAttribute('template_path');\n }\n\n set template_path(newValue){\n this.setAttribute('template_path', newValue);\n }\n\n get post_id() {\n let post_id = this.getAttribute('post_id');\n if(this.service == 'static')\n {\n post_id = 'json_by_id/'+post_id;\n }\n return post_id;\n }\n\n get link_path(){\n return this.service+'/'+this.post_id;\n }\n\n set post_id(newValue){\n this.setAttribute('post_id', newValue);\n }\n\n get nav_parent_id() {\n return this.getAttribute('nav_parent_id');\n }\n\n set nav_parent_id(newValue){\n this.setAttribute('nav_parent_id', newValue);\n }\n\n get post_uri() {\n return this.getAttribute('post_uri');\n }\n\n set post_uri(newValue){\n this.setAttribute('post_uri', newValue);\n }\n\n get img_path() {\n return this.getAttribute('img_path');\n }\n\n set img_path(newValue){\n this.setAttribute('img_path', newValue);\n }\n\n get type() {\n return this.getAttribute('type');\n }\n\n get supports()\n {\n return {\"offline\":true};\n }\n\n set type(newValue){\n this.setAttribute('type', newValue);\n }\n\n setDSBClient(dsbClient){\n this.dsbClient=dsbClient;\n }\n\n setPostList(list){\n this.postList=list;\n }\n\n setPostData(data){\n this.post_data=[data];\n }\n\n reset()\n {\n this.post_data = [];\n }\n\n appendContent(data){\n this.append_content.push(data);\n }\n\n addFooter(data){\n this.footer.push(data);\n }\n\n resetFooter(){\n this.footer = [];\n }\n\n connectedCallback()\n {\n return this._render();\n }\n\n /**\n attributeChangedCallback(name, oldValue, newValue)\n {\n console.log('attributeChangedCallback..'+name);\n return this._render();\n }\n */\n\n _createUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n _generate_a_post_widget(widget)\n {\n let component = false;\n if(`type` in widget)\n {\n switch(widget.type)\n {\n case \"WP_Widget_Text\":\n component = document.createElement(\"div\");\n component.innerHTML = widget.data;\n break;\n case \"Pm_Datastore_Builder_Client_Widget\":\n if(`data` in widget)\n {\n component = document.createElement(\"dsb-list\");\n component.setDSBClient(this.dsbClient);\n\n if(`layout_settings` in widget.data && (widget.data.layout_settings.length > 0))\n {\n component.setAttribute(`settings`, widget.data.layout_settings);\n }\n else\n {\n component.setAttribute(`settings`, JSON.stringify({'show-thumbnail':'left',\"layout-grid\": \"1\"}));\n }\n\n if(`query` in widget.data)\n {\n if(`query` in widget.data.query)\n {\n component.setAttribute(`query`, widget.data.query.query);\n }\n if(`type` in widget.data.query)\n {\n component.setAttribute(`service`, widget.data.query.type);\n }\n }\n //component.setAttribute(`root_path`, this.layout);\n component.innerHTML = ``;\n }\n else\n {\n console.error('.data missing from Pm_Datastore_Builder_Client_Widget');\n }\n break;\n default:\n break;\n }\n }\n return component;\n }\n\n _generate_post_widgets(post_widgets,body)\n {\n console.debug(\"Settings post_widgets...\");\n let has_widgets = false;\n let cell_count = 5;\n if(`grid` in post_widgets)\n {\n let _post_widgets = document.createElement(\"div\");\n _post_widgets.setAttribute('class','post_widgets');\n for(let i in post_widgets.grid)\n {\n let row_settings = false;\n if((`settings` in post_widgets) && (`rows` in post_widgets.settings))\n {\n if(grid_row in post_widgets.settings.rows)\n {\n row_settings = post_widgets.settings.rows[grid_row];\n }\n }\n\n let grid_row = document.createElement(\"div\");\n grid_row.setAttribute('class','post_widgets-row');\n let grid_cell = Array.apply(null, Array(5)).map(function () {});\n delete grid_cell[0];\n\n for(let ii in grid_cell)\n {\n grid_cell[ii] = document.createElement(\"div\");\n grid_cell[ii].setAttribute('class','post_widgets-item');\n if(!(ii in post_widgets.grid[i]))\n {\n grid_cell[ii].innerHTML = ` `;\n if(row_settings && (`fill` in row_settings) && (row_settings.fill == 'yes'))\n {\n delete grid_cell[ii];\n }\n }\n else\n {\n if(`span` in post_widgets.grid[i][ii] && post_widgets.grid[i][ii].span>1)\n {\n grid_cell[ii].setAttribute('style','flex-grow:'+post_widgets.grid[i][ii].span);\n let del_count = (Number(post_widgets.grid[i][ii].span) - 1);\n let del_start = (Number(ii) + 1);\n for (let span_i = del_start; span_i < 5; span_i++)\n {\n if(del_count<1)\n {\n break;\n }\n delete grid_cell[span_i];\n del_count--;\n }\n }\n let thisWidget = this._generate_a_post_widget(post_widgets.grid[i][ii]);\n if(thisWidget)\n {\n grid_cell[ii].innerHTML = ``;\n grid_cell[ii].append(thisWidget);\n }\n else\n {\n grid_cell[ii].innerHTML = ` `;\n if(row_settings && (`fill` in row_settings) && (row_settings.fill == 'yes'))\n {\n delete grid_cell[ii];\n }\n }\n\n }\n }\n\n for( let aCell in grid_cell)\n {\n grid_row.append(grid_cell[aCell]);\n }\n _post_widgets.append(grid_row);\n body.append(_post_widgets);\n has_widgets = true;\n }\n }\n return has_widgets;\n }\n\n _log(type,source,message,data='')\n {\n let _message = 'dsb-app/DSBPOST::'+source+'- '+message;\n switch(type)\n {\n case \"debug\":\n console.debug(_message,data);\n break;\n case \"warning\":\n console.warn(_message,data);\n break;\n case \"error\":\n console.error(_message,data);\n break;\n default:\n console.log(_message,data);\n }\n }\n\n page_view()\n {\n if(this.page_view_settings)\n {\n console.debug('dsb-post: Running page view...');\n // Emit Page scrollIntoView\n window.dispatchEvent(new CustomEvent('dsb-pwa-page_view', {detail:this.page_view_settings}));\n }\n }\n\n async _refresh()\n {\n this.is_refresh = true;\n this.reset();\n return this._render();\n }\n\n async _render()\n {\n let settings = this.settings;\n\n try\n {\n\n if(typeof settings === 'object' && settings !== null)\n {\n if(!('internal_links' in settings))\n {\n settings.internal_links = 'new_window';\n }\n if(!('page_view_onload' in settings))\n {\n settings.page_view_onload = 'on';\n }\n if(!('pulldown_refresh' in settings))\n {\n settings.pulldown_refresh = 'on';\n }\n if(!('lazy_images' in settings))\n {\n settings.lazy_images = 'on';\n }\n }\n else\n {\n settings = {};\n settings.internal_links = 'new_window';\n settings.page_view_onload = 'on';\n settings.pulldown_refresh = 'on';\n settings.lazy_images = 'on';\n }\n\n\n if(!('title' in settings))\n {\n settings.title = 'default';\n }\n\n if(!this.is_refresh)\n {\n this.innerHTML = ``;\n }\n\n //let img_path = `https://stmaadev.blob.core.windows.net/stc-maa-dev-fw-site`;\n //let img_path = `https://stmaaprodfwsite.blob.core.windows.net/assets`;\n\n let img_path = ``;\n\n if(this.post_data === undefined || this.post_data.length == 0)\n {\n if(this.post_id && this.service)\n {\n let json = await this.dsbClient.content.get(this.service,this.post_id,true);\n if (json.state)\n {\n this.post_data = json.data;\n }\n }\n }\n\n\n if(`image_path` in this.dsbClient.content)\n {\n img_path = this.dsbClient.content.image_path;\n }\n\n\n if(this.post_data === undefined || this.post_data.length < 0)\n {\n this.innerHTML = `
    \n

    501 :(

    \n

    Something seems to have gone wrong...

    \n
    `;\n }\n else\n {\n\n let modal_mode = true;\n var body_modal_panel_id = `dsb-modal-workspace-`+this._createUUID();\n\n if(this.post_data.length > 0)\n {\n // Some API data found, but *could* be 404 - 0 results!\n let html,template,format,result = ``;\n\n var nav_panel = document.createElement(\"nav\");\n var nav_panel_tabs = document.createElement(\"ul\");\n var nav_parent_id = '';\n\n var section_panel = document.createElement(\"section\");\n var footer_panel = document.createElement(\"section\");\n footer_panel.setAttribute(`class`, `footer`);\n\n var body_panel = document.createElement(\"article\");\n body_panel.setAttribute(`class`, `post`);\n body_panel.setAttribute(`role`, `article`);\n body_panel.setAttribute(`itemscope`, ``);\n body_panel.setAttribute(`itemtype`, `http://schema.org/NewsArticle`);\n\n this.page_view_settings = {};\n\n // Only grab 1st TODO allow more than one article\n for (let i = 0; i < 1; i++)\n {\n let this_post = this.post_data[i];\n\n if('document' in this.post_data[i])\n {\n this_post = this.post_data[i].document;\n }\n\n if(`settings` in this_post)\n {\n for(let this_post_settings__key in this_post.settings)\n {\n settings[this_post_settings__key]=this_post.settings[this_post_settings__key];\n }\n }\n\n if(!(`header` in settings))\n {\n settings.header='on';\n }\n\n if(!(`author` in settings))\n {\n settings.author='on';\n }\n\n if(('pulldown_refresh' in settings) && (settings.pulldown_refresh == 'on'))\n {\n if(!this.is_refresh)\n {\n window.dispatchEvent(new CustomEvent('dsb-pwa-add_pulldown_refresh', {detail: {iam: this}}));\n }\n }\n\n this.page_view_settings = {};\n this.page_view_settings.id=this_post.id;\n this.page_view_settings.date=this.dsbClient.content.format_date(this_post.created_date,'Y-m-d');\n this.page_view_settings.title = this_post.title;\n this.page_view_settings.taxonomies = [];\n this.page_view_settings.types = [];\n this.page_view_settings.customDimensions = {};\n this.page_view_settings.author = '';\n\n let post_type = this_post.type;\n\n if(this.post_type && this.post_type.length > 0)\n {\n post_type = this.post_type;\n }\n\n if(`post` == post_type)\n {\n section_panel.setAttribute(`class`, `page-width`);\n this.page_view_settings.types.push('article');\n }\n else\n {\n body_panel.setAttribute(`class`, `page`);\n\n if(['fw_dsb_app_tab'].indexOf(post_type) != -1)\n {\n let base_update_detail = {appname:this_post.title};\n if('override_title' in settings)\n {\n base_update_detail.appname=settings.override_title;\n }\n\n if('flag_beta' in settings && settings.flag_beta=='on')\n {\n base_update_detail.appname+='beta';\n }\n\n if(!(`base_update` in settings) || settings.base_update!=='off')\n {\n window.dispatchEvent(new CustomEvent('dsb-pwa-base_update', {detail:base_update_detail}));\n }\n\n delete this.page_view_settings.title;\n this.page_view_settings.customDimensions.contenttitle = this_post.title;\n this.page_view_settings.types.push('app_tab');\n }\n else\n {\n this.page_view_settings.types.push(post_type);\n }\n }\n\n let primary_cat = '';\n if('taxonomies' in this_post)\n {\n if('category' in this_post.taxonomies)\n {\n if('primary_id' in this_post.taxonomies.category)\n {\n primary_cat = this.dsbClient.content.applyFilter(`formatData_lookup`, [ `all_cat_obj`, this_post.taxonomies.category.primary_id ] );\n if(typeof primary_cat === 'object' && primary_cat !== null && 'slug' in primary_cat)\n {\n primary_cat = primary_cat.slug;\n section_panel.classList.add(primary_cat+'-category-col');\n //this.page_view_settings.sitesection2 = primary_cat;\n\n if('list' in this_post.taxonomies.category)\n {\n //let sitesection_count = 2;\n for(let list_item in this_post.taxonomies.category.list )\n {\n let acat = this.dsbClient.content.applyFilter(`formatData_lookup`, [ `all_cat_obj`, this_post.taxonomies.category.list[list_item] ] );\n if(typeof acat === 'object' && acat !== null && 'slug' in acat)\n {\n //this.page_view_settings['sitesection'+sitesection_count] = acat.slug;\n this.page_view_settings.taxonomies.push(acat.slug);\n //sitesection_count++;\n }\n }\n }\n }\n }\n }\n if('article_type' in this_post.taxonomies)\n {\n if('list' in this_post.taxonomies.article_type)\n {\n for(let list_item in this_post.taxonomies.article_type.list )\n {\n let acat = this.dsbClient.content.applyFilter(`formatData_lookup`, [ `all_cat_obj`, this_post.taxonomies.article_type.list[list_item] ] );\n if(typeof acat === 'object' && acat !== null && 'slug' in acat)\n {\n //this.page_view_settings.contenttype += \"|\"+acat.slug;\n this.page_view_settings.types.push(acat.slug);\n }\n }\n }\n }\n }\n\n\n // Set Author\n let author_name = '';\n let advertiser_section = null;\n try\n {\n if('author' in this_post)\n {\n if('id' in this_post.author)\n {\n author_name = this.dsbClient.content.applyFilter(`formatData_lookup`, [ `authors`, this_post.author.id ] );\n if('name' in author_name)\n {\n author_name = author_name.name;\n }\n else\n {\n author_name = 'missing';\n }\n this.page_view_settings.author = author_name;\n\n // Highlite adverts\n if('type' in this_post.author)\n {\n switch(this_post.author.type)\n {\n case \"advert\":\n settings.author = 'off';\n section_panel.classList.add('advertiser');\n section_panel.classList.add('advertiser-category-col');\n let advert_header = document.createElement('h3');\n advert_header.classList.add('advert-header');\n advert_header.innerHTML = 'Advertiser content';\n this.classList.add('advert-background');\n section_panel.prepend(advert_header);\n\n try\n {\n let this_advertiser = await this.dsbClient.content.get('static','json_by_id/'+this_post.author.id,true);\n if (this_advertiser.state=='success')\n {\n if(typeof this_advertiser === 'object' && this_advertiser !== null && ('data' in this_advertiser) && this_advertiser.data.length > 0)\n {\n this_advertiser = this_advertiser.data[0];\n advertiser_section = document.createElement('div');\n advertiser_section.classList.add('advertiser-content-wrap');\n advertiser_section.innerHTML='

    Provided by '+this_advertiser.name+'

    ';\n let advertiser_content = document.createElement('div');\n advertiser_content.classList.add('advertiser-content');\n /**\n let advertiser_logo_img = this.dsbClient.content.applyFilter(`formatData_lookup`, [ `author_advertiser_logo`, this_advertiser.id ] );\n if(advertiser_logo_img)\n {\n let advertiser_logo = document.createElement(\"div\");\n advertiser_logo.classList.add('circle-image');\n advertiser_logo.setAttribute('style','background-image:url('+advertiser_logo_img+')');\n //advertiser_logo.classList.add('circle-image');\n advertiser_content.append(advertiser_logo);\n }\n */\n\n if('excerpt' in this_advertiser)\n {\n let advertiser_description = document.createElement('div');\n advertiser_description.innerHTML = this_advertiser.excerpt;\n advertiser_content.append(advertiser_description);\n }\n advertiser_section.append(advertiser_content);\n body_panel.append(advertiser_section);\n\n }\n else\n {\n this._log('error','_render','Missing this_advertiser object',this_advertiser);\n }\n }\n }\n catch(ex)\n {\n this._log('error','_render','Problem with advertiser details',ex);\n }\n\n /**\n let advertiser_logo_img = this.dsbClient.content.applyFilter(`formatData_lookup`, [ `author_advertiser_logo`, this_post.author.id ] );\n let advertiser_logo = document.createElement(\"div\");\n advertiser_logo.setAttribute('style','background-image:url('+advertiser_logo_img+')');\n advertiser_logo.classList.add('circle-image');\n */\n break;\n default:\n break;\n }\n }\n\n if(settings.author == 'on')\n {\n let author_description = document.createElement('div');\n author_description.classList='author-metadata';\n let author_description_name = document.createElement('div');\n author_description_name.classList='author-name';\n author_description_name.innerHTML = 'By '+author_name;\n author_description.append(author_description_name);\n body_panel.append(author_description);\n }\n }\n }\n }\n catch(ex)\n {\n this._log('error','_render','Missing author name, may need to refresh lookup',ex);\n\n }\n\n\n\n //this.page_view_settings.contenttype=post_type;\n\n let body = document.createElement(\"div\");\n\n let title = null;\n\n switch(post_type)\n {\n case \"post\":\n console.log(`Loading `+post_type+`....`);\n if(settings.header && settings.header=='on')\n {\n title = document.createElement(\"h1\");\n title.setAttribute(`itemprop`,`headline`);\n title.innerHTML = this_post.title;\n body_panel.append(title);\n body.setAttribute(`itemprop`,`articleBody`);\n }\n break;\n case \"fw_dsb_app_tab\":\n console.log(`Loading `+post_type+`....`);\n\n if(settings.header && settings.header=='on')\n {\n title = document.createElement(\"h1\");\n title.setAttribute(`itemprop`,`headline`);\n title.innerHTML = this_post.title;\n body_panel.append(title);\n }\n break;\n default:\n console.log(`Loading `+post_type+`....`);\n break;\n }\n body.innerHTML = ``;\n\n let has_widgets = false;\n if(`post_widgets` in this_post)\n {\n has_widgets = this._generate_post_widgets(this_post.post_widgets, body);\n }\n\n if(!has_widgets)\n {\n if(`content` in this_post)\n {\n if(!has_widgets)\n {\n if(`rendered` in this_post.content)\n {\n body.innerHTML = this_post.content.rendered;\n }\n else\n {\n console.warn('Missing document.content.rendered');\n }\n }\n }\n else\n {\n console.warn('Missing document.content', this_post);\n }\n }\n\n\n if(`clean_body` in settings && settings.clean_body !== 'off')\n {\n var attr = [\n 'align',\n 'background',\n 'bgcolor',\n 'color',\n 'face',\n 'height',\n 'hspace',\n 'marginheight',\n 'marginwidth',\n 'noshade',\n 'nowrap',\n 'valign',\n 'vspace',\n 'width',\n 'vlink',\n 'alink',\n 'text',\n 'link',\n 'frame',\n 'frameborder',\n 'clear',\n 'scrolling',\n 'style/background-image'\n ];\n if(settings.clean_body == 'full')\n {\n attr = [\n 'align',\n 'background',\n 'bgcolor',\n 'border',\n 'cellpadding',\n 'cellspacing',\n 'color',\n 'face',\n 'height',\n 'hspace',\n 'marginheight',\n 'marginwidth',\n 'noshade',\n 'nowrap',\n 'valign',\n 'vspace',\n 'width',\n 'vlink',\n 'alink',\n 'text',\n 'link',\n 'frame',\n 'frameborder',\n 'clear',\n 'scrolling',\n 'style'\n ];\n }\n let function__parseAtts = function(all,attr) {\n var i = all.length;\n var j, is_hidden;\n\n // Presentational attributes.\n\n\n var attr_len = attr.length;\n\n while (i--) {\n is_hidden = (all[i].style.display === 'none');\n\n j = attr_len;\n\n while (j--) {\n if(attr[j] == 'style/background-image')\n {\n if(all[i].style.backgroundImage.length>0)\n {\n let thisbackgroundImage = all[i].style.backgroundImage.slice(5, -2).replace(/\"/g, \"\");\n if(thisbackgroundImage.indexOf(\"http\") == -1)\n {\n all[i].style.backgroundImage = `url(`+img_path+thisbackgroundImage+`)`;\n }\n }\n }\n else\n {\n all[i].removeAttribute(attr[j]);\n }\n }\n\n // Re-hide display:none elements,\n // so they can be toggled via JS.\n if (is_hidden) {\n all[i].style.display = 'none';\n is_hidden = false;\n }\n }\n };\n function__parseAtts(body.getElementsByTagName('*'),attr);\n }\n\n body_panel.append(body);\n\n result = true;\n }\n\n if(result)\n {\n // Add body\n section_panel.append(body_panel);\n\n this.innerHTML = ``;\n if(`background-color` in settings)\n {\n this.style.backgroundColor=settings['background-color'];\n }\n //this.append(nav_panel);\n this.append(section_panel);\n\n // Execute any scripts in section_panel\n Array.from(this.querySelectorAll(\"script\")).forEach( oldScript => {\n const newScript = document.createElement(\"script\");\n Array.from(oldScript.attributes)\n .forEach( attr => newScript.setAttribute(attr.name, attr.value) );\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n\n // Append body\n for(let i = 0; i < this.append_content.length; i++)\n {\n if(this.append_content[i] instanceof HTMLElement)\n {\n this.append(this.append_content[i]);\n }\n else\n {\n let appended_content_element = document.createElement(\"div\");\n appended_content_element.innerHTML = this.append_content[i];\n this.append(appended_content_element);\n }\n }\n\n try\n {\n let a = this.querySelectorAll(\"a\");\n if(a !== undefined || a.length > 0)\n {\n switch(settings.internal_links)\n {\n case \"modal\":\n const on_click = function() {\n let target_id = this.getAttribute(\"data-target\");\n let target_type = this.getAttribute(\"data-target-type\");\n let query = this.getAttribute(\"data-query\");\n let service = this.getAttribute(\"data-service\");\n\n if(target_id)\n {\n let target = document.getElementById(target_id);\n if(target)\n {\n target.setAttribute('query', query);\n target.setAttribute('service', service);\n }\n else\n {\n console.log('NO TRAGET');\n }\n\n if('dsb-modal' == target_type)\n {\n document.querySelector('dsb-modal').classList.toggle('show');\n }\n }\n else\n {\n console.log('DSBSections missing ID');\n }\n };\n\n for(let i = 0; i < a.length; i++)\n {\n a[i].setAttribute(`data-target`, ``+body_modal_panel_id);\n a[i].setAttribute(`data-target-type`, `dsb-modal`);\n a[i].setAttribute(`data-query`,`url=`+a[i].getAttribute('href'));\n a[i].setAttribute(`data-service`,`post`);\n a[i].setAttribute(`href`,`javascript:return;`);\n a[i].onclick = on_click;\n }\n break;\n default:\n for(let i = 0; i < a.length; i++)\n {\n\n let href = a[i].getAttribute('href').trim();\n a[i].setAttribute(`target`, `_blank`);\n\n if(href.indexOf(\"#\") == 0)\n {\n a[i].setAttribute(`data-internal_link`, href.substring(1));\n a[i].onclick = function(){\n var elem = document.getElementById(this.getAttribute('data-internal_link'));\n elem.scrollIntoView();\n };\n a[i].setAttribute(`href`,`javascript:return;`);\n a[i].setAttribute(`target`, `_self`);\n }\n else if(href.indexOf(\"http\") == -1)\n {\n // check for documents\n let extension = href.split('.');\n if(extension.length > 1 && (extension[1] !== 'htm' && extension[1] !== 'html'))\n {\n a[i].setAttribute(`href`,img_path+href);\n }\n else\n {\n a[i].setAttribute(`href`,window.location.origin+href);\n }\n }\n\n }\n break;\n\n }\n }\n\n let img = this.querySelectorAll(\"img\");\n\n if(img !== undefined || img.length > 0)\n {\n for(let i = 0; i < img.length; i++)\n {\n if(settings.lazy_images == 'on')\n {\n img[i].setAttribute(`loading`,'lazy');\n }\n else\n {\n //img[i].setAttribute(`loading`,'eager');\n }\n let src = img[i].getAttribute('src');\n if(src.indexOf(\"http\") == -1)\n {\n img[i].setAttribute(`src`,img_path+src);\n }\n }\n }\n\n // Add table-wrapper\n let tables = this.querySelectorAll(\"table\");\n if(tables !== undefined || tables.length > 0)\n {\n for(let i = 0; i < tables.length; i++)\n {\n tables[i].outerHTML = '
    '+tables[i].outerHTML+'
    ';\n }\n }\n\n\n\n // Set appends\n for(let i = 0; i < this.footer.length; i++)\n {\n footer_panel.append(this.footer[i]);\n }\n\n if(footer_panel.childNodes.length > 0)\n {\n this.append(footer_panel);\n }\n\n if(settings.page_view_onload=='on')\n {\n this.page_view();\n }\n }\n catch(ex)\n {\n console.log(ex);\n }\n\n return;\n }\n\n this.innerHTML = `Missing post`;\n }\n else\n {\n throw {code:404,message:'No results',data:this.post_data};\n }\n }\n }\n catch(ex)\n {\n console.error('--here',ex);\n let code = 500;\n if(typeof ex === 'object' && ex !== null && ('code' in ex))\n {\n code = ex.code;\n }\n let is_offline = await this.dsbClient.user.is_offline();\n if(is_offline=='maintenance')\n {\n if(is_offline=='maintenance')\n {\n code = 'maintenance';\n }\n else\n {\n code = 503;\n }\n }\n\n switch(code+\"\")\n {\n case \"404\":\n this.innerHTML = `
    \n

    404 :(

    \n

    We can't seem to find this page.

    \n
    `;\n break;\n case \"503\":\n this.innerHTML = `
    \n

    Offline

    \n

    Sorry, offline version not available.
    Please try again later when you have an internet connection :)

    \n
    `;\n break;\n case \"maintenance\":\n this.innerHTML = `
    \n

    Maintenance work ongoing...

    \n

    Sorry we are currently performing maintenance please click here to try again or check back later.

    \n
    `;\n break;\n default:\n this.innerHTML = `
    \n

    Sorry an error has occured.

    \n

    \n Please try again by clicking here or try again later.\n

    \n
    \n Details\n
    \n `+JSON.stringify(ex)+`\n
    \n
    \n
    `\n console.error(ex);\n break;\n }\n }\n\n return;\n }\n}\n\n\n","export default class extends HTMLElement {\n\n static get observedAttributes() {\n return ['service'];\n }\n\n constructor() {\n super();\n console.log('Init DSBTasks');\n this.tasks = [];\n this.hooks = {};\n }\n\n init()\n {\n this.setAttribute(`id`, 'dsb-tasks_'+this._createUUID());\n }\n\n get service() {\n return this.getAttribute('service');\n }\n\n set service(newValue){\n this.setAttribute('service', newValue);\n }\n\n get header() {\n return this.getAttribute('header');\n }\n\n set header(newValue){\n this.setAttribute('header', newValue);\n }\n\n get target_modal() {\n return this.getAttribute('target_modal');\n }\n\n set target_modal(newValue){\n this.setAttribute('target_modal', newValue);\n }\n\n get target_panel() {\n return this.getAttribute('target_panel');\n }\n\n set target_panel(newValue){\n this.setAttribute('target_panel', newValue);\n }\n\n setDSBClient(dsbClient){\n this.dsbClient=dsbClient;\n }\n\n addTask(data){\n this.tasks.push(data);\n return this.tasks.length-1;\n }\n\n addHook(name,action){\n this.hooks[name] = action;\n }\n\n getTask(id)\n {\n try\n {\n if(isNaN(id))\n {\n id = id.split('-');\n let task = this.tasks[id[0]];\n if(id[1])\n {\n if('parts' in task)\n {\n return task.parts[id[1]];\n }\n }\n return task;\n }\n else\n {\n return this.tasks[id];\n }\n }\n catch(ex)\n {\n throw ex;\n }\n }\n\n openByTaskNo(task_no)\n {\n document.getElementById(this.id+`_task_`+task_no).dispatchEvent(new MouseEvent(\"click\", {\n \"view\": window,\n \"bubbles\": true,\n \"cancelable\": false\n }));\n }\n\n setDSBClient(dsbClient){\n this.dsbClient=dsbClient;\n }\n\n connectedCallback()\n {\n return this._render();\n }\n\n attributeChangedCallback(name, oldValue, newValue)\n {\n console.log('attributeChangedCallback..'+name);\n return this._render();\n }\n\n _createUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n setDone(task_no,state=true)\n {\n if(task_no in this.tasks)\n {\n this.tasks[task_no].done = state;\n let item = document.getElementById(this.id+'_task_'+task_no);\n if(state)\n {\n item.classList.add('done');\n }\n else\n {\n item.classList.remove('done');\n }\n return true;\n }\n return false;\n }\n\n getNextNotDoneTaskId()\n {\n for(let task_id in this.tasks)\n {\n if('done' in this.tasks[task_id])\n {\n if(this.tasks[task_id].done == false)\n {\n if(`parts` in this.tasks[task_id])\n {\n for(let i = 0; i
    `;\n\n var on_click = function()\n {\n let controller = document.getElementById(this.getAttribute(\"data-controller_id\"));\n let target_modal = controller.getAttribute(\"data-target_modal\");\n let target_modal_panel = controller.getAttribute(\"data-target_modal_panel\");\n let target_panel = controller.getAttribute(\"data-target_panel\");\n let task_id = this.getAttribute(\"data-task_id\");\n let has_parts = this.getAttribute(\"data-has_parts\");\n let task = controller.getTask(task_id);\n task.task_id = task_id;\n let target_id = target_panel;\n let target_type = 'dsb-panel';\n if(controller.getAttribute(\"data-target_type\"))\n {\n target_type = controller.getAttribute(\"data-target_type\");\n }\n\n let modal_mode = false;\n\n if('dsbClient' in controller && typeof controller.dsbClient === 'object' && controller.dsbClient !== null)\n {\n modal_mode = controller.dsbClient.user.env.isViewport([`small`,`xsmall`]);\n }\n\n // Set active item\n let menu_li = this.parentElement.querySelectorAll(`li`);\n if(menu_li !== undefined || menu_li.length > 0)\n {\n for(let i = 0; i < menu_li.length; i++)\n {\n if(menu_li[i].classList.contains('active'))\n {\n menu_li[i].classList.remove('active');\n let menu_li_sub = menu_li[i].querySelectorAll(`ol`);\n for(let ii = 0; ii < menu_li_sub.length; ii++)\n {\n menu_li_sub[ii].style.display='none';\n }\n }\n if(!menu_li[i].onclick)\n {\n menu_li[i].onclick = this.onclick;\n }\n }\n }\n this.classList.add('active');\n\n if(has_parts == 'true')\n {\n let parts = this.querySelectorAll(`ol`);\n for(let ii = 0; ii < parts.length; ii++)\n {\n parts[ii].style.display='block';\n }\n this.onclick = false;\n document.getElementById(this.id+'-0').dispatchEvent(new MouseEvent(\"click\", {\n \"view\": window,\n \"bubbles\": true,\n \"cancelable\": false\n }));\n return;\n }\n\n try\n {\n //if(document.querySelector('dsb-app').env.isViewport([`small`,`xsmall`]))\n if('modal_mode' in task)\n {\n modal_mode = task.modal_mode;\n }\n\n if(modal_mode)\n {\n target_id = target_modal_panel;\n target_type = 'dsb-modal';\n }\n }\n catch(ex)\n {\n console.error(`dsb-task:: Missing dsb-app.`,ex);\n }\n\n if(target_id)\n {\n let target = document.getElementById(target_id);\n target.innerHTML = ``;\n if(target)\n {\n if('route' in controller.hooks)\n {\n controller.hooks.route(target, task);\n }\n }\n else\n {\n console.error('dsb-task:: Cannot find target_id = '+target_id);\n }\n\n if('dsb-modal' == target_type)\n {\n let modal = document.getElementById(target_modal);\n if(modal)\n {\n if(!modal.classList.contains('show'))\n {\n modal.classList.toggle('show');\n }\n }\n else\n {\n console.error('dsb-task:: Missing modal('+target_modal+')!',modal);\n }\n }\n else\n {\n let dsb_modal = document.querySelector('dsb-modal');\n if(dsb_modal.classList.contains('show'))\n {\n dsb_modal.classList.toggle('show');\n }\n }\n }\n else\n {\n if('route' in controller.hooks)\n {\n controller.hooks.route('', task);\n }\n if('window' == target_type && ('hash_url' in task))\n {\n window.location.hash = '/'+task.hash_url;\n }\n console.warn('dsb-task:: Missing target_id!');\n }\n };\n\n\n var task_panel = document.createElement(\"ol\");\n\n for(let i = 0; i < this.tasks.length; i++)\n {\n\n let _link = document.createElement(\"li\");\n\n if('hidden' in this.tasks[i])\n {\n if(this.tasks[i].hidden)\n {\n _link.setAttribute('style','display:none;');\n }\n }\n\n if(['quiz','read'].includes(this.tasks[i].type))\n {\n _link.classList.add(`icon-check-circ`);\n }\n else if(['overview'].includes(this.tasks[i].type))\n {\n _link.classList.add(`icon-dashboard`);\n _link.classList.add(`overview`);\n _link.classList.add(`category-bg-color-light`);\n }\n else if('task' == this.tasks[i].type)\n {\n _link.classList.add(`icon-check-box-outline-blank`);\n }\n\n if(`done` in this.tasks[i])\n {\n if(this.tasks[i].done == true)\n {\n _link.classList.add('done');\n }\n }\n _link.innerHTML = this.tasks[i].name;\n _link.setAttribute(`data-controller_id`, this.id);\n _link.setAttribute(`data-task_id`, i);\n _link.setAttribute(`data-has_parts`, false);\n _link.onclick = on_click;\n _link.setAttribute(`id`, this.id+`_task_`+i);\n if((i+1) < this.tasks.length)\n {\n this.tasks[i].next_id = this.id+`_task_`+(i+1);\n }\n else\n {\n if(['read'].includes(this.tasks[i].type))\n {\n this.tasks[i].next_id = this.id+`_task_0`;\n }\n }\n\n if((i-1) >= 0)\n {\n this.tasks[i].back_id = this.id+`_task_`+(i-1);\n }\n\n if(`parts` in this.tasks[i])\n {\n let sub_tasks = document.createElement(\"ol\");\n\n for(let ii = 0; ii < this.tasks[i].parts.length; ii++)\n {\n let _link = document.createElement(\"li\");\n _link.classList.add(`icon-check-circ`);\n if(`done` in this.tasks[i].parts[ii])\n {\n if(this.tasks[i].parts[ii].done == true)\n {\n _link.classList.add('done');\n }\n }\n\n _link.innerHTML = this.tasks[i].parts[ii].name;\n _link.onclick = on_click;\n _link.setAttribute(`data-controller_id`, this.id);\n _link.setAttribute(`data-task_id`, i+`-`+ii);\n _link.setAttribute(`id`, this.id+`_task_`+_link.getAttribute(`data-task_id`));\n sub_tasks.append(_link);\n if((ii+1) < this.tasks.length)\n {\n this.tasks[i].parts[ii].next_id = this.id+`_task_`+i+`-`+(ii+1);\n }\n if((ii-1) >= 0)\n {\n this.tasks[i].parts[ii].back_id = this.id+`_task_`+i+`-`+(ii-1);\n }\n }\n sub_tasks.style.display='none';\n _link.setAttribute(`data-has_parts`, true);\n _link.append(sub_tasks);\n if((i+1) < this.tasks.length)\n {\n this.tasks[i].next_id = this.id+`_task_`+i+`-0`;\n }\n }\n\n let task_name = 'Unknown';\n\n if('name' in this.tasks[i] && this.tasks[i].name !== null)\n {\n task_name = this.tasks[i].name;\n }\n\n if('last_update' in this.tasks[i] && this.tasks[i].last_update !== null)\n {\n if('dsbClient' in this && typeof this.dsbClient === 'object' && this.dsbClient !== null)\n {\n let since_object = await this.dsbClient.user.format_date(this.tasks[i].last_update,'since');\n let since_string = '';\n\n if(since_object.years > 0)\n {\n since_string = since_object.years;\n\n if(since_object.years > 1)\n {\n since_string=\"over \"+ since_string+\" years ago\";\n }\n else\n {\n since_string=\"over \"+ since_string+\" year ago\";\n }\n }\n else if(since_object.months > 0)\n {\n since_string = since_object.months;\n\n if(since_object.months > 1)\n {\n since_string=\"over \"+ since_string+\" months ago\";\n }\n else\n {\n since_string=\"over \"+ since_string+\" month ago\";\n }\n }\n else if(since_object.weeks > 0)\n {\n since_string = since_object.weeks;\n\n if(since_object.weeks > 1)\n {\n since_string=\"over \"+ since_string+\" weeks ago\";\n }\n else\n {\n since_string=\"over \"+ since_string+\" week ago\";\n }\n }\n else if(since_object.days > 0)\n {\n since_string = since_object.days;\n\n if(since_object.days > 1)\n {\n since_string=since_string+\" days ago\";\n }\n }\n\n if(since_string.length > 0)\n {\n if(since_object.total > 14)\n {\n task_name=task_name+\"Last updated: \"+since_string+\"\";\n }\n else\n {\n task_name=task_name+\"Last updated: \"+since_string+\"\";\n }\n }\n }\n else\n {\n task_name=task_name+\"Last updated: \"+this.tasks[i].last_update+\"\";\n console.error('Missing dsbClient');\n }\n }\n\n if('progress' in this.tasks[i] && this.tasks[i].progress !== null)\n {\n let title = document.createElement(\"span\");\n title.setAttribute('style','width:70%;font-size:13px;');\n title.innerHTML = task_name;\n let progress_bar = document.createElement(\"span\");\n progress_bar.classList.add('progress');\n progress_bar.setAttribute('style','width:20%;');\n progress_bar.innerHTML = \" \";\n let progress_label = document.createElement(\"span\");\n progress_label.setAttribute('style','width:10%;padding-left:5px;');\n progress_label.innerHTML =this.tasks[i].progress+\"%\";\n _link.innerHTML = '';\n _link.append(title);\n _link.append(progress_bar);\n _link.append(progress_label);\n }\n\n task_panel.append(_link);\n }\n\n this.innerHTML = ``;\n if('header' in this && this.header !==null )\n {\n this.innerHTML = `

    `+this.header+`

    `;\n }\n this.append(task_panel);\n\n if(typeof this.hooks === 'object' && this.hooks !== null && ('on_render_complete' in this.hooks))\n {\n this.hooks['on_render_complete']();\n }\n\n return;\n }\n}\n\n\n","export default class extends HTMLElement {\n\n constructor() {\n super();\n console.log('Init DSBQuiz');\n this.questions = {};\n this.hooks = {};\n this.settings = {};\n this.footer = [];\n this.complete = '';\n this.fail = '';\n }\n\n init()\n {\n this.setAttribute(`id`, 'dsb-quiz_'+this._createUUID());\n }\n\n _createUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n _shuffle(array) {\n var currentIndex = array.length, temporaryValue, randomIndex;\n\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n\n return array;\n }\n\n _merge(args){\n\n // create a new object\n let target = {};\n\n // deep merge the object into the target object\n const merger = (obj) => {\n for (let prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n if (Object.prototype.toString.call(obj[prop]) === '[object Object]') {\n // if the property is a nested object\n target[prop] = this._merge([target[prop], obj[prop]]);\n } else {\n // for regular property\n target[prop] = obj[prop];\n }\n }\n }\n };\n\n // iterate through all objects and\n // deep merge them with target\n for (let i = 0; i < args.length; i++) {\n merger(args[i]);\n }\n\n return target;\n};\n\n get service() {\n return this.getAttribute('service');\n }\n\n set service(newValue){\n this.setAttribute('service', newValue);\n }\n\n\n addSetting(name, value)\n {\n\n this.settings[name] = value;\n return true;\n }\n\n getSetting(name)\n {\n if(typeof this.settings === 'object' && this.settings !== null)\n {\n if(name in this.settings)\n {\n return this.settings[name];\n }\n }\n else\n {\n this.settings = {};\n }\n return;\n }\n\n\n get template_path() {\n return this.getAttribute('template_path');\n }\n\n set template_path(newValue){\n this.setAttribute('template_path', newValue);\n }\n\n get source_id() {\n return this.getAttribute('source_id');\n }\n\n set source_id(newValue){\n this.setAttribute('source_id', newValue);\n }\n\n get source_type() {\n return this.getAttribute('source_type');\n }\n\n set source_type(newValue){\n this.setAttribute('source_type', newValue);\n }\n\n get name() {\n return this.getAttribute('name');\n }\n\n set name(newValue){\n this.setAttribute('name', newValue);\n }\n\n get submit_button_name() {\n return this.getAttribute('submit_button_name');\n }\n\n set submit_button_name(newValue){\n this.setAttribute('submit_button_name', newValue);\n }\n\n setDSBClient(dsbClient){\n this.dsbClient=dsbClient;\n }\n\n setQuizContent(data){\n this.quiz_content=data;\n }\n\n setQuestion(part_id, question_id, question, options, type, value='', pattern = '', pattern_message = ''){\n this.questions[part_id+'-'+question_id]={'question_id':question_id,'part_id':part_id,'question':question,'options':options,'type':type,'pattern':pattern,'pattern_message':pattern_message,'value':value};\n }\n\n addHook(name,action){\n this.hooks[name] = action;\n }\n\n addFooter(data){\n this.footer.push(data);\n }\n\n resetFooter(){\n this.footer = [];\n }\n\n connectedCallback()\n {\n return this._render();\n }\n\n\n async _render()\n {\n\n\n this.innerHTML = ``;\n var controller = this;\n let current_user_data = await controller.dsbClient.user.get('cpd', '?type=collection&link_type='+controller.source_type+'&link_value='+controller.source_id+'&iteration[sort]=desc&_[limit]=1',true);\n\n if(!current_user_data)\n {\n current_user_data = {};\n current_user_data.data={};\n }\n\n if(this.questions)\n {\n this.form_panel = document.createElement(\"form\");\n let form_submission = document.createElement(\"input\");\n let message_panel = document.createElement(\"section\");\n message_panel.setAttribute(`class`, `message`);\n let message_ol = document.createElement(\"ol\");\n message_panel.append(message_ol);\n let footer_panel_submit = document.createElement(\"section\");\n let footer_panel_navigate = document.createElement(\"section\");\n\n\n form_submission.type = 'submit';\n form_submission.value = (this.submit_button_name?this.submit_button_name:'Submit');\n if(controller.dsbClient.user.is_offline())\n {\n form_submission.disabled = true;\n }\n else\n {\n // Check for submit hooks\n if('_on_form_submit' in this.hooks)\n {\n this.form_panel.addEventListener('submit', this.hooks.on_form_submit);\n }\n else\n {\n this.form_panel.addEventListener('submit', async event => {\n // submit event detected\n event.preventDefault()\n\n let spinner = document.createElement('maa-spinner');\n spinner.setAttribute('type','inline-small');\n footer_panel_submit.prepend(spinner);\n let cpd = JSON.parse(JSON.stringify(current_user_data));\n\n //let message_panel = controller.id+'_messages';\n cpd.type = 'collection';\n cpd.link_type = controller.source_type;\n cpd.link_value = controller.source_id;\n cpd.name = controller.name;\n\n if(typeof cpd.data === 'object' && cpd.data !== null)\n {\n // Nice :)\n }\n else\n {\n cpd.data = {};\n }\n\n let aMessage = document.createElement(\"li\");\n aMessage.setAttribute(`class`,`icon-error`);\n aMessage.innerHTML=`Sorry, an error seems to have occured.
    Please try again later.`;\n\n //post.date = controller.dsbClient.user.getDate();\n\n const formData = new FormData(event.target);\n const entries = formData.entries();\n let submission = Object.fromEntries(entries);\n\n let cpd_data = {};\n let submission_count = 0;\n for(let aSubmission in submission)\n {\n let path = aSubmission.split('-');\n submission_count++;\n let parent = {};\n let parent_ref = parent;\n for(let i = 0; i < path.length; i++)\n {\n if(i == (path.length -1))\n {\n parent_ref[path[i]] = submission[aSubmission];\n continue;\n }\n else\n {\n parent_ref[path[i]] = {};\n }\n parent_ref = parent_ref[path[i]];\n }\n cpd_data = controller._merge([cpd_data, JSON.parse(JSON.stringify(parent))]);\n }\n\n if(submission_count == 0)\n {\n aMessage.innerHTML=`Please complete all fields.`;\n }\n else\n {\n\n let currentPart = [];\n // Import into cpd\n for(let cpd_data_part in cpd_data)\n {\n currentPart.push(cpd_data_part);\n if(cpd_data_part in cpd.data)\n {\n delete cpd.data[cpd_data_part];\n }\n }\n cpd.data = controller._merge([cpd.data, JSON.parse(JSON.stringify(cpd_data))]);\n\n let returned = await controller.dsbClient.user.post('cpd', cpd);\n\n if(returned)\n {\n if('progress' in returned)\n {\n let progress_success = 0;\n let progress_total = 0;\n for(let aField in returned.progress)\n {\n if(returned.progress[aField] == true)\n {\n progress_success++;\n }\n progress_total++;\n }\n\n try\n {\n\n for(let i = 0; i < currentPart.length; i++)\n {\n // Check for progress_questions\n if(this.getSetting('show_incorrect_ans') == true && 'progress_questions' in returned)\n {\n if(currentPart[i] in returned.progress_questions)\n {\n for(let apartQuestion in returned.progress_questions[currentPart[i]])\n {\n let failedPanel = document.getElementById('panel-'+apartQuestion);\n\n if(failedPanel.classList.contains('false'))\n {\n failedPanel.classList.remove('false');\n }\n\n if(returned.progress_questions[currentPart[i]][apartQuestion]==false)\n {\n failedPanel.classList.add('false');\n }\n }\n }\n }\n\n // Check part progress\n if(currentPart[i] in returned.progress)\n {\n if(returned.progress[currentPart[i]] == true)\n {\n aMessage.setAttribute(`class`,`icon-check-circ`);\n aMessage.innerHTML=`Success. You have now completed `+progress_success+` of `+progress_total+` parts.`;\n footer_panel_submit.setAttribute('style','display:none');\n footer_panel_navigate.setAttribute('style','display:flex');\n if('on_success' in controller.hooks)\n {\n controller.hooks.on_success(controller);\n }\n if(progress_success == progress_total)\n {\n if('on_complete' in controller.hooks)\n {\n await controller.hooks.on_complete(controller, cpd.data);\n }\n }\n }\n else\n {\n aMessage.setAttribute(`class`,`icon-error`);\n aMessage.innerHTML=`One or more of your answers is wrong.
    Please review your answers and try again or report a problem.`;\n if('on_fail' in controller.hooks)\n {\n controller.hooks.on_fail(controller);\n }\n break;\n }\n }\n }\n }\n catch(ex)\n {\n aMessage.setAttribute(`class`,`icon-error`);\n console.error('currentPart processing error',ex);\n aMessage.innerHTML=`Sorry, something went wrong.
    Please try again or report a problem.`;\n if('on_fail' in controller.hooks)\n {\n controller.hooks.on_fail(controller);\n }\n }\n }\n }\n }\n\n message_ol.innerHTML = ``;\n message_ol.append(aMessage);\n spinner.remove();\n return true;\n });\n }\n }\n\n let question_count = 0;\n let parts = {};\n for(let question in this.questions)\n {\n question_count++;\n parts['part_'+this.questions[question].part_id]=true;\n let fieldset_panel = document.createElement(\"fieldset\");\n fieldset_panel.id = 'panel-question_'+this.questions[question].question_id;\n if(this.getSetting('show_count') == true)\n {\n fieldset_panel.classList.add('show-count');\n }\n fieldset_panel.innerHTML = \"

    \"+this.questions[question].question+\"

    \";\n if('options' in this.questions[question] && this.questions[question].type.startsWith(`checkbox`))\n {\n let options = document.createElement(\"ol\");\n options.id = 'question_'+this.questions[question].question_id;\n\n let list = [];\n let randomize = false;\n let trueCount = 0;\n\n // Prepare multi ans\n for(let i = 0; i < this.questions[question].options.length; i++)\n {\n if('answer' in this.questions[question].options[i])\n {\n if(this.questions[question].options[i].answer.toLowerCase() == 'true')\n {\n trueCount++;\n }\n }\n }\n\n let onclick__checkbox_radio = false;\n if(trueCount == 1)\n {\n onclick__checkbox_radio = function(){\n let group = document.getElementById(this.getAttribute(\"data-group\"));\n let inputs = group.querySelectorAll(`input`);\n if(inputs !== undefined || inputs.length > 0)\n {\n for(let i = 0; i < inputs.length; i++)\n {\n inputs[i].checked = false;\n }\n }\n this.checked = true;\n }\n }\n\n for(let i = 0; i < this.questions[question].options.length; i++)\n {\n let questions_element = document.createElement(\"li\");\n let name = 'part_'+this.questions[question].part_id+'-question_'+this.questions[question].question_id+'-option_'+this.questions[question].options[i].uid;\n let id = this.id+'_'+name;\n let value = this.questions[question].options[i].option;\n if(value)\n {\n if((value.indexOf(\"https://\") == 0) || (value.indexOf(\"http://\") == 0))\n {\n let _value = value;\n value = document.createElement('img');\n value.src = _value;\n value.width = \"300\";\n }\n }\n\n let input_element = ``;\n\n switch(this.questions[question].type)\n {\n case \"checkbox_random\":\n randomize = true;\n case \"checkbox\":\n input_element = document.createElement('input');\n input_element.type = 'checkbox';\n input_element.id = id;\n input_element.name = name;\n input_element.value = 'true';\n input_element.setAttribute('data-group',options.id);\n // Set\n if(current_user_data !== null && typeof current_user_data === 'object')\n {\n if(current_user_data.data !== null && typeof current_user_data.data === 'object' && ('data' in current_user_data))\n {\n if('part_'+this.questions[question].part_id in current_user_data.data)\n {\n if('question_'+this.questions[question].question_id in current_user_data.data['part_'+this.questions[question].part_id])\n {\n if('option_'+this.questions[question].options[i].uid in current_user_data.data['part_'+this.questions[question].part_id]['question_'+this.questions[question].question_id])\n {\n if(current_user_data.data['part_'+this.questions[question].part_id]['question_'+this.questions[question].question_id]['option_'+this.questions[question].options[i].uid] == 'true')\n {\n input_element.setAttribute(`checked`,`checked`);\n }\n }\n }\n }\n }\n }\n if(onclick__checkbox_radio)\n {\n input_element.setAttribute(`class`,`radiobutton`);\n input_element.onclick = onclick__checkbox_radio;\n }\n break;\n default:\n break;\n }\n\n\n let label_element = document.createElement('label')\n label_element.htmlFor = id;\n //label_element.appendChild(document.createTextNode(this.questions[question].options[i].option));\n if(value instanceof HTMLElement)\n {\n label_element.appendChild(value);\n }\n else\n {\n label_element.appendChild(document.createTextNode(value))\n }\n questions_element.append(input_element);\n questions_element.append(label_element);\n list.push(questions_element);\n }\n\n if(randomize)\n {\n this._shuffle(list);\n }\n for(let i = 0; i < list.length; i++)\n {\n options.append(list[i]);\n }\n fieldset_panel.append(options);\n }\n else\n {\n let answers = document.createElement(\"ol\");\n let questions_element = document.createElement(\"li\");\n let name = 'part_'+this.questions[question].part_id+'-question_'+this.questions[question].question_id;\n let id = this.id+'_'+name;\n\n let input_element = ``;\n\n switch(this.questions[question].type)\n {\n case \"text\":\n input_element = document.createElement('input');\n input_element.type = 'text';\n input_element.id = id;\n input_element.name = name;\n input_element.value = ((`value` in this.questions[question])?this.questions[question].value:``);\n\n if('pattern' in this.questions[question] && this.questions[question].pattern.length>0)\n {\n input_element.pattern = this.questions[question].pattern;\n input_element.title = 'Incorrect format, please try again.';\n if('pattern_message' in this.questions[question] && this.questions[question].pattern_message.length>0)\n {\n input_element.title = this.questions[question].pattern_message;\n }\n }\n\n // Set\n if(typeof current_user_data === 'object' && current_user_data !== null)\n {\n if('data' in current_user_data)\n {\n if('part_'+this.questions[question].part_id in current_user_data.data)\n {\n if('question_'+this.questions[question].question_id in current_user_data.data['part_'+this.questions[question].part_id])\n {\n input_element.value = current_user_data.data['part_'+this.questions[question].part_id]['question_'+this.questions[question].question_id];\n }\n }\n }\n }\n\n break;\n default:\n break;\n }\n questions_element.append(input_element);\n answers.append(questions_element);\n fieldset_panel.append(answers);\n\n }\n this.form_panel.append(fieldset_panel);\n }\n this.innerHTML = ``;\n\n\n // Check for completion\n let is_complete = false;\n if(current_user_data)\n {\n if('progress' in current_user_data)\n {\n let count_fails = 0;\n let count = 0;\n for(let thispart in parts)\n {\n if(!(thispart in current_user_data.progress))\n {\n count_fails++;\n }\n else if(current_user_data.progress[thispart] == false)\n {\n count_fails++;\n }\n }\n if(count_fails == 0)\n {\n is_complete = true;\n }\n }\n }\n\n footer_panel_submit.append(form_submission);\n for(let i = 0; i < this.footer.length; i++)\n {\n footer_panel_navigate.append(this.footer[i]);\n }\n\n\n if(is_complete)\n {\n footer_panel_submit.setAttribute('style','display:none');\n footer_panel_navigate.setAttribute('style','display:flex');\n\n let aMessage = document.createElement(\"li\");\n aMessage.setAttribute(`class`,`icon-check-circ`);\n aMessage.innerHTML=`You have already completed this part.`;\n message_ol.innerHTML = ``;\n message_ol.append(aMessage);\n }\n else\n {\n footer_panel_navigate.setAttribute('style','display:none');\n footer_panel_submit.setAttribute('style','display:flex');\n }\n\n this.form_panel.append(message_panel);\n this.form_panel.append(footer_panel_submit);\n this.form_panel.append(footer_panel_navigate);\n this.append(this.form_panel);\n }\n return;\n }\n}\n\n\n","//import MAAApp from './components/base.js';\n\n// Libs\nimport userHandler from './lib/user.js';\nimport contentHandler from './lib/content.js';\n\n// Parts\nimport analyticsHandler from './parts/analytics.js';\nimport eventListners from './parts/eventListners.js';\nimport scopeTest from './parts/scopeTest.js';\n\n// Core Components\nlet QUEUE_COMPONENT_LIST = {};\nimport COMPONENT_MAASPINNER from './components/spinner.js';\nQUEUE_COMPONENT_LIST.COMPONENT_MAASPINNER = COMPONENT_MAASPINNER;\nimport COMPONENT_MAANAV from './components/nav.js';\nQUEUE_COMPONENT_LIST.COMPONENT_MAANAV = COMPONENT_MAANAV;\nimport COMPONENT_DSBWORKSPACE from './components/dsb-workspace.js';\nQUEUE_COMPONENT_LIST.COMPONENT_DSBWORKSPACE = COMPONENT_DSBWORKSPACE;\n\n// Application Components\nimport COMPONENT_DSBLIST from './components/dsb-list/dsb-list.js';\nQUEUE_COMPONENT_LIST.COMPONENT_DSBLIST = COMPONENT_DSBLIST;\nimport COMPONENT_DSBSTEPBAR from './components/dsb-stepbar.js';\nQUEUE_COMPONENT_LIST.COMPONENT_DSBSTEPBAR = COMPONENT_DSBSTEPBAR;\nimport COMPONENT_DSBCATCHUP from './components/dsb-catchup.js';\nQUEUE_COMPONENT_LIST.COMPONENT_DSBCATCHUP = COMPONENT_DSBCATCHUP;\nimport COMPONENT_DSBREADER from './components/dsb-reader.js';\nQUEUE_COMPONENT_LIST.COMPONENT_DSBREADER = COMPONENT_DSBREADER;\nimport COMPONENT_DSBPOST from './components/dsb-post.js';\nQUEUE_COMPONENT_LIST.COMPONENT_DSBPOST = COMPONENT_DSBPOST;\nimport COMPONENT_DSBTASKS from './components/dsb-tasks.js';\nQUEUE_COMPONENT_LIST.COMPONENT_DSBTASKS = COMPONENT_DSBTASKS;\nimport COMPONENT_DSBQUIZ from './components/dsb-quiz.js';\nQUEUE_COMPONENT_LIST.COMPONENT_DSBQUIZ = COMPONENT_DSBQUIZ;\n\n\n\nasync function dynamic_import_component(name, file=false) {\n if(!file)\n {\n file = name;\n }\n let component = await import('./compile/'+file+'.js');\n component.default(); // Module loaded (export default)!\n customElements.define(name, component);\n}\n\n// contenthierachy_parts\n\nexport class DSBAPP extends HTMLElement {\n\n static get observedAttributes() {\n return ['layout','app_state'];\n }\n\n constructor() {\n super();\n console.log('constructor DSBAPP');\n var _this = this;\n this.DEBUG = true;\n this._errorMessage='';\n this._tabs = false;\n this._app_title = document.title;\n this._app_tab_title = '';\n this._load_complete=false;\n this._connected = false;\n this._cronIntervals = {};\n this._onboarding_component=false;\n /**\n window.addEventListener('load', function(){\n console.log(\"Initial init...\");\n _this.init();\n });\n */\n if(this.title)\n {\n this.title = document.title;\n }\n this.logged_in = false;\n this._root_path='';\n this._html__closebutton='';\n\n }\n\n get logo() {\n return this.getAttribute('logo');\n }\n\n set logo(newValue){\n this.setAttribute('logo', newValue);\n }\n\n get app_path() {\n return this.getAttribute('app_path');\n }\n\n set app_path(newValue){\n this.setAttribute('app_path', newValue);\n }\n\n get app_state() {\n return this.getAttribute('app_state');\n }\n\n set app_state(newValue){\n this.setAttribute('app_state', newValue);\n }\n\n get app_name() {\n return this.getAttribute('app_name');\n }\n\n set app_name(newValue){\n this.setAttribute('app_name', newValue);\n }\n\n get router() {\n return this.getAttribute('router');\n }\n\n set router(newValue){\n this.setAttribute('router', newValue);\n }\n\n get layout() {\n return this.getAttribute('layout');\n }\n\n set layout(newValue){\n this.setAttribute('layout', newValue);\n }\n\n get title() {\n return this.getAttribute('title');\n }\n\n set title(newValue){\n this.setAttribute('title', newValue);\n //this.title = newValue;\n }\n\n get settings() {\n return this.getAttribute('settings');\n }\n\n set settings(newValue){\n this.setAttribute('settings', newValue);\n }\n\n get tabs() {\n if(!this._tabs)\n {\n this._tabs = JSON.parse(``+this.getAttribute('tabs')+``);\n\n }\n return this._tabs;\n }\n\n set tabs(newValue){\n this.setAttribute('tabs', newValue);\n }\n\n _createUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n _update_DocumentTitle(newValue='')\n {\n let newtitle = ''\n if(this._app_title)\n {\n newtitle=this._app_title;\n }\n if(this._app_tab_title)\n {\n newtitle+=\" - \"+this._app_tab_title+\"\";\n }\n if(newValue && newValue.length >0)\n {\n newtitle+=\" / \"+newValue;\n }\n //console.error('########## SETTING TITLE:'+newtitle,this._app_title,this._app_tab_title);\n document.title = newtitle;\n }\n\n _dynamic_define_component(name)\n {\n let this_component = 'COMPONENT_'+name.toUpperCase().replace('-','');\n if(this_component in QUEUE_COMPONENT_LIST)\n {\n customElements.define(name, QUEUE_COMPONENT_LIST[this_component]);\n delete QUEUE_COMPONENT_LIST[this_component];\n }\n }\n\n\n async init()\n {\n try\n {\n\n // Register Components\n this._log('debug','init','Registering webcomponents...');\n this._dynamic_define_component('maa-spinner');\n this._dynamic_define_component('maa-nav');\n this._dynamic_define_component('maa-dsb');\n this._dynamic_define_component('dsb-workspace');\n\n //customElements.define('dsb-list', COMPONENT_DSBLIST);\n\n //customElements.define('dsb-catchup', COMPONENT_DSBCATCHUP);\n\n let settings = JSON.parse(``+this.settings+``);\n this.setting = settings;\n this._log('debug','init','Setting settings',this.setting);\n\n let loading_component = document.createElement(\"div\");\n loading_component.style=\"text-align: center;position:absolute;top:25%; width:100%;padding:0px;margin:0px;\";\n let loading_message = document.createElement(\"small\");\n loading_message.style=\"font-weight:normal;font-size:10px;padding-top:10px;color:grey;\";\n loading_message.innerHTML = \"Setting up...\";\n if(('loading_logo' in settings) && settings.loading_logo !== 'off')\n {\n loading_component.innerHTML = `\n

    \n

    \n \n

    \n

    Loading....

    \n `;\n }\n else\n {\n loading_component.innerHTML = `\n \n `;\n }\n this.innerHTML = '';\n loading_component.append(loading_message);\n this.append(loading_component);\n\n // Add parts\n this._setAnalytics = analyticsHandler;\n this._setApplicationListners = eventListners;\n\n this.dsbClient = {};\n\n // Setup Event listners\n this._log('debug','init','Setup event listners...');\n this._setApplicationListners();\n\n var _this = this;\n\n\n // Get additional customElements\n /**\n if(`customElements` in settings)\n {\n if(settings.customElements !== null && typeof Array.isArray(settings.customElements))\n {\n for(let i = 0; i < settings.customElements.length; i++)\n {\n // ok now what :)\n }\n }\n }\n */\n\n if(!('default_service' in settings))\n {\n settings.default_service='post';\n }\n\n if(!(`fw_tnc_url` in settings))\n {\n settings.fw_tnc_url = 'https://www.markallengroup.com/terms-and-conditions/';\n }\n\n if(`dsb_user_url` in settings)\n {\n this.dsbClient.user = new userHandler();\n\n if(!('refresh_token' in settings))\n {\n settings.refresh_token = '';\n }\n let user_settings = {};\n if('app_path' in settings)\n {\n user_settings.app_path=settings.app_path;\n }\n if('app_hash_url' in settings)\n {\n user_settings.app_hash_url=settings.app_hash_url;\n }\n for(let setting_key in settings)\n {\n if(setting_key.startsWith('user__'))\n {\n user_settings[setting_key.replace('user__','')]=settings[setting_key];\n }\n }\n loading_message.innerHTML='Setting up user...';\n await this.dsbClient.user.init(settings.dsb_user_url,settings.refresh_token,user_settings);\n }\n else\n {\n throw \"Missing dsb_user_url setting\";\n }\n\n // Set content\n if(`dsb_client_url` in settings)\n {\n let hooks = {};\n let headers = {};\n\n this.dsbClient.content = new contentHandler();\n loading_message.innerHTML='Connecting to content api...';\n await this.dsbClient.content.init(settings.dsb_client_url, hooks, this.dsbClient.user);\n\n if(`image_path` in settings)\n {\n this.dsbClient.content.image_path = settings.image_path;\n }\n\n if(this.app_path)\n {\n this.dsbClient.content.app_path = this.app_path;\n }\n\n this.dsbClient.content.default_service=settings.default_service;\n\n\n hooks.filters = {};\n hooks.filters.formatData_lookup = function(type, value)\n {\n if(\"lookups\" in settings)\n {\n if(typeof settings.lookups === 'object' && settings.lookups !== null)\n {\n if(type in settings.lookups)\n {\n if( value in settings.lookups[type])\n {\n return settings.lookups[type][value];\n }\n }\n else\n {\n console.log('formatData_lookup::Not sure what '+type+' is...');\n }\n }\n else\n {\n console.log('formatData_lookup:: Missing lookups...');\n }\n }\n return value;\n }\n\n }\n else\n {\n throw \"Missing dsb_client_url setting\";\n }\n\n // Setup and Instantiate Analytics\n this._setAnalytics();\n\n var hashchange = function() {\n let hash = location.hash;\n if(hash.length > 0)\n {\n if(hash.indexOf(\"#/\") > -1)\n {\n hash = hash.substring((hash.indexOf(\"#/\")+2),hash.length);\n }\n hash = hash.split(\"/\");\n _this._route(hash[0], hash[1], hash[2], hash.slice(3,hash.length), '');\n }\n };\n\n window.addEventListener('dsb_app-reload', function(){\n console.debug(\"Reloading from path...\");\n //Fire hashchange function for initial load\n hashchange();\n });\n\n window.addEventListener('hashchange', function(){\n console.debug(\"Hash change detected...\");\n hashchange();\n }, false);\n\n this._log('debug','init',\"Setting viewport...\");\n this.dsbClient.user.env.refreshViewPort();\n\n if(!await this.dsbClient.user.is_loggedin())\n {\n this._log('warning','init','Not logged in...');\n this._errorMessage = 'Not Logged in....';\n loading_message.innerHTML='Not logged in...';\n if(!await this.dsbClient.user.is_offline())\n {\n if(this.dsbClient.user.isPending())\n {\n loading_message.innerHTML='Login pending...';\n this.setAttribute(`layout`, `login-pending`);\n }\n else\n {\n\n if(!this.dsbClient.user.run_login_redirect())\n {\n this.setAttribute(`layout`, `login`);\n }\n else\n {\n //throw \"Cannot login to app\";\n return;\n }\n }\n }\n else\n {\n this.setAttribute(`layout`, `offline`);\n }\n this._render();\n }\n else\n {\n this._log('debug','init','You appear to be logged in :)');\n loading_message.innerHTML='Checking preconditions...';\n // Ok check for preconditions\n if(('preconditions' in settings) && (settings.preconditions == 'on'))\n {\n this._log('debug','init','Has preconditions');\n\n // App must be installed\n if(('preconditions__install' in settings) && settings.preconditions__install == 'on')\n {\n if(!this.dsbClient.user.env.isInstalled())\n {\n this._log('debug','init','Requires installation');\n let thisOS = this.dsbClient.user.env.getOS();\n //alert('jasons quick test'+JSON.stringify(this.dsbClient.user.env.get()));\n if('preconditions__install-'+thisOS+'_postid' in settings)\n {\n await this._dynamic_define_component('dsb-post');\n let component = document.createElement(\"dsb-post\");\n component.setDSBClient(this.dsbClient);\n component.setAttribute(`service`, 'static');\n component.setAttribute('post_id', settings['preconditions__install-'+thisOS+'_postid']);\n component.innerHTML = ``;\n window.dispatchEvent(new CustomEvent('dsb-pwa-transient_modal', {detail: {content:component,hide:['close','refresh']}}));\n return;\n\n }\n else if('preconditions__install_postid' in settings)\n {\n await this._dynamic_define_component('dsb-post');\n let component = document.createElement(\"dsb-post\");\n component.setDSBClient(this.dsbClient);\n component.setAttribute(`service`, 'static');\n component.setAttribute(`settings`,JSON.stringify({'base_update':'off','header':'off','clean_body':'on','pulldown_refresh':'off','lazy_images':'off'}));\n component.setAttribute('post_id', settings.preconditions__install_postid);\n component.innerHTML = ``;\n window.dispatchEvent(new CustomEvent('dsb-pwa-transient_modal', {detail: {content:component,hide:['close','refresh']}}));\n return;\n }\n else\n {\n let component = document.createElement(\"div\");\n let component_uid = this._createUUID();\n component.innerHTML = `\n
    \n
    \n

    This app requires installation

    \n

    In your browsers menu please click click \"Add to home\".
    \n Note: You may be asked to login and/or enter a pin code on install\n

    \n
    \n
    \n `;\n window.dispatchEvent(new CustomEvent('dsb-pwa-transient_modal', {detail: {content:component,hide:['close','refresh']}}));\n return;\n }\n }\n }\n\n // App requires pin\n if(('preconditions__pin' in settings) && settings.preconditions__pin !== 'off')\n {\n let chars_to_numbers = function(string){\n if(isNaN(string))\n {\n let matrix = { a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, o: 15, p: 16, q: 17, r: 18, s: 19, t: 20, u: 21, v: 22, w: 23, x: 24, y: 25, z: 26 }\n let result = [];\n for(let i = 0; i\n
    \n \n

    This app is currently in closed beta.

    \n

    To access please enter your closed beta access pin in the box below, doing so means you agree to the terms and conditions.

    \n
    \n

    \n `+(_fw_workbench_accesstoken.length>0?'

    Sorry this token is either invalid or has expired
    ':'')+`\n \n \n `;\n let component_submit = document.createElement(\"span\");\n component_submit.style = 'display:inline-block;background-color: #d92835;color:#fff;font-size: 14px; padding-left: 10px; padding-right: 10px; cursor: pointer; height: 44px; line-height: 44px; width: 50%; margin: auto; display: block; text-align: center;';\n component_submit.innerHTML = 'Participate in beta';\n component_submit.onclick = function ()\n {\n let token = document.getElementById(component_uid+'__access_restriction_token');\n _this.dsbClient.user.setUserCookie('fw_workbench_'+_this.app_name+'_pin',token.value,3650);\n window.location.reload();\n }\n component.append(component_submit);\n window.dispatchEvent(new CustomEvent('dsb-pwa-transient_modal', {detail: {content:component,hide:['close','refresh']}}));\n return;\n }\n\n }\n\n // Onboarding\n if('onboarding_postid|version' in settings)\n {\n let _fw_workbench_onboarding = this.dsbClient.user.getUserCookie('fw_workbench_'+this.app_name+'_onboarding');\n if(_fw_workbench_onboarding && _fw_workbench_onboarding==settings['onboarding_postid|version'])\n {\n //Skip onboarding\n }\n else\n {\n let post_id = settings['onboarding_postid|version'];\n post_id = post_id.split('|')[0];\n await this._dynamic_define_component('dsb-post');\n this._onboarding_component = document.createElement(\"dsb-post\");\n this._onboarding_component.setDSBClient(this.dsbClient);\n this._onboarding_component.setAttribute(`service`, 'static');\n this._onboarding_component.setAttribute('post_id', post_id);\n this._onboarding_component.setAttribute(`settings`,JSON.stringify({'base_update':'off','header':'off','clean_body':'on','pulldown_refresh':'off','lazy_images':'off'}));\n this._onboarding_component.innerHTML = ``;\n this.dsbClient.user.setUserCookie('fw_workbench_'+_this.app_name+'_onboarding',settings['onboarding_postid|version'],3650);// 10 Year cookie\n }\n\n }\n }\n\n if(location.hash.length > 0)\n {\n //Fire hashchange function for initial load\n loading_message.innerHTML='Resuming...';\n hashchange();\n }\n else\n {\n // Go find tab or app\n loading_message.innerHTML='Rendering...';\n this._render();\n }\n }\n }\n catch(ex)\n {\n this._log('error','init', 'Cannot init DSBAPP!', ex);\n this._errorMessage=ex;\n this.layout='error';\n this._render();\n }\n\n }\n\n _log(type,source,message,data='')\n {\n let _message = 'dsb-app/DSBAPP::'+source+'- '+message;\n switch(type)\n {\n case \"debug\":\n console.debug(_message,data);\n break;\n case \"warning\":\n console.warn(_message,data);\n break;\n case \"error\":\n console.error(_message,data);\n break;\n default:\n console.log(_message,data);\n }\n }\n\n attributeChangedCallback(name, oldValue, newValue)\n {\n if(`app_state` == name && oldValue != null && oldValue!==newValue )\n {\n this.connectedCallback();\n }\n }\n\n connectedCallback()\n {\n document.body.style.backgroundColor = \"#4a4a4a\";\n if(this.app_state =='wait')\n {\n let _this = this;\n // Ok waiting.....\n this._log('debug','connectedCallback','Waiting....',this.app_state);\n this.timeout__wait = setTimeout(function(){\n console.error('###### --- fw-workbench CRON/connectedCallback -----');\n if(_this.app_state == 'wait')\n {\n _this.innerHTML=`\n
    \n

    \n

    Updated, please restart the app

    \n Sorry, this update requires a restart.\n
    '`;\n }\n },60000);\n }\n else\n {\n this._log('debug','connectedCallback','Runnig init....',this.app_state);\n if(this.timeout__wait)\n {\n clearTimeout(this.timeout__wait);\n }\n\n //Setup cron\n\n\n this._connected = true;\n this.init();\n }\n }\n\n async _render(mode=null)\n {\n try\n {\n this._root_path = '/#/'+this.layout;\n\n let route = `document.querySelector('dsb-app').route(this);`;\n let tabbed_element = '';\n\n if(this.tabs && this.setting)\n {\n if(Object.keys(this.tabs).length > 1)\n {\n tabbed_element = document.createElement(\"nav\");\n let tabbed_element_ul = document.createElement(\"ul\");\n\n for(let aTab in this.tabs)\n {\n if('id' in this.tabs[aTab])\n {\n let _li = document.createElement(\"li\");\n let li_class = 'show-name';\n if('icon' in this.tabs[aTab])\n {\n li_class = this.tabs[aTab].icon;\n }\n _li.innerHTML = ``+this.tabs[aTab].name+``;\n tabbed_element_ul.append(_li);\n }\n else\n {\n console.error('Missing id in Tab', this.tabs[aTab]);\n throw 'Issue with Tab';\n }\n }\n tabbed_element.append(tabbed_element_ul);\n }\n }\n\n // Check for tabs in setup if no layout has been specified\n if(!this.layout && !location.hash)\n {\n if(this.tabs && this.setting)\n {\n if(Object.keys(this.tabs).length > 1)\n {\n\n this.layout = `tabbed`;\n }\n else\n {\n this.layout = `single`;\n }\n\n for(let aTab in this.tabs)\n {\n if('id' in this.tabs[aTab])\n {\n window.location.hash = '/'+this.layout+'/static/post/'+this.tabs[aTab].id;\n return;\n }\n else\n {\n console.error('Missing id in Tab', this.tabs[aTab]);\n throw 'Issue with Tab';\n }\n }\n }\n }\n\n console.log('Setting layout '+this.layout+'...',this.setting)\n\n //
    Back
    \n\n this._html_offlineindicator = `
     
    `;\n\n this._html_refresh = `
     
    `;\n\n this._html__closebutton = `
    Back
    `;\n if((typeof this.setting === 'object') && (this.setting !== null) && ('close_button' in this.setting))\n {\n switch(this.setting['close_button'])\n {\n case \"iframe_back\":\n this._html__closebutton = `
    Back
    `;\n break;\n case \"iframe_close\":\n this._html__closebutton = `
     
    `;\n break;\n default:\n this._html__closebutton=\"\";\n break;\n }\n\n }\n\n this._load_complete=true;\n switch(this.layout)\n {\n case \"reader\":\n this.innerHTML = `\n \n
    \n
      \n
    • \n
    • \"Farmers
    • \n
    • Close
    • \n
    \n
    \n \n
    \n
    \n
      \n
    • \"Farmers
    • \n
    • \n
    • \n `+this._html_refresh+this._html_offlineindicator+this._html__closebutton+`\n
    • \n
    \n
    \n \n \n \n `;\n break;\n case \"single\":\n this.innerHTML = `\n \n
    \n
      \n
    • \n
    • \"Farmers
    • \n
    • Close
    • \n
    \n
    \n \n
    \n
    \n
      \n
    • \"Farmers
    • \n
    • \n
    • \n `+this._html_refresh+this._html_offlineindicator+this._html__closebutton+`\n
    • \n
    \n
    \n \n \n \n `;\n break;\n case \"comrisk\":\n this.innerHTML = `\n
    \n
      \n
    • \"Farmers
    • \n
    • \n
    • \n `+this._html_refresh+this._html_offlineindicator+this._html__closebutton+`\n
    • \n
    \n
    \n \n \n \n `;\n break;\n case \"tabbed\":\n this.innerHTML = `\n\n \n
    \n
      \n
    • \n
    • \"Farmers
    • \n
    • Close
    • \n
    \n
    \n \n
    \n
    \n
      \n
    • \"Farmers
    • \n
    • \n
    • \n `+this._html_refresh+this._html_offlineindicator+this._html__closebutton+`\n
    • \n
    \n
    \n \n \n \n `;\n this.append(tabbed_element);\n break;\n case \"maintenance\":\n this.innerHTML = `\n \n
    \n
      \n
    • \n
    • \"Farmers
    • \n
    • Close
    • \n
    \n
    \n \n
    \n
    \n
      \n
    • \"Farmers
    • \n
    • \n
    • \n `+this._html_refresh+this._html_offlineindicator+this._html__closebutton+`\n
    • \n
    \n
    \n \n
    \n
    \n

    Maintenance work ongoing...

    \n

    Sorry we are currently performing maintenance please click here to try again.

    \n
    \n
    \n
    \n `;\n return false;\n break;\n case \"login\":\n this.innerHTML = `\n \n
    \n
      \n
    • \n
    • \"Farmers
    • \n
    • Close
    • \n
    \n
    \n \n
    \n
    \n
      \n
    • \"Farmers
    • \n
    • \n
    • \n `+this._html_refresh+this._html_offlineindicator+this._html__closebutton+`\n
    • \n
    \n
    \n \n
    \n \n
    \n
    \n `;\n return false;\n break;\n case \"login-pending\":\n this.innerHTML = `\n Session expired, reloading...\n `;\n return false;\n break;\n case \"error\":\n return this._throwFatalError();\n break;\n case \"offline\":\n this.innerHTML = `\n
    \n
      \n
    • \"Farmers
    • \n
    • \n
    • \n `+this._html_refresh+this._html_offlineindicator+this._html__closebutton+`\n
    • \n
    \n
    \n \n
    \n
    \n

    Offline

    \n

    Sorry, offline version not available.
    Please try again later when you have an internet connection :)

    \n
    \n Details\n
    \n `+this._errorMessage+`\n
    \n
    \n
    \n
    \n
    \n `;\n this._errorMessage='';\n break;\n default:\n\n /**\n this.innerHTML = `\n
    \n \n `;\n */\n //this._load_complete=false;\n return this._throwFatalError('layout=Default');\n }\n\n //window.dispatchEvent(new CustomEvent('dsb_app-reload', {message: ''}));\n return true;\n }\n catch(ex)\n {\n return this._throwFatalError('_render:'+ex);\n }\n\n }\n\n _throwFatalError(message=null)\n {\n if(!(typeof message === 'string'))\n {\n message=this._errorMessage;\n }\n\n this.innerHTML = `\n
    \n
      \n
    • \"Farmers
    • \n
    • \n
    • \n `+this._html__closebutton+`\n
    • \n
    \n
    \n \n
    \n
    \n
    \n

    Sorry an error has occured.

    \n

    \n Please try again by clicking here or try again later.\n

    \n

    \n

    \n Details\n
    \n `+message+`\n
    \n
    \n

    \n
    \n
    \n
    \n `;\n console.error('dsb-app: Fatal Error',message,this._errorMessage);\n this._errorMessage='';\n return false;\n }\n\n async login()\n {\n let url = \"https://www.fwi.co.uk/wp-login.php?action=refresh&type=pm-sso-token-redirect\";\n let response = await fetch(url);\n console.log(response);\n }\n\n route(element)\n {\n if(element instanceof HTMLElement)\n {\n let service = element.getAttribute('data-service');\n let query = element.getAttribute('data-query');\n let id = element.getAttribute('data-id');\n let target = element.getAttribute('data-target');\n let type = element.getAttribute('data-type');\n if(id)\n {\n query = id;\n }\n this._route(this.layout, service, type, query, target);\n }\n else\n {\n console.log('router.routeByElement: Not an element');\n }\n }\n\n add_applist(tray_id)\n {\n let _this = this;\n // Set Feedback form\n if(`feedback_form_url` in _this.setting)\n {\n var apps_aside = document.createElement(\"aside\");\n apps_aside.id=\"apps_aside_\"+tray_id;\n apps_aside.setAttribute('class','right');\n apps_aside.setAttribute('data-append_location','');\n //feedback_aside.setAttribute('style','padding:10px;');\n\n window.dispatchEvent(new CustomEvent('dsb-pwa-append_tray', {detail: {onclick: async function(){\n\n let zindex = window.getZIndex(document.querySelector('#'+tray_id));\n let panel = document.querySelector('#apps_aside_'+tray_id);\n let append_location = panel.getAttribute('data-append_location');\n\n if(zindex && !isNaN(zindex))\n {\n panel.style.zIndex = zindex+1;\n }\n panel.innerHTML = `\n \n `;\n panel.classList.toggle('show');\n if(!(panel.classList.contains('show')))\n {\n panel.innerHTML = ``;\n }\n\n try\n {\n\n }\n catch(ex)\n {\n console.error(ex);\n panel.innerHTML = `\n
    \n
    \n

    Sorry an error has occured.

    \n

    Please try again later.

    \n
    \n
    `;\n }\n\n\n },icon: 'm-icon-apps',\n name: 'apps',\n icon_size: '25px',\n init_append:apps_aside,\n overlay:true,\n tray_id: tray_id\n }}));\n\n }\n }\n\n add_feedback(tray_id)\n {\n let _this = this;\n // Set Feedback form\n if(`feedback_form_url` in _this.setting)\n {\n var feedback_aside = document.createElement(\"aside\");\n feedback_aside.id=\"feedback_aside_\"+tray_id;\n feedback_aside.setAttribute('class','right');\n feedback_aside.setAttribute('data-append_location','');\n //feedback_aside.setAttribute('style','padding:10px;');\n\n window.dispatchEvent(new CustomEvent('dsb-pwa-append_tray', {detail: {onclick: async function(){\n\n let zindex = window.getZIndex(document.querySelector('#'+tray_id));\n let panel = document.querySelector('#feedback_aside_'+tray_id);\n let append_location = panel.getAttribute('data-append_location');\n\n if(zindex && !isNaN(zindex))\n {\n panel.style.zIndex = zindex+1;\n }\n panel.innerHTML = `\n \n `;\n panel.classList.toggle('show');\n if(!(panel.classList.contains('show')))\n {\n panel.innerHTML = ``;\n }\n\n try\n {\n if('email' in _this.dsbClient.user.profile)\n {\n var feedback_aside_wrapper = document.createElement(\"div\");\n feedback_aside_wrapper.setAttribute(\"style\",\"border:0px;margin:0px;padding-left:10px;padding-right:10px;height:calc(100vh - 3em);\");\n var feedback_aside_iframe = document.createElement(\"iframe\");\n feedback_aside_iframe.id = 'feedback_aside_'+tray_id+'_iframe';\n feedback_aside_iframe.src = _this.setting.feedback_form_url+\"&email=\"+_this.dsbClient.user.profile.email+\"&sourceurl=\"+location+append_location;\n feedback_aside_iframe.setAttribute(\"data-target_url\",_this.setting.feedback_form_url+\"&email=\"+_this.dsbClient.user.profile.email+\"&sourceurl=\"+location+append_location);\n feedback_aside_iframe.setAttribute(\"width\",\"100%\");\n feedback_aside_iframe.setAttribute(\"height\",\"100%\");\n feedback_aside_iframe.setAttribute(\"style\",\"border:0px;margin:0px;padding:0px;\");\n panel.innerHTML = ``;\n feedback_aside_wrapper.append(feedback_aside_iframe);\n panel.append(feedback_aside_wrapper);\n }\n }\n catch(ex)\n {\n console.error(ex);\n panel.innerHTML = `\n
    \n
    \n

    Sorry an error has occured.

    \n

    Please try again later.

    \n
    \n
    `;\n }\n\n\n },icon: 'm-icon-feedback',\n online_only:true,\n name: 'feedback',\n icon_size: '25px',\n init_append:feedback_aside,\n overlay:true,\n tray_id: tray_id\n }}));\n\n }\n }\n\n async _route(app, service, type, query, target)\n {\n let _this = this;\n let rendered = false;\n\n try\n {\n if(app)\n {\n console.log('Ok routing for app ('+app+')..');\n this.setAttribute(`layout`, app);\n rendered = await this._render();\n }\n else\n {\n throw 'Dunno what to do';\n }\n\n if(rendered)\n {\n\n if(!service)\n {\n\n console.error('Routing error...',service,rendered);\n return;\n }\n\n if('dsb-modal-workspace' == target)\n {\n target = document.body.querySelector(target);\n target.innerHTML = ``;\n document.querySelector('dsb-modal').classList.toggle('show');\n }\n else if(target)\n {\n target = document.body.querySelector(target);\n }\n else\n {\n target = document.body.querySelector('dsb-workspace');\n }\n\n var overlay = document.createElement(\"div\");\n overlay.setAttribute(`class`,\"dsb-workspace-overlay\");\n overlay.innerHTML = '';\n\n switch(type)\n {\n case \"collection\":\n this._dynamic_define_component('dsb-reader');\n this._dynamic_define_component('dsb-tasks');\n this._dynamic_define_component('dsb-quiz');\n this._dynamic_define_component('dsb-post');\n var component = document.createElement(\"dsb-reader\");\n component.setDSBClient(this.dsbClient);\n component.setAttribute(`service`, service);\n component.collection_id = query;\n component.innerHTML = ``;\n target.innerHTML = ``;\n target.append(overlay);\n target.append(component);\n break;\n case \"board\":\n var component = document.createElement(\"dsb-board\");\n component.setDSBClient(this.dsbClient);\n component.setAttribute(`service`, service);\n component.collection_id = query;\n component.innerHTML = ``;\n target.innerHTML = ``;\n target.append(overlay);\n target.append(component);\n break;\n case \"post\":\n this._dynamic_define_component('dsb-post');\n this._dynamic_define_component('dsb-list');\n this._dynamic_define_component('dsb-stepbar');\n this._dynamic_define_component('dsb-reader');\n this._dynamic_define_component('dsb-tasks');\n this._dynamic_define_component('dsb-quiz');\n var component = document.createElement(\"dsb-post\");\n component.setDSBClient(this.dsbClient);\n component.setAttribute(`service`, service);\n component.setAttribute('post_id', query);\n component.innerHTML = ``;\n target.innerHTML = ``;\n target.append(overlay);\n target.append(component);\n break;\n default:\n this._dynamic_define_component('dsb-post');\n this._dynamic_define_component('dsb-list');\n var component = document.createElement(\"dsb-list\");\n component.setDSBClient(this.dsbClient);\n component.setAttribute(`service`, service);\n component.setAttribute(`query`, query);\n component.setAttribute(`type`, type);\n component.setAttribute(`root_path`, this.layout);\n component.innerHTML = ``;\n\n target.innerHTML = ``;\n target.append(component);\n break;\n }\n\n if((typeof this.setting === 'object') && (this.setting !== null))\n {\n if('tray_feedback' in this.setting)\n {\n switch(this.setting['tray_feedback'].toLowerCase())\n {\n case \"off\":\n break;\n default:\n this.add_feedback('dsb-pwa_tray');\n break;\n }\n }\n else\n {\n this.add_feedback('dsb-pwa_tray');\n }\n\n if('tray_applist' in this.setting)\n {\n switch(this.setting['tray_applist'].toLowerCase())\n {\n case \"off\":\n break;\n default:\n this.add_applist('dsb-pwa_tray');\n break;\n }\n }\n else\n {\n this.add_applist('dsb-pwa_tray');\n }\n\n }\n else\n {\n this.add_feedback('dsb-pwa_tray');\n }\n\n if(this._onboarding_component && this._onboarding_component instanceof HTMLElement)\n {\n window.dispatchEvent(new CustomEvent('dsb-pwa-transient_modal', {detail: {content: this._onboarding_component,hide:['refresh','feedback']}}));\n }\n\n console.log('In router:: Fetch '+service+'('+query+'), '+target);\n }\n }\n catch(ex)\n {\n return this._throwFatalError('_route:'+ex);\n }\n }\n}\n\n\ncustomElements.define('dsb-app', DSBAPP);\n"],"names":["runtime","exports","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","key","value","defineProperty","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","state","method","arg","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","done","makeInvokeMethod","fn","call","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","resolve","reject","invoke","result","__await","then","unwrapped","error","undefined","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","constructor","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","toString","keys","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","Function","_typeof","instance","Constructor","ReferenceError","_defineProperties","target","props","descriptor","protoProps","staticProps","_setPrototypeOf","o","p","subClass","superClass","assertThisInitialized","_getPrototypeOf","indexOf","Reflect","construct","sham","Proxy","Date","e","_construct","Parent","args","Class","isNativeReflectConstruct","a","apply","bind","arguments","_wrapNativeSuper","_cache","Map","isNativeFunction","has","get","set","Wrapper","asyncGeneratorStep","gen","_next","_throw","DatabaseHandler","db_name","db_version","db_tables","console","log","cache","db","window","indexedDB","_this","open","onerror","event","errorCode","onupgradeneeded","objectStore","objectStoreName","debug","createObjectStore","keyPath","autoIncrement","indexes","thisIndex","default","generated_onupdate","createIndex","unique","onsuccess","close","id","data","_setupDB","thisTransaction","transaction","thisObjectStore","thisField","Math","floor","put","oncomplete","ex","query_type","query_value","thisObjectStoreRequest","theseIndexes","theseIndexes_values","anIndex","thisObjectStoreIndex","index","singleKeyRange","IDBKeyRange","only","thisObjectStoreIndexCursor","openCursor","allResults","cursor","continue","UserHandler","hooks","settings","token","url","status","profile","refresh_url","initial_load","local_db","last_checked_online","_offline","offline_user","refresh","_log","online_check_url","app_path","endsWith","online_check_timeout","env","init","force","test","navigator","userAgent","substr","isMobile","cookieEnabled","document","cookie","pwa_supportsmanifest","HTMLLinkElement","createElement","relList","supports","browser","includes","OS","clientStrings","s","r","cs","OSVersion","exec","appVersion","maxTouchPoints","replace","toLowerCase","viewPortSizes","viewPort","isInstalled","getOS","getOSVersion","standalone","matchMedia","matches","print","innerWidth","dimentions","fullheight","fullwidth","refreshViewPort","dsb_app_defines","setAttribute","innerHTML","querySelector","append","large","getElementById","offsetWidth","medium","small","xsmall","remove","getComputedStyle","documentElement","getPropertyValue","getDimentions","getViewport","width","isViewport","_portSize","portSize","Array","isArray","onresize","addEventListener","detail","is_offline","offline","_refresh_profile_from_token","_connect_to_endpoint","dsbClient","DatastoreBuilderClient","endpoint","headers","bootstrap","exp","didTimeOut","_this2","encodeURIComponent","location","origin","_getCookie","timeout","setTimeout","iframe","onload","clearTimeout","body","this_log","auto_renew","force_login_on_fail","renew_session","run_login_redirect","base64Url","split","base64","jsonPayload","decodeURIComponent","atob","map","c","charCodeAt","join","JSON","parse","hasJWTExpired","login_url","dispatchEvent","CustomEvent","role","is_loggedin","databaseHandler","guid","cname","cvalue","exdays","_setCookie","hostname","_deleteCookie","ca","substring","myCookie","path","domain","d","setTime","getTime","expires","toUTCString","customDimensions","entitlements","user_entitlements_append","anEntitlement","demographics","raw","user_demographics_append","arawDemographic","arawDemographic_val","stringify","toUpperCase","timestamp","format","show_time","date","return_date","calculateTimimg","months","years","days","weeks","total","time_difference","dwmy","trunc","_return_date","string","nth","year","getFullYear","month","getMonth","day","getDate","hours","getHours","minutes","getMinutes","suggested_offline_status","run_fetch","last_five_min","fetch","response","catch","source","message","_message","warn","msgBuffer","TextEncoder","encode","crypto","subtle","digest","hashBuffer","hashArray","from","Uint8Array","hashHex","b","query","firstOnly","json","clean_target","has_localdb","handles_table","fromEntries","URLSearchParams","allow_offline","startsWith","params","upsert","post","ii","ContentHandler","user","image_path","_load","mode","getQueryParams","_params","decodedKey","decodedValue","format_date","diff","_param_key","same","changed","to","missing","param_key","thisQueryString","url_params","aUrl_paramsKey","retry","code","renew","applyFilter","setDate","ga_matrix","ga","page_url","pathname","hash","gwa","pubdate","contentid","author","aboutness","taxonomies","sitesection_count","contenttype","types","title","_update_DocumentTitle","_updateCustomDimensions","sitesection1","contenthierachy","contenthierachy_parts","aDimensions","pagename","sitesection2","sitesection3","sitesection4","DEBUG","methods","update","appname","_app_tab_title","app_tab_title","layout","_render","tray_id","iam","HTMLElement","getTrayId","workspace","getWorkspace","parentNode","init_append","tray_item_id","element","icon","onclick","online_only","classList","add","icon_size","overlay","contains","tray_items","parentElement","querySelectorAll","click","toggle","prepend","elem","source_id","requestFullscreen","webkitRequestFullscreen","msRequestFullscreen","exitFullscreen","webkitExitFullscreen","msExitFullscreen","_createUUID","zindex","getZIndex","html","logo","content","tagName","style","zIndex","add_feedback","setting","check_for_update","app_hash_url","ok","app_name","has_update","app_hash","update_indicator","setProperty","offline_element","getElementsByClassName","display","toggleClass","getAttribute","_fw_workspace__online_only__onclick","task","slot","_cronIntervals","setInterval","message_panel","message_panel_target","message_panel_content","hide","modal","action","className","feedback_aside_iframe","link_path","outerHTML","_type","_refresh","pStart","x","y","pCurrent","refresh_panel_target","refresh_panel","loadPulldown","touch","targetTouches","screenX","screenY","changedTouches","changeY","abs","scrollTop","fw_workbench","getAppStyleProperties","property","getApp","app","getColorLuminance","hex","lum","String","rgb","parseInt","round","min","max","smoothScroll","smoothScrollFeature","scroll","top","behavior","int","clearInterval","z","defaultView","aParent","tray","copy","newValue","MAANav","attachShadow","menuBtn","shadowRoot","alert","_toggleMenu","tabs","global_loader","active","render","thisTab","MouseEvent","oldValue","random","isLoading","has_tabs","nav_panel","tabs_panel","tab_count","has_active","on_click","menu_li","tab","tab_id","_link","section_panel","raw_query","controller","_contentElements","filter","has_actions","keyword_component","keyword","placeholder","searchButton_component","disabled","akey","preventDefault","formData","FormData","entries","submission","processQuery","parent","_parent","_settings","_has_post_rendered","_ref_card_noresults","_has_refreshed","_scroll_to_top_element","_slide_number","_after_render","_start_date","_update_count","_postid_to_cardid","get_list_count","number","list","childNodes","getElementsByTagName","pre_render","DATA","hide_all_posts","display_dir","progress_steps_component","progress_steps_settings","add_order","setHeader","header","text","test_message","count","countdown","update_countdown","toDate","tomorrow","setHours","diffMS","diffHr","diffMi","currentDate","user_status","_update","post_render","bottom","middle","_swipe_handler","offsetHeight","last_card","coverflow_select","setStep","coverflow_update","coverflow_refresh_selected","N","children","TFN","k","pow","sin","PI","cos","n","size","_setPropertyI","x0","y0","swipeXlocked","refresh_data","awaiting_move","locked","refresh_panel_id","w","ini","fin","anf","_i","original_i","this_panel","getCard","card","x0_hold","rID","last_scrollpercentage","scroll_to_top","coverflow_xlock_shown","new_i","stopAni","current_card_number","cancelAnimationFrame","unify","lock","clientX","clientY","drag","Xdiff","unlock","_view_state","stopPropagation","f","toFixed","Ydiff","_Ydiff","move","card_element","coverflow_actions","card_i","scroll_percentage","scrollHeight","op_in","opacity","_scroll_to_top_element_timer_in","op_out","_scroll_to_top_element_timer_out","parseFloat","dx","sign","ani","cf","requestAnimationFrame","MutationObserver","observe","childList","new_data","current_data","expirationdate","LIST_POSITION","CURRENT_DATA","ITEM","ITEM_SETTINGS","service","default_service","item_title","textAlign","item_icon","advertiser_logo","advertiser_logo_img","content_block","images","content_thumbnail","overlay_bottom","overlay_top","height","card_id","coverflow_component","setDSBClient","position","coverflow_slidedownbutton","scroll_to","getBoundingClientRect","page_view","coverflow_nav_slideupbutton","coverflow_nav_nextbutton","li","coverflow_nav","appendContent","grid_layout_end","data_length","grid_size","component","_navigationHandler","direction","function__navigateItems","item_image","attach_to_item","image_size","_post_image","default_image","imageObserver","item_excerpt","excerpt","category","item_metadata","item_metadata_li","primary_id","this_tax","root_parent","slug","padding","lineHeight","TEMPLATES","coverflow","template_coverflow","template_list","modal_id","_id","loader","_update_skip","_update_running","is_refresh","view_mode","_raw_query","insert","aNewItem","splice","infinateScrollObserver","HTMLFormElement","filterHandler","IntersectionObserver","unobserve","template","HTMLUListElement","navigation","observer","isIntersecting","missing_image","functon_imageExists","callback","img","Image","src","image","dataset","exists","list_position","item","aSetting","item_settings","_skipable_id","updatable","_steps","messages","bar","progress","progress_header","aStep","_step","_refreshHeader","_getStats","upsert_mode","onclick_function","status_change","_refresh_step","refresh_progress","progress_mode","HTMLLIElement","width_size","progress_background","label","stats","_count","_total","_this3","scrollObserver","item_loader","_json","cpd_schemes","_cpd_schemes","schemes","_data","sections","parts","metadata","cpd_points","scheme","rendered","post_widgets","field","all","current_user_data","_getUserData","_current_user_data","return_data","aScheme","points","base_update","modal_mode","resume_aside","panel","_getUserDataByStatus","userdata","active_collection","nav_task_panel","current_id","link_value","uid","hash_url","part","current_user_progress_total","current_user_progress_complete","update_date","last_update","created_date","addTask","addHook","refreshActive","collection_id","setData","workspaces_modal_panel","primary_cat","workspaces_panel","current_user_progress","function__refresh_current_user_progress","asection","_getUserDataPointsHistory","current_user_data_points_history","_getUserSchemeMembershipIds","current_user_data_scheme_membership_ids","current_schemes","getCPDSchemes","this_scheme_id","scheme_id","pattern","pattern_message","lookup_Scheme","codevalidationpattern","codevalidationmessage","color","color_text","completed","codes","hook__route_task_click","setPostData","post_data","target_id","footer","back_button","back_id","task_id","open_task","open_task_uid","cpd","link_type","returned","setDone","back","next_button","next_id","complete_task","complete_task_uid","history_panel","history_panel_ol","_li","mySchemePoint","member_id","detail_panel","message_ol","aMessage","retake_input","iteration","reload","points_summary","retake_summary","count_points","current_schemes_id","result_p","retake_panel","retake_message","retake_panel_ol","retake_p1","retake_p2","preamble","form","getNextNotDoneTaskId","addFooter","setTab","resetFooter","switchTab","target_modal_id","collection_card","collection_card_html","overview_task","hidden","questions","aquestion","h2","advertiser_logo_panel","advertiser_logo_title","count_schemes","unshift","set_tabs","quiz","addSetting","hasAttribute","current_task","record_data","scheme_key","part_overview","resetCache","openByTaskNo","setQuestion","question","options","section","post_id","type_id","post_content","append_content","page_view_settings","postList","widget","layout_settings","has_widgets","_post_widgets","grid","row_settings","grid_row","rows","grid_cell","span","del_count","Number","span_i","thisWidget","_generate_a_post_widget","fill","aCell","internal_links","page_view_onload","pulldown_refresh","lazy_images","img_path","body_modal_panel_id","footer_panel","body_panel","this_post","this_post_settings__key","post_type","base_update_detail","override_title","flag_beta","contenttitle","list_item","acat","article_type","author_name","advertiser_section","advert_header","this_advertiser","advertiser_content","advertiser_description","author_description","author_description_name","_generate_post_widgets","clean_body","attr","j","is_hidden","attr_len","backgroundImage","thisbackgroundImage","removeAttribute","function__parseAtts","backgroundColor","oldScript","newScript","attributes","appendChild","createTextNode","replaceChild","appended_content_element","target_type","href","trim","scrollIntoView","extension","tables","_context3","tasks","task_no","target_modal","target_modal_panel","target_panel","has_parts","getTask","menu_li_sub","route","dsb_modal","task_panel","sub_tasks","task_name","since_object","since_string","progress_bar","progress_label","fail","array","temporaryValue","randomIndex","currentIndex","merger","prop","_merge","quiz_content","part_id","question_id","source_type","form_panel","form_submission","footer_panel_submit","footer_panel_navigate","submit_button_name","on_form_submit","spinner","cpd_data","submission_count","aSubmission","parent_ref","cpd_data_part","currentPart","aField","progress_success","progress_total","getSetting","progress_questions","apartQuestion","failedPanel","on_success","on_complete","on_fail","fieldset_panel","randomize","trueCount","answer","onclick__checkbox_radio","inputs","checked","questions_element","option","_value","input_element","label_element","htmlFor","_shuffle","answers","is_complete","thispart","count_fails","QUEUE_COMPONENT_LIST","COMPONENT_MAASPINNER","COMPONENT_MAANAV","COMPONENT_DSBWORKSPACE","COMPONENT_DSBLIST","COMPONENT_DSBSTEPBAR","COMPONENT_DSBCATCHUP","COMPONENT_DSBREADER","COMPONENT_DSBPOST","COMPONENT_DSBTASKS","COMPONENT_DSBQUIZ","DSBAPP","_errorMessage","_tabs","_app_title","_load_complete","_connected","_onboarding_component","logged_in","_root_path","_html__closebutton","newtitle","this_component","customElements","_dynamic_define_component","loading_component","loading_message","loading_logo","_setAnalytics","analyticsHandler","_setApplicationListners","eventListners","fw_tnc_url","setting_key","userHandler","refresh_token","user_settings","dsb_user_url","contentHandler","dsb_client_url","filters","formatData_lookup","lookups","hashchange","_route","isPending","preconditions","preconditions__install","thisOS","preconditions__install_postid","preconditions__pin","expected_accesstoken","matrix","g","h","l","m","q","t","u","v","chars_to_numbers","_fw_workbench_accesstoken","getUserCookie","delete_lagacy_cookie","setUserCookie","component_uid","component_submit","_fw_workbench_onboarding","connectedCallback","app_state","timeout__wait","tabbed_element","tabbed_element_ul","aTab","li_class","_html_offlineindicator","_html_refresh","root_path","get_login_url","_throwFatalError","apps_aside","feedback_aside","append_location","feedback_aside_wrapper","feedback_form_url","email","add_applist"],"mappings":"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"}