Вход Регистрация
Файл: concrete5.7.5.6/concrete/js/build/core/topics.js
Строк: 491
<?php
(function($, window) {

  var 
methods = {

    private:  {

        
dragRequest: function(sourceNode, node, hitMode) {
            var 
treeNodeParentID = node.parent.data.key;
            if (
hitMode == 'over') {
                
treeNodeParentID = node.data.key;
            }
            
jQuery.fn.dialog.showLoader();
            var 
params = [{'name': 'sourceTreeNodeID', 'value': sourceNode.data.key}, {'name': 'treeNodeParentID', 'value': treeNodeParentID}];
            var 
childNodes = node.parent.getChildren();
            if (
childNodes) {
                for (var 
i = 0; i < childNodes.length; i++) {
                    var 
childNode = childNodes[i];
                    
params.push({'name': 'treeNodeID[]', 'value': childNode.data.key});
                }
            }
            $.
ajax({
                
dataType: 'json',
                
type: 'POST',
                
data: params,
                
url: CCM_TOOLS_PATH + '/tree/node/drag_request',
                
success: function(r) {
                    
ccm_parseJSON(r, function() {});
                    
jQuery.fn.dialog.hideLoader();
                }
            });
        },

        
getMenu: function(data, options) {
            var 
menu = '<div class="ccm-topic-menu ccm-popover-page-menu popover fade popover fade"><div class="arrow"></div><div class="popover-inner">';
            
menu += '<ul class="dropdown-menu">';

            if (
data.canAddTopicCategoryTreeNode) {
                
menu += '<li><a class="dialog-launch" dialog-width="550" dialog-on-open="$('[data-topic-form=add-category-node]').ccmtopicstree('initAddNodeForm', ' + options.treeID + ');" dialog-height="auto" dialog-modal="false" dialog-title="' + ccmi18n_topics.addCategory + '" href="' + CCM_DISPATCHER_FILENAME + '/tools/required/tree/node/add/topic_category?treeNodeParentID=' + data.key + '">' + ccmi18n_topics.addCategory + '</a></li>';
            }
            if (
data.canAddTopicTreeNode) {
                
menu += '<li><a class="dialog-launch" dialog-width="550" dialog-on-open="$('[data-topic-form=add-topic-node]').ccmtopicstree('initAddNodeForm', ' + options.treeID + ');" dialog-height="auto" dialog-modal="false" dialog-title="' + ccmi18n_topics.addTopic + '" href="' + CCM_DISPATCHER_FILENAME + '/tools/required/tree/node/add/topic?treeNodeParentID=' + data.key + '">' + ccmi18n_topics.addTopic + '</a></li>';
            }

            if (
data.canEditTreeNode && data.treeNodeTypeHandle == 'topic_category') {
                
menu += '<li><a class="dialog-launch" dialog-width="550" dialog-on-open="$('[data-topic-form=update-category-node]').ccmtopicstree('initUpdateCategoryNodeForm', ' + options.treeID + ');" dialog-height="auto" dialog-modal="false" dialog-title="' + ccmi18n_topics.editCategory + '" href="' + CCM_DISPATCHER_FILENAME + '/tools/required/tree/node/edit/topic_category?treeNodeID=' + data.key + '">' + ccmi18n_topics.editCategory + '</a></li>';
            }
            if (
data.canDuplicateTreeNode && data.treeNodeTypeHandle == 'topic_category') {
                
menu += '<li><a href="#" onclick="$.fn.ccmtopicstree('cloneNode', 'node', ' + options.treeID + ',' + data.key + ')">' + ccmi18n_topics.cloneCategory + '</a></li>';
            }

            if (
data.canEditTreeNode && data.treeNodeTypeHandle == 'topic') {
                
menu += '<li><a class="dialog-launch" dialog-width="550" dialog-on-open="$('[data-topic-form=update-topic-node]').ccmtopicstree('initUpdateTopicNodeForm', ' + options.treeID + ');" dialog-height="auto" dialog-modal="false" dialog-title="' + ccmi18n_topics.editTopic + '" href="' + CCM_DISPATCHER_FILENAME + '/tools/required/tree/node/edit/topic?treeNodeID=' + data.key + '">' + ccmi18n_topics.editTopic + '</a></li>';
            }
            if (
data.canDuplicateTreeNode && data.treeNodeTypeHandle == 'topic') {
                
menu += '<li><a href="#" onclick="$.fn.ccmtopicstree('cloneNode', 'node', ' + options.treeID + ',' + data.key + ')">' + ccmi18n_topics.cloneTopic + '</a></li>';
            }

            if (
data.canEditTreeNodePermissions) {
                
menu += '<li><a class="dialog-launch" dialog-width="480" dialog-height="auto" dialog-modal="true" dialog-title="' + ccmi18n_topics.editPermissions + '" href="' + CCM_TOOLS_PATH + '/tree/node/permissions?treeNodeID=' + data.key + '">' + ccmi18n_topics.editPermissions + '</a></li>';
            }
            if (
data.treeNodeParentID > 0 && data.treeNodeTypeHandle == 'topic_category' && data.canDeleteTreeNode) {
                
menu += '<li><a class="dialog-launch" dialog-width="550" dialog-on-open="$('[data-topic-form=remove-tree-node]').ccmtopicstree('initRemoveNodeForm', ' + options.treeID + ');" dialog-height="auto" dialog-modal="false" dialog-title="' + ccmi18n_topics.deleteCategory + '" href="' + CCM_TOOLS_PATH + '/tree/node/remove?treeNodeID=' + data.key + '">' + ccmi18n_topics.deleteCategory + '</a></li>';
            }
            if (
data.treeNodeParentID > 0 && data.treeNodeTypeHandle == 'topic' && data.canDeleteTreeNode) {
                
menu += '<li><a class="dialog-launch" dialog-width="550" dialog-on-open="$('[data-topic-form=remove-tree-node]').ccmtopicstree('initRemoveNodeForm', ' + options.treeID + ');" dialog-height="auto" dialog-modal="false" dialog-title="' + ccmi18n_topics.deleteTopic + '" href="' + CCM_TOOLS_PATH + '/tree/node/remove?treeNodeID=' + data.key + '">' + ccmi18n_topics.deleteTopic + '</a></li>';
            }
            
menu += '</ul></div></div>';
            var 
$menu = $(menu);
            if (
$menu.find('li').length == 0) {
                return 
false;
            }

            return 
$menu;

        },
        

        
reloadNode: function(options, node, onComplete) {
            var 
obj = this,
                
data = options.ajaxData;
            
data.treeNodeParentID = node.data.key;

            var 
params = {
                
url: CCM_TOOLS_PATH + '/tree/node/load',
                
data: data,
                
success: function() {
                    if (
onComplete) {
                        
onComplete();
                    }
                }
            };
            
            
node.appendAjax(params);

        },

        
setupDialogForm: function($form, onSuccess) {
            
$form.closest('.ui-dialog').find("button[type=submit]").on('click', function() { $form.trigger('submit'); });
            
$form.on('submit', function() {
                
jQuery.fn.dialog.showLoader();
                var 
data = $form.serializeArray();
                $.
ajax({
                    
'dataType': 'json',
                    
'type': 'post',
                    
'data': data,
                    
'url': $form.attr('action'),
                    
success: function(r) {
                        if (
r.error == true) {
                            
ConcreteAlert.dialog(ccmi18n.error, r.errors.join("<br>"));
                        } else {
                            
jQuery.fn.dialog.closeTop();
                            
onSuccess(r);
                        }
                    },
                    
error: function(r) {
                        
ConcreteAlert.dialog(ccmi18n.error, r.responseText);
                    },
                    
complete: function() {
                        
jQuery.fn.dialog.hideLoader();
                    }
                });
                return 
false;
            });
        }
    },

    
initAddNodeForm: function(treeID) {
        
methods.private.setupDialogForm($(this), function(r) {
            var 
$tree = $('[data-topic-tree=' + treeID + ']');
            if (
r.length) {
                for (var 
i = 0; i < r.length; i++) {
                    var 
node = $tree.dynatree('getTree').getNodeByKey(r[i].treeNodeParentID);
                    
node.addChild(r[i]);
                }
            } else {
                var 
node = $tree.dynatree('getTree').getNodeByKey(r.treeNodeParentID);
                
node.addChild(r);
            }
            
node.expand();
        });
    },

    
cloneNode: function(cloneType, treeID, treeNodeID) {
          var 
$tree = $('[data-topic-tree=' + treeID + ']');
        $.
ajax({
            
'dataType': 'json',
            
'type': 'post',
            
'data': {
                
'treeNodeID': treeNodeID
            
},
            
'url': CCM_TOOLS_PATH + '/tree/node/duplicate/' + cloneType,
            
success: function(r) {
                if (
r.error == true) {
                    
ConcreteAlert.dialog(ccmi18n.error, r.errors.join("<br>"));
                } else {
                    
jQuery.fn.dialog.closeTop();
                    var 
node = $tree.dynatree('getTree').getNodeByKey(r.treeNodeParentID);
                    
node.setLazyNodeStatus(DTNodeStatus_Loading);    
                    
methods.private.reloadNode($tree.data('options'), node, function() {
                        
node.setLazyNodeStatus(DTNodeStatus_Ok);    
                    });
                }
            },
            
error: function(r) {
                
ConcreteAlert.dialog(ccmi18n.error, '<div class="alert alert-danger">' + r.responseText + '</div>');
            },
            
complete: function() {
                
jQuery.fn.dialog.hideLoader();
            }
        });
        return 
false;
    },

    
initUpdateCategoryNodeForm: function(treeID) {
        
methods.private.setupDialogForm($(this), function(r) {
            var 
$tree = $('[data-topic-tree=' + treeID + ']');
            var 
node = $tree.dynatree('getTree').getNodeByKey(r.key);
            
node.data = r;
            
node.render();
        });
    },

    
initUpdateTopicNodeForm: function(treeID) {
        
methods.private.setupDialogForm($(this), function(r) {
            var 
$tree = $('[data-topic-tree=' + treeID + ']');
            var 
node = $tree.dynatree('getTree').getNodeByKey(r.key);
            
node.data = r;
            
node.render();
        });
    },


    
initRemoveNodeForm: function(treeID) {
        
methods.private.setupDialogForm($(this), function(r) {
            var 
$tree = $('[data-topic-tree=' + treeID + ']');
            var 
node = $tree.dynatree('getTree').getNodeByKey(r.treeNodeID);
            
node.remove();
        });
    },

    
init: function(options) {
        
options = $.extend({
            
readonly: false,
            
chooseNodeInForm: false,
            
onSelect: false,
            
allowFolderSelection: true,
            
selectNodesByKey: []
        }, 
options);

        var 
checkbox = false,
            
classNames = false;

        
/* var ajaxData =  {
            'treeID': options.treeID
        }; */

        
if(!options.treeNodeParentID) {
            var 
ajaxData = { 'treeID': options.treeID };
        } else {
            var 
ajaxData = { 'treeNodeParentID': options.treeNodeParentID };
        }

        if (
options.allowFolderSelection) {
            
ajaxData.allowFolderSelection = 1;
        }

        var 
persist = true;

        if (
options.chooseNodeInForm) {
            
checkbox = true;
            
persist = false;
            
classNames = {
                
'checkbox': 'dynatree-radio'
            
};
            if (
options.selectNodesByKey.length) {
                
ajaxData.treeNodeSelectedIDs = options.selectNodesByKey;
            }
        }
        
        if (
options.chooseNodeInForm === 'multiple') {
            
checkbox = true;
            
persist = false;
            
classNames = {
                
'checkbox': 'dynatree-checkbox'
            
};
            if (
options.selectNodesByKey.length) {
                
ajaxData.treeNodeSelectedIDs = options.selectNodesByKey;
            }
        }
        
        var 
selectMode = 1;
        if(
options.selectMode) {
            
selectMode = options.selectMode;
        }
        var 
minExpandLevel = 2;
        if(
options.minExpandLevel) {
            
minExpandLevel = options.minExpandLevel;
        }

        return 
this.each(function() {
            if(!
options.treeNodeParentID) {
                var 
loadToolsURL = CCM_TOOLS_PATH + '/tree/load';
            } else {
                var 
loadToolsURL = CCM_TOOLS_PATH + '/tree/node/load';
            }
            var 
$obj = $(this);
            
options.ajaxData = ajaxData;
            
$obj.data('options', options);
            
$obj.dynatree({
                
autoFocus: false,
                
/*cookieId: cookieId,
                cookie: {
                    path: CCM_REL + '/'
                },*/

                
onSelect: function(select, node) {
                    if (
options.chooseNodeInForm) {
                        
options.onSelect(select, node);
                    }
                },
                
/*
                persist: persist,
                */
                
selectMode: selectMode,
                
checkbox: checkbox,
                
classNames: classNames,
                
minExpandLevel:  minExpandLevel,
                
clickFolderMode: 1,
                
initAjax: {
                    
url: loadToolsURL,
                    
type: 'post',
                    
data: ajaxData
                
},
                
onLazyRead: function(node) {
                    
methods.private.reloadNode(options, node);
                },

                
onPostInit: function() {
                    var 
$tree = $obj;
                    if (
options.readonly) {
                        
$tree.dynatree('disable');
                    }

                    if (
options.chooseNodeInForm) {
                        var 
selectedNodes = $tree.dynatree('getTree');
                        
selectedNodes = selectedNodes.getSelectedNodes();
                        if (
selectedNodes[0]) {
                            var 
node = selectedNodes[0];
                            
options.onSelect(true, node);
                        }
                    }
                    if(
selectedNodes) {
                        var 
selKeys = $.map(selectedNodes, function(node){
                            
node.makeVisible();
                        });
                   }

                },
                
onClick: function(node, e) {
                    if (
node.getEventTargetType(e) == 'expander') {
                        return 
true;
                    }
                    if (
options.chooseNodeInForm && node.getEventTargetType(e) != 'checkbox') {
                        return 
false;
                    }
                    if (!
node.getEventTargetType(e)) {
                        return 
false;
                    }
                    if (!
options.chooseNodeInForm && node.getEventTargetType(e) == 'title' && !options.noForm) {
                        var 
$menu = methods.private.getMenu(node.data, options);
                        if (
$menu) {
                            var 
menu = new ConcreteMenu($(node.span), {
                                
menu: $menu,
                                
launcher: 'none'
                            
});
                            
menu.show(e);
                        }
                    }
                },
                
dnd: {
                    
onDragStart: function(node) {
                        if(
options.noDrag) {
                            return 
false;
                        } else {
                            return 
true;
                        }
                    },
                    
onDragStop: function(node) {

                    },
                    
autoExpandMS: 1000,
                    
preventVoidMoves: true,
                    
onDragEnter: function(node, sourceNode) {
                        return 
true;
                    },
                    
onDragOver: function(node, sourceNode, hitMode) {
                        if ((!
node.parent.data.treeNodeID) && (node.data.treeNodeID !== '1')) { // Home page has no parents, but we still want to be able to hit it.
                            
return false;
                        }

                        if((
hitMode != 'over') && (node.data.treeNodeID == 1)) {  // Home gets no siblings
                            
return false;
                        }

                        if (
sourceNode.data.treeNodeID == node.data.treeNodeID) {
                            return 
false; // can't drag node onto itself.
                        
}

                        if (!
node.data.treeNodeID && hitMode == 'after') {
                            return 
false;
                        }

                        
// you can only drag shit into other categories.
                        // Restriction lifted. Topics can live inside other topics.
                        /*
                        var nodeTypeHandle = node.data.treeNodeType;
                        if (hitMode === 'over' && jQuery.inArray(node.data.treeNodeTypeHandle, ['topic']) > -1) {
                            return false;
                        }
                        */

                        // Prevent dropping a parent below its own child
                        
if(node.isDescendantOf(sourceNode)){
                          return 
false;
                        }
                        return 
true;

                    },
                    
onDrop: function(node, sourceNode, hitMode, ui, draggable) {
                        
sourceNode.move(node, hitMode);
                        
methods.private.dragRequest(sourceNode, node, hitMode);
                    }
                }                
            });

        });
    }


  };

  $.
fn.ccmtopicstree = function(method) {

    if ( 
methods[method] ) {
      return 
methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( 
typeof method === 'object' || ! method ) {
      return 
methods.init.apply( this, arguments );
    } else {
      $.
error( 'Method ' +  method + ' does not exist on jQuery.ccmtopicstree' );
    }   

  };
})(
jQuery, window);
?>
Онлайн: 2
Реклама