script.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. $(function () {
  2. Panel = {};
  3. // TinyMCE setup
  4. Panel.tinyMCE = new tinymce.Editor('editor-panel', {
  5. mode : "exact",
  6. elements : "editor",
  7. theme : "advanced",
  8. theme_advanced_toolbar_location : "top",
  9. theme_advanced_toolbar_align : "left",
  10. height : "342",
  11. theme_advanced_buttons1 : "savebutton,separator,bold,italic,underline,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist",
  12. theme_advanced_buttons2 : "",
  13. theme_advanced_buttons3 : ""
  14. });
  15. Panel.tinyMCE.addButton('savebutton', {
  16. title : 'Save',
  17. image : 'full/images/save.png',
  18. onclick : function() {
  19. if(Panel.jsTree.selected && !Panel.tinyMCE.isHidden()) {
  20. $.post('full/server.php?server&type=savefile',{ data : Panel.tinyMCE.getContent(), lang : ($.inArray(Panel.jsTree.current_lang, Panel.jsTree.settings.languages) + 1), id : Panel.jsTree.selected.attr("id") });
  21. }
  22. }
  23. });
  24. Panel.tinyMCE.onChange.add(function(ed, l) {
  25. Panel.tinyMCE.content_edited = true;
  26. });
  27. Panel.tinyMCE.render_state = 0;
  28. // jsTree setup
  29. Panel.jsTree = $.tree_create();
  30. Panel.jsTree.init($("#tree-panel .tree"),{
  31. data : { type : "json", async : true, url : "full/server.php?server&type=list" },
  32. languages : [ "en", "de", "fr" ],
  33. rules : { draggable : "all", multiple : "ctrl" },
  34. callback : {
  35. beforechange : function (n, t) {
  36. // if(Panel.tinyMCE.content_edited) return confirm("You changed the content, are you sure you want to navigate away, without saving changes?");
  37. return true;
  38. },
  39. onchange : function (n) {
  40. if(n.id) Panel.loadContent(n.id);
  41. },
  42. // THINK OF ROLLBACK!
  43. oncreate : function (n, r, h, t) {
  44. if(!Panel.tinyMCE.isHidden()) Panel.tinyMCE.hide();
  45. $("#editor").html("<p class='message'>Please create the node first</p>");
  46. Panel.creating = 1;
  47. Panel.move(n,r,h);
  48. },
  49. onrename : function (n,l,t,r) {
  50. $.get("full/server.php?server&type=rename", { data : $(n).children("a:visible").text(), lang : ($.inArray(t.current_lang, t.settings.languages) + 1), id : n.id });
  51. if(Panel.creating == 1) {
  52. Panel.loadContent(n.id);
  53. Panel.creating = 0;
  54. }
  55. },
  56. onmove : function (n, r, h) {
  57. Panel.move(n,r,h);
  58. },
  59. beforedelete : function (n) {
  60. return confirm("Are you sure you want to delete?");
  61. },
  62. ondelete : function (n) {
  63. $.get("full/server.php?server&type=delete&id=" + n.id);
  64. if(!Panel.tinyMCE.isHidden()) Panel.tinyMCE.hide();
  65. $("#editor").html("<p class='message'>Click a node on the left to edit its content</p>");
  66. },
  67. onload : function (t) {
  68. //t.select_branch(t.container.find("li:eq(0)"));
  69. }
  70. }
  71. });
  72. Panel.creating = 0;
  73. // Functions
  74. Panel.loadContent = function(id) {
  75. if(Panel.tinyMCE.render_state == 0) {
  76. Panel.tinyMCE.onInit.add(function(ed) {
  77. ed.setContent("");
  78. ed.render_state = 1;
  79. Panel.loadContent(id);
  80. });
  81. Panel.tinyMCE.render();
  82. }
  83. else {
  84. if(Panel.tinyMCE.isHidden()) Panel.tinyMCE.show();
  85. Panel.tinyMCE.setProgressState(1);
  86. $.get('full/server.php?server&type=loadfile&id=' + id + '&lang=' + ($.inArray(Panel.jsTree.current_lang, Panel.jsTree.settings.languages) + 1), function (data) {
  87. Panel.tinyMCE.setContent(data);
  88. Panel.tinyMCE.content_edited = false;
  89. Panel.tinyMCE.setProgressState(0);
  90. });
  91. }
  92. }
  93. Panel.move = function(n,r,h) {
  94. $.get("full/server.php?server&type=move&id=" + n.id + "&ref_id=" + (r === -1 ? 0 : r.id) + "&move_type=" + h, function (data) {
  95. if(!n.id) n.id = data;
  96. });
  97. }
  98. Panel.create = function () { Panel.jsTree.create(false, (Panel.jsTree.container.find("li").size() == 0 ? -1 : false) ); }
  99. Panel.rename = function () { Panel.jsTree.rename(); }
  100. Panel.remove = function () { Panel.jsTree.remove(); }
  101. Panel.copy = function () { if(Panel.jsTree.selected) { Panel.jsTree.copy(); } }
  102. Panel.cut = function () { if(Panel.jsTree.selected) { Panel.jsTree.cut(); } }
  103. Panel.paste = function () { Panel.jsTree.paste(); }
  104. // Keyboard shortcuts
  105. $(document)
  106. .bind('keydown', {combi:'up', disableInInput: true} , function() { Panel.jsTree.get_prev(); return false; })
  107. .bind('keydown', {combi:'down', disableInInput: true} , function() { Panel.jsTree.get_next(); return false; })
  108. .bind('keydown', {combi:'left', disableInInput: true} , function() { Panel.jsTree.get_left(); return false; })
  109. .bind('keydown', {combi:'right', disableInInput: true} , function() { Panel.jsTree.get_right(); return false; })
  110. .bind('keydown', {combi:'return', disableInInput: true} , function() { if(Panel.jsTree.hovered) Panel.jsTree.select_branch(Panel.jsTree.hovered); return false; })
  111. .bind('keydown', {combi:'f2', disableInInput: true} , function() { if(Panel.jsTree.hovered) Panel.jsTree.rename(); return false; })
  112. .bind('keydown', {combi:'del', disableInInput: true} , function() { if(Panel.jsTree.selected) Panel.jsTree.remove(); return false; })
  113. .bind('keydown', {combi:'insert', disableInInput: true} , function() { if(Panel.jsTree.selected) Panel.jsTree.create(); return false; })
  114. .bind('keydown', {combi:'ctrl+c', disableInInput: true} , function() { Panel.jsTree.copy(); return false; })
  115. .bind('keydown', {combi:'ctrl+x', disableInInput: true} , function() { Panel.jsTree.cut(); return false; })
  116. .bind('keydown', {combi:'ctrl+v', disableInInput: true} , function() { Panel.jsTree.paste(); return false; })
  117. // Interface hooks
  118. $("#tree-panel .menu")
  119. .find("a").not(".lang")
  120. .bind("click", function () {
  121. try { Panel[$(this).attr("rel")](); } catch(err) { }
  122. this.blur();
  123. })
  124. .end().end()
  125. .children(".cmenu")
  126. .hover( function () { $(this).addClass("hover"); }, function () { $(this).removeClass("hover") })
  127. $("#tree-panel .menu a.lang")
  128. .live("click", function (event) {
  129. Panel.jsTree.show_lang(($(this).attr("href").replace(/.*?#/ig, "") - 1));
  130. $(this).clone().prependTo($(this).parent());
  131. $(this).remove();
  132. if(Panel.jsTree.selected) Panel.loadContent(Panel.jsTree.selected.attr("id"));
  133. event.preventDefault();
  134. event.stopPropagation();
  135. return false;
  136. });
  137. });