jqtree 1.8.6 → 1.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /*
2
- JqTree 1.8.6
2
+ JqTree 1.8.8
3
3
 
4
4
  Copyright 2024 Marco Braak
5
5
 
@@ -902,14 +902,14 @@ var jqtree = (function (exports) {
902
902
  case "ArrowDown":
903
903
  isKeyHandled = this.moveDown(selectedNode);
904
904
  break;
905
- case "ArrowUp":
906
- isKeyHandled = this.moveUp(selectedNode);
905
+ case "ArrowLeft":
906
+ isKeyHandled = this.moveLeft(selectedNode);
907
907
  break;
908
908
  case "ArrowRight":
909
909
  isKeyHandled = this.moveRight(selectedNode);
910
910
  break;
911
- case "ArrowLeft":
912
- isKeyHandled = this.moveLeft(selectedNode);
911
+ case "ArrowUp":
912
+ isKeyHandled = this.moveUp(selectedNode);
913
913
  break;
914
914
  }
915
915
  }
@@ -978,8 +978,8 @@ var jqtree = (function (exports) {
978
978
  }
979
979
  }
980
980
  deinit() {
981
- if (this.handleKeyDownHandler) {
982
- document.removeEventListener("keydown", this.handleKeyDownHandler);
981
+ if (this.keyboardSupport) {
982
+ document.removeEventListener("keydown", this.handleKeyDown);
983
983
  }
984
984
  }
985
985
  moveDown(selectedNode) {
@@ -1807,11 +1807,26 @@ var jqtree = (function (exports) {
1807
1807
  }
1808
1808
 
1809
1809
  class GhostDropHint {
1810
- constructor(element) {
1810
+ constructor(node, element, position) {
1811
1811
  this.element = element;
1812
+ this.node = node;
1812
1813
  this.ghost = this.createGhostElement();
1813
- this.element.after(this.ghost);
1814
- this.ghost.classList.add("jqtree-inside");
1814
+ switch (position) {
1815
+ case Position.After:
1816
+ this.moveAfter();
1817
+ break;
1818
+ case Position.Before:
1819
+ this.moveBefore();
1820
+ break;
1821
+ case Position.Inside:
1822
+ {
1823
+ if (node.isFolder() && node.is_open) {
1824
+ this.moveInsideOpenFolder();
1825
+ } else {
1826
+ this.moveInside();
1827
+ }
1828
+ }
1829
+ }
1815
1830
  }
1816
1831
  createGhostElement() {
1817
1832
  const ghost = document.createElement("li");
@@ -1824,6 +1839,22 @@ var jqtree = (function (exports) {
1824
1839
  ghost.append(lineSpan);
1825
1840
  return ghost;
1826
1841
  }
1842
+ moveAfter() {
1843
+ this.element.after(this.ghost);
1844
+ }
1845
+ moveBefore() {
1846
+ this.element.before(this.ghost);
1847
+ }
1848
+ moveInside() {
1849
+ this.element.after(this.ghost);
1850
+ this.ghost.classList.add("jqtree-inside");
1851
+ }
1852
+ moveInsideOpenFolder() {
1853
+ const childElement = this.node.children[0]?.element;
1854
+ if (childElement) {
1855
+ childElement.before(this.ghost);
1856
+ }
1857
+ }
1827
1858
  remove() {
1828
1859
  this.ghost.remove();
1829
1860
  }
@@ -1832,14 +1863,14 @@ var jqtree = (function (exports) {
1832
1863
  class NodeElement {
1833
1864
  constructor(_ref) {
1834
1865
  let {
1835
- $treeElement,
1836
1866
  getScrollLeft,
1837
1867
  node,
1838
- tabIndex
1868
+ tabIndex,
1869
+ treeElement
1839
1870
  } = _ref;
1840
1871
  this.getScrollLeft = getScrollLeft;
1841
1872
  this.tabIndex = tabIndex;
1842
- this.$treeElement = $treeElement;
1873
+ this.treeElement = treeElement;
1843
1874
  this.init(node);
1844
1875
  }
1845
1876
  getTitleSpan() {
@@ -1855,7 +1886,7 @@ var jqtree = (function (exports) {
1855
1886
  if (this.mustShowBorderDropHint(position)) {
1856
1887
  return new BorderDropHint(this.element, this.getScrollLeft());
1857
1888
  } else {
1858
- return new GhostDropHint(this.element);
1889
+ return new GhostDropHint(this.node, this.element, position);
1859
1890
  }
1860
1891
  }
1861
1892
  deselect() {
@@ -1868,14 +1899,9 @@ var jqtree = (function (exports) {
1868
1899
  init(node) {
1869
1900
  this.node = node;
1870
1901
  if (!node.element) {
1871
- const element = this.$treeElement.get(0);
1872
- if (element) {
1873
- node.element = element;
1874
- }
1875
- }
1876
- if (node.element) {
1877
- this.element = node.element;
1902
+ node.element = this.treeElement;
1878
1903
  }
1904
+ this.element = node.element;
1879
1905
  }
1880
1906
  select(mustSetFocus) {
1881
1907
  this.element.classList.add("jqtree-selected");
@@ -1896,19 +1922,19 @@ var jqtree = (function (exports) {
1896
1922
  class FolderElement extends NodeElement {
1897
1923
  constructor(_ref) {
1898
1924
  let {
1899
- $treeElement,
1900
1925
  closedIconElement,
1901
1926
  getScrollLeft,
1902
1927
  node,
1903
1928
  openedIconElement,
1904
1929
  tabIndex,
1930
+ treeElement,
1905
1931
  triggerEvent
1906
1932
  } = _ref;
1907
1933
  super({
1908
- $treeElement,
1909
1934
  getScrollLeft,
1910
1935
  node,
1911
- tabIndex
1936
+ tabIndex,
1937
+ treeElement
1912
1938
  });
1913
1939
  this.closedIconElement = closedIconElement;
1914
1940
  this.openedIconElement = openedIconElement;
@@ -1920,9 +1946,7 @@ var jqtree = (function (exports) {
1920
1946
  getButton() {
1921
1947
  return this.element.querySelector(":scope > .jqtree-element > a.jqtree-toggler");
1922
1948
  }
1923
- close() {
1924
- let slide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
1925
- let animationSpeed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "fast";
1949
+ close(slide, animationSpeed) {
1926
1950
  if (!this.node.is_open) {
1927
1951
  return;
1928
1952
  }
@@ -1950,9 +1974,7 @@ var jqtree = (function (exports) {
1950
1974
  doClose();
1951
1975
  }
1952
1976
  }
1953
- open(onFinished) {
1954
- let slide = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
1955
- let animationSpeed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "fast";
1977
+ open(onFinished, slide, animationSpeed) {
1956
1978
  if (this.node.is_open) {
1957
1979
  return;
1958
1980
  }
@@ -2020,10 +2042,8 @@ var jqtree = (function (exports) {
2020
2042
  loadFromStorage() {
2021
2043
  if (this.onGetStateFromStorage) {
2022
2044
  return this.onGetStateFromStorage();
2023
- } else if (this.supportsLocalStorage()) {
2024
- return localStorage.getItem(this.getKeyName());
2025
2045
  } else {
2026
- return null;
2046
+ return localStorage.getItem(this.getKeyName());
2027
2047
  }
2028
2048
  }
2029
2049
  openInitialNodes(nodeIds) {
@@ -2067,23 +2087,6 @@ var jqtree = (function (exports) {
2067
2087
  }
2068
2088
  return selectCount !== 0;
2069
2089
  }
2070
- supportsLocalStorage() {
2071
- const testSupport = () => {
2072
- // Check if it's possible to store an item. Safari does not allow this in private browsing mode.
2073
- try {
2074
- const key = "_storage_test";
2075
- sessionStorage.setItem(key, "value");
2076
- sessionStorage.removeItem(key);
2077
- } catch {
2078
- return false;
2079
- }
2080
- return true;
2081
- };
2082
- if (this._supportsLocalStorage == null) {
2083
- this._supportsLocalStorage = testSupport();
2084
- }
2085
- return this._supportsLocalStorage;
2086
- }
2087
2090
  getNodeIdToBeSelected() {
2088
2091
  const state = this.getStateFromStorage();
2089
2092
  if (state?.selected_node) {
@@ -2129,7 +2132,7 @@ var jqtree = (function (exports) {
2129
2132
  const state = JSON.stringify(this.getState());
2130
2133
  if (this.onSetStateFromStorage) {
2131
2134
  this.onSetStateFromStorage(state);
2132
- } else if (this.supportsLocalStorage()) {
2135
+ } else {
2133
2136
  localStorage.setItem(this.getKeyName(), state);
2134
2137
  }
2135
2138
  }
@@ -2137,7 +2140,7 @@ var jqtree = (function (exports) {
2137
2140
  /*
2138
2141
  Set initial state
2139
2142
  Don't handle nodes that are loaded on demand
2140
- result: must load on demand
2143
+ result: must load on demand (boolean)
2141
2144
  */
2142
2145
  setInitialState(state) {
2143
2146
  let mustLoadOnDemand = false;
@@ -2544,14 +2547,12 @@ var jqtree = (function (exports) {
2544
2547
  }
2545
2548
  } else {
2546
2549
  const selectedNodes = [];
2547
- for (const id in this.selectedNodes) {
2548
- if (Object.prototype.hasOwnProperty.call(this.selectedNodes, id)) {
2549
- const node = this.getNodeById(id);
2550
- if (node && parent.isParentOf(node)) {
2551
- selectedNodes.push(node);
2552
- }
2550
+ this.selectedNodes.forEach(id => {
2551
+ const node = this.getNodeById(id);
2552
+ if (node && parent.isParentOf(node)) {
2553
+ selectedNodes.push(node);
2553
2554
  }
2554
- }
2555
+ });
2555
2556
  return selectedNodes;
2556
2557
  }
2557
2558
  }
@@ -2687,7 +2688,7 @@ var jqtree = (function (exports) {
2687
2688
  }
2688
2689
  }
2689
2690
 
2690
- const version = "1.8.6";
2691
+ const version = "1.8.8";
2691
2692
 
2692
2693
  const NODE_PARAM_IS_EMPTY = "Node parameter is empty";
2693
2694
  const PARAM_IS_EMPTY = "Parameter is empty: ";
@@ -2888,27 +2889,27 @@ var jqtree = (function (exports) {
2888
2889
  const getScrollLeft = this.scrollHandler.getScrollLeft.bind(this.scrollHandler);
2889
2890
  const openedIconElement = this.renderer.openedIconElement;
2890
2891
  const tabIndex = this.options.tabIndex;
2891
- const $treeElement = this.element;
2892
+ const treeElement = this.element.get(0);
2892
2893
  const triggerEvent = this.triggerEvent.bind(this);
2893
2894
  return new FolderElement({
2894
- $treeElement,
2895
2895
  closedIconElement,
2896
2896
  getScrollLeft,
2897
2897
  node,
2898
2898
  openedIconElement,
2899
2899
  tabIndex,
2900
+ treeElement,
2900
2901
  triggerEvent
2901
2902
  });
2902
2903
  }
2903
2904
  createNodeElement(node) {
2904
2905
  const getScrollLeft = this.scrollHandler.getScrollLeft.bind(this.scrollHandler);
2905
2906
  const tabIndex = this.options.tabIndex;
2906
- const $treeElement = this.element;
2907
+ const treeElement = this.element.get(0);
2907
2908
  return new NodeElement({
2908
- $treeElement,
2909
2909
  getScrollLeft,
2910
2910
  node,
2911
- tabIndex
2911
+ tabIndex,
2912
+ treeElement
2912
2913
  });
2913
2914
  }
2914
2915
  deselectCurrentNode() {
@@ -3186,6 +3187,9 @@ var jqtree = (function (exports) {
3186
3187
  let slide = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
3187
3188
  let onFinished = arguments.length > 2 ? arguments[2] : undefined;
3188
3189
  const doOpenNode = (_node, _slide, _onFinished) => {
3190
+ if (!node.children.length) {
3191
+ return;
3192
+ }
3189
3193
  const folderElement = this.createFolderElement(_node);
3190
3194
  folderElement.open(_onFinished, _slide, this.options.animationSpeed);
3191
3195
  };