4
0

settings.js 28 KB

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