{"version":3,"file":"vtree.umd.cjs","sources":["../src/configuration.ts","../node_modules/async_fn/dist/async-fn.umd.cjs","../src/vtree_src/dom.ts","../src/vtree_src/vtree_nodes_cache.ts","../src/vtree_src/hooks.ts","../src/vtree_src/node.ts","../src/vtree_src/node_data.ts","../src/vtree_src/node_wrapper.ts","../src/vtree_src/tree_manager.ts","../src/vtree_src/launcher.ts","../src/index.ts"],"sourcesContent":["export default class Configuration {\n  viewSelector = '[data-view]'\n  componentSelector = '[data-component]'\n  selector = '[data-component], [data-view]'\n  namespacePattern = /(.+)#(.+)/\n\n  isComponentIndex($el: JQuery) {\n    return $el.data('component') !== null && $el.data('component') !== undefined\n  }\n\n  nodeUnderscoredName($el: JQuery): string {\n    return this.isComponentIndex($el)\n      ? $el.data('component')\n      : $el.data('view') || ''\n  }\n\n  isStandAlone($el: JQuery) {\n    return !this.isComponentIndex($el) && this.namespacePattern.test(this.nodeUnderscoredName($el))\n  }\n\n  extractStandAloneNodeData($el: JQuery) {\n    const [__, namespaceName, nodeName] = this.nodeUnderscoredName($el).match(this.namespacePattern)\n    return [namespaceName, nodeName]\n  }\n\n  extractComponentIndexNodeData($el: JQuery) {\n    const [__, namespaceName, componentName] = this.nodeUnderscoredName($el).match(this.namespacePattern)\n    return [namespaceName, componentName]\n  }\n}\n","(function(e,n){typeof exports==\"object\"&&typeof module<\"u\"?module.exports=n():typeof define==\"function\"&&define.amd?define(n):(e=typeof globalThis<\"u\"?globalThis:e||self,e.addToAsyncQueue=n())})(this,function(){\"use strict\";let e=Promise.resolve();return o=>new Promise((u,d)=>{e=e.then(o).then(u,d)})});\n//# sourceMappingURL=async-fn.umd.cjs.map\n","import addToAsyncQueue from 'async_fn'\nimport $ from 'jquery'\n\nexport default class DOM {\n  static html($el: JQuery, html: string) {\n    $el.children().each((_i, child) => { $(child).remove() })\n    $el.html(html)\n    $el.trigger('refresh')\n  }\n\n  static append($parentEl: JQuery, $el: JQuery) {\n    $parentEl.append($el)\n    $parentEl.trigger('refresh')\n  }\n\n  static prepend($parentEl: JQuery, $el: JQuery) {\n    $parentEl.prepend($el)\n    $parentEl.trigger('refresh')\n  }\n\n  static before($el: JQuery, $inserterdEl: JQuery) {\n    $el.before($inserterdEl)\n    $el.parent().trigger('refresh')\n  }\n\n  static after($el: JQuery, $inserterdEl: JQuery) {\n    $el.after($inserterdEl)\n    $el.parent().trigger('refresh')\n  }\n\n  static remove($el: JQuery) {\n    $el.remove()\n  }\n\n  static htmlAsync($el: JQuery, html: string) {\n    return addToAsyncQueue(() =>\n      new Promise<void>(resolve => {\n        requestAnimationFrame(() => {\n          $el.children().each((_i, child) => { $(child).remove() })\n          $el.html(html)\n          $el.trigger('refresh')\n          resolve()\n        })\n      }))\n  }\n\n  static appendAsync($parentEl: JQuery, $el: JQuery) {\n    return addToAsyncQueue(() =>\n      new Promise<void>(resolve => {\n        requestAnimationFrame(() => {\n          $parentEl.append($el)\n          $parentEl.trigger('refresh')\n          resolve()\n        })\n      }))\n  }\n\n  static prependAsync($parentEl: JQuery, $el: JQuery) {\n    return addToAsyncQueue(() =>\n      new Promise<void>(resolve => {\n        requestAnimationFrame(() => {\n          $parentEl.prepend($el)\n          $parentEl.trigger('refresh')\n          resolve()\n        })\n      }))\n  }\n\n  static beforeAsync($el: JQuery, $inserterdEl: JQuery) {\n    return addToAsyncQueue(() =>\n      new Promise<void>(resolve => {\n        requestAnimationFrame(() => {\n          $el.before($inserterdEl)\n          $el.parent().trigger('refresh')\n          resolve()\n        })\n      }))\n  }\n\n  static afterAsync($el: JQuery, $inserterdEl: JQuery) {\n    return addToAsyncQueue(() =>\n      new Promise<void>(resolve => {\n        requestAnimationFrame(() => {\n          $el.after($inserterdEl)\n          $el.parent().trigger('refresh')\n          resolve()\n        })\n    }))\n  }\n}\n","import type Node from './node'\n\nexport default class VtreeNodesCache {\n  private nodes: Record<string, Node> = {}\n  private rootNodes: Node[] = []\n\n  show() {\n    return this.nodes\n  }\n\n  showRootNodes() {\n    return this.rootNodes;\n  }\n\n  getById(id: string) {\n    return this.nodes[id];\n  }\n\n  add(node: Node) {\n    this.nodes[node.id] = node;\n  }\n\n  addAsRoot(node: Node) {\n    if (this.nodes[node.id] == null) {\n      throw new Error('Trying to add node as root, but node is not cached previously');\n    }\n    this.rootNodes.push(node);\n  }\n\n  removeById(id: string) {\n    let nodeIndex = this.rootNodes.indexOf(this.nodes[id])\n    if (nodeIndex !== -1) {\n      this.rootNodes.splice(nodeIndex, 1)\n    }\n    delete this.nodes[id]\n  }\n\n  clear() {\n    this.nodes = {}\n    this.rootNodes = []\n  }\n}\n","type Callback = (...args: any[]) => void\n\nexport default class Hooks<C extends Callback> {\n  onInitCallbacks: C[]\n  onActivationCallbacks: C[]\n  onUnloadCallbacks: C[]\n\n  constructor() {\n    this.onInitCallbacks = []\n    this.onActivationCallbacks = []\n    this.onUnloadCallbacks = []\n  }\n\n  onInit(callback: C) {\n    this.onInitCallbacks.push(callback)\n  }\n\n  init(...args: any[]) {\n    this.onInitCallbacks.forEach(callback => callback(...args))\n  }\n\n  onActivation(callback: C) {\n    this.onActivationCallbacks.push(callback)\n  }\n\n  activate(...args: any[]) {\n    this.onActivationCallbacks.forEach(callback => callback(...args))\n  }\n\n  onUnload(callback: C) {\n    this.onUnloadCallbacks.push(callback)\n  }\n\n  unload(...args: any[]) {\n    this.onUnloadCallbacks.forEach(callback => callback(...args))\n  }\n\n  reset() {\n    this.onInitCallbacks = []\n    this.onActivationCallbacks = []\n    this.onUnloadCallbacks = []\n  }\n}\n","import Hooks from './hooks'\nimport type NodeWrapper from './node_wrapper'\n\nlet nodeId = 1\n\nexport default class Node {\n  el: HTMLElement\n  id: string\n  parent?: Node\n  children: Node[]\n  isActivated = false\n  isRemoved = false\n\n  nodeWrapper?: NodeWrapper\n\n  constructor(public $el: JQuery, public hooks: Hooks<(node: Node) => void> = new Hooks()) {\n    this.el = this.$el[0]\n    this.id = `nodeId${nodeId}`\n    this.children = []\n\n    nodeId++\n\n    this.init()\n  }\n\n  setParent(node: Node) {\n    this.parent = node\n  }\n\n  prependChild(node: Node) {\n    this.children.unshift(node)\n  }\n\n  appendChild(node: Node) {\n    this.children.push(node)\n  }\n\n  removeChild(node: Node) {\n    let nodeIndex = this.children.indexOf(node)\n    if (nodeIndex === -1) return\n\n    this.children.splice(nodeIndex, 1)\n  }\n\n  init() {\n    this.hooks.init(this)\n  }\n\n  activate() {\n    if (this.isActivated) return\n    this.isActivated = true\n\n    this.hooks.activate(this)\n  }\n\n  remove() {\n    if (this.isRemoved) return\n    this.isRemoved = true\n\n    if (this.isActivated) {\n      this.unload()\n    }\n  }\n\n  unload() {\n    this.hooks.unload(this)\n    this.isActivated = false\n  }\n}\n","export interface Data {\n  el: HTMLElement\n  $el: JQuery\n\n  isComponentIndex: boolean\n  isComponentPart: boolean\n  isStandAlone: boolean\n  componentId?: number\n\n  componentIndexNode?: NodeData\n\n  nodeName: string\n  componentName: string\n  namespaceName: string\n\n  nodeNameUnderscored: string\n  componentNameUnderscored: string\n  namespaceNameUnderscored: string\n}\n\nexport default class NodeData implements Data {\n  el: HTMLElement\n  $el: JQuery\n\n  isComponentIndex: boolean\n  isComponentPart: boolean\n  isStandAlone: boolean\n  componentId: number\n\n  componentIndexNode?: NodeData\n\n  nodeName: string\n  componentName: string\n  namespaceName: string\n\n  nodeNameUnderscored: string\n  componentNameUnderscored: string\n  namespaceNameUnderscored: string\n\n  data: Record<string, any>\n\n  constructor(options: Data) {\n    for (let key in options) {\n      const value = options[key]\n      this[key] = value\n    }\n    this.data = {}\n  }\n\n  setData(name: string, value: any) {\n    this.data[name] = value\n  }\n\n  getData(name: string) {\n    return this.data[name]\n  }\n}\n","import NodeData from './node_data'\nimport type Node from './node'\nimport type Hooks from './hooks'\nimport type Configuration from '../configuration'\n\nlet componentId = 0\nlet SECRET_KEY = 'semarf'\n\nexport default class NodeWrapper {\n  $el: JQuery\n  el: HTMLElement\n  namespaceName: string\n  nodeName: string\n  nodeData: NodeData\n\n  isStandAlone: boolean\n  isComponentIndex: boolean\n  componentIndexNode?: Node\n  private nodeUnderscoredName: string\n  private component: {\n    namespace: string\n    node: Node\n    id: number\n    name: string\n  }\n\n  constructor(public node: Node, public config: Configuration, public hooks: Hooks<(nodeData: NodeData) => void>) {\n    this.$el = this.node.$el\n    this.el = this.node.el\n\n    this.isStandAlone = this.config.isStandAlone(this.$el)\n    this.isComponentIndex = this.config.isComponentIndex(this.$el)\n    this.nodeUnderscoredName = this.config.nodeUnderscoredName(this.$el)\n\n    this.component = this.initComponent()\n    this.componentIndexNode = this.isStandAlone || this.isComponentIndex\n      ? undefined\n      : this.component.node\n\n    if (this.isComponentIndex) componentId++\n\n    this.identifyNodeAttributes()\n    this.initNodeDataObject()\n  }\n\n  initComponent() {\n    if (this.isComponentIndex) {\n      const [namespaceName, componentName] = this.config.extractComponentIndexNodeData(this.$el)\n      return { namespace: namespaceName, name: componentName, id: componentId, node: this.node }\n    } else if (this.node.parent !== undefined) {\n      return this.node.parent.nodeWrapper.component\n    } else {\n      return { namespace: SECRET_KEY, name: SECRET_KEY, id: 0, node: this.node }\n    }\n  }\n\n  identifyNodeAttributes() {\n    if (this.isStandAlone) {\n      const [namespaceName, nodeName] = this.config.extractStandAloneNodeData(this.$el)\n      this.namespaceName = namespaceName\n      this.nodeName = nodeName\n    } else {\n      this.namespaceName = this.component.namespace\n      this.nodeName = this.isComponentIndex ? 'index' : this.nodeUnderscoredName\n    }\n  }\n\n  initNodeDataObject() {\n    this.nodeData = this.initNodeData()\n    this.hooks.init(this.nodeData)\n  }\n\n  initNodeData() {\n    const namespaceNameUnderscored = this.namespaceName\n    const namespaceName = this._camelize(this.namespaceName)\n\n    let componentName: string\n    let componentNameUnderscored: string\n\n    if (!this.isStandAlone) {\n      componentNameUnderscored = this.component.name\n      componentName = this._camelize(componentNameUnderscored)\n    }\n\n    return new NodeData({\n      el: this.el,\n      $el: this.$el,\n      isStandAlone: this.isStandAlone,\n      isComponentIndex: this.isComponentIndex,\n      isComponentPart: !this.isStandAlone,\n      componentId: this.isStandAlone ? null : this.component.id,\n      componentIndexNode: this.componentIndexNode?.nodeWrapper?.nodeData,\n      nodeName: this._camelize(this.nodeName),\n      nodeNameUnderscored: this.nodeName,\n\n      componentName,\n      componentNameUnderscored,\n      namespaceName,\n      namespaceNameUnderscored\n    })\n  }\n\n  unload() {\n    this.hooks.unload(this.nodeData)\n    delete this.nodeData\n    delete this.node\n  }\n\n  private _camelize(s: string) {\n    return s.replace(/(?:^|[-_])(\\w)/g, (_, c) => c ? c.toUpperCase() : '')\n  }\n}\n","import $ from 'jquery'\nimport NodesCache from './vtree_nodes_cache'\nimport Node from './node'\nimport NodeWrapper from './node_wrapper'\nimport type NodeData from './node_data'\nimport Hooks from './hooks'\nimport Config from '../configuration'\n\nexport default class TreeManager {\n  isInitializing = false\n  initialNodes: Node[] = []\n  hooks: Hooks<(node: Node) => void> = new Hooks()\n  nodesCache = new NodesCache()\n\n  constructor(public config: Config, public launcherHooks: Hooks<(nodeData: NodeData) => void>) {\n    this.hooks.onInit(this.addNodeIdToElData)\n    this.hooks.onInit(node => this.addRemoveEventHandlerToEl(node))\n    this.hooks.onActivation(node => this.addNodeWrapper(node))\n    this.hooks.onUnload(this.unloadNode)\n    this.hooks.onUnload(this.deleteNodeWrapper)\n  }\n\n  createTree() {\n    this.isInitializing = true\n    this.setInitialNodes()\n    this.setParentsForInitialNodes()\n    this.setChildrenForInitialNodes()\n    this.activateInitialNodes()\n    this.isInitializing = false\n  }\n\n  setInitialNodes() {\n    const $els = $(this.config.selector)\n    this.initialNodes = []\n\n    for (let i of Array.from($els).keys()) {\n      const node = new Node($els.eq(i), this.hooks)\n      this.nodesCache.add(node)\n      this.initialNodes.push(node)\n    }\n  }\n\n  setParentsForInitialNodes() {\n    this.setParentsForNodes(this.initialNodes)\n  }\n\n  setChildrenForInitialNodes() {\n    this.setChildrenForNodes(this.initialNodes)\n  }\n\n  setParentsForNodes(nodes: Node[]) {\n    for (let node of nodes) {\n      const $parentEl = node.$el.parent().closest(this.config.selector)\n\n      if ($parentEl.length) {\n        // getting access to element node through cache\n        const nodeId = $parentEl.data('vtree-node-id')\n        node.parent = this.nodesCache.getById(nodeId)\n      } else {\n        this.nodesCache.addAsRoot(node)\n      }\n    }\n  }\n\n  setChildrenForNodes(nodes: Node[]) {\n    if (!nodes.length) return\n    const size = nodes.length\n\n    for (let i of nodes.keys()) {\n      const node = nodes[size - 1 - i] // iterate backwards\n\n      node.parent?.prependChild(node)\n    }\n  }\n\n  activateInitialNodes() {\n    this.activateRootNodes()\n  }\n\n  activateRootNodes() {\n    this.nodesCache.showRootNodes()\n      .map(node => this.activateNode(node))\n  }\n\n  activateNode(node: Node) {\n    node.activate()\n    node.children.map(childNode => this.activateNode(childNode))\n  }\n\n  removeNode(node: Node) {\n    if (node.isRemoved) return\n\n    node.parent?.removeChild(node)\n\n    this.removeChildNodes(node)\n    node.remove()\n    this.nodesCache.removeById(node.id)\n  }\n\n  removeChildNodes(node: Node) {\n    for (let childNode of node.children) {\n      this.removeChildNodes(childNode)\n      childNode.remove()\n      this.nodesCache.removeById(childNode.id)\n    }\n  }\n\n  refresh(refreshedNode: Node) {\n    if (this.isInitializing) {\n      this.isInitializing = false\n      throw new Error(`\\\nVtree: You can't start initializing new nodes while current nodes are still initializing.\nPlease modify DOM asynchronously in such cases (use Vtree.DOM.htmlAsync, Vtree.DOM.appendAsync, etc).\nThis will guarantee that existing tree is completely initialized.\\\n`\n      )\n    }\n\n    this.isInitializing = true\n    const $els = refreshedNode.$el.find(this.config.selector)\n    const newNodes = [refreshedNode]\n\n    for (let i of Array.from($els).keys()) {\n      const $el = $els.eq(i)\n      let node: Node\n      let nodeId = $el.data('vtree-node-id')\n\n      // if el has link to node then node is initialized\n      if (nodeId) {\n        node = this.nodesCache.getById(nodeId)\n      // else we need to initialize new node\n      } else {\n        node = new Node($el, this.hooks)\n        this.nodesCache.add(node)\n      }\n\n      newNodes.push(node)\n    }\n\n    // destroy tree structure\n    for (let node of newNodes) {\n      node.children.length = 0\n    }\n\n    this.setParentsForNodes(newNodes)\n    this.setChildrenForNodes(newNodes)\n    this.activateNode(refreshedNode)\n    this.isInitializing = false\n  }\n\n  addNodeIdToElData(node: Node) {\n    node.$el.data('vtree-node-id', node.id)\n  }\n\n  addRemoveEventHandlerToEl(node: Node) {\n    node.$el.on('remove', () => this.removeNode(node))\n  }\n\n  addNodeWrapper(node: Node) {\n    node.nodeWrapper = new NodeWrapper(node, this.config, this.launcherHooks)\n  }\n\n  unloadNode(node: Node) {\n    node.nodeWrapper?.unload()\n  }\n\n  deleteNodeWrapper(node: Node) {\n    delete node.nodeWrapper\n  }\n}\n","import $ from 'jquery'\nimport TreeManager from './tree_manager'\nimport Hooks from './hooks'\nimport type Config from '../configuration'\nimport type NodeData from './node_data'\n\nexport default class Launcher {\n  hooks: Hooks<(nodeData: NodeData) => void> = new Hooks()\n  treeManager: TreeManager\n  isRefreshEventInitialized = false\n\n  launch(config: Config) {\n    this.treeManager = new TreeManager(config, this.hooks)\n    this.initRemoveEvent()\n    this.initRefreshEvent(config)\n  }\n\n  initRemoveEvent() {\n    // Special event definition\n    if ($.event.special.remove) return\n\n    $.event.special.remove = {\n      remove(handleObj) {\n        const el = this\n        const e = {\n          type: 'remove',\n          data: handleObj.data,\n          currentTarget: el\n        }\n\n        // @ts-ignore\n        return handleObj.handler(e)\n      }\n    }\n  }\n\n  initRefreshEvent(config: Config) {\n    if (this.isRefreshEventInitialized) return\n    this.isRefreshEventInitialized = true\n\n    const refreshHandler = (e: JQuery.TriggeredEvent) => {\n      e.stopPropagation()\n\n      // finding closest element with node (it can be actually e.currentTarget)\n      let $elWithNode = $(e.currentTarget).closest(config.selector)\n      let nodeId = $elWithNode.data('vtree-node-id')\n\n      // if current target don't have node, searching for it's parent\n      while ($elWithNode.length && !nodeId) {\n        $elWithNode = $elWithNode.parent().closest(config.selector)\n        nodeId = $elWithNode.data('vtree-node-id')\n      }\n\n      if (!nodeId) return\n\n      const node = this.treeManager.nodesCache.getById(nodeId)\n      this.treeManager.refresh(node)\n    }\n\n    $('body').off('refresh') // dispose any existing handlers\n    $('body').on('refresh', refreshHandler)\n    $('body').on('refresh', '*' , refreshHandler)\n  }\n\n  createViewsTree() {\n    this.treeManager.createTree()\n  }\n}\n","import Configuration from './configuration'\nimport DOM from './vtree_src/dom'\nimport Launcher from './vtree_src/launcher'\nimport addToAsyncQueue from 'async_fn'\nimport type NodeData from './vtree_src/node_data'\n\nexport default class Vtree {\n  static _launcher: Launcher\n  static _config: Configuration\n  static DOM = DOM\n\n  static initNodes() {\n    this.launcher.launch(this.config)\n    this.launcher.createViewsTree()\n  }\n\n  static initNodesAsync() {\n    addToAsyncQueue(() =>\n      new Promise<void>(resolve => {\n        requestAnimationFrame(() => {\n          this.initNodes()\n          resolve()\n        })\n      }))\n  }\n\n  static onNodeInit(callback: (nodeWrapper: NodeData) => void) {\n    return this.hooks.onInit(callback)\n  }\n\n  static getInitCallbacks() {\n    return this.hooks.onInitCallbacks\n  }\n\n  static onNodeUnload(callback: (nodeWrapper: NodeData) => void) {\n    return this.hooks.onUnload(callback)\n  }\n\n  static getUnloadCallbacks() {\n    return this.hooks.onUnloadCallbacks\n  }\n\n  static configure(options: Partial<Configuration>) {\n    for (let key in options) {\n      const value = options[key]\n      this.config[key] = value\n    }\n  }\n\n  static get config() {\n    return this._config ??= new Configuration()\n  }\n\n  static get launcher() {\n    return this._launcher ??= new Launcher()\n  }\n\n  static get hooks() {\n    return this.launcher.hooks\n  }\n}\n"],"names":["Configuration","$el","__","namespaceName","nodeName","componentName","e","n","module","this","o","u","d","DOM","html","_i","child","$","$parentEl","$inserterdEl","addToAsyncQueue","resolve","VtreeNodesCache","id","node","nodeIndex","Hooks","callback","args","nodeId","Node","hooks","NodeData","options","key","value","name","componentId","SECRET_KEY","NodeWrapper","config","namespaceNameUnderscored","componentNameUnderscored","s","_","c","TreeManager","launcherHooks","NodesCache","$els","i","nodes","size","childNode","refreshedNode","newNodes","Launcher","handleObj","el","refreshHandler","$elWithNode","_Vtree","Vtree"],"mappings":"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","x_google_ignoreList":[1]}