377 lines
11 KiB
JavaScript
377 lines
11 KiB
JavaScript
/**
|
|
* Page administration of Pagemanager_XH
|
|
*
|
|
* Copyright (c) 2011-2012 Christoph M. Becker (see license.txt)
|
|
*/
|
|
|
|
|
|
// utf-8 marker: äöüß
|
|
|
|
|
|
function pagemanager_do(op) {
|
|
// save_selected('pm');
|
|
switch (op) {
|
|
case 'expand': realOp = 'open_all'; break;
|
|
case 'collapse': realOp = 'close_all'; break;
|
|
case 'create_after': realOp = 'create'; break;
|
|
case 'delete': realOp = 'remove'; break;
|
|
case 'paste_after': realOp = 'pasteAfter'; break;
|
|
default: realOp = op;
|
|
}
|
|
(function ($) {
|
|
switch (op) {
|
|
case 'expand':
|
|
case 'collapse':
|
|
$('#pagemanager').jstree(realOp);
|
|
break;
|
|
case 'save':
|
|
$('#pagemanager-xml')[0].value = $('#pagemanager').jstree(
|
|
'get_xml', 'nest', -1, new Array('id', 'title', 'pdattr'));
|
|
$('#pagemanager-form').submit();
|
|
break;
|
|
default:
|
|
sel = $('#pagemanager').jstree('get_selected');
|
|
if (sel.length > 0) {
|
|
if (op == 'create_after') {
|
|
$('#pagemanager').jstree(realOp, sel, 'after');
|
|
} else {
|
|
$('#pagemanager').jstree(realOp, sel);
|
|
}
|
|
} else {
|
|
if (('<<<PC_verbose>>>').toLowerCase() == 'true') {
|
|
$('#pagemanager-alert').html('<<<PT_message_no_selection>>>');
|
|
$('#pagemanager-alert').dialog('open');
|
|
}
|
|
}
|
|
}
|
|
})(jQuery);
|
|
}
|
|
|
|
|
|
function pagemanager_confirmStructureWarning() {
|
|
jQuery('#pagemanager-structure-warning').hide(500);
|
|
jQuery('#pagemanager-toolbar a:first-child').show();
|
|
jQuery('#pagemanager-submit').show();
|
|
}
|
|
|
|
|
|
function pagemanager_level(obj) {
|
|
var res = 0;
|
|
while (obj.attr('id') != 'pagemanager') {
|
|
obj = obj.parent().parent();
|
|
res++;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
|
|
function pagemanager_childLevels(obj) {
|
|
var res = -1;
|
|
while (obj.length > 0) {
|
|
obj = obj.find('li');
|
|
res++;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
|
|
function pagemanager_markDuplicates(node, duplicates) {
|
|
var pagemanager = jQuery.jstree._reference('#pagemanager');
|
|
var children = pagemanager._get_children(node);
|
|
for (var i = 0; i < children.length; i++) {
|
|
duplicates = pagemanager_markDuplicates(children[i], duplicates);
|
|
for (var j = i+1; j < children.length; j++) {
|
|
if (pagemanager.get_text(children[i]) == pagemanager.get_text(children[j])) {
|
|
pagemanager.set_text(children[j], '<<<TOC_DUPL>>> ' + ++duplicates);
|
|
}
|
|
}
|
|
}
|
|
return duplicates;
|
|
};
|
|
|
|
|
|
var pagemanager_modified = false;
|
|
|
|
|
|
(function ($) {
|
|
$(function () {
|
|
if (typeof $.jstree == 'undefined') {
|
|
alert('<<<PT_error_offending_extension>>>');
|
|
return;
|
|
}
|
|
$.jstree.plugin('crrm', {
|
|
_fn: {
|
|
pasteAfter: function(obj) {
|
|
obj = this._get_node(obj);
|
|
if(!obj || !obj.length) { return false; }
|
|
var nodes = this.data.crrm.ct_nodes ? this.data.crrm.ct_nodes : this.data.crrm.cp_nodes;
|
|
if(!this.data.crrm.ct_nodes && !this.data.crrm.cp_nodes) { return false; }
|
|
if(this.data.crrm.ct_nodes) { this.move_node(this.data.crrm.ct_nodes, obj, 'after'); this.data.crrm.ct_nodes = false; }
|
|
if(this.data.crrm.cp_nodes) { this.move_node(this.data.crrm.cp_nodes, obj, 'after', true); }
|
|
this.__callback({ "obj" : obj, "nodes" : nodes });
|
|
}
|
|
}
|
|
});
|
|
|
|
$('#pagemanager-confirmation').dialog({
|
|
'autoOpen': false,
|
|
'modal': true
|
|
});
|
|
|
|
$('#pagemanager-alert').dialog({
|
|
'autoOpen': false,
|
|
'modal': true,
|
|
'buttons': {
|
|
'<<<PT_button_ok>>>': function () {$(this).dialog('close');}
|
|
}
|
|
});
|
|
|
|
$('#pagemanager').bind('loaded.jstree', function () {
|
|
if ($('#pagemanager-structure-warning').length == 0) {
|
|
$('#pagemanager-toolbar a:first-child').show();
|
|
$('#pagemanager-submit').show();
|
|
}
|
|
});
|
|
|
|
/* initialize checkboxes */
|
|
$('#pagemanager').bind('loaded.jstree', function () {
|
|
var checkNodes = (function (parent) {
|
|
var nodes = pagemanager._get_children(parent);
|
|
for (var i = 0; i < nodes.length; ++i) {
|
|
var node = pagemanager._get_node(nodes[i]);
|
|
if (node.attr('pdattr') == '1') {
|
|
pagemanager.check_node(node);
|
|
}
|
|
checkNodes(node);
|
|
}
|
|
});
|
|
checkNodes(-1);
|
|
$('#pagemanager').bind('move_node.jstree create_node.jstree rename_node.jstree remove.jstree change_state.jstree', function () {
|
|
pagemanager_modified = true;
|
|
});
|
|
});
|
|
|
|
$('#pagemanager').bind('before.jstree', function (e, data) {
|
|
switch (data.func) {
|
|
case 'create_node':
|
|
if (pagemanager_level(pagemanager._get_node(data.args[0]))
|
|
>= <<<MENU_LEVELS>>> + (data.args[1] == 'after' ? 1 : 0)) {
|
|
if (('<<<PC_verbose>>>').toLowerCase() == 'true') {
|
|
$('#pagemanager-alert').html('<<<PT_message_menu_level>>>');
|
|
$('#pagemanager-alert').dialog('open');
|
|
}
|
|
e.stopImmediatePropagation();
|
|
return false;
|
|
}
|
|
break;
|
|
case 'rename':
|
|
if ($(data.args[0][0]).hasClass('pagemanager-no-rename')) {
|
|
alert('<<<PT_error_cant_rename>>>');
|
|
e.stopImmediatePropagation();
|
|
return false;
|
|
}
|
|
pagemanager.set_text(data.args[0][0], pagemanager._get_node(data.args[0][0]).attr('title'));
|
|
break;
|
|
case 'remove':
|
|
var toplevels = pagemanager._get_children(-1);
|
|
if (toplevels.length == 1 && data.args[0][0] == toplevels[0]) {
|
|
if (('<<<PC_verbose>>>').toLowerCase() == 'true') {
|
|
$('#pagemanager-alert').html('<<<PT_message_delete_last>>>');
|
|
$('#pagemanager-alert').dialog('open');
|
|
}
|
|
e.stopImmediatePropagation();
|
|
return false;
|
|
}
|
|
if (data.args[1] != 'confirmed') {
|
|
if (('<<<PC_verbose>>>').toLowerCase() == 'true') {
|
|
$('#pagemanager-confirmation').html('<<<PT_message_confirm_deletion>>>');
|
|
$('#pagemanager-confirmation').dialog('option', 'buttons', {
|
|
'<<<PT_button_delete>>>': function () {
|
|
pagemanager.remove(data.args[0], 'confirmed');
|
|
$(this).dialog('close');
|
|
},
|
|
'<<<PT_button_cancel>>>': function () {
|
|
$(this).dialog('close');
|
|
}
|
|
});
|
|
$('#pagemanager-confirmation').dialog('open');
|
|
e.stopImmediatePropagation();
|
|
return false;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
}
|
|
});
|
|
|
|
$('#pagemanager').bind('change_state.jstree', function (e, data) {
|
|
data.rslt.attr('pdattr', data.args[1] ? '0' : '1');
|
|
});
|
|
|
|
$('#pagemanager').bind('create_node.jstree', function (e, data) {
|
|
pagemanager.set_type('new', data.rslt.obj);
|
|
pagemanager.check_node(data.rslt.obj);
|
|
});
|
|
|
|
$('#pagemanager').bind('rename_node.jstree', function (e, data) {
|
|
pagemanager._get_node(data.rslt.obj).attr('title', pagemanager.get_text(data.rslt.obj));
|
|
});
|
|
|
|
/* mark copied nodes as new */
|
|
$('#pagemanager').bind('move_node.jstree', function (e, data) {
|
|
if ('cy' in data.rslt && data.rslt.cy) {
|
|
var traverse = (function (node) {
|
|
var children = pagemanager._get_children(node);
|
|
for (var i = 0; i < children.length; ++i) {
|
|
pagemanager.set_type('new', children[i]);
|
|
traverse(children[i]);
|
|
}
|
|
});
|
|
pagemanager.set_type('new', data.rslt.oc);
|
|
traverse(data.rslt.oc);
|
|
}
|
|
});
|
|
|
|
/* restore page titles */
|
|
$('#pagemanager').bind('rename_node.jstree remove.jstree move_node.jstree', function (e, data) {
|
|
var restoreTitles = (function (node) {
|
|
var children = pagemanager._get_children(node);
|
|
for (var i = 0; i < children.length; ++i) {
|
|
pagemanager.set_text(children[i], pagemanager._get_node(children[i]).attr('title'));
|
|
restoreTitles(children[i]);
|
|
}
|
|
});
|
|
restoreTitles(-1);
|
|
});
|
|
|
|
/* mark duplicate headers */
|
|
$('#pagemanager').bind('loaded.jstree rename_node.jstree remove.jstree move_node.jstree', function (e, data) {
|
|
pagemanager_markDuplicates(-1, 0);
|
|
});
|
|
|
|
if (!window.opera) {
|
|
window.onbeforeunload = function () {
|
|
if (pagemanager_modified && $('#pagemanager-xml')[0].value == '') {
|
|
return '<<<PT_message_warning_leave>>>';
|
|
}
|
|
};
|
|
} else {
|
|
$(window).unload(function () {
|
|
if (pagemanager_modified && $('#pagemanager-xml')[0].value == '') {
|
|
if (confirm('<<<PT_message_confirm_leave>>>')) {
|
|
$('#pagemanager-xml')[0].value = pagemanager.get_xml(
|
|
'nest', -1, new Array('id', 'title', 'pdattr'));
|
|
$('#pagemanager-form').submit();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/*
|
|
* Initialize jsTree.
|
|
*/
|
|
|
|
$('#pagemanager').jstree({
|
|
'plugins': ['themes', 'html_data', 'xml_data', 'dnd', 'ui',
|
|
'crrm', 'contextmenu', 'checkbox', 'types', 'cookies'],
|
|
'core': {
|
|
'animation': <<<PC_treeview_animation>>>,
|
|
'strings': {
|
|
loading:'<<<PT_treeview_loading>>>',
|
|
new_node:'<<<PT_treeview_new>>>'
|
|
}
|
|
},
|
|
'types': {
|
|
'types': {
|
|
'new': {
|
|
'icon': {
|
|
'image': '<<<IMAGE_DIR>>>new.gif'
|
|
}
|
|
},
|
|
'default': {
|
|
}
|
|
}
|
|
},
|
|
'checkbox': {
|
|
'checked_parent_open': false,
|
|
'two_state': true
|
|
},
|
|
'ui': {
|
|
'select_limit': 1
|
|
},
|
|
'crrm': {
|
|
'move': {
|
|
'check_move': function (m) {
|
|
var sc = pagemanager_childLevels(m.o),
|
|
tl = pagemanager_level(m.r);
|
|
var allowed =
|
|
(typeof(m.r) == 'object' && pagemanager_childLevels(m.o) // of source
|
|
+ pagemanager_level(m.r) // of target
|
|
+ (m.p == 'last' || m.p == 'inside' ? 1 : 0) // paste vs. dnd
|
|
<= <<<MENU_LEVELS>>>);
|
|
if (!m.ot.data.dnd.active && !allowed
|
|
&& ('<<<PC_verbose>>>').toLowerCase() == 'true') {
|
|
$('#pagemanager-alert').html('<<<PT_message_menu_level>>>');
|
|
$('#pagemanager-alert').dialog('open');
|
|
}
|
|
return allowed;
|
|
}
|
|
}
|
|
},
|
|
'themes': {
|
|
'theme': '<<<PC_treeview_theme>>>'
|
|
},
|
|
'contextmenu': {
|
|
'show_at_node': false,
|
|
'select_node': true,
|
|
'items': function (node) {
|
|
return {
|
|
'create': {
|
|
'label': '<<<PT_op_create>>>',
|
|
'icon': '<<<IMAGE_DIR>>>create<<<IMAGE_EXT>>>',
|
|
'action': function (obj) {this.create(obj);}
|
|
},
|
|
'create-after': {
|
|
'label': '<<<PT_op_create_after>>>',
|
|
'icon': '<<<IMAGE_DIR>>>create_after<<<IMAGE_EXT>>>',
|
|
'action': function(obj) {this.create(obj, 'after');}
|
|
},
|
|
'rename': {
|
|
'label': '<<<PT_op_rename>>>',
|
|
'icon': '<<<IMAGE_DIR>>>rename<<<IMAGE_EXT>>>',
|
|
'action': function(obj) {this.rename(obj);}
|
|
},
|
|
'remove' : {
|
|
'label': '<<<PT_op_delete>>>',
|
|
'icon': '<<<IMAGE_DIR>>>delete<<<IMAGE_EXT>>>',
|
|
'action': function(obj) {this.remove(obj);}
|
|
},
|
|
'cut': {
|
|
'label': '<<<PT_op_cut>>>',
|
|
'separator_before': true,
|
|
'icon': '<<<IMAGE_DIR>>>cut<<<IMAGE_EXT>>>',
|
|
'action': function(obj) {this.cut(obj);}
|
|
},
|
|
'copy': {
|
|
'label': '<<<PT_op_copy>>>',
|
|
'icon': '<<<IMAGE_DIR>>>copy<<<IMAGE_EXT>>>',
|
|
'action': function(obj) {this.copy(obj);}
|
|
},
|
|
'paste': {
|
|
'label': '<<<PT_op_paste>>>',
|
|
'icon': '<<<IMAGE_DIR>>>paste<<<IMAGE_EXT>>>',
|
|
'action': function(obj) {this.paste(obj);}
|
|
},
|
|
'paste-after': {
|
|
'label': '<<<PT_op_paste_after>>>',
|
|
'icon': '<<<IMAGE_DIR>>>paste_after<<<IMAGE_EXT>>>',
|
|
'action': function(obj) {this.pasteAfter(obj);}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
var pagemanager = $.jstree._reference('#pagemanager');
|
|
});
|
|
})(jQuery);
|