custom.js 38 KB

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