10 <div
class=
"attribute-set">
12 <div
class=
"admin__data-grid-loading-mask" 15 <span></span><span></span><span></span><span></span>
16 <span></span><span></span><span></span><span></span>
19 <div
class=
"edit-attribute-set attribute-set-col">
20 <?=
$block->getSetFormHtml() ?>
27 jQuery(
'#set-prop-form').mage(
'validation', {errorClass:
'mage-error'});
32 <div
class=
"attribute-set-col fieldset-wrapper">
33 <div
class=
"fieldset-wrapper-title">
34 <span
class=
"title"><?=
__(
'Groups') ?></span>
36 <?php
if (!
$block->getIsReadOnly()): ?>
38 <p
class=
"note-block"><?=
__(
'Double click on a group to rename it.') ?></p>
41 <?=
$block->getSetsFilterHtml() ?>
42 <?=
$block->getGroupTreeHtml() ?>
44 <div
class=
"attribute-set-col fieldset-wrapper">
45 <div
class=
"fieldset-wrapper-title">
46 <span
class=
"title"><?=
__(
'Unassigned Attributes') ?></span>
48 <div
id=
"tree-div2" class=
"attribute-set-tree"></div>
49 <script
id=
"ie-deferred-loader" defer=
"defer" src=
"//:"></script>
54 "Magento_Ui/js/modal/prompt",
55 "Magento_Ui/js/modal/alert",
56 "extjs/ext-tree-checkbox",
58 ],
function(
jQuery, prompt, alert){
61 var allowDragAndDrop = <?= (
$block->getIsReadOnly() ?
'false' :
'true') ?>;
62 var canEditGroups = <?= (
$block->getIsReadOnly() ?
'false' :
'true') ?>;
64 var TreePanels =
function() {
72 var
tree =
new Ext.tree.TreePanel(
'tree-div1', {
75 enableDD:allowDragAndDrop,
76 containerScroll:
true,
81 this.root =
new Ext.tree.TreeNode({
88 tree.setRootNode(this.root);
89 buildCategoryTree(this.root, <?=
$block->getGroupTreeJson() ?>);
92 this.root.expand(
false,
false);
95 this.ge =
new Ext.tree.TreeEditor(
tree, {
97 blankText:
'<?= /* @escapeNotVerified */ __('A
name is required.
') ?>',
102 this.root.addListener(
'beforeinsert', editSet.leftBeforeInsert);
103 this.root.addListener(
'beforeappend', editSet.leftBeforeInsert);
106 this.ge.addListener(
'beforeshow', editSet.editGroup);
107 this.ge.addListener(
'beforecomplete', editSet.beforeRenameGroup);
112 var tree2 =
new Ext.tree.TreePanel(
'tree-div2', {
115 enableDD:allowDragAndDrop,
116 containerScroll:
true,
122 this.root2 =
new Ext.tree.TreeNode({
127 tree2.setRootNode(this.root2);
128 buildCategoryTree(this.root2, <?=
$block->getAttributeTreeJson() ?>);
130 this.root2.addListener(
'beforeinsert', editSet.rightBeforeInsert);
131 this.root2.addListener(
'beforeappend', editSet.rightBeforeAppend);
133 this.root2.addListener(
'append', editSet.rightAppend);
134 this.root2.addListener(
'remove', editSet.rightRemove);
137 this.root2.expand(
false,
false);
141 rebuildTrees :
function(){
142 editSet.req.attributes =
new Array();
143 rootNode = TreePanels.root;
145 for( i in rootNode.childNodes ) {
146 if(rootNode.childNodes[i].id) {
147 var group = rootNode.childNodes[i];
148 editSet.req.groups[gIterator] =
new Array(group.id, group.attributes.text.strip(), (gIterator+1));
150 for( j in group.childNodes ) {
152 if( group.childNodes[j].id > 0 ) {
153 editSet.req.attributes[group.childNodes[j].id] =
new Array(group.childNodes[j].id, group.id, iterator, group.childNodes[j].attributes.entity_id);
161 editSet.req.not_attributes =
new Array();
162 rootNode = TreePanels.root2;
165 for( i in rootNode.childNodes ) {
166 if(rootNode.childNodes[i].id) {
167 if( rootNode.childNodes[i].id > 0 ) {
168 editSet.req.not_attributes[iterator] = rootNode.childNodes[i].attributes.entity_id;
177 function buildCategoryTree(parent, config){
178 if (!config)
return null;
179 if (parent && config && config.length){
180 for (var i = 0; i < config.length; i++) {
181 var node =
new Ext.tree.TreeNode(config[i]);
182 parent.appendChild(node);
183 node.addListener(
'click', editSet.register);
184 node.addListener(
'beforemove', editSet.groupBeforeMove);
185 node.addListener(
'beforeinsert', editSet.groupBeforeInsert);
186 node.addListener(
'beforeappend', editSet.groupBeforeInsert);
187 if( config[i].children ) {
188 for( j in config[i].children ) {
189 if(config[i].children[j].
id) {
190 newNode =
new Ext.tree.TreeNode(config[i].children[j]);
192 if (typeof newNode.ui.onTextChange ===
'function') {
193 newNode.ui.onTextChange =
function (_3, _4, _5) {
195 this.textNode.innerText = _4;
200 node.appendChild(newNode);
201 newNode.addListener(
'click', editSet.unregister);
209 editSet =
function () {
211 register:
function (node) {
212 editSet.currentNode = node;
213 if (typeof node.ui.onTextChange ===
'function') {
214 node.ui.onTextChange =
function (_3, _4, _5) {
216 this.textNode.innerText = _4;
222 unregister :
function() {
223 editSet.currentNode =
false;
226 submit :
function() {
227 var i, child, newNode;
229 if( TreePanels.root.firstChild == TreePanels.root.lastChild ) {
233 if( editSet.SystemNodesExists(editSet.currentNode) ) {
235 content:
'<?= $block->escapeJs(__('This group contains system attributes. Please move system attributes to another group and
try again.
')) ?>' 240 if( editSet.currentNode && editSet.currentNode.attributes.cls ==
'folder' ) {
241 TreePanels.root.removeChild(editSet.currentNode);
243 for( i in editSet.currentNode.childNodes ) {
244 if( editSet.currentNode.childNodes[i].id ) {
245 child = editSet.currentNode.childNodes[i];
246 newNode =
new Ext.tree.TreeNode(child.attributes);
248 if( child.attributes.is_user_defined == 1 ) {
249 TreePanels.root2.appendChild(newNode);
254 editSet.req.removeGroups[editSet.currentNode.id] = editSet.currentNode.id;
255 editSet.currentNode =
false;
259 SystemNodesExists :
function(currentNode) {
262 content:
'<?= $block->escapeJs(__('Please select a node.
')) ?>' 267 for (i in currentNode.childNodes) {
268 if (currentNode.childNodes[i].id) {
269 child = editSet.currentNode.childNodes[i];
270 if (child.attributes.is_unassignable != 1) {
277 rightAppend :
function(node) {
281 addGroup :
function() {
283 title:
"<?= /* @escapeNotVerified */ __('Add New Group') ?>",
284 content:
"<?= /* @escapeNotVerified */ __('Please enter a new group name.') ?>",
287 validationRules: [
'required-entry'],
289 novalidate:
'novalidate',
294 'data-validate':
'{required:true}',
298 confirm:
function (group_name) {
299 group_name = group_name.strip();
301 if (!editSet.validateGroupName(group_name, 0)) {
305 var newNode =
new Ext.tree.TreeNode({
306 text : group_name.escapeHTML(),
312 if (typeof newNode.ui.onTextChange ===
'function') {
313 newNode.ui.onTextChange =
function (_3, _4, _5) {
315 this.textNode.innerText = _4;
320 TreePanels.root.appendChild(newNode);
321 newNode.addListener(
'beforemove', editSet.groupBeforeMove);
322 newNode.addListener(
'beforeinsert', editSet.groupBeforeInsert);
323 newNode.addListener(
'beforeappend', editSet.groupBeforeInsert);
324 newNode.addListener(
'click', editSet.register);
330 editGroup :
function(obj) {
331 if( obj.editNode.attributes.cls !=
'folder' || !canEditGroups) {
332 TreePanels.ge.cancelEdit();
337 beforeRenameGroup :
function(obj, after, before) {
338 return editSet.validateGroupName(after, obj.editNode.id);
341 validateGroupName :
function(
name, exceptNodeId) {
347 for (var i=0; i < TreePanels.root.childNodes.length; i++) {
348 if (TreePanels.root.childNodes[i].text.toLowerCase() ==
name.toLowerCase() && TreePanels.root.childNodes[i].id != exceptNodeId) {
349 errorText =
'<?= /* @escapeNotVerified */ __('An attribute group named
"/name/" already exists.
') ?>';
351 content: errorText.replace(
"/name/",
name)
363 $(
'messages').update();
365 block =
jQuery(
'<div/>').attr(
'id',
'messages');
366 jQuery(
'.page-main-actions').after(block);
368 TreePanels.rebuildTrees();
369 if(!
jQuery(
'#set-prop-form').valid()) {
372 editSet.req.attribute_set_name = $(
'attribute_set_name').
value;
373 if (!editSet.req.form_key) {
374 editSet.req.form_key = FORM_KEY;
376 var req = {data : Ext.util.JSON.encode(editSet.req)};
377 var con =
new Ext.lib.Ajax.request(
'POST',
'<?= /* @escapeNotVerified */ $block->getMoveUrl() ?>', {success:editSet.success,failure:editSet.failure}, req);
380 success :
function(o) {
381 var response = Ext.util.JSON.decode(o.responseText);
382 if( response.error ) {
383 $(
'messages').update(response.message);
384 }
else if( response.ajaxExpired && response.ajaxRedirect ){
385 setLocation(response.ajaxRedirect);
386 }
else if( response.url ){
387 setLocation(response.url);
388 }
else if( response.message ) {
389 $(
'messages').update(response.message);
393 failure :
function(o) {
395 content:
'<?= $block->escapeJs(__('Sorry, we\
're unable to complete this request.')) ?>
' 399 groupBeforeMove : function(tree, nodeThis, oldParent, newParent) { 400 if( newParent.attributes.cls == 'folder
' && nodeThis.attributes.cls == 'folder
' ) { 404 if( newParent == TreePanels.root && nodeThis.attributes.cls != 'folder
' ) { 409 rightBeforeAppend : function(tree, nodeThis, node, newParent) { 410 if (node.attributes.is_user_defined == 0) { 412 content: '<?=
$block->escapeJs(
__(
'You can\'t remove attributes from this attribute set.')) ?>
' 420 rightBeforeInsert : function(tree, nodeThis, node, newParent) { 421 var empty = TreePanels.root2.findChild('id', 'empty
'); 426 if (node.attributes.is_unassignable == 0) { 428 content: '<?=
$block->escapeJs(
__(
'You can\'t remove attributes from this attribute set.')) ?>
' 436 groupBeforeInsert : function(tree, nodeThis, node, newParent) { 437 if( node.allowChildren ) { 442 rightAppend : function(tree, nodeThis, node) { 443 var empty = TreePanels.root2.findChild('id', 'empty
'); 444 if( empty && node.id != 'empty
' ) { 445 TreePanels.root2.removeChild(empty); 449 rightRemove : function(tree, nodeThis, node) { 450 if( nodeThis.firstChild == null && node.id != 'empty
' ) { 451 var newNode = new Ext.tree.TreeNode({ 452 text : '<?=
__(
'Empty') ?>
', 459 TreePanels.root2.appendChild(newNode); 463 leftBeforeInsert : function(tree, nodeThis, node, newParent) { 464 if( node.allowChildren == false ) { 471 function initVars() { 473 editSet.req.attributes = false; 474 editSet.req.groups = new Array(); 475 editSet.req.not_attributes = false; 476 editSet.req.attribute_set_name = false; 477 editSet.req.removeGroups = new Array(); 483 jQuery("[data-role='spinner
']").hide(); 488 require(["tree-panel"]); $block setTitle( 'CMS Block Title') -> setIdentifier('fixture_block') ->setContent('< h1 >Fixture Block Title</h1 >< a href=" store url</a><p> Config value
$_count $_index $_prevOptionId if($block->getOrderOptions()|| $_item->getDescription()) foreach( $items as $_item)( $_item) ?><?php $attributes if( $_item->getOrderItem() ->getParentItem())($_prevOptionId !=$attributes['option_id'])</td >< td > & nbsp
<?=$block-> getDeleteGroupButton() ?>< p class endif
if($block->getRoot())< div class="message message-notice">< div ><?=__( 'This operation can take a long time') ?></div ></div ></div >< script > var tree
jQuery('.store-switcher .dropdown-menu li a').each(function()