Вход Регистрация
Файл: concrete5.7.5.6/concrete/js/build/core/sitemap/sitemap.js
Строк: 587
<?php
/**
 * Base search class for AJAX forms in the UI
 */

!function(global, $, _) {
    
'use strict';

    function 
ConcreteSitemap($elementoptions) {
        var 
my this;
        
options options || {};
        
options = $.extend({
            
displayNodePaginationfalse,
            
cParentID0,
            
cookieId'ConcreteSitemap',
            
includeSystemPagesfalse,
            
displaySingleLevelfalse,
            
minExpandLevelfalse,
            
dataSourceCCM_TOOLS_PATH '/dashboard/sitemap_data',
            
ajaxData: {},
            
selectModefalse// 1 - single, 2 = multiple , 3 = hierarchical-multiple - has NOTHING to do with clicks. If you enable select mode you CANNOT use a click handler.
            
onClickNodefalse// This handles clicking on the title.
            
onSelectNodefalse// this handles when a radio or checkbox in the tree is checked
            
onPostInitfalse
        
}, options);
        
my.options options;
        
my.$element $element;
        
my.setupTree();
        
my.setupTreeEvents();

        
Concrete.event.publish('ConcreteSitemap'this);

        return 
my.$element;
    }

    
ConcreteSitemap.prototype = {

        
getTree: function() {
            var 
my this;
            return 
my.$element.dynatree('getTree');
        },

        
setupTree: function() {
            var 
minExpandLevel,
                
my this,
                
doPersist true;

            var 
dynatreeSelectMode 1,
                
checkbox false,
                
classNames false;

            if (
my.options.selectMode == 'single') {
                
checkbox true;
                
classNames = {checkbox"dynatree-radio"};
            } else if (
my.options.selectMode == 'multiple') {
                
dynatreeSelectMode 2;
                
checkbox true;
            } else if (
my.options.selectMode == 'hierarchical-multiple') {
                
dynatreeSelectMode 3;
                
checkbox true;
            }

            if (
checkbox) {
                
doPersist false;
            }

            if (
my.options.minExpandLevel !== false) {
                
minExpandLevel my.options.minExpandLevel;
            } else {
                if (
my.options.displaySingleLevel) {
                    if (
my.options.cParentID == 1) {
                        
minExpandLevel 2;
                    } else {
                        
minExpandLevel 3;
                    }
                    
doPersist false;
                } else {
                    if (
my.options.selectMode) {
                        
minExpandLevel 2;
                    } else {
                        
minExpandLevel 1;
                    }
                }
            }

            var 
ajaxData = $.extend({
                
'displayNodePagination'my.options.displayNodePagination 0,
                
'cParentID'my.options.cParentID,
                
'displaySingleLevel'my.options.displaySingleLevel 0,
                
'includeSystemPages'my.options.includeSystemPages 0
            
}, my.options.ajaxData);

            $(
my.$element).addClass('ccm-tree-sitemap');
            $(
my.$element).dynatree({
                
onQueryExpand: function () {
                    (
my.options.onQueryExpand || $.noop).apply(thisarguments);
                },
                
autoFocusfalse,
                
classNamesclassNames,
                
cookieIdmy.options.cookieId,
                
cookie: {
                    
pathCCM_REL '/'
                
},
                
persistdoPersist,
                
initAjax: {
                    
urlmy.options.dataSource,
                    
dataajaxData
                
},
                
onPostInit: function() {
                    if (
my.options.onPostInit) {
                        
my.options.onPostInit.call();
                    }
                    if (
my.options.displayNodePagination) {
                        
my.setupNodePagination(my.$elementmy.options.cParentID);
                    }
                },
                
onRender: function(nodespan) {
                    if (
my.options.selectMode != false) {
                        $(
span).find('.fa').remove();
                    }
                    
my.$element.children('.ccm-pagination-bound').remove();
                },
                
selectModedynatreeSelectMode,
                
checkboxcheckbox,
                
minExpandLevel:  minExpandLevel,
                
clickFolderMode2,
                
onLazyRead: function(node) {
                    if (
my.options.displaySingleLevel) {
                        
my.displaySingleLevel(node);
                    } else {
                        
my.reloadNode(node);
                    }
                },
                
onExpand: function(expandnode) {
                    if (
expand && my.options.displaySingleLevel) {
                        
my.displaySingleLevel(node);
                    }
                },
                
onClick: function(nodee) {
                    if (
node.getEventTargetType(e) == "title" && node.data.cID) {

                        
// I have a select mode, so clicking on the title does nothing.
                        
if (my.options.selectMode) {
                            return 
false;
                        }

                        
// I have a special on click handler, so we run that. It CAN return
                        // false to disable the on click, but it probably won't.
                        
if (my.options.onClickNode) {
                            return 
my.options.onClickNode.call(mynode);
                        }

                        
// Standard sitemap dashboard mode.
                        
var menu = new ConcretePageMenu($(node.span).find('>a'), {
                            
menuOptionsmy.options,
                            
datanode.data,
                            
sitemapmy,
                            
onHide: function(menu) {
                                
menu.$launcher.each(function() {
                                    $(
this).unbind('mousemove.concreteMenu');
                                });
                            }
                        });
                        
menu.show(e);

                    } else if (
node.data.href) {
                        
window.location.href node.data.href;
                    } else if (
node.data.displaySingleLevel) {
                        
my.displaySingleLevel(node);
                    }
                },
                
onSelect: function(flagnode) {
                    if (
my.options.onSelectNode) {
                        
my.options.onSelectNode.call(mynodeflag);
                    }
                },

                
fx: {height'toggle'duration200},
                
dnd: {
                    
onDragStart: function(node) {
                        if (
my.options.selectMode) {
                            return 
false;
                        }
                        if (
node.data.cID) {
                            return 
true;
                        }
                        return 
false;
                    },
                    
onDragStop: function(node) {

                    },
                    
autoExpandMS1000,
                    
preventVoidMovesfalse,
                    
onDragEnter: function(nodesourceNode) {
                        return 
true;
                    },
                    
onDragOver: function(nodesourceNodehitMode) {
                        if ((!
node.parent.data.cID) && (node.data.cID !== '1')) { // Home page has no parents, but we still want to be able to hit it.
                            
return false;
                        }

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

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

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

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

                    },
                    
onDrop: function(nodesourceNodehitModeuidraggable) {
                        if (
node.parent.data.cID == sourceNode.parent.data.cID && hitMode != 'over') {
                            
// we are reordering
                            
sourceNode.move(nodehitMode);
                            
my.rescanDisplayOrder(sourceNode.parent);
                        } else {
                            
// we are dragging either onto a node or into another part of the site
                            
my.selectMoveCopyTarget(sourceNodenodehitMode);
                        }
                    }
                }
            });
        },

        
/**
         * These are events that are useful when the sitemap is in the Dashboard, but
         * they should NOT be listened to when the sitemap is in select Mode.
         */
        
setupTreeEvents: function() {
            var 
my this;
            if (
my.options.selectMode || my.options.onClickNode) {
                return 
false;
            }
            
ConcreteEvent.unsubscribe('SitemapDeleteRequestComplete.sitemap');
            
ConcreteEvent.subscribe('SitemapDeleteRequestComplete.sitemap', function(e) {
                 var 
node my.$element.dynatree('getActiveNode');
                var 
parent node.parent;
                
my.reloadNode(parent);
            });
            
ConcreteEvent.unsubscribe('SitemapAddPageRequestComplete.sitemap');
            
ConcreteEvent.subscribe('SitemapAddPageRequestComplete.sitemap', function(edata) {
                var 
node my.getTree().getNodeByKey(data.cParentID);
                if (
node) {
                    
my.reloadNode(node);
                }
                
jQuery.fn.dialog.closeAll();
            });
            
ConcreteEvent.subscribe('SitemapUpdatePageRequestComplete.sitemap', function(edata) {
                try {
                    var 
node my.getTree().getNodeByKey(data.cID);
                    var 
parent node.parent;
                    if (
parent) {
                        
my.reloadNode(parent);
                    }
                } catch(
e) {}
            });
        },

        
rescanDisplayOrder: function(node) {
            var 
childNodes node.getChildren(),
                
params = [],
                
i;

            
node.setLazyNodeStatus(DTNodeStatus_Loading);
            for (
0childNodes.lengthi++) {
                var 
childNode childNodes[i];
                
params.push({'name''cID[]''value'childNode.data.cID});
            }
            $.
concreteAjax({
                
dataType'json',
                
type'POST',
                
dataparams,
                
urlCCM_TOOLS_PATH '/dashboard/sitemap_update',
                
success: function(r) {
                    
node.setLazyNodeStatus(DTNodeStatus_Ok);
                    
ConcreteAlert.notify({
                    
'message'r.message
                    
});

                }
            });
        },


        
selectMoveCopyTarget: function(nodedestNodedragMode) {
            var 
my this;
            var 
dialog_title ccmi18n_sitemap.moveCopyPage;
            if (!
dragMode) {
                var 
dragMode '';
            }
            var 
dialog_url CCM_TOOLS_PATH '/dashboard/sitemap_drag_request?origCID=' node.data.cID '&destCID=' destNode.data.cID '&dragMode=' dragMode;
            var 
dialog_height 350;
            var 
dialog_width 350;

            $.
fn.dialog.open({
                
titledialog_title,
                
hrefdialog_url,
                
widthdialog_width,
                
modalfalse,
                
heightdialog_height
            
});

            
ConcreteEvent.unsubscribe('SitemapDragRequestComplete.sitemap');
            
ConcreteEvent.subscribe('SitemapDragRequestComplete.sitemap', function(edata) {
                var 
reloadNode destNode.parent;
                if (
dragMode == 'over') {
                    
reloadNode destNode;
                }
                if (
data.task == 'MOVE') {
                    
node.remove();
                }
                
reloadNode.removeChildren();

                
my.reloadNode(reloadNode, function() {
                    if (!
destNode.bExpanded) {
                        
destNode.expand(true);
                    }
                });
            });

        },


        
setupNodePagination: function($treenodeKey) {
            
//var tree = $tree.dynatree('getTree');
            
var pg $tree.find('div.ccm-pagination-wrapper');
            
$tree.children('.ccm-pagination-bound').remove();
            if (
pg.length) {
                
pg.find('a').unbind('click').on('click', function() {
                    
// load under node
                    
var href = $(this).attr('href');
                    
$tree.dynatree('option''initAjax', {
                        
urlhref
                    
});
                    
$tree.dynatree('getTree').reload();
                    return 
false;
                });
                var 
node = $.ui.dynatree.getNode(pg);
                if (
node && typeof node.remove === 'function') {
                    
node.remove();
                }
                
pg.addClass('ccm-pagination-bound').appendTo($tree);

                
$tree.dynatree('option''onActivate', function(node) {
                    if ($(
node.span).hasClass('ccm-sitemap-explore-paging')) {
                        
node.deactivate();
                    }
                });
            }
        },

        
displaySingleLevel: function(node) {
            var 
my this,
                
options my.options,
                
minExpandLevel = (node.data.cID == 1) ? 3;

            (
my.options.onDisplaySingleLevel || $.noop).call(thisnode);

            var 
root my.$element.dynatree('getRoot');
            $(
node.li).closest('[data-sitemap=container]').dynatree('option''minExpandLevel'minExpandLevel);
            
root.removeChildren();
            var 
ajaxData = $.extend({
                
'displayNodePagination'options.displayNodePagination 0,
                
'cParentID'node.data.cID,
                
'displaySingleLevel'true,
                
'includeSystemPages'options.includeSystemPages 0
            
}, options.ajaxData);
            
root.appendAjax({
                
urloptions.dataSource,
                
dataajaxData,
                
success: function() {
                    
my.setupNodePagination(root.tree.$treenode.data.key);
                }
            });

        },

        
reloadNode: function(nodeonComplete) {
            var 
my this,
                
options my.options,
                
ajaxData = $.extend({
                    
cParentIDnode.data.cID,
                    
'includeSystemPages'options.includeSystemPages 0,
                    
'displayNodePagination'options.displayNodePagination 0
                
}, options.ajaxData),

                
params = {
                    
urloptions.dataSource,
                    
dataajaxData,
                    
success: function() {
                        if (
onComplete) {
                            
onComplete();
                        }
                    }
                };

            
node.appendAjax(params);
        }

    }

    
/**
     * Static methods
     */

    
ConcreteSitemap.exitEditMode = function(cID) {
        $.
get(CCM_TOOLS_PATH "/dashboard/sitemap_check_in?cID=" cID  "&ccm_token=" CCM_SECURITY_TOKEN);
    }

    
ConcreteSitemap.refreshCopyOperations = function() {
        
ccm_triggerProgressiveOperation(CCM_TOOLS_PATH '/dashboard/sitemap_copy_all', [],    ccmi18n_sitemap.copyProgressTitle, function() {
            $(
'.ui-dialog-content').dialog('close');
            
window.location.reload();
        });
    }

    
ConcreteSitemap.submitDragRequest = function() {

        var 
origCID = $('#origCID').val();
        var 
destParentID = $('#destParentID').val();
        var 
destCID = $('#destCID').val();
        var 
dragMode = $('#dragMode').val();
        var 
destSibling = $('#destSibling').val();
        var 
ctask = $("input[name=ctask]:checked").val();
        var 
copyAll = $("input[name=copyAll]:checked").val();
        var 
saveOldPagePath = $("input[name=saveOldPagePath]:checked").val();
        var 
params = {

            
'origCID'origCID,
            
'destCID'destCID,
            
'ctask'ctask,
            
'ccm_token'CCM_SECURITY_TOKEN,
            
'copyAll'copyAll,
            
'destSibling'destSibling,
            
'dragMode'dragMode,
            
'saveOldPagePath'saveOldPagePath
        
};


        if (
copyAll == 1) {

            var 
dialogTitle ccmi18n_sitemap.copyProgressTitle;
            
ccm_triggerProgressiveOperation(
                
CCM_TOOLS_PATH '/dashboard/sitemap_copy_all',
                [{
'name''origCID''value'origCID}, {'name''destCID''value'destCID}],
                
dialogTitle, function() {
                    $(
'.ui-dialog-content').dialog('close');
                    
ConcreteEvent.publish('SitemapDragRequestComplete', {'task'ctask});
                }
            );

        } else {

            
jQuery.fn.dialog.showLoader();

            $.
getJSON(CCM_TOOLS_PATH '/dashboard/sitemap_drag_request'params, function(resp) {
                
// parse response
                
ccm_parseJSON(resp, function() {
                    
jQuery.fn.dialog.closeAll();
                    
jQuery.fn.dialog.hideLoader();
                    
ConcreteAlert.notify({
                    
'message'resp.message
                    
});

                    
ConcreteEvent.publish('SitemapDragRequestComplete', {'task'ctask});
                    
jQuery.fn.dialog.closeTop();
                    
jQuery.fn.dialog.closeTop();
                });
            });
        }
    }

    
// jQuery Plugin
    
$.fn.concreteSitemap = function(options) {
        return $.
each($(this), function(iobj) {
            new 
ConcreteSitemap($(this), options);
        });
    }

    global.
ConcreteSitemap ConcreteSitemap;

}(
this, $, _);
?>
Онлайн: 2
Реклама