bookmark-settings.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. /* BOOKMARK JS FILE */
  2. // FUNCTIONS
  3. bookmarkLaunch();
  4. $('body').arrive('#settings-main-tab-editor .nav-tabs', {onceOnly: true}, function() {
  5. bookmarkLaunch();
  6. });
  7. function bookmarkCheckForTab() {
  8. // Let check for tab with bookmark url
  9. organizrAPI2('GET', 'api/v2/plugins/bookmark/setup/tab').success(function (data) {
  10. try {
  11. let response = data.response;
  12. $('.bookmark-check-tab small').text('Bookmark Tab');
  13. $('.bookmark-check-tab .result').text(response.message);
  14. } catch (e) {
  15. organizrCatchError(e, data);
  16. }
  17. }).fail(function (xhr) {
  18. OrganizrApiError(xhr);
  19. $('.bookmark-check-tab .result').text('Error...');
  20. });
  21. }
  22. $('body').arrive('.bookmark-check-tab', {onceOnly: false}, function() {
  23. setTimeout(function(){
  24. bookmarkCheckForTab()
  25. bookmarkCheckForCategory();
  26. }, 500);
  27. });
  28. function bookmarkCheckForCategory(){
  29. // Let check for tab with bookmark url
  30. organizrAPI2('GET','api/v2/plugins/bookmark/setup/category').success(function(data) {
  31. try {
  32. let response = data.response;
  33. $('.bookmark-check-category small').text('Bookmark Categories');
  34. $('.bookmark-check-category .result').text(response.message);
  35. }catch(e) {
  36. organizrCatchError(e,data);
  37. }
  38. }).fail(function(xhr) {
  39. OrganizrApiError(xhr);
  40. $('.bookmark-check-category .result').text('Error...');
  41. });
  42. }
  43. function bookmarkLaunch(){
  44. if(activeInfo.plugins["BOOKMARK-enabled"] == true){
  45. bookmarkTabsLaunch();
  46. bookmarkCategoriesLaunch();
  47. pageLoad();
  48. }
  49. }
  50. // TAB MANAGEMENT
  51. function bookmarkTabsLaunch(){
  52. var menuList = `<li onclick="changeSettingsMenu('Settings::Tab Editor::Bookmark Tabs');loadSettingsPage2('api/v2/plugins/bookmark/settings_tab_editor_bookmark_tabs','#settings-tab-editor-tabs','Tab Editor');" role="presentation"><a id="settings-tab-editor-tabs-anchor" href="#settings-tab-editor-tabs" aria-controls="home" role="tab" data-toggle="tab" aria-expanded="true"><span class="visible-xs"><i class="ti-layout-tab-v"></i></span><span class="hidden-xs" lang="en">Bookmark Tabs</span></a></li>`;
  53. $('#settings-main-tab-editor .nav-tabs').append(menuList);
  54. }
  55. function buildBookmarkTabEditor(){
  56. organizrAPI2('GET','api/v2/plugins/bookmark/tabs').success(function(data) {
  57. try {
  58. var response = data.response;
  59. }catch(e) {
  60. organizrCatchError(e,data);
  61. }
  62. $('#bookmarkTabEditorTable').html(buildBookmarkTabEditorItem(response.data));
  63. }).fail(function(xhr) {
  64. OrganizrApiError(xhr);
  65. });
  66. }
  67. function buildBookmarkTabEditorItem(array){
  68. var tabList = '';
  69. $.each(array.tabs, function(i,v) {
  70. tabList += `
  71. <tr class="bookmarkTabEditor" data-order="`+v.order+`" data-original-order="`+v.order+`" data-id="`+v.id+`" data-group-id="`+v.group_id+`" data-category-id="`+v.category_id+`" data-name="`+v.name+`" data-url="`+v.url+`" data-image="`+v.image+`">
  72. <input type="hidden" class="form-control" name="tab[`+v.id+`].id" value="`+v.id+`">
  73. <input type="hidden" class="form-control order" name="tab[`+v.id+`].order" value="`+v.order+`">
  74. <input type="hidden" class="form-control" name="tab[`+v.id+`].originalOrder" value="`+v.order+`">
  75. <td style="text-align:center" class="text-center el-element-overlay">
  76. <div class="el-card-item p-0">
  77. <div class="el-card-avatar el-overlay-1 m-0">
  78. <div class="bookmarkTabEditorIcon">`+iconPrefix(v.image)+`</div>
  79. <div class="el-overlay bg-org">
  80. <ul class="el-info">
  81. <i class="fa fa-bars"></i>
  82. </ul>
  83. </div>
  84. </div>
  85. </div>
  86. </td>
  87. <td><span class="tooltip-info" data-toggle="tooltip" data-placement="right" title="" data-original-title="`+v.url+`">`+v.name+`</span></td>
  88. `+buildBookmarkTabCategorySelect(array.categories,v.id, v.category_id)+`
  89. `+buildBookmarkTabGroupSelect(array.groups,v.id, v.group_id)+`
  90. <td style="text-align:center"><input type="checkbox" class="js-switch bookmarkEnabledSwitch" data-size="small" data-color="#99d683" data-secondary-color="#f96262" name="tab[`+v.id+`].enabled" value="true" `+tof(v.enabled,'c')+`/><input type="hidden" class="form-control" name="tab[`+v.id+`].enabled" value="false"></td>
  91. <td style="text-align:center"><button type="button" class="btn btn-info btn-outline btn-circle btn-lg m-r-5 editBookmarkTabButton popup-with-form" onclick="editBookmarkTabForm('`+v.id+`')" href="#edit-bookmark-tab-form" data-effect="mfp-3d-unfold"><i class="ti-pencil-alt"></i></button></td>
  92. <td style="text-align:center"><button type="button" class="btn btn-danger btn-outline btn-circle btn-lg m-r-5 bookmarkDeleteTab"><i class="ti-trash"></i></button></td>
  93. </tr>
  94. `;
  95. });
  96. return tabList;
  97. }
  98. function buildBookmarkTabGroupSelect(array, tabID, groupID){
  99. var groupSelect = '';
  100. var selected = '';
  101. $.each(array, function(i,v) {
  102. selected = '';
  103. if(v.group_id == groupID){
  104. selected = 'selected';
  105. }
  106. groupSelect += '<option '+selected+' value="'+v.group_id+'">'+v.group+'</option>';
  107. });
  108. return '<td><select name="tab['+tabID+'].group_id" class="form-control bookmarkTabGroupSelect">'+groupSelect+'</select></td>';
  109. }
  110. function buildBookmarkTabCategorySelect(array,tabID, categoryID){
  111. var categorySelect = '';
  112. var selected = '';
  113. $.each(array, function(i,v) {
  114. selected = '';
  115. if(v.category_id == categoryID){
  116. selected = 'selected';
  117. }
  118. categorySelect += '<option '+selected+' value="'+v.category_id+'">'+v.category+'</option>';
  119. });
  120. return '<td><select name="tab['+tabID+'].category_id" class="form-control bookmarkTabCategorySelect">'+categorySelect+'</select></td>';
  121. }
  122. function editBookmarkTabForm(id){
  123. organizrAPI2('GET','api/v2/plugins/bookmark/tabs/' + id,true).success(function(data) {
  124. try {
  125. let response = data.response;
  126. console.log(response);
  127. $('#edit-bookmark-tab-form [name=name]').val(response.data.name);
  128. $('#originalBookmarkTabName').html(response.data.name);
  129. $('#edit-bookmark-tab-form [name=url]').val(response.data.url);
  130. $('#edit-bookmark-tab-form [name=image]').val(response.data.image);
  131. $('#edit-bookmark-tab-form [name=background_color]').val(response.data.background_color);
  132. $('#edit-bookmark-tab-form [name=text_color]').val(response.data.text_color);
  133. $('#edit-bookmark-tab-form [name=id]').val(response.data.id);
  134. if( response.data.url.indexOf('/?v') > 0){
  135. $('#edit-bookmark-tab-form [name=url]').prop('disabled', 'true');
  136. }else{
  137. $('#edit-bookmark-tab-form [name=url]').prop('disabled', null);
  138. }
  139. }catch(e) {
  140. organizrCatchError(e,data);
  141. }
  142. }).fail(function(xhr) {
  143. OrganizrApiError(xhr, 'Tab Error');
  144. });
  145. }
  146. // CHANGE ENABLED TAB
  147. $(document).on("change", ".bookmarkEnabledSwitch", function () {
  148. var id = $(this).parent().parent().attr("data-id");
  149. var enabled = $(this).prop("checked") ? 1 : 0;
  150. var callbacks = $.Callbacks();
  151. organizrAPI2('PUT','api/v2/plugins/bookmark/tabs/' + id, {"enabled":enabled},true).success(function(data) {
  152. try {
  153. var response = data.response;
  154. }catch(e) {
  155. organizrCatchError(e,data);
  156. }
  157. message('Tab Enable Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  158. if(callbacks){ callbacks.fire(); }
  159. }).fail(function(xhr) {
  160. OrganizrApiError(xhr, 'Tab Enable Error');
  161. });
  162. });
  163. // CHANGE TAB GROUP
  164. $(document).on("change", ".bookmarkTabGroupSelect", function (event) {
  165. var id = $(this).parent().parent().attr("data-id");
  166. var groupID = $(this).find("option:selected").val();
  167. var callbacks = $.Callbacks();
  168. organizrAPI2('PUT','api/v2/plugins/bookmark/tabs/' + id, {"group_id":groupID},true).success(function(data) {
  169. try {
  170. var response = data.response;
  171. }catch(e) {
  172. organizrCatchError(e,data);
  173. }
  174. message('Tab Group Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  175. if(callbacks){ callbacks.fire(); }
  176. }).fail(function(xhr) {
  177. OrganizrApiError(xhr, 'Tab Group Error');
  178. });
  179. });
  180. // CHANGE TAB CATEGORY
  181. $(document).on("change", ".bookmarkTabCategorySelect", function () {
  182. var id = $(this).parent().parent().attr("data-id");
  183. var categoryID = $(this).find("option:selected").val();
  184. console.log("CategoryID: " + categoryID);
  185. var callbacks = $.Callbacks();
  186. organizrAPI2('PUT','api/v2/plugins/bookmark/tabs/' + id, {"category_id":categoryID},true).success(function(data) {
  187. try {
  188. var response = data.response;
  189. }catch(e) {
  190. organizrCatchError(e,data);
  191. }
  192. message('Tab Category Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  193. if(callbacks){ callbacks.fire(); }
  194. }).fail(function(xhr) {
  195. OrganizrApiError(xhr, 'Tab Category Error');
  196. });
  197. });
  198. //DELETE TAB
  199. $(document).on("click", ".bookmarkDeleteTab", function () {
  200. var tab = $(this);
  201. swal({
  202. title: window.lang.translate('Delete ') + tab.parent().parent().attr("data-name") + '?',
  203. icon: "warning",
  204. buttons: {
  205. cancel: window.lang.translate('No'),
  206. confirm: window.lang.translate('Yes'),
  207. },
  208. dangerMode: true,
  209. confirmButtonColor: "#DD6B55"
  210. }).then(function(willDelete) {
  211. if (willDelete) {
  212. var id = tab.parent().parent().attr("data-id");
  213. var callbacks = $.Callbacks();
  214. callbacks.add( buildBookmarkTabEditor );
  215. organizrAPI2('DELETE','api/v2/plugins/bookmark/tabs/' + id, null,true).success(function(data) {
  216. message('Tab Deleted','',activeInfo.settings.notifications.position,"#FFF","success","5000");
  217. if(callbacks){ callbacks.fire(); }
  218. }).fail(function(xhr) {
  219. OrganizrApiError(xhr, 'Tab Deleted Error');
  220. });
  221. }
  222. });
  223. });
  224. //EDIT TAB
  225. $(document).on("click", ".editBookmarkTab", function () {
  226. var originalTabName = $('#originalBookmarkTabName').html();
  227. var tabInfo = $('#edit-bookmark-tab-form').serializeToJSON();
  228. if (typeof tabInfo.id == 'undefined' || tabInfo.id == '') {
  229. message('Edit Tab Error',' Could not get Tab ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
  230. return false;
  231. }
  232. if (typeof tabInfo.name == 'undefined' || tabInfo.name == '') {
  233. message('Edit Tab Error',' Please set a Tab Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  234. return false;
  235. }
  236. if (typeof tabInfo.image == 'undefined' || tabInfo.image == '') {
  237. message('Edit Tab Error',' Please set a Tab Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  238. return false;
  239. }
  240. if (typeof tabInfo.url == 'undefined' || tabInfo.url == '') {
  241. message('Edit Tab Error',' Please set a Tab URL',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  242. return false;
  243. }
  244. if (typeof tabInfo.background_color == 'undefined' || tabInfo.background_color == '') {
  245. message('Edit Tab Error',' Please set a Background Color',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  246. return false;
  247. }
  248. if (typeof tabInfo.text_color == 'undefined' || tabInfo.text_color == '') {
  249. message('Edit Tab Error',' Please set a Text Color',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  250. return false;
  251. }
  252. if(tabInfo.id !== '' && tabInfo.tabName !== '' && tabInfo.tabImage !== '' && tabInfo.background_color !== '' && tabInfo.text_color !== ''){
  253. var callbacks = $.Callbacks();
  254. callbacks.add( buildBookmarkTabEditor );
  255. organizrAPI2('PUT','api/v2/plugins/bookmark/tabs/' + tabInfo.id,tabInfo,true).success(function(data) {
  256. try {
  257. var response = data.response;
  258. console.log(response);
  259. }catch(e) {
  260. organizrCatchError(e,data);
  261. }
  262. message('Tab Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  263. if(callbacks){ callbacks.fire(); }
  264. clearForm('#edit-bookmark-tab-form');
  265. $.magnificPopup.close();
  266. }).fail(function(xhr) {
  267. OrganizrApiError(xhr, 'Tab Error');
  268. });
  269. }
  270. });
  271. //ADD NEW TAB
  272. $(document).on("click", ".addNewBookmarkTab", function () {
  273. var tabInfo = $('#new-bookmark-tab-form').serializeToJSON();
  274. var order = parseInt($('#bookmarkTabEditorTable').find('tr[data-order]').last().attr('data-order')) + 1;
  275. tabInfo['order'] = isNaN(order) ? 1 : order;
  276. if (typeof tabInfo.name == 'undefined' || tabInfo.name == '') {
  277. message('Edit Tab Error',' Please set a Tab Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  278. return false;
  279. }
  280. if (typeof tabInfo.image == 'undefined' || tabInfo.image == '') {
  281. message('Edit Tab Error',' Please set a Tab Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  282. return false;
  283. }
  284. if ((typeof tabInfo.url == 'undefined' || tabInfo.url == '')) {
  285. message('Edit Tab Error',' Please set a Tab URL',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  286. return false;
  287. }
  288. if (typeof tabInfo.background_color == 'undefined' || tabInfo.background_color == '') {
  289. message('Edit Tab Error',' Please set a Background Color',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  290. return false;
  291. }
  292. if (typeof tabInfo.text_color == 'undefined' || tabInfo.text_color == '') {
  293. message('Edit Tab Error',' Please set a Text Color',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  294. return false;
  295. }
  296. if(tabInfo.order !== '' && tabInfo.name !== '' && tabInfo.url !== '' && tabInfo.image !== '' && tabInfo.background_color !== '' && tabInfo.text_color !== ''){
  297. var callbacks = $.Callbacks();
  298. callbacks.add( buildBookmarkTabEditor );
  299. organizrAPI2('POST','api/v2/plugins/bookmark/tabs',tabInfo,true).success(function(data) {
  300. try {
  301. var response = data.response;
  302. $('.bookmarkTabIconImageList').val(null).trigger('change');
  303. $('.bookmarkTabIconIconList').val(null).trigger('change');
  304. }catch(e) {
  305. organizrCatchError(e,data);
  306. }
  307. message('Tab Created',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  308. if(callbacks){ callbacks.fire(); }
  309. clearForm('#new-bookmark-tab-form');
  310. $.magnificPopup.close();
  311. }).fail(function(xhr) {
  312. OrganizrApiError(xhr, 'Tab Error');
  313. });
  314. }
  315. });
  316. // CHANGE TAB ORDER
  317. function submitBookmarkTabOrder(newTabs){
  318. var data = [];
  319. var process = false;
  320. $.each(newTabs.tab, function(i,v) {
  321. if(v.originalOrder == v.order){
  322. delete newTabs.tab[i];
  323. }else{
  324. let temp = {
  325. "order":v.order,
  326. "id":v.id
  327. }
  328. data.push(temp);
  329. process = true;
  330. }
  331. })
  332. if(!process){
  333. message('Tab Order Warning','Order was not changed - Submission not needed',activeInfo.settings.notifications.position,"#FFF","warning","5000");
  334. $('.saveBookmarkTabOrderButton').addClass('hidden');
  335. return false;
  336. }
  337. var callbacks = $.Callbacks();
  338. callbacks.add( buildBookmarkTabEditor );
  339. organizrAPI2('PUT','api/v2/plugins/bookmark/tabs',data,true).success(function(data) {
  340. try {
  341. var response = data.response;
  342. }catch(e) {
  343. organizrCatchError(e,data);
  344. }
  345. message('Tab Order Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  346. if(callbacks){ callbacks.fire(); }
  347. $('.saveBookmarkTabOrderButton').addClass('hidden');
  348. }).fail(function(xhr) {
  349. OrganizrApiError(xhr, 'Update Error');
  350. });
  351. }
  352. $(document).on('change', "#new-bookmark-tab-form-chooseImage", function (e) {
  353. var newIcon = $('#new-bookmark-tab-form-chooseImage').val();
  354. if(newIcon !== 'Select or type Icon'){
  355. $('#new-bookmark-tab-form-inputImageNew').val(newIcon);
  356. }
  357. });
  358. $(document).on('change', "#edit-bookmark-tab-form-chooseImage", function (e) {
  359. var newIcon = $('#edit-bookmark-tab-form-chooseImage').val();
  360. if(newIcon !== 'Select or type Icon'){
  361. $('#edit-bookmark-tab-form-inputImage').val(newIcon);
  362. }
  363. });
  364. $(document).on('change', "#new-bookmark-tab-form-chooseIcon", function (e) {
  365. var newIcon = $('#new-bookmark-tab-form-chooseIcon').val();
  366. if(newIcon !== 'Select or type Icon'){
  367. $('#new-bookmark-tab-form-inputImageNew').val(newIcon);
  368. }
  369. });
  370. $(document).on('change', "#edit-bookmark-tab-form-chooseIcon", function (e) {
  371. var newIcon = $('#edit-bookmark-tab-form-chooseIcon').val();
  372. if(newIcon !== 'Select or type Icon'){
  373. $('#edit-bookmark-tab-form-inputImage').val(newIcon);
  374. }
  375. });
  376. // CATEGORY MANAGEMENT
  377. function bookmarkCategoriesLaunch(){
  378. var menuList = `<li onclick="changeSettingsMenu('Settings::Tab Editor::Bookmark Categories');loadSettingsPage2('api/v2/plugins/bookmark/settings_tab_editor_bookmark_categories','#settings-tab-editor-tabs','Tab Editor');" role="presentation"><a id="settings-tab-editor-tabs-anchor" href="#settings-tab-editor-tabs" aria-controls="home" role="tab" data-toggle="tab" aria-expanded="true"><span class="visible-xs"><i class="ti-layout-tab-v"></i></span><span class="hidden-xs" lang="en">Bookmark Categories</span></a></li>`;
  379. $('#settings-main-tab-editor .nav-tabs').append(menuList);
  380. }
  381. function buildBookmarkCategoryEditor(){
  382. organizrAPI2('GET','api/v2/plugins/bookmark/tabs').success(function(data) {
  383. try {
  384. var response = data.response;
  385. }catch(e) {
  386. organizrCatchError(e,data);
  387. }
  388. $('#bookmarkCategoryEditorTable').html(buildBookmarkCategoryEditorItem(response.data));
  389. }).fail(function(xhr) {
  390. OrganizrApiError(xhr);
  391. });
  392. }
  393. function buildBookmarkCategoryEditorItem(array){
  394. var categoryList = '';
  395. $.each(array.categories, function(i,v) {
  396. var tabCount = array.tabs.reduce(function (n, category) {
  397. return n + (category.category_id == v.category_id);
  398. }, 0);
  399. var disabledDefault = (v.default == 1) ? 'disabled' : '';
  400. var disabledDelete = (tabCount > 0) ? 'disabled' : '';
  401. var defaultIcon = (v.default == 1) ? 'icon-user-following' : 'icon-user-follow';
  402. var defaultColor = (v.default == 1) ? 'btn-info disabled' : 'btn-warning';
  403. categoryList += `
  404. <tr class="bookmarkCategoryEditor" data-id="`+v.id+`" data-order="`+v.order+`" data-category-id="`+v.category_id+`" data-name="`+v.category+`" data-default="`+tof(v.default)+`" data-tab-count="`+tabCount+`">
  405. <input type="hidden" class="form-control order" name="category[`+v.id+`].order" value="`+v.order+`">
  406. <input type="hidden" class="form-control" name="category[`+v.id+`].originalOrder" value="`+v.order+`">
  407. <input type="hidden" class="form-control" name="category[`+v.id+`].name" value="`+v.category+`">
  408. <input type="hidden" class="form-control" name="category[`+v.id+`].id" value="`+v.id+`">
  409. <td>`+v.category+`</td>
  410. <td style="text-align:center">`+tabCount+`</td>
  411. <td style="text-align:center"><button type="button" class="btn `+defaultColor+` btn-outline btn-circle btn-lg m-r-5 changeDefaultBookmarkCategory" `+disabledDefault+`><i class="`+defaultIcon+`"></i></button></td>
  412. <td style="text-align:center"><button type="button" class="btn btn-info btn-outline btn-circle btn-lg m-r-5 editBookmarkCategoryButton popup-with-form" href="#edit-bookmark-category-form" data-effect="mfp-3d-unfold"><i class="ti-pencil-alt"></i></button></td>
  413. <td style="text-align:center"><button type="button" class="btn btn-danger btn-outline btn-circle btn-lg m-r-5 deleteBookmarkCategory" `+disabledDelete+`><i class="ti-trash"></i></button></td>
  414. </tr>
  415. `;
  416. });
  417. return categoryList;
  418. }
  419. //ADD NEW CATEGORY
  420. $(document).on("click", ".addNewBookmarkCategory", function () {
  421. var categoryInfo = $('#new-bookmark-category-form').serializeToJSON();
  422. var order = parseInt($('#bookmarkCategoryEditorTable').find('tr[data-order]').last().attr('data-order')) + 1;
  423. categoryInfo['order'] = isNaN(order) ? 1 : order;
  424. if (typeof categoryInfo.category == 'undefined' || categoryInfo.category == '') {
  425. message('Edit Tab Error',' Please set a Category Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  426. return false;
  427. }
  428. if(categoryInfo.category !== ''){
  429. var callbacks = $.Callbacks();
  430. callbacks.add( buildBookmarkCategoryEditor );
  431. organizrAPI2('POST','api/v2/plugins/bookmark/categories',categoryInfo,true).success(function(data) {
  432. try {
  433. var response = data.response;
  434. console.log(response);
  435. }catch(e) {
  436. organizrCatchError(e,data);
  437. }
  438. message('Category Added',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  439. if(callbacks){ callbacks.fire(); }
  440. clearForm('#new-bookmark-category-form');
  441. $.magnificPopup.close();
  442. }).fail(function(xhr) {
  443. OrganizrApiError(xhr, 'Category Error');
  444. });
  445. }
  446. });
  447. //DELETE CATEGORY
  448. $(document).on("click", ".deleteBookmarkCategory", function () {
  449. var category = $(this);
  450. swal({
  451. title: window.lang.translate('Delete ')+category.parent().parent().attr("data-name")+'?',
  452. icon: "warning",
  453. buttons: {
  454. cancel: window.lang.translate('No'),
  455. confirm: window.lang.translate('Yes'),
  456. },
  457. dangerMode: true,
  458. confirmButtonColor: "#DD6B55"
  459. }).then(function(willDelete) {
  460. if (willDelete) {
  461. var id = category.parent().parent().attr("data-id");
  462. var callbacks = $.Callbacks();
  463. callbacks.add( buildBookmarkCategoryEditor );
  464. organizrAPI2('DELETE','api/v2/plugins/bookmark/categories/' + id, null,true).success(function(data) {
  465. message('Category Deleted','',activeInfo.settings.notifications.position,"#FFF","success","5000");
  466. if(callbacks){ callbacks.fire(); }
  467. }).fail(function(xhr) {
  468. OrganizrApiError(xhr, 'Category Deleted Error');
  469. });
  470. }
  471. });
  472. });
  473. //EDIT CATEGORY GET ID
  474. $(document).on("click", ".editBookmarkCategoryButton", function () {
  475. $('#edit-bookmark-category-form [name=category]').val($(this).parent().parent().attr("data-name"));
  476. $('#edit-bookmark-category-form [name=id]').val($(this).parent().parent().attr("data-id"));
  477. });
  478. //EDIT CATEGORY
  479. $(document).on("click", ".editBookmarkCategory", function () {
  480. var categoryInfo = $('#edit-bookmark-category-form').serializeToJSON();
  481. if (typeof categoryInfo.id == 'undefined' || categoryInfo.id == '') {
  482. message('Edit Tab Error',' Could not get Category ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
  483. return false;
  484. }
  485. if (typeof categoryInfo.category == 'undefined' || categoryInfo.category == '') {
  486. message('Edit Tab Error',' Please set a Category Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  487. return false;
  488. }
  489. if(categoryInfo.id !== '' && categoryInfo.category !== ''){
  490. var callbacks = $.Callbacks();
  491. callbacks.add( buildBookmarkCategoryEditor );
  492. organizrAPI2('PUT','api/v2/plugins/bookmark/categories/' + categoryInfo.id,categoryInfo,true).success(function(data) {
  493. try {
  494. var response = data.response;
  495. console.log(response);
  496. }catch(e) {
  497. organizrCatchError(e,data);
  498. }
  499. message('Category Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  500. if(callbacks){ callbacks.fire(); }
  501. clearForm('#edit-bookmark-category-form');
  502. $.magnificPopup.close();
  503. }).fail(function(xhr) {
  504. OrganizrApiError(xhr, 'Category Error');
  505. });
  506. }
  507. });
  508. //CHANGE DEFAULT CATEGORY
  509. $(document).on("click", ".changeDefaultBookmarkCategory", function () {
  510. var id = $(this).parent().parent().attr("data-id");
  511. var callbacks = $.Callbacks();
  512. callbacks.add( buildBookmarkCategoryEditor );
  513. organizrAPI2('PUT','api/v2/plugins/bookmark/categories/' + id, {"default":1},true).success(function(data) {
  514. try {
  515. var response = data.response;
  516. }catch(e) {
  517. organizrCatchError(e,data);
  518. }
  519. message('Default Category Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  520. if(callbacks){ callbacks.fire(); }
  521. }).fail(function(xhr) {
  522. OrganizrApiError(xhr, 'Default Cateogry Error');
  523. });
  524. });
  525. // CHANGE CATEGORY ORDER
  526. function submitBookmarkCategoryOrder(){
  527. var data = [];
  528. var categories = $( "#submit-bookmark-categories-form" ).serializeToJSON();
  529. var callbacks = $.Callbacks();
  530. callbacks.add( buildCategoryEditor );
  531. $.each(categories.category, function(i,v) {
  532. if(v.originalOrder == v.order){
  533. delete categories.category[i];
  534. }else{
  535. let temp = {
  536. "order":v.order,
  537. "id":v.id
  538. }
  539. data.push(temp);
  540. }
  541. })
  542. organizrAPI2('PUT','api/v2/plugins/bookmark/categories',data,true).success(function(data) {
  543. try {
  544. var response = data.response;
  545. }catch(e) {
  546. organizrCatchError(e,data);
  547. }
  548. message('Category Order Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  549. if(callbacks){ callbacks.fire(); }
  550. $('.saveTabOrderButton').addClass('hidden');
  551. }).fail(function(xhr) {
  552. OrganizrApiError(xhr, 'Update Error');
  553. });
  554. }
  555. // TAB MANAGEMENT