favorites.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. if (typeof MODx.tree.Element != 'undefined') {
  2. Ext.apply(MODx.tree.Element.prototype, {
  3. _onAppend: function (tree, parent, node) {
  4. if (node.attributes.pseudoroot) {
  5. setTimeout((function (tree) {
  6. return function () {
  7. var elId = node.ui.elNode.id + '_tools';
  8. var el = document.createElement('div');
  9. el.id = elId;
  10. el.className = 'modx-tree-node-tool-ct';
  11. node.ui.elNode.appendChild(el);
  12. var inlineButtonsLang = tree.getInlineButtonsLang(node);
  13. var type = node.id.substr(2).split('_');
  14. if (type[0] != 'category') {
  15. var btn1 = MODx.load({
  16. xtype: 'modx-button',
  17. text: '',
  18. scope: this,
  19. tooltip: new Ext.ToolTip({
  20. title: adminToolsSettings.favoriteElements.states[type[1]] ? _('admintools_show_all') : _('admintools_show_favorites'),
  21. target: this
  22. }),
  23. node: node,
  24. enableToggle: true,
  25. handler: function (btn, evt) {
  26. evt.stopPropagation(evt);
  27. if (btn.pressed) {
  28. btn.getEl().removeClass('icon-star-o').addClass('icon-star');
  29. btn.pressed = true;
  30. btn.tooltip.setTitle(_('admintools_show_all'));
  31. adminToolsSettings.favoriteElements.states[type[1]] = true;
  32. } else {
  33. btn.getEl().removeClass('icon-star').addClass('icon-star-o');
  34. btn.pressed = false;
  35. btn.tooltip.setTitle(_('admintools_show_favorites'));
  36. adminToolsSettings.favoriteElements.states[type[1]] = false;
  37. }
  38. node.getOwnerTree().saveFavoritesState(node, btn.pressed);
  39. },
  40. iconCls: adminToolsSettings.favoriteElements.states[type[1]] ? 'icon-star' : 'icon-star-o',
  41. pressed: adminToolsSettings.favoriteElements.states[type[1]],
  42. renderTo: elId,
  43. listeners: {
  44. mouseover: function (button, e) {
  45. button.tooltip.onTargetOver(e);
  46. },
  47. mouseout: function (button, e) {
  48. button.tooltip.onTargetOut(e);
  49. }
  50. }
  51. });
  52. }
  53. var btn2 = MODx.load({
  54. xtype: 'modx-button',
  55. text: '',
  56. scope: this,
  57. tooltip: new Ext.ToolTip({
  58. title: inlineButtonsLang.add,
  59. target: this
  60. }),
  61. node: node,
  62. handler: function (btn, evt) {
  63. evt.stopPropagation(evt);
  64. node.getOwnerTree().handleCreateClick(node);
  65. },
  66. iconCls: 'icon-plus-circle',
  67. renderTo: elId,
  68. listeners: {
  69. mouseover: function (button, e) {
  70. button.tooltip.onTargetOver(e);
  71. },
  72. mouseout: function (button, e) {
  73. button.tooltip.onTargetOut(e);
  74. }
  75. }
  76. });
  77. var btn3 = MODx.load({
  78. xtype: 'modx-button',
  79. text: '',
  80. scope: this,
  81. tooltip: new Ext.ToolTip({
  82. title: inlineButtonsLang.refresh,
  83. target: this
  84. }),
  85. node: node,
  86. handler: function (btn, evt) {
  87. evt.stopPropagation(evt);
  88. node.reload();
  89. },
  90. iconCls: 'icon-refresh',
  91. renderTo: elId,
  92. listeners: {
  93. mouseover: function (button, e) {
  94. button.tooltip.onTargetOver(e);
  95. },
  96. mouseout: function (button, e) {
  97. button.tooltip.onTargetOut(e);
  98. }
  99. }
  100. });
  101. window.BTNS.push(btn1, btn2, btn3);
  102. }
  103. }(this)), 200);
  104. return false;
  105. }
  106. },
  107. saveFavoritesState: function (node, state) {
  108. var type = node.attributes.type;
  109. Ext.Ajax.request({
  110. url: adminToolsSettings.config.connector_url
  111. , params: {
  112. action: 'mgr/favorites/savestate',
  113. type: type,
  114. state: state
  115. }
  116. , success: function (r) {
  117. var res = Ext.decode(r.responseText);
  118. adminToolsSettings.favoriteElements.states = res.object;
  119. node.reload();
  120. }
  121. , scope: this
  122. });
  123. },
  124. _showContextMenu: function (n, e) {
  125. this.cm.activeNode = n;
  126. this.cm.removeAll();
  127. if (n.attributes.menu && n.attributes.menu.items) {
  128. this.addContextMenuItem(n.attributes.menu.items);
  129. this.cm.show(n.getUI().getEl(), 't?');
  130. } else {
  131. var m = [];
  132. var ui = n.getUI();
  133. switch (n.attributes.classKey) {
  134. case 'root':
  135. m = this._getRootMenu(n);
  136. break;
  137. case 'modCategory':
  138. m = this._getCategoryMenu(n);
  139. break;
  140. default:
  141. m = this._getElementMenu(n);
  142. m.push('-');
  143. if (ui.hasClass('x-element-favorite')) {
  144. m.push({
  145. text: _('admintools_remove_from_favorites'),
  146. handler: this.fromFavorites
  147. });
  148. } else {
  149. m.push({
  150. text: _('admintools_add_to_favorites'),
  151. handler: this.toFavorites
  152. });
  153. }
  154. break;
  155. }
  156. this.addContextMenuItem(m);
  157. this.cm.showAt(e.xy);
  158. }
  159. e.stopEvent();
  160. },
  161. toFavorites: function () {
  162. var node = this.cm.activeNode,
  163. parent = node.parentNode;
  164. if (!parent.favChilds) parent.favChilds = 0;
  165. parent.favChilds++;
  166. Ext.Ajax.request({
  167. url: adminToolsSettings.config.connector_url
  168. , params: {
  169. action: 'mgr/favorites/add',
  170. type: node.attributes.type,
  171. id: node.attributes.pk
  172. }
  173. , success: function (r) {
  174. var res = Ext.decode(r.responseText);
  175. adminToolsSettings.favoriteElements.elements = res.object;
  176. node.ui.addClass('x-element-favorite');
  177. if (adminToolsSettings.favoriteElements.icon) node.ui.iconNode.className = adminToolsSettings.favoriteElements.icon;
  178. }
  179. , scope: this
  180. });
  181. },
  182. fromFavorites: function () {
  183. var node = this.cm.activeNode;
  184. var type = node.attributes.type,
  185. favoriteMode = adminToolsSettings.favoriteElements.states[type];
  186. if (favoriteMode) {
  187. node.getUI().hide();
  188. }
  189. Ext.Ajax.request({
  190. url: adminToolsSettings.config.connector_url
  191. , params: {
  192. action: 'mgr/favorites/remove',
  193. type: node.attributes.type,
  194. id: node.attributes.pk
  195. }
  196. , success: function (r) {
  197. var res = Ext.decode(r.responseText);
  198. adminToolsSettings.favoriteElements.elements = res.object;
  199. node.getUI().removeClass('x-element-favorite');
  200. //node.ui.iconNode.className = node.attributes.iconCls;
  201. if ( /\bstatic\b/.test(node.attributes.cls) ) {
  202. node.ui.iconNode.className = 'icon icon-file-text-o';
  203. } else {
  204. node.ui.iconNode.className = 'icon icon-file-o';
  205. //node.setIconCls('icon icon-file-o');
  206. }
  207. }
  208. , scope: this
  209. });
  210. },
  211. onLoad: function (ldr, node, resp) {
  212. Ext.each(node.childNodes, function (node) {
  213. if (node.attributes.selected) {
  214. node.ui.addClass('x-tree-selected');
  215. }
  216. if (node.attributes.favorite) {
  217. node.ui.addClass('x-element-favorite');
  218. }
  219. });
  220. var r = Ext.decode(resp.responseText);
  221. if (r.message) {
  222. var el = this.getTreeEl();
  223. el.addClass('modx-tree-load-msg');
  224. el.update(r.message);
  225. var w = 270;
  226. if (this.config.width > 150) {
  227. w = this.config.width;
  228. }
  229. el.setWidth(w);
  230. this.doLayout();
  231. }
  232. }
  233. });
  234. Ext.onReady(function () {
  235. var tree = Ext.getCmp('modx-tree-element');
  236. tree.config.url = adminToolsSettings.config.connector_url;
  237. tree.baseParams.action = 'mgr/element/getnodes';
  238. tree.config.sortAction = 'mgr/element/sort';
  239. tree.removeElement = function (itm, e) {
  240. var id = this.cm.activeNode.id.substr(2);
  241. var oar = id.split('_');
  242. MODx.msg.confirm({
  243. title: _('warning'),
  244. text: _('remove_this_confirm', {
  245. type: oar[0],
  246. name: this.cm.activeNode.attributes.name
  247. }),
  248. url: MODx.config.connector_url,
  249. params: {
  250. action: 'element/' + oar[0] + '/remove',
  251. id: oar[2]
  252. },
  253. listeners: {
  254. 'success': {
  255. fn: function () {
  256. tree.cm.activeNode.remove();
  257. tree.fromFavorites();
  258. /* if editing the element being removed */
  259. if (MODx.request.a == 'element/' + oar[0] + '/update' && MODx.request.id == oar[2]) {
  260. MODx.loadPage('welcome');
  261. }
  262. }, scope: tree
  263. }
  264. }
  265. });
  266. };
  267. });
  268. }