custom.js 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975
  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. /* ===== Open-Close Right Sidebar ===== */
  906. $(document).on("click", ".right-side-toggle", function () {
  907. $(".right-sidebar").slideDown(50).toggleClass("shw-rside");
  908. $(".fxhdr").on("click", function () {
  909. $("body").toggleClass("fix-header"); /* Fix Header JS */
  910. });
  911. $(".fxsdr").on("click", function () {
  912. $("body").toggleClass("fix-sidebar"); /* Fix Sidebar JS */
  913. });
  914. /* ===== Service Panel JS ===== */
  915. var fxhdr = $('.fxhdr');
  916. if ($("body").hasClass("fix-header")) {
  917. fxhdr.attr('checked', true);
  918. } else {
  919. fxhdr.attr('checked', false);
  920. }
  921. });