Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

124 wiersze
3.6 KiB

  1. /**
  2. * Copyright © Magento, Inc. All rights reserved.
  3. * See COPYING.txt for license details.
  4. */
  5. /**
  6. * @api
  7. */
  8. define([
  9. 'jquery',
  10. 'jquery/ui',
  11. 'jquery/jstree/jquery.jstree'
  12. ], function ($) {
  13. 'use strict';
  14. $.widget('mage.rolesTree', {
  15. options: {
  16. treeInitData: {},
  17. editFormSelector: '',
  18. resourceFieldName: 'resource[]',
  19. checkboxVisible: true
  20. },
  21. /** @inheritdoc */
  22. _create: function () {
  23. this.element.jstree({
  24. plugins: ['checkbox'],
  25. checkbox: {
  26. // jscs:disable requireCamelCaseOrUpperCaseIdentifiers
  27. three_state: false,
  28. // jscs:enable requireCamelCaseOrUpperCaseIdentifiers
  29. visible: this.options.checkboxVisible,
  30. cascade: 'undetermined'
  31. },
  32. core: {
  33. data: this.options.treeInitData,
  34. themes: {
  35. dots: false
  36. }
  37. }
  38. });
  39. this._bind();
  40. },
  41. /**
  42. * @private
  43. */
  44. _destroy: function () {
  45. this.element.jstree('destroy');
  46. },
  47. /**
  48. * @private
  49. */
  50. _bind: function () {
  51. this.element.on('select_node.jstree', $.proxy(this._selectChildNodes, this));
  52. this.element.on('deselect_node.jstree', $.proxy(this._deselectChildNodes, this));
  53. this.element.on('changed.jstree', $.proxy(this._changedNode, this));
  54. },
  55. /**
  56. * @param {Event} event
  57. * @param {Object} selected
  58. * @private
  59. */
  60. _selectChildNodes: function (event, selected) {
  61. // jscs:disable requireCamelCaseOrUpperCaseIdentifiers
  62. selected.instance.open_node(selected.node);
  63. selected.node.children.each(function (id) {
  64. var selector = '[id="' + id + '"]';
  65. selected.instance.select_node(
  66. selected.instance.get_node($(selector), false)
  67. );
  68. });
  69. // jscs:enable requireCamelCaseOrUpperCaseIdentifiers
  70. },
  71. /**
  72. * @param {Event} event
  73. * @param {Object} selected
  74. * @private
  75. */
  76. _deselectChildNodes: function (event, selected) {
  77. selected.node.children.each(function (id) {
  78. var selector = '[id="' + id + '"]';
  79. // jscs:disable requireCamelCaseOrUpperCaseIdentifiers
  80. selected.instance.deselect_node(
  81. selected.instance.get_node($(selector), false)
  82. );
  83. // jscs:enable requireCamelCaseOrUpperCaseIdentifiers
  84. });
  85. },
  86. /**
  87. * Add selected resources to form to be send later
  88. *
  89. * @param {Event} event
  90. * @param {Object} selected
  91. * @private
  92. */
  93. _changedNode: function (event, selected) {
  94. var form = $(this.options.editFormSelector),
  95. fieldName = this.options.resourceFieldName,
  96. items = selected.selected.concat($(this.element).jstree('get_undetermined'));
  97. if (this.options.editFormSelector === '') {
  98. return;
  99. }
  100. form.find('input[name="' + this.options.resourceFieldName + '"]').remove();
  101. items.each(function (id) {
  102. $('<input>', {
  103. type: 'hidden',
  104. name: fieldName,
  105. value: id
  106. }).appendTo(form);
  107. });
  108. }
  109. });
  110. return $.mage.rolesTree;
  111. });