actions.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  1. App.Actions.authorize = function()
  2. {
  3. if ($('#authorize-form').length > 0) {
  4. return;
  5. }
  6. App.View.popup('login');
  7. }
  8. App.Actions.do_authorize = function()
  9. {
  10. $('#authorize-error').text('');
  11. App.Ajax.request('MAIN.signin', {'login':$('#authorize-login').val(), 'password':$('#authorize-login'.val())}, function(reply)
  12. {
  13. if (reply.result) {
  14. location.href = '';
  15. }
  16. else {
  17. $('#authorize-error').text(reply.message);
  18. }
  19. });
  20. }
  21. App.Actions.delete_entry = function(evt)
  22. {
  23. var confirmed = confirm(App.i18n.getMessage('confirm'));
  24. if (!confirmed) {
  25. return;
  26. }
  27. var elm = $(evt.target);
  28. var elm = elm.hasClass('row') ? elm : elm.parents('.row');
  29. App.Model.remove(App.Env.world, elm);
  30. }
  31. App.Actions.show_subform = function(evt)
  32. {
  33. var elm = $(evt.target);
  34. var ref = elm.hasClass('row') ? elm : elm.parents('.row');
  35. var ref_subform = ref.next('.subform');
  36. if (ref_subform.length > 0) {
  37. ref_subform.remove();
  38. }
  39. if ('undefined' != typeof App.Pages[App.Env.world].showSubform) {
  40. App.Pages[App.Env.world].showSubform(ref);
  41. }
  42. // TODO: probably general way to embed subforms
  43. }
  44. App.Actions.view_template_settings = function(evt)
  45. {
  46. alert('TODO');
  47. }
  48. App.Actions.add_subrecord_dns = function(evt)
  49. {
  50. var elm = $(evt.target);
  51. var ref = elm.hasClass('subform') ? elm : elm.parents('.subform');
  52. if (ref.length > 0) {
  53. var tpl = App.HTML.Build.dns_subrecord({});
  54. ref.find('.add-box').after(tpl.finalize());
  55. App.Helpers.updateScreen();
  56. }
  57. }
  58. /**
  59. * Embeds new item form
  60. * if exits custom method (App.Pages[ENVIRONMENT_NAME].newForm)
  61. * custom method will be executes instead of default one
  62. */
  63. App.Actions.new_entry = function() {
  64. if ('undefined' != typeof App.Pages[App.Env.world].new_entry) {
  65. App.Pages[App.Env.world].new_entry();
  66. } else {
  67. var form_id = App.Constants[App.Env.world + '_FORM_ID'];
  68. $('#'+form_id).remove();
  69. var build_method = App.Env.getWorldName() + '_form';
  70. var tpl = App.HTML.Build[build_method]({}, form_id);
  71. App.Ref.CONTENT.prepend(tpl);
  72. App.Helpers.updateScreen();
  73. }
  74. }
  75. // do_action_save
  76. App.Actions.save_form = function(evt) {
  77. var elm = $(evt.target);
  78. elm = elm.parents('.b-new-entry');
  79. var elm_id = App.Env.world + '_FORM_ID';
  80. var build_method = App.Env.getWorldName() + '_entry';
  81. if (!App.Validate.form(App.Env.world, elm)) {
  82. return App.Validate.displayFormErrors(App.Env.world, elm);
  83. }
  84. if (elm.attr('id') == App.Constants[elm_id]) { // NEW ITEM
  85. var values = App.Helpers.getFormValues(elm);
  86. if(App.Validate.form(values, $('#'+elm_id))) {
  87. App.Model.add(values, source);
  88. var form_id = App.Constants[App.Env.world + '_FORM_ID'];
  89. $('#'+form_id).remove();
  90. }
  91. }
  92. else { // OLD ITEM, UPDATING IT
  93. var source = $(elm).find('.source').val();
  94. var values = App.Helpers.getFormValues(elm);
  95. if(App.Validate.form(values, $('#'+elm_id))) {
  96. App.Model.update(values, source, elm);
  97. }
  98. }
  99. }
  100. // do_action_edit
  101. App.Actions.edit = function(evt) {
  102. if ('undefined' != typeof App.Pages[App.Env.world].edit) {
  103. App.Pages[App.Env.world].edit(evt);
  104. } else {
  105. var elm = $(evt.target);
  106. elm = elm.hasClass('row') ? elm : elm.parents('.row');
  107. var options = elm.find('.source').val();
  108. var build_method = App.Env.getWorldName() + '_form';
  109. var tpl = App.HTML.Build[build_method](options);
  110. elm.replaceWith(tpl);
  111. App.Helpers.disbleNotEditable();
  112. //App.Helpers.updateScreen();
  113. }
  114. }
  115. // do_cancel_form
  116. App.Actions.cancel_form = function(evt, params) {
  117. var elm = $(evt.target);
  118. elm = elm.parents('.b-new-entry');
  119. var form_id = App.Constants[App.Env.world + '_FORM_ID'];
  120. if (elm.attr('id') == form_id) {
  121. $('#' + form_id).remove();
  122. }
  123. else {
  124. fb.warn(elm.find('.source').val());
  125. var options = App.Helpers.evalJSON(elm.find('.source').val());
  126. var entry_name = App.Env.world.toLowerCase() + '_entry';
  127. var tpl = App.HTML.Build[entry_name](options);
  128. elm.replaceWith(tpl);
  129. }
  130. App.Helpers.updateScreen();
  131. }
  132. App.Actions.suspend = function(evt)
  133. {
  134. var confirmed = confirm('Suspend?');
  135. if (!confirmed) {
  136. return ;
  137. }
  138. var elm = $(evt.target);
  139. var row = elm.parents('.row');
  140. var options = row.find('.source').val();
  141. App.Ajax.request(App.Env.world+'.suspend', {spell: options}, function(reply) {
  142. if (reply.result) {
  143. //var tpl = App.Templates.get('SUSPENDED_TPL_SUSPENDED', 'general');
  144. //$(elm).replaceWith(tpl.finalize());
  145. App.Pages.prepareHTML();
  146. App.Helpers.updateScreen();
  147. }
  148. else {
  149. return App.Helpers.alert('Failed to suspend');
  150. }
  151. });
  152. }
  153. App.Actions.unsuspend = function(evt)
  154. {
  155. var confirmed = confirm('Unsuspend?');
  156. if (!confirmed) {
  157. return ;
  158. }
  159. var elm = $(evt.target);
  160. var row = elm.parents('.row');
  161. var options = row.find('.source').val();
  162. App.Ajax.request(App.Env.world+'.unsuspend', {spell: options}, function(reply) {
  163. if (reply.result) {
  164. //var tpl = App.Templates.get('SUSPENDED_TPL_NOT_SUSPENDED', 'general');
  165. //$(elm).replaceWith(tpl.finalize());
  166. App.Pages.prepareHTML();
  167. App.Helpers.updateScreen();
  168. }
  169. else {
  170. return App.Helpers.alert('Failed to suspend');
  171. }
  172. });
  173. }
  174. // do_action_form_help
  175. App.Actions.showFormHelp = function(evt) {
  176. var tpl_name = App.Env.world + '_form';
  177. var tpl = App.Templates.get(tpl_name, 'help');
  178. App.View.popup(tpl.finalize());
  179. }
  180. // do_action_entry_help
  181. App.Actions.showEntryHelp = function(evt) {
  182. var tpl_name = App.Env.world + '_entry';
  183. var tpl = App.Templates.get(tpl_name, 'help');
  184. App.View.popup(tpl.finalize());
  185. }
  186. App.Actions.embedSubform = function(evt) {
  187. var tpl = App.Templates.get('subform', App.Env.getWorldName());
  188. }
  189. App.Actions.close_popup = function()
  190. {
  191. App.View.closePopup();
  192. }
  193. App.Actions.close_subform = function(evt, elm)
  194. {
  195. var elm = elm || $(evt.target);
  196. var ref = elm.hasClass('subform') ? elm : elm.parents('.subform');
  197. var parent_ref = ref.prev('.row');
  198. if (parent_ref.length > 0) {
  199. parent_ref.find('.show-records').removeClass('hidden');
  200. }
  201. ref.remove();
  202. }
  203. App.Actions.save_dns_subrecords = function(evt)
  204. {
  205. var elm = $(evt.target);
  206. var ref = elm.hasClass('subform') ? elm : elm.parents('.subform');
  207. var data = [];
  208. $('.subform').find('.subrow').each(function(i, o)
  209. {
  210. data[data.length++] = App.Helpers.getFormValues(o);
  211. });
  212. var parent_row = $(elm).parents('.subform').prev('.dns-details-row');
  213. var dns_json = $(parent_row).find('.source').val();
  214. App.Ajax.request('DNS.changeRecords', {spell: App.Helpers.toJSON(data), dns: dns_json}, function(reply)
  215. {
  216. if (reply.result) {
  217. var emphasize = $('.show-records', parent_row);
  218. App.Actions.close_subform(null, elm);
  219. $(emphasize).effect("highlight", {'color':'#B0D635'}, 3000);
  220. }
  221. else {
  222. App.Helpers.alert('Changes were not applied');
  223. }
  224. });
  225. }
  226. App.Actions.delete_subentry = function(evt)
  227. {
  228. var sure = confirm(App.i18n.getMessage('confirm'));
  229. if (!sure) {
  230. return;
  231. }
  232. var elm = $(evt.target);
  233. var ref = elm.hasClass('subrow') ? elm : elm.parents('.subrow');
  234. $(ref).remove();
  235. }
  236. App.Actions.generate_pass = function()
  237. {
  238. $('.password').val(App.Helpers.generatePassword());
  239. }
  240. App.Actions.toggle_section = function(evt)
  241. {
  242. var elm = $(evt.target);
  243. var ref = $(elm).parents('.form-options-group:first');
  244. fb.log(ref);
  245. if ($('.sub_section:first', ref).hasClass('hidden')) {
  246. $('.sub_section:first', ref).removeClass('hidden');
  247. $('.group-header:first', ref).removeClass('collapsed').addClass('expanded');
  248. }
  249. else {
  250. $('.sub_section:first', ref).addClass('hidden');
  251. $('.group-header:first', ref).removeClass('expanded').addClass('collapsed');
  252. }
  253. }
  254. App.Actions.close_inner_popup = function(evt)
  255. {
  256. App.Helpers.closeInnerPopup();
  257. }
  258. App.Actions.open_inner_popup = function(evt)
  259. {
  260. var elm = $(evt.target);
  261. App.Helpers.openInnerPopup(elm, $(elm).next('.inner-popup-html').val());
  262. }
  263. App.Actions.add_db_user = function(evt)
  264. {
  265. alert('TODO');
  266. }
  267. App.Actions.backup_db = function(evt)
  268. {
  269. alert('TODO');
  270. }
  271. App.Actions.add_form_ns = function(evt)
  272. {
  273. var elm = $(evt.target);
  274. form = elm.parents('.form:first');
  275. var total_nses = $(form).find('.ns-entry').length;
  276. if (total_nses == App.Settings.NS_MAX) {
  277. return App.Helpers.alert('Maximum number of NS cannot be more than ' + App.Settings.NS_MAX);
  278. }
  279. var tpl = App.Templates.get('NS_INPUT', 'user');
  280. tpl.set(':NAME', '');
  281. tpl.set(':NS_LABEL', 'NS');
  282. elm.before(tpl.finalize());
  283. if ((total_nses + 1) == App.Settings.NS_MAX ) { // added last NS
  284. $('.additional-ns-add', form).addClass('hidden');
  285. }
  286. $(form).find('.ns-entry').each(function(i, o)
  287. {
  288. $(o).find('label').text('NS #' + (i + 1));
  289. $(o).find('input').attr('name', 'NS' + (i + 1));
  290. });
  291. }
  292. App.Actions.delete_ns = function(evt)
  293. {
  294. var elm = $(evt.target);
  295. form = elm.parents('.form:first');
  296. var total_nses = $(form).find('.ns-entry').length;
  297. if (total_nses == App.Settings.NS_MIN) {
  298. return App.Helpers.alert('Minimum number of NS is ' + App.Settings.NS_MIN);
  299. }
  300. var form = elm.parents('.form:first');
  301. $(elm).parents('.form:first').find('.additional-ns-add').removeClass('hidden');
  302. $(elm).parents('.ns-entry').remove();
  303. $(form).find('.ns-entry').each(function(i, o)
  304. {
  305. $(o).find('label').text('NS #' + (i + 1));
  306. $(o).find('input').attr('name', 'NS' + (i + 1));
  307. });
  308. }
  309. App.Actions.view_full_ns_list = function(evt)
  310. {
  311. var elm = $(evt.target);
  312. App.Helpers.openInnerPopup(elm, $(elm).parents('.prop-box').find('.ns-full-list:first').html());
  313. }
  314. App.Actions.view_template_info = function(evt)
  315. {
  316. var elm = $(evt.target);
  317. ref = elm.hasClass('row') ? elm : elm.parents('.row');
  318. var options = ref.find('.source').val();
  319. App.Ajax.request('DNS.getTemplateInfo', {spell: options}, function(reply) {
  320. if (reply.result) {
  321. App.Helpers.openInnerPopup(elm, reply.data);
  322. }
  323. });
  324. }
  325. App.Actions.toggle_stats_block = function(evt)
  326. {
  327. var elm = $(evt.target);
  328. if (!!elm.attr('checked')) {
  329. elm.parents('.stats-settings').find('.stats-block').removeClass('hidden');
  330. }
  331. else {
  332. elm.parents('.stats-settings').find('.stats-block').addClass('hidden');
  333. }
  334. }