custom.js 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006
  1. /*jslint browser: true*/
  2. /*global $, jQuery, alert*/
  3. var idleTime = 0;
  4. var hasCookie = false;
  5. $(document).ajaxComplete(function () {
  6. pageLoad();
  7. });
  8. $(document).ready(function () {
  9. pageLoad();
  10. /* ===========================================================
  11. Loads the correct sidebar on window load.
  12. collapses the sidebar on window resize.
  13. Sets the min-height of #page-wrapper to window size.
  14. =========================================================== */
  15. "use strict";
  16. var body = $("body");
  17. $(function () {
  18. var set = function () {
  19. var topOffset = 60,
  20. width = (window.innerWidth > 0) ? window.innerWidth : this.screen.width,
  21. height = ((window.innerHeight > 0) ? window.innerHeight : this.screen.height) - 1;
  22. if (width < 768) {
  23. $('div.navbar-collapse').addClass('collapse');
  24. topOffset = 100; /* 2-row-menu */
  25. } else {
  26. $('div.navbar-collapse').removeClass('collapse');
  27. }
  28. /* ===== This is for resizing window ===== */
  29. if (width < 1170) {
  30. body.addClass('content-wrapper');
  31. $(".sidebar-nav, .slimScrollDiv").css("overflow-x", "visible").parent().css("overflow", "visible");
  32. } else {
  33. body.removeClass('content-wrapper');
  34. }
  35. height = height - topOffset;
  36. if (height < 1) {
  37. height = 1;
  38. }
  39. if (height > topOffset) {
  40. $("#page-wrapper").css("min-height", (height) + "px");
  41. }
  42. },
  43. url = window.location,
  44. element = $('ul.nav a').filter(function () {
  45. return this.href === url || url.href.indexOf(this.href) === 0;
  46. }).addClass('activez').parent().parent().addClass('ok').parent();
  47. if (element.is('li')) {
  48. element.addClass('activezo');
  49. }
  50. $(window).ready(set);
  51. $(window).bind("resize", set);
  52. });
  53. body.trigger("resize");
  54. //Increment the idle time counter every minute.
  55. var idleInterval = setInterval(timerIncrement, 60000); // 1 minute
  56. hasCookie = (getCookie('organizrToken')) ? true : false;
  57. //Zero the idle timer on mouse movement.
  58. $(this).mousemove(function (e) {
  59. idleTime = 0;
  60. });
  61. $(this).keypress(function (e) {
  62. idleTime = 0;
  63. });
  64. });
  65. function pageLoad(){
  66. "use strict";
  67. //Start Organizr
  68. $(function () {
  69. $("#preloader").fadeOut();
  70. $('#side-menu').metisMenu();
  71. });
  72. /* ===== Theme Settings ===== */
  73. /* ===== Collapsible Panels JS ===== */
  74. (function ($, window, document) {
  75. var panelSelector = '[data-perform="panel-collapse"]',
  76. panelRemover = '[data-perform="panel-dismiss"]';
  77. $(panelSelector).each(function () {
  78. var collapseOpts = {
  79. toggle: false
  80. },
  81. parent = $(this).closest('.panel'),
  82. wrapper = parent.find('.panel-wrapper'),
  83. child = $(this).children('i');
  84. if (!wrapper.length) {
  85. wrapper = parent.children('.panel-heading').nextAll().wrapAll('<div/>').parent().addClass('panel-wrapper');
  86. collapseOpts = {};
  87. }
  88. wrapper.collapse(collapseOpts).on('hide.bs.collapse', function () {
  89. child.removeClass('ti-minus').addClass('ti-plus');
  90. }).on('show.bs.collapse', function () {
  91. child.removeClass('ti-plus').addClass('ti-minus');
  92. });
  93. });
  94. /* ===== Collapse Panels ===== */
  95. $(document).on('click', panelSelector, function (e) {
  96. e.preventDefault();
  97. var parent = $(this).closest('.panel'),
  98. wrapper = parent.find('.panel-wrapper');
  99. $(this).children('i').toggleClass('ti-plus').toggleClass('ti-minus');
  100. wrapper.collapse('toggle');
  101. });
  102. /* ===== Remove Panels ===== */
  103. $(document).on('click', panelRemover, function (e) {
  104. e.preventDefault();
  105. var removeParent = $(this).closest('.panel');
  106. function removeElement() {
  107. var col = removeParent.parent();
  108. removeParent.remove();
  109. col.filter(function () {
  110. return ($(this).is('[class*="col-"]') && $(this).children('*').length === 0);
  111. }).remove();
  112. }
  113. removeElement();
  114. });
  115. }(jQuery, window, document));
  116. /* ===== Tooltip Initialization ===== */
  117. $(function () {
  118. $('[data-toggle="tooltip"]').tooltip();
  119. /*$('body').tooltip({
  120. selector: '[data-toggle="tooltip"]'
  121. });*/
  122. });
  123. /* ===== Popover Initialization ===== */
  124. $(function () {
  125. $('[data-toggle="popover"]').popover();
  126. });
  127. $(function () {
  128. // Switchery
  129. var elems = Array.prototype.slice.call(document.querySelectorAll('.js-switch'));
  130. $('.js-switch').each(function() {
  131. if ($(this).attr('data-switchery') !== 'true'){
  132. new Switchery($(this)[0], $(this).data());
  133. }
  134. });
  135. });
  136. /* ===== Task Initialization ===== */
  137. $(".list-task li label").on("click", function () {
  138. $(this).toggleClass("task-done");
  139. });
  140. $(".settings_box a").on("click", function () {
  141. $("ul.theme_color").toggleClass("theme_block");
  142. });
  143. /* ===== Collepsible Toggle ===== */
  144. $(".collapseble").on("click", function () {
  145. $(".collapseblebox").fadeToggle(350);
  146. });
  147. /* ===== Sidebar ===== */
  148. $('.slimscrollright').slimScroll({
  149. height: '100%',
  150. position: 'right',
  151. size: "5px",
  152. color: '#dcdcdc'
  153. });
  154. $('.slimscrollsidebar').slimScroll({
  155. height: '100%',
  156. position: 'left',
  157. size: "6px",
  158. color: 'rgba(0,0,0,0.5)'
  159. });
  160. $('.chat-list').slimScroll({
  161. height: '100%',
  162. position: 'right',
  163. size: "0px",
  164. color: '#dcdcdc'
  165. });
  166. /* ===== Resize all elements ===== */
  167. /* ===== Visited ul li ===== */
  168. /*$('.visited li a').on("click", function (e) {
  169. $('.visited li').removeClass('active');
  170. var $parent = $(this).parent();
  171. if (!$parent.hasClass('active')) {
  172. $parent.addClass('active');
  173. }
  174. e.preventDefault();
  175. });*/
  176. /* =================================================================
  177. Update 1.5
  178. this is for close icon when navigation open in mobile view
  179. ================================================================= */
  180. $(".navbar-toggle").on("click", function () {
  181. $(".navbar-toggle i").toggleClass("ti-menu").addClass("ti-close");
  182. });
  183. /* magnific stuff */
  184. $('.image-popup-vertical-fit').magnificPopup({
  185. type: 'image',
  186. closeOnContentClick: true,
  187. mainClass: 'mfp-img-mobile',
  188. image: {
  189. verticalFit: true
  190. }
  191. });
  192. $('.image-popup-fit-width').magnificPopup({
  193. type: 'image',
  194. closeOnContentClick: true,
  195. image: {
  196. verticalFit: false
  197. }
  198. });
  199. $('.image-popup-no-margins').magnificPopup({
  200. type: 'image',
  201. closeOnContentClick: true,
  202. closeBtnInside: false,
  203. fixedContentPos: true,
  204. mainClass: 'mfp-no-margins mfp-with-zoom', // class to remove default margin from left and right side
  205. image: {
  206. verticalFit: true
  207. },
  208. zoom: {
  209. enabled: true,
  210. duration: 300 // don't foget to change the duration also in CSS
  211. }
  212. });
  213. $('.popup-gallery').magnificPopup({
  214. delegate: 'a',
  215. type: 'image',
  216. tLoading: 'Loading image #%curr%...',
  217. mainClass: 'mfp-img-mobile',
  218. gallery: {
  219. enabled: true,
  220. navigateByImgClick: true,
  221. preload: [0,1] // Will preload 0 - before current, and 1 after the current image
  222. },
  223. image: {
  224. tError: '<a href="%url%">The image #%curr%</a> could not be loaded.',
  225. titleSrc: function(item) {
  226. return item.el.attr('title') + '<small>by Marsel Van Oosten</small>';
  227. }
  228. }
  229. });
  230. $('.zoom-gallery').magnificPopup({
  231. delegate: 'a',
  232. type: 'image',
  233. closeOnContentClick: false,
  234. closeBtnInside: false,
  235. mainClass: 'mfp-with-zoom mfp-img-mobile',
  236. image: {
  237. verticalFit: true,
  238. titleSrc: function(item) {
  239. return item.el.attr('title') + ' &middot; <a class="image-source-link" href="'+item.el.attr('data-source')+'" target="_blank">image source</a>';
  240. }
  241. },
  242. gallery: {
  243. enabled: true
  244. },
  245. zoom: {
  246. enabled: true,
  247. duration: 300, // don't foget to change the duration also in CSS
  248. opener: function(element) {
  249. return element.find('img');
  250. }
  251. }
  252. });
  253. $('#image-popups').magnificPopup({
  254. delegate: 'a',
  255. type: 'image',
  256. removalDelay: 500, //delay removal by X to allow out-animation
  257. callbacks: {
  258. beforeOpen: function() {
  259. // just a hack that adds mfp-anim class to markup
  260. this.st.image.markup = this.st.image.markup.replace('mfp-figure', 'mfp-figure mfp-with-anim');
  261. this.st.mainClass = this.st.el.attr('data-effect');
  262. }
  263. },
  264. closeOnContentClick: true,
  265. midClick: true // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source.
  266. });
  267. $('.popup-youtube, .popup-vimeo, .popup-gmaps').magnificPopup({
  268. disableOn: 700,
  269. type: 'iframe',
  270. mainClass: 'mfp-fade',
  271. removalDelay: 160,
  272. preloader: false,
  273. fixedContentPos: false
  274. });
  275. $('.popup-with-form').magnificPopup({
  276. type: 'inline',
  277. preloader: true,
  278. removalDelay: 500,
  279. // When elemened is focused, some mobile browsers in some cases zoom in
  280. // It looks not nice, so we disable it:
  281. callbacks: {
  282. beforeOpen: function() {
  283. if($(window).width() < 700) {
  284. this.st.focus = false;
  285. } else {
  286. this.st.focus = '#name';
  287. }
  288. this.st.mainClass = this.st.el.attr('data-effect');
  289. }
  290. }
  291. });
  292. $('.simple-ajax-popup-align-top').magnificPopup({
  293. type: 'ajax',
  294. alignTop: true,
  295. overflowY: 'scroll' // as we know that popup content is tall we set scroll overflow by default to avoid jump
  296. });
  297. $('.simple-ajax-popup').magnificPopup({
  298. type: 'ajax'
  299. });
  300. }
  301. /* ===== Login and Recover Password ===== */
  302. $(document).on("click", "#to-recover", function(e) {
  303. $("#loginform").slideUp();
  304. $("#recoverform").fadeIn();
  305. });
  306. $(document).on("click", ".to-register", function(e) {
  307. $("#loginform").slideUp();
  308. $("#registerForm").removeClass('hidden');
  309. $("#registerform").fadeIn();
  310. });
  311. $(document).on("click", "#leave-recover", function(e) {
  312. $("#loginform").slideDown();
  313. $("#recoverform").fadeOut();
  314. });
  315. $(document).on("click", "#leave-registration", function(e) {
  316. $("#registerform").fadeOut();
  317. $("#registerForm").addClass('hidden');
  318. $("#loginform").slideDown();
  319. });
  320. $(document).on("click", ".updateNow", function(e) {
  321. updateNow();
  322. });
  323. $(document).on("click", ".show-login", function(e) {
  324. buildLogin();
  325. });
  326. $(document).on("click", ".depenency-item", function(e) {
  327. alert($(this).attr('data-name'));
  328. });
  329. $(document).on("click", ".login-button", function(e) {
  330. e.preventDefault;
  331. $('div.login-box').block({
  332. message: '<h4><img src="plugins/images/busy.gif" /> Just a moment...</h4>',
  333. css: {
  334. border: '1px solid #000'
  335. }
  336. });
  337. var post = $( '#loginform' ).serializeArray();
  338. organizrAPI('POST','api/?v1/login',post).success(function(data) {
  339. var html = JSON.parse(data);
  340. if(html.data == true){
  341. location.reload();
  342. }else if(html.data == 'mismatch'){
  343. $('div.login-box').unblock({});
  344. $.toast().reset('all');
  345. message('Login Error',' Wrong username/email/password combo','bottom-right','#FFF','warning','10000');
  346. console.error('Organizr Function: Login failed - wrong username/email/password');
  347. }
  348. }).fail(function(xhr) {
  349. console.error("Organizr Function: Login Failed");
  350. });
  351. });
  352. $(document).on("click", ".register-button", function(e) {
  353. e.preventDefault;
  354. var post = $( '#registerForm' ).serializeArray();
  355. organizrAPI('POST','api/?v1/register',post).success(function(data) {
  356. var html = JSON.parse(data);
  357. console.log(html);
  358. if(html.data == true){
  359. location.reload();
  360. }else if(html.data == 'mismatch'){
  361. $.toast().reset('all');
  362. message('Registration Error',' Wrong Registration Password','bottom-right','#FFF','warning','10000');
  363. console.error('Organizr Function: Registration failed - Wrong Registration Password');
  364. }else if(html.data == 'username taken'){
  365. $.toast().reset('all');
  366. message('Registration Error',' Registration Error - Username/Email Taken','bottom-right','#FFF','warning','10000');
  367. console.error('Organizr Function: Registration Failed - Username/Email Taken');
  368. }
  369. }).fail(function(xhr) {
  370. console.error("Organizr Function: Login Failed");
  371. });
  372. });
  373. $(document).on("click", ".open-close", function () {
  374. $("body").toggleClass("show-sidebar");
  375. });
  376. //EDIT GROUP GET ID
  377. $(document).on("click", ".editGroupButton", function () {
  378. $('#edit-group-form [name=groupName]').val($(this).parent().parent().attr("data-group"));
  379. $('#edit-group-form [name=id]').val($(this).parent().parent().attr("data-id"));
  380. $('#edit-group-form [name=groupImage]').val($(this).parent().parent().attr("data-image"));
  381. $('#edit-group-form [name=oldGroupName]').val($(this).parent().parent().attr("data-group"));
  382. });
  383. //EDIT GROUP
  384. $(document).on("click", ".editGroup", function () {
  385. //Create POST Array
  386. var post = {
  387. action:'editUserGroup',
  388. api:'api/?v1/settings/user/manage/groups',
  389. id:$('#edit-group-form [name=id]').val(),
  390. groupName:$('#edit-group-form [name=groupName]').val(),
  391. groupImage:$('#edit-group-form [name=groupImage]').val(),
  392. oldGroupName:$('#edit-group-form [name=oldGroupName]').val(),
  393. messageTitle:'',
  394. messageBody:'Edited User Group '+$('#edit-group-form [name=groupName]').val(),
  395. error:'Organizr Function: User Group API Connection Failed'
  396. };
  397. if (typeof post.id == 'undefined' || post.id == '') {
  398. message('New Group Error',' Could not get Group ID','bottom-right','#FFF','error','5000');
  399. }
  400. if (typeof post.groupName == 'undefined' || post.groupName == '') {
  401. message('New Group Error',' Please set a Group Name','bottom-right','#FFF','warning','5000');
  402. }
  403. if (typeof post.groupImage == 'undefined' || post.groupImage == '') {
  404. message('New Group Error',' Please set a Group Image','bottom-right','#FFF','warning','5000');
  405. }
  406. if(post.id !== '' && post.groupName !== '' && post.groupImage !== '' ){
  407. var callbacks = $.Callbacks();
  408. callbacks.add( buildGroupManagement );
  409. settingsAPI(post,callbacks);
  410. clearForm('#edit-group-form');
  411. $.magnificPopup.close();
  412. }
  413. });
  414. //CHANGE DEFAULT GROUP
  415. $(document).on("click", ".changeDefaultGroup", function () {
  416. //Create POST Array
  417. var post = {
  418. action:'changeDefaultGroup',
  419. api:'api/?v1/settings/user/manage/groups',
  420. id:$(this).parent().parent().attr("data-id"),
  421. oldGroupID:$('#manageGroupTable').find('tr[data-default=true]').attr("data-group-id"),
  422. oldGroupName:$('#manageGroupTable').find('tr[data-default=true]').attr("data-group"),
  423. newGroupID:$(this).parent().parent().attr("data-group-id"),
  424. newGroupName:$(this).parent().parent().attr("data-group"),
  425. messageTitle:'',
  426. messageBody:'Changed Default Group to '+$(this).parent().parent().attr("data-group"),
  427. error:'Organizr Function: User Group API Connection Failed'
  428. };
  429. var callbacks = $.Callbacks();
  430. callbacks.add( buildGroupManagement );
  431. settingsAPI(post,callbacks);
  432. });
  433. //DELETE GROUP
  434. $(document).on("click", ".deleteUserGroup", function () {
  435. //Create POST Array
  436. var post = {
  437. action:'deleteUserGroup',
  438. api:'api/?v1/settings/user/manage/groups',
  439. id:$(this).parent().parent().attr("data-id"),
  440. groupID:$(this).parent().parent().attr("data-group-id"),
  441. groupName:$(this).parent().parent().attr("data-group"),
  442. messageTitle:'',
  443. messageBody:'Deleted User Group '+$(this).parent().parent().attr("data-group"),
  444. error:'Organizr Function: User Group API Connection Failed'
  445. };
  446. var callbacks = $.Callbacks();
  447. callbacks.add( buildGroupManagement );
  448. settingsAPI(post,callbacks);
  449. });
  450. //ADD GROUP
  451. $(document).on("click", ".addNewGroup", function () {
  452. //Create POST Array
  453. var post = {
  454. action:'addUserGroup',
  455. api:'api/?v1/settings/user/manage/groups',
  456. newGroupID:parseInt($('#manageGroupTable').find('tr[data-group-id]:nth-last-child(2)').attr('data-group-id')) + 1,
  457. newGroupName:$('#new-group-form [name=groupName]').val(),
  458. newGroupImage:$('#new-group-form [name=groupImage]').val(),
  459. messageTitle:'',
  460. messageBody:'Created User Group '+$('#new-group-form [name=groupName]').val(),
  461. error:'Organizr Function: User Group API Connection Failed'
  462. };
  463. if (typeof post.newGroupID == 'undefined' || post.newGroupID == '') {
  464. message('New Group Error',' Could not get next Group ID','bottom-right','#FFF','error','5000');
  465. }
  466. if (typeof post.newGroupName == 'undefined' || post.newGroupName == '') {
  467. message('New Group Error',' Please set a Group Name','bottom-right','#FFF','warning','5000');
  468. }
  469. if (typeof post.newGroupImage == 'undefined' || post.newGroupImage == '') {
  470. message('New Group Error',' Please set a Group Image','bottom-right','#FFF','warning','5000');
  471. }
  472. if(post.newGroupID !== '' && post.newGroupName !== '' && post.newGroupImage !== '' ){
  473. var callbacks = $.Callbacks();
  474. callbacks.add( buildGroupManagement );
  475. settingsAPI(post,callbacks);
  476. clearForm('#new-group-form');
  477. $.magnificPopup.close();
  478. }
  479. });
  480. // ADD USER
  481. $(document).on("click", ".addNewUser", function () {
  482. //Create POST Array
  483. var post = {
  484. action:'addNewUser',
  485. api:'api/?v1/settings/user/manage/users',
  486. username:$('#new-user-form [name=username]').val(),
  487. email:$('#new-user-form [name=email]').val(),
  488. password:$('#new-user-form [name=password]').val(),
  489. messageTitle:'',
  490. messageBody:'Added New User: '+$('#new-user-form [name=username]').val(),
  491. error:'Organizr Function: User API Connection Failed'
  492. };
  493. if (typeof post.username == 'undefined' || post.username == '') {
  494. message('New User Error',' Please set a Username','bottom-right','#FFF','error','5000');
  495. }
  496. if (typeof post.email == 'undefined' || post.email == '') {
  497. message('New User Error',' Please set an Email','bottom-right','#FFF','warning','5000');
  498. }
  499. if (typeof post.password == 'undefined' || post.password == '') {
  500. message('New User Error',' Please set a Password','bottom-right','#FFF','warning','5000');
  501. }
  502. if(post.username !== '' && post.email !== '' && post.password !== '' ){
  503. var callbacks = $.Callbacks();
  504. callbacks.add( buildUserManagement );
  505. settingsAPI(post,callbacks);
  506. clearForm('#new-user-form');
  507. $.magnificPopup.close();
  508. }
  509. });
  510. // CHANGE USER GROUP
  511. $(document).on("change", ".userGroupSelect", function () {
  512. //Create POST Array
  513. var post = {
  514. action:'changeGroup',
  515. api:'api/?v1/settings/user/manage/users',
  516. id:$(this).parent().parent().attr("data-id"),
  517. username:$(this).parent().parent().attr("data-username"),
  518. oldGroup:$(this).parent().parent().attr("data-group"),
  519. newGroupID:$(this).find("option:selected").val(),
  520. newGroupName:$(this).find("option:selected").text(),
  521. messageTitle:'',
  522. messageBody:'User Info updated for '+$(this).parent().parent().attr("data-username"),
  523. error:'Organizr Function: User API Connection Failed'
  524. };
  525. var callbacks = $.Callbacks();
  526. callbacks.add( buildUserManagement );
  527. settingsAPI(post,callbacks);
  528. });
  529. // DELETE USER
  530. //DELETE GROUP
  531. $(document).on("click", ".deleteUser", function () {
  532. var user = $(this);
  533. swal({
  534. title: window.lang.translate('Delete ')+user.parent().parent().attr("data-username")+'?',
  535. type: "warning",
  536. showCancelButton: true,
  537. confirmButtonColor: "#DD6B55",
  538. confirmButtonText: window.lang.translate('Yes'),
  539. cancelButtonText: window.lang.translate('No'),
  540. closeOnConfirm: true,
  541. closeOnCancel: true
  542. }, function(isConfirm){
  543. if (isConfirm) {
  544. //Create POST Array
  545. var post = {
  546. action:'deleteUser',
  547. api:'api/?v1/settings/user/manage/users',
  548. id:user.parent().parent().attr("data-id"),
  549. username:user.parent().parent().attr("data-username"),
  550. messageTitle:'',
  551. messageBody:window.lang.translate('Deleted User')+': '+user.parent().parent().attr("data-username"),
  552. error:'Organizr Function: User API Connection Failed'
  553. };
  554. var callbacks = $.Callbacks();
  555. callbacks.add( buildUserManagement );
  556. settingsAPI(post,callbacks);
  557. }
  558. });
  559. });
  560. // CHANGE TAB GROUP
  561. $(document).on("change", ".tabGroupSelect", function () {
  562. //Create POST Array
  563. var post = {
  564. action:'changeGroup',
  565. api:'api/?v1/settings/tab/editor/tabs',
  566. id:$(this).parent().parent().attr("data-id"),
  567. tab:$(this).parent().parent().attr("data-name"),
  568. oldGroupID:$(this).parent().parent().attr("data-group-id"),
  569. newGroupID:$(this).find("option:selected").val(),
  570. newGroupName:$(this).find("option:selected").text(),
  571. messageTitle:'',
  572. messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
  573. error:'Organizr Function: Tab API Connection Failed'
  574. };
  575. var callbacks = $.Callbacks();
  576. callbacks.add( buildTabEditor );
  577. settingsAPI(post,callbacks);
  578. });
  579. // CHANGE TAB CATEGORY
  580. $(document).on("change", ".tabCategorySelect", function () {
  581. //Create POST Array
  582. var post = {
  583. action:'changeCategory',
  584. api:'api/?v1/settings/tab/editor/tabs',
  585. id:$(this).parent().parent().attr("data-id"),
  586. tab:$(this).parent().parent().attr("data-name"),
  587. newCategoryID:$(this).find("option:selected").val(),
  588. newCategoryName:$(this).find("option:selected").text(),
  589. messageTitle:'',
  590. messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
  591. error:'Organizr Function: Tab API Connection Failed'
  592. };
  593. var callbacks = $.Callbacks();
  594. callbacks.add( buildTabEditor );
  595. settingsAPI(post,callbacks);
  596. });
  597. // CHANGE TAB TYPE
  598. $(document).on("change", ".tabTypeSelect", function () {
  599. //Create POST Array
  600. var post = {
  601. action:'changeType',
  602. api:'api/?v1/settings/tab/editor/tabs',
  603. id:$(this).parent().parent().attr("data-id"),
  604. tab:$(this).parent().parent().attr("data-name"),
  605. newTypeID:$(this).find("option:selected").val(),
  606. newTypeName:$(this).find("option:selected").text(),
  607. messageTitle:'',
  608. messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
  609. error:'Organizr Function: Tab API Connection Failed'
  610. };
  611. var callbacks = $.Callbacks();
  612. callbacks.add( buildTabEditor );
  613. settingsAPI(post,callbacks);
  614. });
  615. // CHANGE ENABLED TAB
  616. $(document).on("change", ".enabledSwitch", function () {
  617. //Create POST Array
  618. var post = {
  619. action:'changeEnabled',
  620. api:'api/?v1/settings/tab/editor/tabs',
  621. id:$(this).parent().parent().attr("data-id"),
  622. tab:$(this).parent().parent().attr("data-name"),
  623. tabEnabled:$(this).prop("checked") ? 1 : 0,
  624. tabEnabledWord:$(this).prop("checked") ? "On" : "Off",
  625. messageTitle:'',
  626. messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
  627. error:'Organizr Function: Tab API Connection Failed'
  628. };
  629. var callbacks = $.Callbacks();
  630. callbacks.add( buildTabEditor );
  631. settingsAPI(post,callbacks);
  632. });
  633. // CHANGE SPLASH TAB
  634. $(document).on("change", ".splashSwitch", function () {
  635. //Create POST Array
  636. var post = {
  637. action:'changeSplash',
  638. api:'api/?v1/settings/tab/editor/tabs',
  639. id:$(this).parent().parent().attr("data-id"),
  640. tab:$(this).parent().parent().attr("data-name"),
  641. tabSplash:$(this).prop("checked") ? 1 : 0,
  642. tabSplashWord:$(this).prop("checked") ? "On" : "Off",
  643. messageTitle:'',
  644. messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
  645. error:'Organizr Function: Tab API Connection Failed'
  646. };
  647. var callbacks = $.Callbacks();
  648. callbacks.add( buildTabEditor );
  649. settingsAPI(post,callbacks);
  650. });
  651. // CHANGE DEFAULT TAB
  652. $(document).on("change", ".defaultSwitch", function () {
  653. //Create POST Array
  654. var post = {
  655. action:'changeDefault',
  656. api:'api/?v1/settings/tab/editor/tabs',
  657. id:$(this).parent().parent().parent().attr("data-id"),
  658. tab:$(this).parent().parent().parent().attr("data-name"),
  659. messageTitle:'',
  660. messageBody:'Changed Default Tab to: '+$(this).parent().parent().parent().attr("data-name"),
  661. error:'Organizr Function: Tab API Connection Failed'
  662. };
  663. var callbacks = $.Callbacks();
  664. callbacks.add( buildTabEditor );
  665. settingsAPI(post,callbacks);
  666. });
  667. //DELETE TAB
  668. $(document).on("click", ".deleteTab", function () {
  669. var user = $(this);
  670. swal({
  671. title: window.lang.translate('Delete ')+user.parent().parent().attr("data-name")+'?',
  672. type: "warning",
  673. showCancelButton: true,
  674. confirmButtonColor: "#DD6B55",
  675. confirmButtonText: window.lang.translate('Yes'),
  676. cancelButtonText: window.lang.translate('No'),
  677. closeOnConfirm: true,
  678. closeOnCancel: true
  679. }, function(isConfirm){
  680. if (isConfirm) {
  681. //Create POST Array
  682. var post = {
  683. action:'deleteTab',
  684. api:'api/?v1/settings/tab/editor/tabs',
  685. id:user.parent().parent().attr("data-id"),
  686. tab:user.parent().parent().attr("data-name"),
  687. messageTitle:'',
  688. messageBody:window.lang.translate('Deleted Tab')+': '+user.parent().parent().attr("data-name"),
  689. error:'Organizr Function: Tab Editor API Connection Failed'
  690. };
  691. var callbacks = $.Callbacks();
  692. callbacks.add( buildTabEditor );
  693. settingsAPI(post,callbacks);
  694. }
  695. });
  696. });
  697. //EDIT TAB GET ID
  698. $(document).on("click", ".editTabButton", function () {
  699. $('#edit-tab-form [name=tabName]').val($(this).parent().parent().attr("data-name"));
  700. $('#edit-tab-form [name=tabURL]').val($(this).parent().parent().attr("data-url"));
  701. $('#edit-tab-form [name=tabImage]').val($(this).parent().parent().attr("data-image"));
  702. $('#edit-tab-form [name=id]').val($(this).parent().parent().attr("data-id"));
  703. if( $(this).parent().parent().attr("data-url").indexOf('/?v') > 0){
  704. $('#edit-tab-form [name=tabURL]').prop('disabled', 'true');
  705. }else{
  706. $('#edit-tab-form [name=tabURL]').prop('disabled', null);
  707. }
  708. });
  709. //EDIT TAB
  710. $(document).on("click", ".editTab", function () {
  711. //Create POST Array
  712. var post = {
  713. action:'editTab',
  714. api:'api/?v1/settings/tab/editor/tabs',
  715. id:$('#edit-tab-form [name=id]').val(),
  716. tabName:$('#edit-tab-form [name=tabName]').val(),
  717. tabImage:$('#edit-tab-form [name=tabImage]').val(),
  718. tabURL:$('#edit-tab-form [name=tabURL]').val(),
  719. messageTitle:'',
  720. messageBody:'Edited Tab '+$('#edit-tab-form [name=tabName]').val(),
  721. error:'Organizr Function: Tab Editor API Connection Failed'
  722. };
  723. if (typeof post.id == 'undefined' || post.id == '') {
  724. message('Edit Tab Error',' Could not get Tab ID','bottom-right','#FFF','error','5000');
  725. }
  726. if (typeof post.tabName == 'undefined' || post.tabName == '') {
  727. message('Edit Tab Error',' Please set a Tab Name','bottom-right','#FFF','warning','5000');
  728. }
  729. if (typeof post.tabImage == 'undefined' || post.tabImage == '') {
  730. message('Edit Tab Error',' Please set a Tab Image','bottom-right','#FFF','warning','5000');
  731. }
  732. if (typeof post.tabURL == 'undefined' || post.tabURL == '') {
  733. message('Edit Tab Error',' Please set a Tab URL','bottom-right','#FFF','warning','5000');
  734. }
  735. if(post.id !== '' && post.tabName !== '' && post.tabImage !== '' && post.tabURL !== '' ){
  736. var callbacks = $.Callbacks();
  737. callbacks.add( buildTabEditor );
  738. settingsAPI(post,callbacks);
  739. clearForm('#edit-tab-form');
  740. $.magnificPopup.close();
  741. }
  742. });
  743. //ADD NEW TAB
  744. $(document).on("click", ".addNewTab", function () {
  745. //Create POST Array
  746. var post = {
  747. action:'addNewTab',
  748. api:'api/?v1/settings/tab/editor/tabs',
  749. tabOrder:parseInt($('#tabEditorTable').find('tr[data-order]').last().attr('data-order')) + 1,
  750. tabName:$('#new-tab-form [name=tabName]').val(),
  751. tabImage:$('#new-tab-form [name=tabImage]').val(),
  752. tabURL:$('#new-tab-form [name=tabURL]').val(),
  753. tabGroupID:1,
  754. tabEnabled:0,
  755. tabDefault:0,
  756. tabType:1,
  757. messageTitle:'',
  758. messageBody:'Created Tab '+$('#new-tab-form [name=tabName]').val(),
  759. error:'Organizr Function: Tab API Connection Failed'
  760. };
  761. if (typeof post.tabOrder == 'undefined' || post.tabOrder == '') {
  762. message('New Tab Error',' Could not get next Group ID','bottom-right','#FFF','error','5000');
  763. }
  764. if (typeof post.tabName == 'undefined' || post.tabName == '') {
  765. message('New Tab Error',' Please set a Tab Name','bottom-right','#FFF','error','5000');
  766. }
  767. if (typeof post.tabURL == 'undefined' || post.tabURL == '') {
  768. message('New Tab Error',' Please set a Tab URL','bottom-right','#FFF','warning','5000');
  769. }
  770. if (typeof post.tabImage == 'undefined' || post.tabImage == '') {
  771. message('New Tab Error',' Please set a Tab Image','bottom-right','#FFF','warning','5000');
  772. }
  773. if(post.tabOrder !== '' && post.tabName !== '' && post.tabURL !== '' && post.tabImage !== '' ){
  774. var callbacks = $.Callbacks();
  775. callbacks.add( buildTabEditor );
  776. settingsAPI(post,callbacks);
  777. clearForm('#new-tab-form');
  778. $.magnificPopup.close();
  779. }
  780. });
  781. //ADD NEW CATEGORY
  782. $(document).on("click", ".addNewCategory", function () {
  783. //Create POST
  784. var nextID = [];
  785. $($('#categoryEditorTable').find('tr[data-category-id]')).each(function () {
  786. nextID.push($(this).attr('data-category-id'));
  787. });
  788. var post = {
  789. action:'addNewCategory',
  790. api:'api/?v1/settings/tab/editor/categories',
  791. categoryOrder:parseInt($('#categoryEditorTable').find('tr[data-order]').last().attr('data-order')) + 1,
  792. categoryName:$('#new-category-form [name=name]').val(),
  793. categoryImage:$('#new-category-form [name=image]').val(),
  794. categoryID:Math.max.apply( null, nextID ) + 1,
  795. categoryDefault:0,
  796. messageTitle:'',
  797. messageBody:'Created Category '+$('#new-category-form [name=name]').val(),
  798. error:'Organizr Function: API Connection Failed'
  799. };
  800. console.log(post);
  801. if (typeof post.categoryID == 'undefined' || post.categoryID == '') {
  802. message('New Category Error',' Could not get next Category ID','bottom-right','#FFF','error','5000');
  803. }
  804. if (typeof post.categoryName == 'undefined' || post.categoryName == '') {
  805. message('New Category Error',' Please set a Category Name','bottom-right','#FFF','error','5000');
  806. }
  807. if (typeof post.categoryOrder == 'undefined' || post.categoryOrder == '') {
  808. message('New Category Error',' Could not get Category Order','bottom-right','#FFF','warning','5000');
  809. }
  810. if (typeof post.categoryImage == 'undefined' || post.categoryImage == '') {
  811. message('New Category Error',' Please set a Category Image','bottom-right','#FFF','warning','5000');
  812. }
  813. if(post.categoryID !== '' && post.categoryName !== '' && post.categoryOrder !== '' && post.categoryImage !== '' ){
  814. var callbacks = $.Callbacks();
  815. callbacks.add( buildCategoryEditor );
  816. settingsAPI(post,callbacks);
  817. clearForm('#new-category-form');
  818. $.magnificPopup.close();
  819. }
  820. });
  821. //DELETE CATEGORY
  822. $(document).on("click", ".deleteCategory", function () {
  823. var category = $(this);
  824. swal({
  825. title: window.lang.translate('Delete ')+category.parent().parent().attr("data-name")+'?',
  826. type: "warning",
  827. showCancelButton: true,
  828. confirmButtonColor: "#DD6B55",
  829. confirmButtonText: window.lang.translate('Yes'),
  830. cancelButtonText: window.lang.translate('No'),
  831. closeOnConfirm: true,
  832. closeOnCancel: true
  833. }, function(isConfirm){
  834. if (isConfirm) {
  835. //Create POST Array
  836. var post = {
  837. action:'deleteCategory',
  838. api:'api/?v1/settings/tab/editor/categories',
  839. id:category.parent().parent().attr("data-id"),
  840. category:category.parent().parent().attr("data-name"),
  841. messageTitle:'',
  842. messageBody:window.lang.translate('Deleted Category')+': '+category.parent().parent().attr("data-name"),
  843. error:'Organizr Function: API Connection Failed'
  844. };
  845. var callbacks = $.Callbacks();
  846. callbacks.add( buildCategoryEditor );
  847. settingsAPI(post,callbacks);
  848. }
  849. });
  850. });
  851. //EDIT CATEGORY GET ID
  852. $(document).on("click", ".editCategoryButton", function () {
  853. $('#edit-category-form [name=name]').val($(this).parent().parent().attr("data-name"));
  854. $('#edit-category-form [name=image]').val($(this).parent().parent().attr("data-image"));
  855. $('#edit-category-form [name=id]').val($(this).parent().parent().attr("data-id"));
  856. });
  857. //EDIT CATEGORY
  858. $(document).on("click", ".editCategory", function () {
  859. //Create POST Array
  860. var post = {
  861. action:'editCategory',
  862. api:'api/?v1/settings/tab/editor/categories',
  863. id:$('#edit-category-form [name=id]').val(),
  864. name:$('#edit-category-form [name=name]').val(),
  865. image:$('#edit-category-form [name=image]').val(),
  866. messageTitle:'',
  867. messageBody:'Edited Category '+$('#edit-category-form [name=name]').val(),
  868. error:'Organizr Function: API Connection Failed'
  869. };
  870. console.log(post)
  871. if (typeof post.id == 'undefined' || post.id == '') {
  872. message('Edit Tab Error',' Could not get Tab ID','bottom-right','#FFF','error','5000');
  873. }
  874. if (typeof post.name == 'undefined' || post.name == '') {
  875. message('Edit Tab Error',' Please set a Tab Name','bottom-right','#FFF','warning','5000');
  876. }
  877. if (typeof post.image == 'undefined' || post.image == '') {
  878. message('Edit Tab Error',' Please set a Tab Image','bottom-right','#FFF','warning','5000');
  879. }
  880. if(post.id !== '' && post.name !== '' && post.image !== ''){
  881. var callbacks = $.Callbacks();
  882. callbacks.add( buildCategoryEditor );
  883. settingsAPI(post,callbacks);
  884. clearForm('#edit-category-form');
  885. $.magnificPopup.close();
  886. }
  887. });
  888. //CHANGE DEFAULT CATEGORY
  889. $(document).on("click", ".changeDefaultCategory", function () {
  890. //Create POST Array
  891. var post = {
  892. action:'changeDefault',
  893. api:'api/?v1/settings/tab/editor/categories',
  894. id:$(this).parent().parent().attr("data-id"),
  895. oldCategoryName:$('#categoryEditorTable').find('tr[data-default=true]').attr("data-name"),
  896. newCategoryName:$(this).parent().parent().attr("data-name"),
  897. messageTitle:'',
  898. messageBody:'Changed Default Category to '+$(this).parent().parent().attr("data-name"),
  899. error:'Organizr Function: API Connection Failed'
  900. };
  901. var callbacks = $.Callbacks();
  902. callbacks.add( buildCategoryEditor );
  903. settingsAPI(post,callbacks);
  904. });
  905. // CHANGE CUSTOMIZE Options
  906. $(document).on('change', '#customize-appearance-form :input', function(e) {
  907. $(this).attr('data-changed', true);
  908. switch ($(this).attr('type')) {
  909. case 'switch':
  910. case 'checkbox':
  911. var value = $(this).prop("checked") ? true : false;
  912. break;
  913. default:
  914. var value = $(this).val();
  915. }
  916. var post = {
  917. action:'editCustomizeAppearance',
  918. api:'api/?v1/settings/customize/appearance',
  919. name:$(this).attr("name"),
  920. value:value,
  921. messageTitle:'',
  922. messageBody:'Update Value for '+$(this).parent().parent().find('label').text(),
  923. error:'Organizr Function: API Connection Failed'
  924. };
  925. console.log(post);
  926. $('#customize-appearance-reload').removeClass('hidden');
  927. var callbacks = $.Callbacks();
  928. //callbacks.add( buildCustomizeAppearance );
  929. settingsAPI(post,callbacks);
  930. });
  931. // RELOAD Page
  932. $(document).on("click", ".reload", function () {
  933. location.reload();
  934. });
  935. /* ===== Open-Close Right Sidebar ===== */
  936. $(document).on("click", ".right-side-toggle", function () {
  937. $(".right-sidebar").slideDown(50).toggleClass("shw-rside");
  938. $(".fxhdr").on("click", function () {
  939. $("body").toggleClass("fix-header"); /* Fix Header JS */
  940. });
  941. $(".fxsdr").on("click", function () {
  942. $("body").toggleClass("fix-sidebar"); /* Fix Sidebar JS */
  943. });
  944. /* ===== Service Panel JS ===== */
  945. var fxhdr = $('.fxhdr');
  946. if ($("body").hasClass("fix-header")) {
  947. fxhdr.attr('checked', true);
  948. } else {
  949. fxhdr.attr('checked', false);
  950. }
  951. });