settings.js 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656
  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 getColorPickerOptionsWithCallback(func){
  56. return ;
  57. }
  58. var colorPickerInitialized = false;
  59. function buildBookmarkTabEditor(){
  60. organizrAPI2('GET','api/v2/plugins/bookmark/tabs').success(function(data) {
  61. try {
  62. var response = data.response;
  63. }catch(e) {
  64. organizrCatchError(e,data);
  65. }
  66. $('#bookmarkTabEditorTable').html(buildBookmarkTabEditorItem(response.data));
  67. // initialize color pickers only first time
  68. if(!colorPickerInitialized){
  69. $("input.bookmark-pick-a-color").ColorPickerSliders({
  70. placement: 'bottom',
  71. color: '#987654',
  72. hsvpanel: true,
  73. previewformat: 'hex',
  74. flat: true,
  75. onchange: function(container, color){
  76. generatePreviewBookmarkNewTab();
  77. generatePreviewBookmarkEditTab();
  78. }
  79. });
  80. colorPickerInitialized = true;
  81. }
  82. }).fail(function(xhr) {
  83. OrganizrApiError(xhr);
  84. });
  85. }
  86. function buildBookmarkTabEditorItem(array){
  87. var tabList = '';
  88. $.each(array.tabs, function(i,v) {
  89. tabList += `
  90. <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+`">
  91. <input type="hidden" class="form-control" name="tab[`+v.id+`].id" value="`+v.id+`">
  92. <input type="hidden" class="form-control order" name="tab[`+v.id+`].order" value="`+v.order+`">
  93. <input type="hidden" class="form-control" name="tab[`+v.id+`].originalOrder" value="`+v.order+`">
  94. <td style="text-align:center" class="text-center el-element-overlay">
  95. <div class="el-card-item p-0">
  96. <div class="el-card-avatar el-overlay-1 m-0">
  97. <div class="bookmarkTabEditorIcon">`+iconPrefix(v.image)+`</div>
  98. <div class="el-overlay bg-org">
  99. <ul class="el-info">
  100. <i class="fa fa-bars"></i>
  101. </ul>
  102. </div>
  103. </div>
  104. </div>
  105. </td>
  106. <td><span class="tooltip-info" data-toggle="tooltip" data-placement="right" title="" data-original-title="`+v.url+`">`+v.name+`</span></td>
  107. `+buildBookmarkTabCategorySelect(array.categories,v.id, v.category_id)+`
  108. `+buildBookmarkTabGroupSelect(array.groups,v.id, v.group_id)+`
  109. <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>
  110. <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>
  111. <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>
  112. </tr>
  113. `;
  114. });
  115. return tabList;
  116. }
  117. function buildBookmarkTabGroupSelect(array, tabID, groupID){
  118. var groupSelect = '';
  119. var selected = '';
  120. $.each(array, function(i,v) {
  121. selected = '';
  122. if(v.group_id == groupID){
  123. selected = 'selected';
  124. }
  125. groupSelect += '<option '+selected+' value="'+v.group_id+'">'+v.group+'</option>';
  126. });
  127. return '<td><select name="tab['+tabID+'].group_id" class="form-control bookmarkTabGroupSelect">'+groupSelect+'</select></td>';
  128. }
  129. function buildBookmarkTabCategorySelect(array,tabID, categoryID){
  130. var categorySelect = '';
  131. var selected = '';
  132. $.each(array, function(i,v) {
  133. selected = '';
  134. if(v.category_id == categoryID){
  135. selected = 'selected';
  136. }
  137. categorySelect += '<option '+selected+' value="'+v.category_id+'">'+v.category+'</option>';
  138. });
  139. return '<td><select name="tab['+tabID+'].category_id" class="form-control bookmarkTabCategorySelect">'+categorySelect+'</select></td>';
  140. }
  141. function editBookmarkTabForm(id){
  142. organizrAPI2('GET','api/v2/plugins/bookmark/tabs/' + id,true).success(function(data) {
  143. try {
  144. let response = data.response;
  145. console.log(response);
  146. $('#edit-bookmark-tab-form [name=name]').val(response.data.name);
  147. $('#originalBookmarkTabName').html(response.data.name);
  148. $('#edit-bookmark-tab-form [name=url]').val(response.data.url);
  149. $('#edit-bookmark-tab-form [name=image]').val(response.data.image);
  150. $('#edit-bookmark-tab-form [name=background_color]').val(response.data.background_color).change();
  151. $('#edit-bookmark-tab-form [name=text_color]').val(response.data.text_color).change();
  152. $('#edit-bookmark-tab-form [name=id]').val(response.data.id);
  153. if( response.data.url.indexOf('/?v') > 0){
  154. $('#edit-bookmark-tab-form [name=url]').prop('disabled', 'true');
  155. }else{
  156. $('#edit-bookmark-tab-form [name=url]').prop('disabled', null);
  157. }
  158. generatePreviewBookmarkEditTab();
  159. }catch(e) {
  160. organizrCatchError(e,data);
  161. }
  162. }).fail(function(xhr) {
  163. OrganizrApiError(xhr, 'Tab Error');
  164. });
  165. }
  166. function newBookmarkTabForm(){
  167. generatePreviewBookmarkNewTab();
  168. }
  169. // CHANGE ENABLED TAB
  170. $(document).on("change", ".bookmarkEnabledSwitch", function () {
  171. var id = $(this).parent().parent().attr("data-id");
  172. var enabled = $(this).prop("checked") ? 1 : 0;
  173. var callbacks = $.Callbacks();
  174. organizrAPI2('PUT','api/v2/plugins/bookmark/tabs/' + id, {"enabled":enabled},true).success(function(data) {
  175. try {
  176. var response = data.response;
  177. }catch(e) {
  178. organizrCatchError(e,data);
  179. }
  180. message('Tab Enable Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  181. if(callbacks){ callbacks.fire(); }
  182. }).fail(function(xhr) {
  183. OrganizrApiError(xhr, 'Tab Enable Error');
  184. });
  185. });
  186. // CHANGE TAB GROUP
  187. $(document).on("change", ".bookmarkTabGroupSelect", function (event) {
  188. var id = $(this).parent().parent().attr("data-id");
  189. var groupID = $(this).find("option:selected").val();
  190. var callbacks = $.Callbacks();
  191. organizrAPI2('PUT','api/v2/plugins/bookmark/tabs/' + id, {"group_id":groupID},true).success(function(data) {
  192. try {
  193. var response = data.response;
  194. }catch(e) {
  195. organizrCatchError(e,data);
  196. }
  197. message('Tab Group Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  198. if(callbacks){ callbacks.fire(); }
  199. }).fail(function(xhr) {
  200. OrganizrApiError(xhr, 'Tab Group Error');
  201. });
  202. });
  203. // CHANGE TAB CATEGORY
  204. $(document).on("change", ".bookmarkTabCategorySelect", function () {
  205. var id = $(this).parent().parent().attr("data-id");
  206. var categoryID = $(this).find("option:selected").val();
  207. console.log("CategoryID: " + categoryID);
  208. var callbacks = $.Callbacks();
  209. organizrAPI2('PUT','api/v2/plugins/bookmark/tabs/' + id, {"category_id":categoryID},true).success(function(data) {
  210. try {
  211. var response = data.response;
  212. }catch(e) {
  213. organizrCatchError(e,data);
  214. }
  215. message('Tab Category Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  216. if(callbacks){ callbacks.fire(); }
  217. }).fail(function(xhr) {
  218. OrganizrApiError(xhr, 'Tab Category Error');
  219. });
  220. });
  221. //DELETE TAB
  222. $(document).on("click", ".bookmarkDeleteTab", function () {
  223. var tab = $(this);
  224. swal({
  225. title: window.lang.translate('Delete ') + tab.parent().parent().attr("data-name") + '?',
  226. icon: "warning",
  227. buttons: {
  228. cancel: window.lang.translate('No'),
  229. confirm: window.lang.translate('Yes'),
  230. },
  231. dangerMode: true,
  232. confirmButtonColor: "#DD6B55"
  233. }).then(function(willDelete) {
  234. if (willDelete) {
  235. var id = tab.parent().parent().attr("data-id");
  236. var callbacks = $.Callbacks();
  237. callbacks.add( buildBookmarkTabEditor );
  238. organizrAPI2('DELETE','api/v2/plugins/bookmark/tabs/' + id, null,true).success(function(data) {
  239. message('Tab Deleted','',activeInfo.settings.notifications.position,"#FFF","success","5000");
  240. if(callbacks){ callbacks.fire(); }
  241. }).fail(function(xhr) {
  242. OrganizrApiError(xhr, 'Tab Deleted Error');
  243. });
  244. }
  245. });
  246. });
  247. //EDIT TAB
  248. $(document).on("click", ".editBookmarkTab", function () {
  249. var originalTabName = $('#originalBookmarkTabName').html();
  250. var tabInfo = $('#edit-bookmark-tab-form').serializeToJSON();
  251. if (typeof tabInfo.id == 'undefined' || tabInfo.id == '') {
  252. message('Edit Tab Error',' Could not get Tab ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
  253. return false;
  254. }
  255. if (typeof tabInfo.name == 'undefined' || tabInfo.name == '') {
  256. message('Edit Tab Error',' Please set a Tab Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  257. return false;
  258. }
  259. if (typeof tabInfo.image == 'undefined' || tabInfo.image == '') {
  260. message('Edit Tab Error',' Please set a Tab Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  261. return false;
  262. }
  263. if (typeof tabInfo.url == 'undefined' || tabInfo.url == '') {
  264. message('Edit Tab Error',' Please set a Tab URL',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  265. return false;
  266. }
  267. if (typeof tabInfo.background_color == 'undefined' || tabInfo.background_color == '') {
  268. message('Edit Tab Error',' Please set a Background Color',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  269. return false;
  270. }
  271. if (typeof tabInfo.text_color == 'undefined' || tabInfo.text_color == '') {
  272. message('Edit Tab Error',' Please set a Text Color',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  273. return false;
  274. }
  275. if(tabInfo.id !== '' && tabInfo.tabName !== '' && tabInfo.tabImage !== '' && tabInfo.background_color !== '' && tabInfo.text_color !== ''){
  276. var callbacks = $.Callbacks();
  277. callbacks.add( buildBookmarkTabEditor );
  278. organizrAPI2('PUT','api/v2/plugins/bookmark/tabs/' + tabInfo.id,tabInfo,true).success(function(data) {
  279. try {
  280. var response = data.response;
  281. console.log(response);
  282. }catch(e) {
  283. organizrCatchError(e,data);
  284. }
  285. message('Tab Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  286. if(callbacks){ callbacks.fire(); }
  287. clearForm('#edit-bookmark-tab-form');
  288. $.magnificPopup.close();
  289. }).fail(function(xhr) {
  290. OrganizrApiError(xhr, 'Tab Error');
  291. });
  292. }
  293. });
  294. //ADD NEW TAB
  295. $(document).on("click", ".addNewBookmarkTab", function () {
  296. var tabInfo = $('#new-bookmark-tab-form').serializeToJSON();
  297. var order = parseInt($('#bookmarkTabEditorTable').find('tr[data-order]').last().attr('data-order')) + 1;
  298. tabInfo['order'] = isNaN(order) ? 1 : order;
  299. if (typeof tabInfo.name == 'undefined' || tabInfo.name == '') {
  300. message('Edit Tab Error',' Please set a Tab Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  301. return false;
  302. }
  303. if (typeof tabInfo.image == 'undefined' || tabInfo.image == '') {
  304. message('Edit Tab Error',' Please set a Tab Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  305. return false;
  306. }
  307. if ((typeof tabInfo.url == 'undefined' || tabInfo.url == '')) {
  308. message('Edit Tab Error',' Please set a Tab URL',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  309. return false;
  310. }
  311. if (typeof tabInfo.background_color == 'undefined' || tabInfo.background_color == '') {
  312. message('Edit Tab Error',' Please set a Background Color',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  313. return false;
  314. }
  315. if (typeof tabInfo.text_color == 'undefined' || tabInfo.text_color == '') {
  316. message('Edit Tab Error',' Please set a Text Color',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  317. return false;
  318. }
  319. if(tabInfo.order !== '' && tabInfo.name !== '' && tabInfo.url !== '' && tabInfo.image !== '' && tabInfo.background_color !== '' && tabInfo.text_color !== ''){
  320. var callbacks = $.Callbacks();
  321. callbacks.add( buildBookmarkTabEditor );
  322. organizrAPI2('POST','api/v2/plugins/bookmark/tabs',tabInfo,true).success(function(data) {
  323. try {
  324. var response = data.response;
  325. $('.bookmarkTabIconImageList').val(null).trigger('change');
  326. $('.bookmarkTabIconIconList').val(null).trigger('change');
  327. }catch(e) {
  328. organizrCatchError(e,data);
  329. }
  330. message('Tab Created',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  331. if(callbacks){ callbacks.fire(); }
  332. clearForm('#new-bookmark-tab-form');
  333. $.magnificPopup.close();
  334. }).fail(function(xhr) {
  335. OrganizrApiError(xhr, 'Tab Error');
  336. });
  337. }
  338. });
  339. // CHANGE TAB ORDER
  340. function submitBookmarkTabOrder(newTabs){
  341. var data = [];
  342. var process = false;
  343. $.each(newTabs.tab, function(i,v) {
  344. if(v.originalOrder == v.order){
  345. delete newTabs.tab[i];
  346. }else{
  347. let temp = {
  348. "order":v.order,
  349. "id":v.id
  350. }
  351. data.push(temp);
  352. process = true;
  353. }
  354. })
  355. if(!process){
  356. message('Tab Order Warning','Order was not changed - Submission not needed',activeInfo.settings.notifications.position,"#FFF","warning","5000");
  357. $('.saveBookmarkTabOrderButton').addClass('hidden');
  358. return false;
  359. }
  360. var callbacks = $.Callbacks();
  361. callbacks.add( buildBookmarkTabEditor );
  362. organizrAPI2('PUT','api/v2/plugins/bookmark/tabs',data,true).success(function(data) {
  363. try {
  364. var response = data.response;
  365. }catch(e) {
  366. organizrCatchError(e,data);
  367. }
  368. message('Tab Order Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  369. if(callbacks){ callbacks.fire(); }
  370. $('.saveBookmarkTabOrderButton').addClass('hidden');
  371. }).fail(function(xhr) {
  372. OrganizrApiError(xhr, 'Update Error');
  373. });
  374. }
  375. $(document).on('change', "#new-bookmark-tab-form-chooseImage", function (e) {
  376. var newIcon = $('#new-bookmark-tab-form-chooseImage').val();
  377. if(newIcon !== 'Select or type Icon'){
  378. $('#new-bookmark-tab-form-inputImage').val(newIcon).change();
  379. }
  380. });
  381. $(document).on('change', "#edit-bookmark-tab-form-chooseImage", function (e) {
  382. var newIcon = $('#edit-bookmark-tab-form-chooseImage').val();
  383. if(newIcon !== 'Select or type Icon'){
  384. $('#edit-bookmark-tab-form-inputImage').val(newIcon).change();
  385. }
  386. });
  387. $(document).on('change', "#new-bookmark-tab-form-chooseIcon", function (e) {
  388. var newIcon = $('#new-bookmark-tab-form-chooseIcon').val();
  389. if(newIcon !== 'Select or type Icon'){
  390. $('#new-bookmark-tab-form-inputImage').val(newIcon).change();
  391. }
  392. });
  393. $(document).on('change', "#edit-bookmark-tab-form-chooseIcon", function (e) {
  394. var newIcon = $('#edit-bookmark-tab-form-chooseIcon').val();
  395. if(newIcon !== 'Select or type Icon'){
  396. $('#edit-bookmark-tab-form-inputImage').val(newIcon).change();
  397. }
  398. });
  399. // TAB PREVIEWS
  400. function adjustBrightness(hexCode, adjustPercent){
  401. hexCode = hexCode.replace('#','');
  402. if(hexCode.length != 6 && hexCode.length != 3) return;
  403. if(hexCode.length == 3)
  404. hexCode = hexCode[0]+hexCode[0]+hexCode[1]+hexCode[1]+hexCode[2]+hexCode[2];
  405. var result = ['#'];
  406. for (var i = 0; i < 3; ++i) {
  407. var color = parseInt(hexCode[2*i] + hexCode[2*i+1], 16);
  408. var adjustableLimit = adjustPercent < 0 ? color : 255 - color;
  409. var adjustAmount = Math.ceil(adjustableLimit * adjustPercent);
  410. var hex = (color + adjustAmount).toString(16).padStart(2, '0');
  411. result.push(hex);
  412. }
  413. return result.join('');
  414. }
  415. function generatePreview(preview, name, image, colorBg, colorText){
  416. var result = '<div class="BOOKMARK-category-content"> \
  417. <a href="#" target="_SELF"> \
  418. <div class="BOOKMARK-tab" style="border-color: ' + adjustBrightness(colorBg, 0.3) + '; background: linear-gradient(90deg, ' + adjustBrightness(colorBg, -0.3) + ' 0%, ' + colorBg + ' 70%, ' + adjustBrightness(colorBg, 0.1) + ' 100%);"> \
  419. <span class="BOOKMARK-tab-image">' + iconPrefix(image) + '</span> \
  420. <span class="BOOKMARK-tab-title" style="color: ' + colorText + ';">' + name + '</span> \
  421. </div> \
  422. </a> \
  423. </div>';
  424. preview.html(result);
  425. $(".BOOKMARK-tab-image>img, .BOOKMARK-tab-image>i").removeClass("fa-fw");
  426. }
  427. function generatePreviewBookmarkNewTab(){
  428. var preview = $('#new-bookmark-preview');
  429. var name = $('#new-bookmark-tab-form-inputName').val();
  430. var image = $('#new-bookmark-tab-form-inputImage').val();
  431. var colorBg = $('#new-bookmark-tab-form-inputBackgroundColor').val();
  432. var colorText = $('#new-bookmark-tab-form-inputTextColor').val();
  433. generatePreview(preview, name, image, colorBg, colorText);
  434. }
  435. function generatePreviewBookmarkEditTab(){
  436. var preview = $('#edit-bookmark-preview');
  437. var name = $('#edit-bookmark-tab-form-inputName').val();
  438. var image = $('#edit-bookmark-tab-form-inputImage').val();
  439. var colorBg = $('#edit-bookmark-tab-form-inputBackgroundColor').val();
  440. var colorText = $('#edit-bookmark-tab-form-inputTextColor').val();
  441. generatePreview(preview, name, image, colorBg, colorText);
  442. }
  443. $(document).on('input', "#new-bookmark-tab-form-inputName", generatePreviewBookmarkNewTab);
  444. $(document).on('input change', "#new-bookmark-tab-form-inputImage", generatePreviewBookmarkNewTab);
  445. $(document).on('input', "#new-bookmark-tab-form-inputBackgroundColor", generatePreviewBookmarkNewTab);
  446. $(document).on('input', "#new-bookmark-tab-form-inputTextColor", generatePreviewBookmarkNewTab);
  447. $(document).on('input', "#edit-bookmark-tab-form-inputName", generatePreviewBookmarkEditTab);
  448. $(document).on('input change', "#edit-bookmark-tab-form-inputImage", generatePreviewBookmarkEditTab);
  449. $(document).on('input', "#edit-bookmark-tab-form-inputBackgroundColor", generatePreviewBookmarkEditTab);
  450. $(document).on('input', "#edit-bookmark-tab-form-inputTextColor", generatePreviewBookmarkEditTab);
  451. // CATEGORY MANAGEMENT
  452. function bookmarkCategoriesLaunch(){
  453. 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>`;
  454. $('#settings-main-tab-editor .nav-tabs').append(menuList);
  455. }
  456. function buildBookmarkCategoryEditor(){
  457. organizrAPI2('GET','api/v2/plugins/bookmark/tabs').success(function(data) {
  458. try {
  459. var response = data.response;
  460. }catch(e) {
  461. organizrCatchError(e,data);
  462. }
  463. $('#bookmarkCategoryEditorTable').html(buildBookmarkCategoryEditorItem(response.data));
  464. }).fail(function(xhr) {
  465. OrganizrApiError(xhr);
  466. });
  467. }
  468. function buildBookmarkCategoryEditorItem(array){
  469. var categoryList = '';
  470. $.each(array.categories, function(i,v) {
  471. var tabCount = array.tabs.reduce(function (n, category) {
  472. return n + (category.category_id == v.category_id);
  473. }, 0);
  474. var disabledDefault = (v.default == 1) ? 'disabled' : '';
  475. var disabledDelete = (tabCount > 0) ? 'disabled' : '';
  476. var defaultIcon = (v.default == 1) ? 'icon-user-following' : 'icon-user-follow';
  477. var defaultColor = (v.default == 1) ? 'btn-info disabled' : 'btn-warning';
  478. categoryList += `
  479. <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+`">
  480. <input type="hidden" class="form-control order" name="category[`+v.id+`].order" value="`+v.order+`">
  481. <input type="hidden" class="form-control" name="category[`+v.id+`].originalOrder" value="`+v.order+`">
  482. <input type="hidden" class="form-control" name="category[`+v.id+`].name" value="`+v.category+`">
  483. <input type="hidden" class="form-control" name="category[`+v.id+`].id" value="`+v.id+`">
  484. <td>`+v.category+`</td>
  485. <td style="text-align:center">`+tabCount+`</td>
  486. <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>
  487. <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>
  488. <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>
  489. </tr>
  490. `;
  491. });
  492. return categoryList;
  493. }
  494. //ADD NEW CATEGORY
  495. $(document).on("click", ".addNewBookmarkCategory", function () {
  496. var categoryInfo = $('#new-bookmark-category-form').serializeToJSON();
  497. var order = parseInt($('#bookmarkCategoryEditorTable').find('tr[data-order]').last().attr('data-order')) + 1;
  498. categoryInfo['order'] = isNaN(order) ? 1 : order;
  499. if (typeof categoryInfo.category == 'undefined' || categoryInfo.category == '') {
  500. message('Edit Tab Error',' Please set a Category Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  501. return false;
  502. }
  503. if(categoryInfo.category !== ''){
  504. var callbacks = $.Callbacks();
  505. callbacks.add( buildBookmarkCategoryEditor );
  506. organizrAPI2('POST','api/v2/plugins/bookmark/categories',categoryInfo,true).success(function(data) {
  507. try {
  508. var response = data.response;
  509. console.log(response);
  510. }catch(e) {
  511. organizrCatchError(e,data);
  512. }
  513. message('Category Added',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  514. if(callbacks){ callbacks.fire(); }
  515. clearForm('#new-bookmark-category-form');
  516. $.magnificPopup.close();
  517. }).fail(function(xhr) {
  518. OrganizrApiError(xhr, 'Category Error');
  519. });
  520. }
  521. });
  522. //DELETE CATEGORY
  523. $(document).on("click", ".deleteBookmarkCategory", function () {
  524. var category = $(this);
  525. swal({
  526. title: window.lang.translate('Delete ')+category.parent().parent().attr("data-name")+'?',
  527. icon: "warning",
  528. buttons: {
  529. cancel: window.lang.translate('No'),
  530. confirm: window.lang.translate('Yes'),
  531. },
  532. dangerMode: true,
  533. confirmButtonColor: "#DD6B55"
  534. }).then(function(willDelete) {
  535. if (willDelete) {
  536. var id = category.parent().parent().attr("data-id");
  537. var callbacks = $.Callbacks();
  538. callbacks.add( buildBookmarkCategoryEditor );
  539. organizrAPI2('DELETE','api/v2/plugins/bookmark/categories/' + id, null,true).success(function(data) {
  540. message('Category Deleted','',activeInfo.settings.notifications.position,"#FFF","success","5000");
  541. if(callbacks){ callbacks.fire(); }
  542. }).fail(function(xhr) {
  543. OrganizrApiError(xhr, 'Category Deleted Error');
  544. });
  545. }
  546. });
  547. });
  548. //EDIT CATEGORY GET ID
  549. $(document).on("click", ".editBookmarkCategoryButton", function () {
  550. $('#edit-bookmark-category-form [name=category]').val($(this).parent().parent().attr("data-name"));
  551. $('#edit-bookmark-category-form [name=id]').val($(this).parent().parent().attr("data-id"));
  552. });
  553. //EDIT CATEGORY
  554. $(document).on("click", ".editBookmarkCategory", function () {
  555. var categoryInfo = $('#edit-bookmark-category-form').serializeToJSON();
  556. if (typeof categoryInfo.id == 'undefined' || categoryInfo.id == '') {
  557. message('Edit Tab Error',' Could not get Category ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
  558. return false;
  559. }
  560. if (typeof categoryInfo.category == 'undefined' || categoryInfo.category == '') {
  561. message('Edit Tab Error',' Please set a Category Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  562. return false;
  563. }
  564. if(categoryInfo.id !== '' && categoryInfo.category !== ''){
  565. var callbacks = $.Callbacks();
  566. callbacks.add( buildBookmarkCategoryEditor );
  567. organizrAPI2('PUT','api/v2/plugins/bookmark/categories/' + categoryInfo.id,categoryInfo,true).success(function(data) {
  568. try {
  569. var response = data.response;
  570. console.log(response);
  571. }catch(e) {
  572. organizrCatchError(e,data);
  573. }
  574. message('Category Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  575. if(callbacks){ callbacks.fire(); }
  576. clearForm('#edit-bookmark-category-form');
  577. $.magnificPopup.close();
  578. }).fail(function(xhr) {
  579. OrganizrApiError(xhr, 'Category Error');
  580. });
  581. }
  582. });
  583. //CHANGE DEFAULT CATEGORY
  584. $(document).on("click", ".changeDefaultBookmarkCategory", function () {
  585. var id = $(this).parent().parent().attr("data-id");
  586. var callbacks = $.Callbacks();
  587. callbacks.add( buildBookmarkCategoryEditor );
  588. organizrAPI2('PUT','api/v2/plugins/bookmark/categories/' + id, {"default":1},true).success(function(data) {
  589. try {
  590. var response = data.response;
  591. }catch(e) {
  592. organizrCatchError(e,data);
  593. }
  594. message('Default Category Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  595. if(callbacks){ callbacks.fire(); }
  596. }).fail(function(xhr) {
  597. OrganizrApiError(xhr, 'Default Cateogry Error');
  598. });
  599. });
  600. // CHANGE CATEGORY ORDER
  601. function submitBookmarkCategoryOrder(){
  602. var data = [];
  603. var categories = $( "#submit-bookmark-categories-form" ).serializeToJSON();
  604. var callbacks = $.Callbacks();
  605. callbacks.add( buildCategoryEditor );
  606. $.each(categories.category, function(i,v) {
  607. if(v.originalOrder == v.order){
  608. delete categories.category[i];
  609. }else{
  610. let temp = {
  611. "order":v.order,
  612. "id":v.id
  613. }
  614. data.push(temp);
  615. }
  616. })
  617. organizrAPI2('PUT','api/v2/plugins/bookmark/categories',data,true).success(function(data) {
  618. try {
  619. var response = data.response;
  620. }catch(e) {
  621. organizrCatchError(e,data);
  622. }
  623. message('Category Order Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000");
  624. if(callbacks){ callbacks.fire(); }
  625. $('.saveTabOrderButton').addClass('hidden');
  626. }).fail(function(xhr) {
  627. OrganizrApiError(xhr, 'Update Error');
  628. });
  629. }