bookmark.js 23 KB

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