| Current Path : /var/www/clients/client3/web2/web/vendor/magento/module-cms/view/adminhtml/web/js/ |
| Current File : /var/www/clients/client3/web2/web/vendor/magento/module-cms/view/adminhtml/web/js/folder-tree.js |
/**
* 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;
});