jqtree 1.6.2 → 1.6.3

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.
Files changed (247) hide show
  1. package/.eslintrc +3 -12
  2. package/.github/workflows/ci.yml +48 -23
  3. package/.github/workflows/codeql-analysis.yml +9 -5
  4. package/.prettier +3 -0
  5. package/README.md +11 -8
  6. package/bower.json +1 -1
  7. package/{.postcssrc → config/.postcssrc} +0 -0
  8. package/{babel.config.json → config/babel.config.json} +0 -0
  9. package/{babel.coverage.config.json → config/babel.coverage.config.json} +0 -0
  10. package/{jest-jsdom.config.js → config/jest.config.js} +8 -3
  11. package/config/playwright.config.js +18 -0
  12. package/config/production +4 -0
  13. package/{rollup.config.js → config/rollup.config.js} +3 -3
  14. package/{jqtree.postcss → css/jqtree.postcss} +0 -0
  15. package/devserver/index.html +1 -9
  16. package/docs/Gemfile +2 -0
  17. package/docs/Gemfile.lock +263 -0
  18. package/{_config.yml → docs/_config.yml} +8 -1
  19. package/{_entries → docs/_entries}/01_general.md +0 -0
  20. package/{_entries → docs/_entries}/02_introduction.md +0 -0
  21. package/{_entries → docs/_entries}/03_features.md +1 -1
  22. package/{_entries → docs/_entries}/04_demo.html +1 -7
  23. package/{_entries → docs/_entries}/05_requirements.md +0 -0
  24. package/{_entries → docs/_entries}/06_downloads.md +0 -0
  25. package/{_entries → docs/_entries}/07_tutorial.md +0 -0
  26. package/{_entries → docs/_entries}/08_examples.md +0 -0
  27. package/{_entries → docs/_entries}/09_usecases.md +0 -0
  28. package/{_entries → docs/_entries}/10_changelog.md +4 -0
  29. package/{_entries → docs/_entries}/11_options.md +0 -0
  30. package/{_entries → docs/_entries}/12_animationspeed.md +0 -0
  31. package/{_entries → docs/_entries}/13_autoescape.md +0 -0
  32. package/{_entries → docs/_entries}/14_autoopen.md +0 -0
  33. package/{_entries → docs/_entries}/15_buttonleft.md +0 -0
  34. package/{_entries → docs/_entries}/16_closedicon.md +0 -0
  35. package/{_entries → docs/_entries}/17_data.md +0 -0
  36. package/{_entries → docs/_entries}/18_datafilter.md +0 -0
  37. package/{_entries → docs/_entries}/19_data-url.md +0 -0
  38. package/{_entries → docs/_entries}/20_draganddrop.md +0 -0
  39. package/{_entries → docs/_entries}/21_keyboardsupport.md +0 -0
  40. package/{_entries → docs/_entries}/22_oncanmove.md +0 -0
  41. package/{_entries → docs/_entries}/23_oncanmoveto.md +2 -2
  42. package/{_entries → docs/_entries}/24_oncanselectnode.md +0 -0
  43. package/{_entries → docs/_entries}/25_oncreateli.md +2 -2
  44. package/{_entries → docs/_entries}/26_ondragmove.md +0 -0
  45. package/{_entries → docs/_entries}/27_ondragstop.md +0 -0
  46. package/{_entries → docs/_entries}/28_onismovehandle.md +0 -0
  47. package/{_entries → docs/_entries}/29_onloadfailed.md +0 -0
  48. package/{_entries → docs/_entries}/30_onloading.md +2 -2
  49. package/{_entries → docs/_entries}/31_openedicon.md +0 -0
  50. package/{_entries → docs/_entries}/32_openfolderdelay.md +2 -0
  51. package/{_entries → docs/_entries}/33_rtl.md +0 -0
  52. package/{_entries → docs/_entries}/34_savestate.md +0 -0
  53. package/{_entries → docs/_entries}/35_selectable.md +0 -0
  54. package/{_entries → docs/_entries}/36_showemptyfolder.md +0 -0
  55. package/{_entries → docs/_entries}/37_slide.md +0 -0
  56. package/{_entries → docs/_entries}/38_start_dnd_delay.md +0 -0
  57. package/{_entries → docs/_entries}/39_tabindex.md +0 -0
  58. package/{_entries → docs/_entries}/40_usecontextmenu.md +0 -0
  59. package/{_entries → docs/_entries}/41_functions.md +0 -0
  60. package/{_entries → docs/_entries}/42_addparentnode.md +1 -1
  61. package/{_entries → docs/_entries}/43_addnodeafter.md +1 -1
  62. package/{_entries → docs/_entries}/44_addnodebefore.md +1 -1
  63. package/{_entries → docs/_entries}/45_appendnode.md +5 -5
  64. package/{_entries → docs/_entries}/46_closenode.md +0 -0
  65. package/{_entries → docs/_entries}/47_destroy.md +0 -0
  66. package/{_entries → docs/_entries}/48_getnodebycallback.md +0 -0
  67. package/{_entries → docs/_entries}/49_getnodebyid.md +0 -0
  68. package/{_entries → docs/_entries}/50_getnodebyhtmlelement.md +2 -2
  69. package/{_entries → docs/_entries}/51_getselectednode.md +0 -0
  70. package/{_entries → docs/_entries}/52_getstate.md +0 -0
  71. package/{_entries → docs/_entries}/53_gettree.md +1 -1
  72. package/{_entries → docs/_entries}/54_isdragging.md +1 -1
  73. package/{_entries → docs/_entries}/55_loaddata.md +3 -3
  74. package/{_entries → docs/_entries}/56_loaddatafromurl.md +4 -4
  75. package/{_entries → docs/_entries}/57_movedown.md +0 -0
  76. package/{_entries → docs/_entries}/58_movenode.md +3 -3
  77. package/{_entries → docs/_entries}/59_moveup.md +0 -0
  78. package/{_entries → docs/_entries}/60_opennode.md +3 -3
  79. package/docs/_entries/61_prependnode.md +21 -0
  80. package/{_entries → docs/_entries}/62_refresh.md +0 -0
  81. package/{_entries → docs/_entries}/63_reload.md +2 -2
  82. package/{_entries → docs/_entries}/64_removenode.md +0 -0
  83. package/{_entries → docs/_entries}/65_selectnode.md +0 -0
  84. package/{_entries → docs/_entries}/66_scrolltonode.md +0 -0
  85. package/{_entries → docs/_entries}/67_setoption.md +0 -0
  86. package/{_entries → docs/_entries}/68_setstate.md +0 -0
  87. package/{_entries → docs/_entries}/69_toggle.md +0 -0
  88. package/{_entries → docs/_entries}/70_tojson.md +0 -0
  89. package/{_entries → docs/_entries}/71_updatenode.md +1 -1
  90. package/{_entries → docs/_entries}/72_events.md +0 -0
  91. package/{_entries → docs/_entries}/73_tree-click.md +0 -0
  92. package/{_entries → docs/_entries}/74_tree-close.md +0 -0
  93. package/{_entries → docs/_entries}/75_tree-contextmenu.md +0 -0
  94. package/{_entries → docs/_entries}/76_tree-dblclick.md +0 -0
  95. package/{_entries → docs/_entries}/77_tree-init.md +0 -0
  96. package/{_entries → docs/_entries}/78_tree-load-data.md +0 -0
  97. package/{_entries → docs/_entries}/79_tree-loading-data.md +0 -0
  98. package/{_entries → docs/_entries}/80_tree-move.md +0 -0
  99. package/{_entries → docs/_entries}/81_tree-refresh.md +0 -0
  100. package/{_entries → docs/_entries}/82_tree-open.md +0 -0
  101. package/{_entries → docs/_entries}/83_tree-select.md +0 -0
  102. package/{_entries → docs/_entries}/84_multiple-selection.md +0 -0
  103. package/{_entries → docs/_entries}/85_add-to-selection.md +0 -0
  104. package/{_entries → docs/_entries}/86_get-selected-nodes.md +0 -0
  105. package/{_entries → docs/_entries}/87_is-node-selected.md +1 -1
  106. package/{_entries → docs/_entries}/88_remove-from-selection.md +0 -0
  107. package/{_entries → docs/_entries}/89_node-functions.md +0 -0
  108. package/{_entries → docs/_entries}/90_children.md +0 -0
  109. package/{_entries → docs/_entries}/91_getdata.md +2 -2
  110. package/{_entries → docs/_entries}/92_getlevel.md +0 -0
  111. package/{_entries → docs/_entries}/93_getnextnode.md +0 -0
  112. package/{_entries → docs/_entries}/94_getnextsibling.md +0 -0
  113. package/{_entries → docs/_entries}/95_getpreviousnode.md +0 -0
  114. package/{_entries → docs/_entries}/96_getprevioussibling.md +0 -0
  115. package/{_entries → docs/_entries}/97_parent.md +1 -1
  116. package/{_entries → docs/_entries}/insert.py +0 -0
  117. package/{_entries → docs/_entries}/renumber.py +0 -0
  118. package/{_examples → docs/_examples}/01_load_json_data.html +3 -5
  119. package/{_examples → docs/_examples}/02_load_json_data_from_server.html +3 -5
  120. package/{_examples → docs/_examples}/03_drag_and_drop.html +3 -5
  121. package/{_examples → docs/_examples}/04_save_state.html +3 -5
  122. package/{_examples → docs/_examples}/05_load_on_demand.html +3 -5
  123. package/{_examples → docs/_examples}/06_autoescape.html +3 -5
  124. package/{_examples → docs/_examples}/07_autoscroll.html +3 -5
  125. package/{_examples → docs/_examples}/08_multiple_select.html +3 -5
  126. package/{_examples → docs/_examples}/09_custom_html.html +3 -5
  127. package/{_examples → docs/_examples}/10_icon_buttons.html +3 -5
  128. package/{_examples → docs/_examples}/11_right-to-left.html +3 -5
  129. package/{_examples → docs/_examples}/12_button_on_right.html +3 -5
  130. package/docs/_examples/13_drag_outside.html +48 -0
  131. package/{_examples → docs/_examples}/14_filter.html +7 -9
  132. package/docs/_layouts/example.html +7 -0
  133. package/{_layouts/base.html → docs/_layouts/page.html} +4 -11
  134. package/docs/documentation.css +3 -0
  135. package/docs/index.html +65 -0
  136. package/docs/jqtree.css +189 -0
  137. package/docs/package.json +22 -0
  138. package/docs/pnpm-lock.yaml +768 -0
  139. package/docs/postcss.config.js +7 -0
  140. package/{static → docs/static}/bower.json +0 -1
  141. package/{static → docs/static}/bower_components/fontawesome/css/all.min.css +0 -0
  142. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.eot +0 -0
  143. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.svg +0 -0
  144. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.ttf +0 -0
  145. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.woff +0 -0
  146. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
  147. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.eot +0 -0
  148. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.svg +0 -0
  149. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.ttf +0 -0
  150. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.woff +0 -0
  151. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
  152. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.eot +0 -0
  153. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.svg +0 -0
  154. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.ttf +0 -0
  155. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.woff +0 -0
  156. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
  157. package/{static → docs/static}/bower_components/jquery/dist/jquery.js +0 -0
  158. package/{static → docs/static}/bower_components/jquery/dist/jquery.min.js +0 -0
  159. package/{static → docs/static}/bower_components/jquery-mockjax/dist/jquery.mockjax.js +0 -0
  160. package/docs/static/documentation.css +1313 -0
  161. package/docs/static/documentation.js +26 -0
  162. package/{static → docs/static}/example.css +5 -37
  163. package/{static → docs/static}/example.postcss +5 -35
  164. package/{static → docs/static}/example_data.js +0 -0
  165. package/{static → docs/static}/examples/autoescape.js +0 -0
  166. package/{static → docs/static}/examples/autoscroll.js +0 -0
  167. package/{static → docs/static}/examples/button-on-right.js +0 -0
  168. package/{static → docs/static}/examples/custom_html.js +5 -9
  169. package/{static → docs/static}/examples/drag-outside.js +0 -0
  170. package/{static → docs/static}/examples/drag_and_drop.js +0 -0
  171. package/{static → docs/static}/examples/filter.js +2 -2
  172. package/{static → docs/static}/examples/icon_buttons.js +0 -0
  173. package/{static → docs/static}/examples/load_json_data.js +0 -0
  174. package/{static → docs/static}/examples/load_json_data_from_server.js +0 -0
  175. package/{static → docs/static}/examples/load_on_demand.js +0 -0
  176. package/{static → docs/static}/examples/multiple_select.js +0 -0
  177. package/{static → docs/static}/examples/right-to-left.js +0 -0
  178. package/{static → docs/static}/examples/save_state.js +0 -0
  179. package/{static → docs/static}/monokai.css +0 -0
  180. package/{static → docs/static}/spinner.gif +0 -0
  181. package/docs/tailwind.config.js +16 -0
  182. package/docs/tree.jquery.js +21 -0
  183. package/lib/dragAndDropHandler.js +8 -4
  184. package/lib/mouse.widget.js +3 -3
  185. package/lib/nodeElement.js +3 -3
  186. package/lib/playwright/coverage.js +140 -0
  187. package/lib/playwright/playwright.test.js +293 -201
  188. package/lib/playwright/testUtils.js +267 -0
  189. package/lib/test/jqTree/events.test.js +10 -9
  190. package/lib/test/jqTree/loadOnDemand.test.js +26 -21
  191. package/lib/test/jqTree/methods.test.js +84 -64
  192. package/lib/test/jqTree/options.test.js +41 -29
  193. package/lib/tree.jquery.js +4 -4
  194. package/package.json +48 -49
  195. package/src/dragAndDropHandler.ts +8 -4
  196. package/src/jqtreeOptions.ts +1 -1
  197. package/src/playwright/.eslintrc +2 -2
  198. package/src/playwright/coverage.ts +41 -0
  199. package/src/playwright/playwright.test.ts +50 -52
  200. package/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-darwin.png +0 -0
  201. package/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-linux.png +0 -0
  202. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-darwin.png +0 -0
  203. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-linux.png +0 -0
  204. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-darwin.png +0 -0
  205. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-linux.png +0 -0
  206. package/src/playwright/testUtils.ts +122 -0
  207. package/src/test/.eslintrc +13 -3
  208. package/src/test/jqTree/events.test.ts +10 -9
  209. package/src/test/jqTree/loadOnDemand.test.ts +10 -10
  210. package/src/test/jqTree/methods.test.ts +37 -45
  211. package/src/test/jqTree/options.test.ts +26 -28
  212. package/src/tree.jquery.d.ts +1 -1
  213. package/tree.jquery.debug.js +17 -14
  214. package/tree.jquery.debug.js.map +1 -1
  215. package/tree.jquery.js +3 -3
  216. package/tree.jquery.js.map +1 -1
  217. package/_entries/61_prependnode.md +0 -21
  218. package/_examples/13_drag_outside.html +0 -26
  219. package/_layouts/frontpage.html +0 -20
  220. package/_layouts/page.html +0 -7
  221. package/index.html +0 -48
  222. package/jest-browser.config.js +0 -15
  223. package/jest-playwright.config.js +0 -21
  224. package/jest.config.js +0 -8
  225. package/lib/playwright/testUtil.js +0 -459
  226. package/lib/playwright/visualRegression.js +0 -193
  227. package/production +0 -5
  228. package/src/playwright/screenshots/displays_a_tree_Desktop.png +0 -0
  229. package/src/playwright/screenshots/displays_a_tree_iPhone 6.png +0 -0
  230. package/src/playwright/screenshots/moves_a_node_Desktop.png +0 -0
  231. package/src/playwright/screenshots/moves_a_node_iPhone 6.png +0 -0
  232. package/src/playwright/screenshots/opens_a_node_Desktop.png +0 -0
  233. package/src/playwright/screenshots/opens_a_node_iPhone 6.png +0 -0
  234. package/src/playwright/screenshots/selects_a_node_Desktop.png +0 -0
  235. package/src/playwright/screenshots/selects_a_node_iPhone 6.png +0 -0
  236. package/src/playwright/testUtil.ts +0 -170
  237. package/src/playwright/visualRegression.ts +0 -88
  238. package/static/bower_components/bootstrap/dist/css/bootstrap-theme.min.css +0 -6
  239. package/static/bower_components/bootstrap/dist/css/bootstrap.min.css +0 -6
  240. package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  241. package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +0 -288
  242. package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  243. package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  244. package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
  245. package/static/bower_components/bootstrap/dist/js/bootstrap.min.js +0 -6
  246. package/static/documentation.css +0 -171
  247. package/static/documentation.js +0 -48
@@ -1,193 +0,0 @@
1
- "use strict";
2
-
3
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.matchScreenshot = void 0;
9
-
10
- var _fs = require("fs");
11
-
12
- var _promises = require("fs/promises");
13
-
14
- var path = _interopRequireWildcard(require("path"));
15
-
16
- var _pngjs = require("pngjs");
17
-
18
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
-
20
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
-
22
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
23
-
24
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
25
-
26
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
27
-
28
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
29
-
30
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
31
-
32
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
33
-
34
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
35
-
36
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
37
-
38
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires
39
- var pixelmatch = require("pixelmatch");
40
-
41
- var matchScreenshot = /*#__PURE__*/function () {
42
- var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(testName) {
43
- var screenshotBuffer, expectedImagePath, expectedImage, screenshot, _getImagesOfEqualSize, _getImagesOfEqualSize2, adjustedExpectedImage, adjustedScreenshot, width, height, diff, mismatchedPixels, percentage;
44
-
45
- return regeneratorRuntime.wrap(function _callee$(_context) {
46
- while (1) {
47
- switch (_context.prev = _context.next) {
48
- case 0:
49
- _context.next = 2;
50
- return page.screenshot();
51
-
52
- case 2:
53
- screenshotBuffer = _context.sent;
54
- expectedImagePath = path.join(__dirname, "screenshots/".concat(testName, "_").concat(deviceName || "unknown", ".png"));
55
-
56
- if ((0, _fs.existsSync)(expectedImagePath)) {
57
- _context.next = 8;
58
- break;
59
- }
60
-
61
- _context.next = 7;
62
- return saveFile(expectedImagePath, screenshotBuffer);
63
-
64
- case 7:
65
- return _context.abrupt("return");
66
-
67
- case 8:
68
- _context.next = 10;
69
- return readPng(expectedImagePath);
70
-
71
- case 10:
72
- expectedImage = _context.sent;
73
- screenshot = _pngjs.PNG.sync.read(screenshotBuffer);
74
- _getImagesOfEqualSize = getImagesOfEqualSize(expectedImage, screenshot), _getImagesOfEqualSize2 = _slicedToArray(_getImagesOfEqualSize, 2), adjustedExpectedImage = _getImagesOfEqualSize2[0], adjustedScreenshot = _getImagesOfEqualSize2[1];
75
- width = adjustedExpectedImage.width, height = adjustedExpectedImage.height;
76
- diff = new _pngjs.PNG({
77
- width: width,
78
- height: height
79
- }); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
80
-
81
- mismatchedPixels = pixelmatch(adjustedExpectedImage.data, adjustedScreenshot.data, diff.data, width, height, {});
82
- percentage = Math.pow(mismatchedPixels / diff.width / diff.height, 0.5);
83
-
84
- if (!(percentage >= 0.1)) {
85
- _context.next = 20;
86
- break;
87
- }
88
-
89
- _context.next = 20;
90
- return saveFile(path.join(__dirname, "".concat(testName, ".png")), _pngjs.PNG.sync.write(adjustedScreenshot));
91
-
92
- case 20:
93
- expect(percentage).toBeLessThan(0.1);
94
-
95
- case 21:
96
- case "end":
97
- return _context.stop();
98
- }
99
- }
100
- }, _callee);
101
- }));
102
-
103
- return function matchScreenshot(_x) {
104
- return _ref.apply(this, arguments);
105
- };
106
- }();
107
-
108
- exports.matchScreenshot = matchScreenshot;
109
-
110
- var saveFile = /*#__PURE__*/function () {
111
- var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(filePath, buffer) {
112
- var file;
113
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
114
- while (1) {
115
- switch (_context2.prev = _context2.next) {
116
- case 0:
117
- _context2.next = 2;
118
- return (0, _promises.open)(filePath, "w");
119
-
120
- case 2:
121
- file = _context2.sent;
122
- _context2.prev = 3;
123
- _context2.next = 6;
124
- return (0, _promises.writeFile)(filePath, buffer);
125
-
126
- case 6:
127
- _context2.prev = 6;
128
- _context2.next = 9;
129
- return file.close();
130
-
131
- case 9:
132
- return _context2.finish(6);
133
-
134
- case 10:
135
- case "end":
136
- return _context2.stop();
137
- }
138
- }
139
- }, _callee2, null, [[3,, 6, 10]]);
140
- }));
141
-
142
- return function saveFile(_x2, _x3) {
143
- return _ref2.apply(this, arguments);
144
- };
145
- }();
146
-
147
- var readPng = /*#__PURE__*/function () {
148
- var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(filePath) {
149
- var buffer;
150
- return regeneratorRuntime.wrap(function _callee3$(_context3) {
151
- while (1) {
152
- switch (_context3.prev = _context3.next) {
153
- case 0:
154
- _context3.next = 2;
155
- return (0, _promises.readFile)(filePath);
156
-
157
- case 2:
158
- buffer = _context3.sent;
159
- return _context3.abrupt("return", _pngjs.PNG.sync.read(buffer));
160
-
161
- case 4:
162
- case "end":
163
- return _context3.stop();
164
- }
165
- }
166
- }, _callee3);
167
- }));
168
-
169
- return function readPng(_x4) {
170
- return _ref3.apply(this, arguments);
171
- };
172
- }();
173
-
174
- var adjustImageSize = function adjustImageSize(image, width, height) {
175
- if (image.width === width && image.height === height) {
176
- return image;
177
- }
178
-
179
- var adjustedImage = new _pngjs.PNG({
180
- width: width,
181
- height: height
182
- });
183
-
184
- _pngjs.PNG.bitblt(image, adjustedImage, 0, 0, image.width, image.height, 0, 0);
185
-
186
- return adjustedImage;
187
- };
188
-
189
- var getImagesOfEqualSize = function getImagesOfEqualSize(image1, image2) {
190
- var width = Math.max(image1.width, image2.width);
191
- var height = Math.max(image1.height, image2.height);
192
- return [adjustImageSize(image1, width, height), adjustImageSize(image2, width, height)];
193
- };
package/production DELETED
@@ -1,5 +0,0 @@
1
- rollup -c rollup.config.js &&
2
- DEBUG_BUILD=true rollup -c rollup.config.js &&
3
- babel src --out-dir lib --extensions .ts &&
4
- postcss -o jqtree.css jqtree.postcss &&
5
- postcss -o static/example.css static/example.postcss
@@ -1,170 +0,0 @@
1
- import { ElementHandle } from "playwright";
2
-
3
- interface ElementHandleBoundingBox {
4
- x: number;
5
- y: number;
6
- width: number;
7
- height: number;
8
- }
9
-
10
- export const expectToBeSelected = async (
11
- handle: ElementHandle<HTMLElement>
12
- ): Promise<void> => {
13
- const isSelected = await isNodeSelected(handle);
14
- expect(isSelected).toBe(true);
15
- };
16
-
17
- export const expectToBeOpen = async (
18
- handle: ElementHandle<HTMLElement>
19
- ): Promise<void> => {
20
- const isOpen = await isNodeOpen(handle);
21
- expect(isOpen).toBe(true);
22
- };
23
-
24
- export const expectToBeClosed = async (
25
- handle: ElementHandle<HTMLElement>
26
- ): Promise<void> => {
27
- const isOpen = await isNodeOpen(handle);
28
- expect(isOpen).toBe(false);
29
- };
30
-
31
- export const findTitleElement = async (
32
- title: string
33
- ): Promise<ElementHandle<HTMLElement>> =>
34
- await findElement(`css=.jqtree-title >> text="${title}"`);
35
-
36
- export const findNodeElement = async (
37
- title: string
38
- ): Promise<ElementHandle<HTMLElement>> => {
39
- const titleElement = await findTitleElement(title);
40
- return await titleElement.evaluateHandle((el) => {
41
- const li = el.closest("li");
42
-
43
- if (!li) {
44
- throw Error("Node element not found");
45
- }
46
-
47
- return li;
48
- });
49
- };
50
-
51
- export const openNode = async (
52
- handle: ElementHandle<HTMLElement>
53
- ): Promise<void> => {
54
- const toggler = await findToggler(handle);
55
- await toggler.click();
56
- };
57
-
58
- const findToggler = async (
59
- handle: ElementHandle<HTMLElement>
60
- ): Promise<ElementHandle<HTMLElement>> => {
61
- const toggler = await handle.$(".jqtree-toggler");
62
-
63
- if (!toggler) {
64
- throw Error("Toggler button not found");
65
- }
66
-
67
- return toggler as ElementHandle<HTMLElement>;
68
- };
69
-
70
- const findElement = async (
71
- selector: string
72
- ): Promise<ElementHandle<HTMLElement>> => {
73
- const element = await page.$(selector);
74
-
75
- if (!element) {
76
- throw Error(`Element not found: ${selector}`);
77
- }
78
-
79
- return element as ElementHandle<HTMLElement>;
80
- };
81
-
82
- const isNodeOpen = async (
83
- handle: ElementHandle<HTMLElement>
84
- ): Promise<boolean> =>
85
- handle.evaluate((el) => !el.classList.contains("jqtree-closed"));
86
-
87
- const isNodeSelected = async (
88
- handle: ElementHandle<HTMLElement>
89
- ): Promise<boolean> =>
90
- handle.evaluate((el) => el.classList.contains("jqtree-selected"));
91
-
92
- export const selectNode = async (
93
- handle: ElementHandle<HTMLElement>
94
- ): Promise<void> => {
95
- const titleHandle = await handle.$(".jqtree-title");
96
- await titleHandle?.click();
97
- };
98
-
99
- export const getTreeStructure = async (): Promise<JQTreeMatchers.TreeStructure> =>
100
- await page
101
- .evaluate(
102
- `
103
- ;
104
- function getTreeNode($li) {
105
- const $div = $li.children("div.jqtree-element");
106
- const $span = $div.children("span.jqtree-title");
107
- const name = $span.text();
108
- const selected = $li.hasClass("jqtree-selected");
109
-
110
- if ($li.hasClass("jqtree-folder")) {
111
- const $ul = $li.children("ul.jqtree_common");
112
-
113
- return {
114
- nodeType: "folder",
115
- children: getChildren($ul),
116
- name,
117
- open: !$li.hasClass("jqtree-closed"),
118
- selected,
119
- };
120
- } else {
121
- return {
122
- nodeType: "child",
123
- name,
124
- selected,
125
- };
126
- }
127
- }
128
-
129
- function getChildren($ul) {
130
- return $ul
131
- .children("li.jqtree_common")
132
- .map((_, li) => {
133
- return getTreeNode(jQuery(li));
134
- })
135
- .get();
136
- }
137
-
138
- JSON.stringify(window.getChildren(jQuery("ul.jqtree-tree")));
139
- `
140
- )
141
- .then((s) => JSON.parse(s as string) as JQTreeMatchers.TreeStructure);
142
-
143
- const getRect = async (
144
- handle: ElementHandle<HTMLElement>
145
- ): Promise<ElementHandleBoundingBox> => {
146
- const boundingBox = await handle.boundingBox();
147
-
148
- if (!boundingBox) {
149
- throw "No bounding box";
150
- }
151
-
152
- return boundingBox;
153
- };
154
-
155
- export const dragAndDrop = async (from: string, to: string): Promise<void> => {
156
- const fromRect = await findTitleElement(from).then(getRect);
157
- const toRect = await findTitleElement(to).then(getRect);
158
-
159
- await page.mouse.move(
160
- fromRect.x + fromRect.width / 2,
161
- fromRect.y + fromRect.height / 2
162
- );
163
- await page.mouse.down();
164
- await page.waitForTimeout(200);
165
- await page.mouse.move(
166
- toRect.x + toRect.width / 2,
167
- toRect.y + toRect.height / 2
168
- );
169
- await page.mouse.up();
170
- };
@@ -1,88 +0,0 @@
1
- import { existsSync } from "fs";
2
- import { open, readFile, writeFile } from "fs/promises";
3
- import * as path from "path";
4
- import { PNG } from "pngjs";
5
-
6
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires
7
- const pixelmatch = require("pixelmatch");
8
-
9
- export const matchScreenshot = async (testName: string): Promise<void> => {
10
- const screenshotBuffer = await page.screenshot();
11
-
12
- const expectedImagePath = path.join(
13
- __dirname,
14
- `screenshots/${testName}_${deviceName || "unknown"}.png`
15
- );
16
-
17
- if (!existsSync(expectedImagePath)) {
18
- await saveFile(expectedImagePath, screenshotBuffer);
19
- return;
20
- }
21
-
22
- const expectedImage = await readPng(expectedImagePath);
23
- const screenshot = PNG.sync.read(screenshotBuffer);
24
-
25
- const [adjustedExpectedImage, adjustedScreenshot] = getImagesOfEqualSize(
26
- expectedImage,
27
- screenshot
28
- );
29
-
30
- const { width, height } = adjustedExpectedImage;
31
-
32
- const diff = new PNG({ width, height });
33
-
34
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
35
- const mismatchedPixels = pixelmatch(
36
- adjustedExpectedImage.data,
37
- adjustedScreenshot.data,
38
- diff.data,
39
- width,
40
- height,
41
- {}
42
- );
43
-
44
- const percentage = (mismatchedPixels / diff.width / diff.height) ** 0.5;
45
-
46
- if (percentage >= 0.1) {
47
- await saveFile(
48
- path.join(__dirname, `${testName}.png`),
49
- PNG.sync.write(adjustedScreenshot)
50
- );
51
- }
52
-
53
- expect(percentage).toBeLessThan(0.1);
54
- };
55
-
56
- const saveFile = async (filePath: string, buffer: Buffer): Promise<void> => {
57
- const file = await open(filePath, "w");
58
- try {
59
- await writeFile(filePath, buffer);
60
- } finally {
61
- await file.close();
62
- }
63
- };
64
-
65
- const readPng = async (filePath: string): Promise<PNG> => {
66
- const buffer = await readFile(filePath);
67
- return PNG.sync.read(buffer);
68
- };
69
-
70
- const adjustImageSize = (image: PNG, width: number, height: number): PNG => {
71
- if (image.width === width && image.height === height) {
72
- return image;
73
- }
74
-
75
- const adjustedImage = new PNG({ width, height });
76
- PNG.bitblt(image, adjustedImage, 0, 0, image.width, image.height, 0, 0);
77
- return adjustedImage;
78
- };
79
-
80
- const getImagesOfEqualSize = (image1: PNG, image2: PNG): [PNG, PNG] => {
81
- const width = Math.max(image1.width, image2.width);
82
- const height = Math.max(image1.height, image2.height);
83
-
84
- return [
85
- adjustImageSize(image1, width, height),
86
- adjustImageSize(image2, width, height),
87
- ];
88
- };
@@ -1,6 +0,0 @@
1
- /*!
2
- * Bootstrap v3.4.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 Twitter, Inc.
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x;background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x;background-color:#2e6da4}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
6
- /*# sourceMappingURL=bootstrap-theme.min.css.map */