custom.js 39 KB

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