custom.js 38 KB

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