123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- define([
- 'jquery',
- 'jquery/ui',
- 'jquery/jstree/jquery.jstree'
- ], function ($) {
- 'use strict';
- $.widget('mage.folderTree', {
- options: {
- root: 'root',
- rootName: 'Root',
- url: '',
- currentPath: ['root'],
- tree: {
- 'plugins': ['themes', 'json_data', 'ui', 'hotkeys'],
- 'themes': {
- 'theme': 'default',
- 'dots': false,
- 'icons': true
- }
- }
- },
- /** @inheritdoc */
- _create: function () {
- var options = this.options,
- treeOptions = $.extend(
- true,
- {},
- options.tree,
- {
- 'json_data': {
- data: {
- data: options.rootName,
- state: 'closed',
- metadata: {
- node: {
- id: options.root,
- text: options.rootName
- }
- },
- attr: {
- 'data-id': options.root,
- id: options.root
- }
- },
- ajax: {
- url: options.url,
- /**
- * @param {Object} node
- * @return {Object}
- */
- data: function (node) {
- return {
- node: node.data('id'),
- 'form_key': window.FORM_KEY
- };
- },
- success: this._convertData
- }
- }
- }
- );
- this.element.jstree(treeOptions).on('loaded.jstree', $.proxy(this.treeLoaded, this));
- },
- /**
- * Tree loaded.
- */
- treeLoaded: function () {
- var path = this.options.currentPath,
- tree = this.element,
- lastExistentFolderEl,
- /**
- * Recursively open folders specified in path array.
- */
- recursiveOpen = function () {
- var folderEl = $('[data-id="' + path.pop() + '"]');
- // if folder doesn't exist, select the last opened folder
- if (!folderEl.length) {
- tree.jstree('select_node', lastExistentFolderEl);
- return;
- }
- lastExistentFolderEl = folderEl;
- if (path.length) {
- tree.jstree('open_node', folderEl, recursiveOpen);
- } else {
- tree.jstree('open_node', folderEl, function () {
- tree.jstree('select_node', folderEl);
- });
- }
- };
- recursiveOpen();
- },
- /**
- * @param {*} data
- * @return {*}
- * @private
- */
- _convertData: function (data) {
- return $.map(data, function (node) {
- var codeCopy = $.extend({}, node);
- return {
- data: node.text,
- attr: {
- 'data-id': node.id,
- id: node.id
- },
- metadata: {
- node: codeCopy
- },
- state: node.state || 'closed'
- };
- });
- }
- });
- return $.mage.folderTree;
- });
|