123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- /**
- * @api
- */
- define([
- 'jquery',
- 'jquery/ui',
- 'jquery/jstree/jquery.jstree'
- ], function ($) {
- 'use strict';
- $.widget('mage.rolesTree', {
- options: {
- treeInitData: {},
- treeInitSelectedData: {}
- },
- /** @inheritdoc */
- _create: function () {
- this.element.jstree({
- plugins: ['themes', 'json_data', 'ui', 'crrm', 'types', 'vcheckbox', 'hotkeys'],
- vcheckbox: {
- 'two_state': true,
- 'real_checkboxes': true,
- /**
- * @param {*} n
- * @return {Array}
- */
- 'real_checkboxes_names': function (n) {
- return ['resource[]', $(n).data('id')];
- }
- },
- 'json_data': {
- data: this.options.treeInitData
- },
- ui: {
- 'select_limit': 0
- },
- hotkeys: {
- space: this._changeState,
- 'return': this._changeState
- },
- types: {
- 'types': {
- 'disabled': {
- 'check_node': false,
- 'uncheck_node': false
- }
- }
- }
- });
- this._bind();
- },
- /**
- * @private
- */
- _destroy: function () {
- this.element.jstree('destroy');
- },
- /**
- * @private
- */
- _bind: function () {
- this.element.on('loaded.jstree', $.proxy(this._checkNodes, this));
- this.element.on('click.jstree', 'a', $.proxy(this._checkNode, this));
- },
- /**
- * @param {jQuery.Event} event
- * @private
- */
- _checkNode: function (event) {
- event.stopPropagation();
- this.element.jstree(
- 'change_state',
- event.currentTarget,
- this.element.jstree('is_checked', event.currentTarget)
- );
- },
- /**
- * @private
- */
- _checkNodes: function () {
- var $items = $('[data-id="' + this.options.treeInitSelectedData.join('"],[data-id="') + '"]');
- $items.removeClass('jstree-unchecked').addClass('jstree-checked');
- $items.children(':checkbox').prop('checked', true);
- },
- /**
- * @return {Boolean}
- * @private
- */
- _changeState: function () {
- var element;
- if (this.data.ui.hovered) {
- element = this.data.ui.hovered;
- this['change_state'](element, this['is_checked'](element));
- }
- return false;
- }
- });
- return $.mage.rolesTree;
- });
|