ToolbarInEditMode.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  1. MWF.xApplication.MinderEditor.TopToolbar = new Class({
  2. Extends: MWF.widget.Common,
  3. initialize: function (editor, container) {
  4. this.editor = editor;
  5. this.minder = editor.minder;
  6. this.container = container;
  7. this.commands = this.editor.commands;
  8. this.path = "../x_component_MinderEditor/$ToolbarInEditMode/";
  9. this.cssPath = this.path + this.editor.options.style + "/css.wcss";
  10. this._loadCss();
  11. },
  12. getHtml : function(){
  13. var items;
  14. var tools = this.editor.options.tools;
  15. if( tools && tools.top ){
  16. items = tools.top;
  17. }else{
  18. items = [
  19. "menu", "|",
  20. "save", "|",
  21. "undoredo", "|",
  22. "append", "|",
  23. "arrange", "|",
  24. "edit_remove", "|",
  25. "hyperLink", "image", "priority", "progress", "|",
  26. "style",
  27. "help"
  28. ];
  29. }
  30. var disableTools = this.editor.options.disableTools || [];
  31. disableTools.each( function( tool ){
  32. items.erase( tool )
  33. });
  34. var html = "";
  35. var style = "toolItem";
  36. items.each( function( item ){
  37. switch( item ){
  38. case "|":
  39. html += "<div styles='" + "separator" + "'></div>";
  40. break;
  41. case "menu":
  42. html += "<div item='menu' itemevent='click' styles='" + style + "'></div>";
  43. break;
  44. case "save" :
  45. html += "<div item='save' styles='" + style + "'></div>";
  46. break;
  47. case "undoredo" :
  48. html += "<div styles='" + "toolItemGroup" + "' style='width:70px;'>" +
  49. " <div item='undo' styles='" + "toolItem_horizontal_top" + "'></div>" +
  50. " <div item='redo' styles='" + "toolItem_horizontal_bottom" + "'></div>" +
  51. "</div>";
  52. break;
  53. case "append" :
  54. html += "<div styles='" + "toolItemGroup" + "' style='width:250px;'>" +
  55. " <div item='appendChild' styles='" + "toolItem_horizontal_top" + "'></div>" +
  56. " <div item='appendParent' styles='" + "toolItem_horizontal_top" + "'></div>" +
  57. " <div item='appendSibling' styles='" + "toolItem_horizontal_bottom" + "'></div>" +
  58. "</div>";
  59. break;
  60. case "arrange" :
  61. html += "<div styles='" + "toolItemGroup" + "' style='width:70px;'>" +
  62. " <div item='arrangeUp' styles='" + "toolItem_horizontal_top" + "'></div>" +
  63. " <div item='arrangeDown' styles='" + "toolItem_horizontal_bottom" + "'></div>" +
  64. "</div>";
  65. break;
  66. case "edit_remove" :
  67. html += "<div styles='" + "toolItemGroup" + "' style='width:70px;'>" +
  68. " <div item='edit' styles='" + "toolItem_horizontal_top" + "'></div>" +
  69. " <div item='remove' styles='" + "toolItem_horizontal_bottom" + "'></div>" +
  70. "</div>";
  71. break;
  72. case "hyperLink" :
  73. html += "<div item='hyperLink' styles='" + style + "'></div>";
  74. break;
  75. case "image" :
  76. html += "<div item='image' styles='" + style + "'></div>";
  77. break;
  78. case "priority" :
  79. html += "<div item='priority' styles='" + style + "'></div>";
  80. break;
  81. case "progress" :
  82. html += "<div item='progress' styles='" + style + "'></div>";
  83. break;
  84. case "style" :
  85. html += "<div styles='" + "toolItemGroup" + "' style='width:170px;'>" +
  86. " <div item='clearstyle' styles='" + style + "'></div>" +
  87. " <div item='copystyle' styles='" + "toolItem_horizontal_top" + "'></div>" +
  88. " <div item='pastestyle' styles='" + "toolItem_horizontal_bottom" + "'></div>" +
  89. "</div>";
  90. break;
  91. case "help" :
  92. html += "<div item='help' styles='toolItem_help'></div>";
  93. break;
  94. }
  95. });
  96. return html;
  97. },
  98. load: function () {
  99. /*
  100. var style = "toolItem";
  101. var html =
  102. //"<div item='template' styles='" + style + "'></div>" +
  103. //"<div item='theme' styles='" + style + "'></div>" +
  104. //"<div item='resetlayout' styles='" + style + "'></div>" +
  105. "<div item='menu' itemevent='click' styles='" + style + "'></div>" +
  106. "<div styles='" + "separator" + "'></div>" +
  107. "<div item='save' styles='" + style + "'></div>" +
  108. //"<div item='export' styles='" + style + "'></div>" +
  109. "<div styles='" + "separator" + "'></div>" +
  110. "<div styles='" + "toolItemGroup" + "' style='width:70px;'>" +
  111. " <div item='undo' styles='" + "toolItem_horizontal_top" + "'></div>" +
  112. " <div item='redo' styles='" + "toolItem_horizontal_bottom" + "'></div>" +
  113. "</div>" +
  114. "<div styles='" + "separator" + "'></div>" +
  115. "<div styles='" + "toolItemGroup" + "' style='width:250px;'>" +
  116. " <div item='appendChild' styles='" + "toolItem_horizontal_top" + "'></div>" +
  117. " <div item='appendParent' styles='" + "toolItem_horizontal_top" + "'></div>" +
  118. " <div item='appendSibling' styles='" + "toolItem_horizontal_bottom" + "'></div>" +
  119. "</div>" +
  120. "<div styles='" + "separator" + "'></div>" +
  121. "<div styles='" + "toolItemGroup" + "' style='width:70px;'>" +
  122. " <div item='arrangeUp' styles='" + "toolItem_horizontal_top" + "'></div>" +
  123. " <div item='arrangeDown' styles='" + "toolItem_horizontal_bottom" + "'></div>" +
  124. "</div>" +
  125. "<div styles='" + "separator" + "'></div>" +
  126. "<div styles='" + "toolItemGroup" + "' style='width:70px;'>" +
  127. " <div item='edit' styles='" + "toolItem_horizontal_top" + "'></div>" +
  128. " <div item='remove' styles='" + "toolItem_horizontal_bottom" + "'></div>" +
  129. "</div>" +
  130. "<div styles='" + "separator" + "'></div>" +
  131. "<div item='hyperLink' styles='" + style + "'></div>" +
  132. "<div item='image' styles='" + style + "'></div>" +
  133. "<div item='priority' styles='" + style + "'></div>" +
  134. "<div item='progress' styles='" + style + "'></div>" +
  135. //"<div item='resource' styles='" + style + "'></div>" +
  136. "<div styles='" + "separator" + "'></div>" +
  137. "<div styles='" + "toolItemGroup" + "' style='width:170px;'>" +
  138. " <div item='clearstyle' styles='" + style + "'></div>" +
  139. " <div item='copystyle' styles='" + "toolItem_horizontal_top" + "'></div>" +
  140. " <div item='pastestyle' styles='" + "toolItem_horizontal_bottom" + "'></div>" +
  141. "</div>" +
  142. //"<div styles='" + "separator" + "'></div>" +
  143. //"<div item='fontfamily' styles='" + style + "'></div>" +
  144. //"<div item='fontsize' styles='" + style + "'></div>" +
  145. //"<div item='bold' styles='" + style + "'></div>" +
  146. //"<div item='forecolor' styles='" + style + "'></div>" +
  147. //"<div item='background' styles='" + style + "'></div>" +
  148. //"<div styles='" + "separator" + "'></div>" +
  149. //"<div item='expandLevel' styles='" + style + "'></div>" +
  150. //"<div item='selectAll' styles='" + style + "'></div>"+
  151. "<div item='help' styles='toolItem_help'></div>";
  152. */
  153. var html = this.getHtml();
  154. this.container.set("html", html);
  155. this.container.getElements("[styles]").each(function (el) {
  156. if (!el.get("item")) {
  157. el.setStyles(this.css[el.get("styles")]);
  158. }
  159. }.bind(this));
  160. this.commands.addContainer( "toptoolbar", this.container, this.css );
  161. },
  162. getCommandNode : function( name ){
  163. return this.commands.getItemNode( name, "toptoolbar" );
  164. }
  165. });
  166. MWF.xApplication.MinderEditor.RightToolbar = new Class({
  167. Extends: MWF.widget.Common,
  168. initialize: function (editor, container) {
  169. this.editor = editor;
  170. this.minder = editor.minder;
  171. this.container = container;
  172. this.commands = this.editor.commands;
  173. this.path = "../x_component_MinderEditor/$ToolbarInEditMode/";
  174. this.cssPath = this.path + this.editor.options.style + "/css.wcss";
  175. this._loadCss();
  176. },
  177. getItems : function(){
  178. var items;
  179. var tools = this.editor.options.tools;
  180. if( tools && tools.right ){
  181. items = tools.right;
  182. }else{
  183. items = [
  184. "font", "resource", "note"
  185. ];
  186. }
  187. var disableTools = this.editor.options.disableTools || [];
  188. disableTools.each( function( tool ){
  189. items.erase( tool )
  190. });
  191. return items;
  192. },
  193. load: function(){
  194. this.styleActive = true;
  195. this.resourceActive = false;
  196. this.noteActive = false;
  197. if( this.editor.status ){
  198. this.styleActive = this.editor.status.styleActive;
  199. this.resourceActive = this.editor.status.resourceActive;
  200. this.noteActive = this.editor.status.noteActive;
  201. }
  202. this.styleLoaded = this.styleActive;
  203. this.resourceLoaded = this.resourceActive;
  204. this.noteLoaded = this.noteActive;
  205. var items = this.getItems();
  206. var styleLazyLoding = " lazyLoading='" + (this.styleActive ? "false" : "true") + "'";
  207. var html="";
  208. if( items.contains("font") ){
  209. html += "<div styles='" + (this.styleActive ? "rightToolbarItem_style_active" : "rightToolbarItem_style") +"' title='文本样式' action='switchStyle'></div>"+
  210. "<div styles='tooltipNode' id='styleTooltip' style='display:" + (this.styleActive ? "" : "none") +";'>"+
  211. " <div styles='closeNode' action='closeStyle'></div>"+
  212. " <div style='width: 100%; height: 100%;'>"+
  213. " <div item='fontsize' styles='fontToolbarItemSelector'" + styleLazyLoding+"></div>" +
  214. " <div item='bold' styles='fontToolbarItem'" + styleLazyLoding+"></div>" +
  215. " <div item='italic' styles='fontToolbarItem'" + styleLazyLoding+"></div>" +
  216. " <div item='forecolor' styles='fontToolbarItem'" + styleLazyLoding+"></div>" +
  217. " <div item='background' styles='fontToolbarItem'" + styleLazyLoding+"></div>" +
  218. " <div item='fontfamily' styles='fontToolbarItemSelector'" + styleLazyLoding+"></div>" +
  219. " </div>"+
  220. //" <div styles='arrowNode'></div>"+
  221. "</div>";
  222. }
  223. if( items.contains("resource") ){
  224. html += "<div styles='" + (this.resourceActive ? "rightToolbarItem_resource_active" : "rightToolbarItem_resource") +"' title='标签' action='switchResource'></div>"+
  225. "<div styles='tooltipNode_resource' id='resourceTooltip' style='display:" + (this.resourceActive ? "" : "none") +";'>"+
  226. " <div styles='closeNode' action='closeResource'></div>"+
  227. " <div item='resource' styles='resourceToolbarItem' lazyLoading='" + (this.resourceActive ? "false" : "true") + "'></div>" +
  228. //" <div styles='arrowNode'></div>"+
  229. "</div>";
  230. }
  231. if( items.contains("note") ){
  232. html += "<div styles='" + (this.noteActive ? "rightToolbarItem_note_active" : "rightToolbarItem_note") +"' title='备注' action='switchNote'></div>"+
  233. "<div styles='tooltipNode_note' id='noteTooltip' style='display:" + (this.noteActive ? "" : "none") +";'>"+
  234. " <div styles='closeNode' action='closeNote'></div>"+
  235. " <div item='note' styles='noteToolbarItem' lazyLoading='" + (this.noteActive ? "false" : "true") + "'></div>" +
  236. //" <div styles='arrowNode'></div>"+
  237. "</div>"
  238. }
  239. /*
  240. "<div styles='" + (this.styleActive ? "rightToolbarItem_style_active" : "rightToolbarItem_style") +"' title='文本样式' action='switchStyle'></div>"+
  241. "<div styles='tooltipNode' id='styleTooltip' style='display:" + (this.styleActive ? "" : "none") +";'>"+
  242. " <div styles='closeNode' action='closeStyle'></div>"+
  243. " <div style='width: 100%; height: 100%;'>"+
  244. " <div item='fontsize' styles='fontToolbarItemSelector'" + styleLazyLoding+"></div>" +
  245. " <div item='bold' styles='fontToolbarItem'" + styleLazyLoding+"></div>" +
  246. " <div item='italic' styles='fontToolbarItem'" + styleLazyLoding+"></div>" +
  247. " <div item='forecolor' styles='fontToolbarItem'" + styleLazyLoding+"></div>" +
  248. " <div item='background' styles='fontToolbarItem'" + styleLazyLoding+"></div>" +
  249. " <div item='fontfamily' styles='fontToolbarItemSelector'" + styleLazyLoding+"></div>" +
  250. " </div>"+
  251. //" <div styles='arrowNode'></div>"+
  252. "</div>"+
  253. "<div styles='" + (this.resourceActive ? "rightToolbarItem_resource_active" : "rightToolbarItem_resource") +"' title='标签' action='switchResource'></div>"+
  254. "<div styles='tooltipNode_resource' id='resourceTooltip' style='display:" + (this.resourceActive ? "" : "none") +";'>"+
  255. " <div styles='closeNode' action='closeResource'></div>"+
  256. " <div item='resource' styles='resourceToolbarItem' lazyLoading='" + (this.resourceActive ? "false" : "true") + "'></div>" +
  257. //" <div styles='arrowNode'></div>"+
  258. "</div>"+
  259. "<div styles='" + (this.noteActive ? "rightToolbarItem_note_active" : "rightToolbarItem_note") +"' title='备注' action='switchNote'></div>"+
  260. "<div styles='tooltipNode_note' id='noteTooltip' style='display:" + (this.noteActive ? "" : "none") +";'>"+
  261. " <div styles='closeNode' action='closeNote'></div>"+
  262. " <div item='note' styles='noteToolbarItem' lazyLoading='" + (this.noteActive ? "false" : "true") + "'></div>" +
  263. //" <div styles='arrowNode'></div>"+
  264. "</div>";
  265. */
  266. this.container.set("html", html);
  267. this.container.getElements("[styles]").each( function( el ){
  268. if( !el.get("item") ){
  269. el.setStyles( this.css[ el.get("styles") ] );
  270. }
  271. }.bind(this));
  272. this.container.getElements("[action]").each( function( el ){
  273. var action = el.get("action");
  274. el.addEvents( {"click": function( e ){
  275. this[action]( e.target );
  276. }.bind(this)})
  277. }.bind(this));
  278. this.styleTooltip = this.container.getElement("#styleTooltip");
  279. this.resourceTooltip = this.container.getElement("#resourceTooltip");
  280. this.noteTooltip = this.container.getElement("#noteTooltip");
  281. this.setTooltipsSize();
  282. this.commands.addContainer( "righttoolbar", this.container, this.css );
  283. },
  284. closeStyle : function(el){
  285. this.switchStyle( this.container.getElement("[action='switchStyle']"), false );
  286. },
  287. switchStyle: function( el, forceFlag ){
  288. if( typeOf( forceFlag ) == "boolean" )this.styleActive = !forceFlag;
  289. var tooltip = this.styleTooltip;
  290. if( tooltip ){
  291. if( !this.styleActive ){
  292. tooltip.setStyle("display","");
  293. el.setStyles( this.css.rightToolbarItem_style_active );
  294. if( !this.styleLoaded ){
  295. this.commands.loadItemsByNameList( ["fontsize","bold","italic","forecolor","background","fontfamily"], "righttoolbar" );
  296. this.styleLoaded = true;
  297. }
  298. }else{
  299. tooltip.setStyle("display","none");
  300. el.setStyles( this.css.rightToolbarItem_style )
  301. }
  302. this.styleActive = !this.styleActive;
  303. }
  304. this.setTooltipsSize();
  305. },
  306. closeResource : function(el){
  307. this.switchResource( this.container.getElement("[action='switchResource']"), false );
  308. },
  309. switchResource : function(el, forceFlag){
  310. if( typeOf( forceFlag ) == "boolean" )this.resourceActive = !forceFlag;
  311. var tooltip = this.resourceTooltip;
  312. if( tooltip ){
  313. if( !this.resourceActive ){
  314. tooltip.setStyle("display","");
  315. el.setStyles( this.css.rightToolbarItem_resource_active );
  316. if( !this.resourceLoaded ){
  317. this.commands.loadItemByName("resource", "righttoolbar" );
  318. this.resourceLoaded = true;
  319. }
  320. }else{
  321. tooltip.setStyle("display","none");
  322. el.setStyles( this.css.rightToolbarItem_resource )
  323. }
  324. this.resourceActive = !this.resourceActive;
  325. }
  326. this.setTooltipsSize();
  327. },
  328. closeNote: function(el){
  329. this.switchNote( this.container.getElement("[action='switchNote']"), false )
  330. },
  331. switchNote : function(el, forceFlag){
  332. if( typeOf( forceFlag ) == "boolean" )this.noteActive = !forceFlag;
  333. var tooltip = this.noteTooltip;
  334. if( tooltip ){
  335. if( !this.noteActive ){
  336. tooltip.setStyle("display","");
  337. el.setStyles( this.css.rightToolbarItem_note_active );
  338. if( !this.noteLoaded ){
  339. this.commands.loadItemByName("note", "righttoolbar" );
  340. this.noteLoaded = true;
  341. }
  342. }else{
  343. tooltip.setStyle("display","none");
  344. el.setStyles( this.css.rightToolbarItem_note )
  345. }
  346. this.noteActive = !this.noteActive;
  347. }
  348. this.setTooltipsSize();
  349. },
  350. setTooltipsSize : function(){
  351. var noneC = { bottom : 0, y : 0 };
  352. var containTop = this.editor.Content_Offset_Top + 5; //73横向菜单的高度, 5是间距
  353. var y = this.editor.content.getSize().y - containTop;
  354. var styleC = this.styleActive ? this.styleTooltip.getCoordinates() : noneC;
  355. if( this.resourceActive ){
  356. var top = styleC.height ? (styleC.height + 10 ) : 0;
  357. this.resourceTooltip.setStyle("top",top);
  358. }
  359. var resourceC = this.resourceActive ? this.resourceTooltip.getCoordinates() : noneC;
  360. if( this.noteActive ){
  361. var top = styleC.height ? (styleC.height + 10 ) : 0;
  362. top += resourceC.height ? (resourceC.height + 10 ) : 0;
  363. var height = y - top - 10;
  364. this.noteTooltip.setStyles({
  365. "top" : top,
  366. "height" : Math.min( height , 500 ) //500是 notetoooltip 的最大高度
  367. });
  368. //var noteC = this.noteActive ? this.noteTooltip.getCoordinates() : noneC;
  369. }
  370. if(this.commands)this.commands.setSizes();
  371. }
  372. });