/** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ (function (root, factory) { 'use strict'; if (typeof define === 'function' && define.amd) { define([ 'jquery', 'jquery/ui', 'jquery/jstree/jquery.jstree', 'mage/backend/suggest' ], factory); } else { factory(root.jQuery); } }(this, function ($) { 'use strict'; /* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */ var hover_node, dehover_node, select_node, init; $.extend(true, $, { // @TODO: Move method 'treeToList' in file with utility functions mage: { /** * @param {Array} list * @param {Object} nodes * @param {*} level * @param {*} path * @return {*} */ treeToList: function (list, nodes, level, path) { $.each(nodes, function () { if ($.type(this) === 'object') { list.push({ label: this.label, id: this.id, level: level, item: this, path: path + this.label }); if (this.children) { $.mage.treeToList(list, this.children, level + 1, path + this.label + ' / '); } } }); return list; } } }); hover_node = $.jstree._instance.prototype.hover_node; dehover_node = $.jstree._instance.prototype.dehover_node; select_node = $.jstree._instance.prototype.select_node; init = $.jstree._instance.prototype.init; $.extend(true, $.jstree._instance.prototype, { /** * @override */ init: function () { this.get_container() .show() .on('keydown', $.proxy(function (e) { var o; if (e.keyCode === $.ui.keyCode.ENTER) { o = this.data.ui.hovered || this.data.ui.last_selected || -1; this.select_node(o, true); } }, this)); init.call(this); }, /** * @override */ hover_node: function (obj) { hover_node.apply(this, arguments); obj = this._get_node(obj); if (!obj.length) { return false; } this.get_container().trigger('hover_node', [{ item: obj.find('a:first') }]); }, /** * @override */ dehover_node: function () { dehover_node.call(this); this.get_container().trigger('dehover_node'); }, /** * @override */ select_node: function (o) { var node; select_node.apply(this, arguments); node = this._get_node(o); (node ? $(node) : this.data.ui.last_selected) .trigger('select_tree_node'); } }); $.widget('mage.treeSuggest', $.mage.suggest, { widgetEventPrefix: 'suggest', options: { template: '<% if (data.items.length) { %>' + '<% if (data.allShown()) { %>' + '<% if (typeof data.nested === "undefined") { %>' + '
' + '<% } %>' + '<% } else { %>' + '