4
0

custom.js 64 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694
  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. "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. myLazyLoad = new LazyLoad({
  66. elements_selector: ".lazyload"
  67. });
  68. });
  69. function pageLoad(){
  70. "use strict";
  71. //Start Organizr
  72. $(function () {
  73. if($('#preloader:visible').length == 1){
  74. $("#preloader").fadeOut();
  75. }
  76. myLazyLoad.update();
  77. });
  78. /* ===== Collapsible Panels JS ===== */
  79. (function ($, window, document) {
  80. var panelSelector = '[data-perform="panel-collapse"]',
  81. panelRemover = '[data-perform="panel-dismiss"]';
  82. $(panelSelector).each(function () {
  83. var collapseOpts = {
  84. toggle: false
  85. },
  86. parent = $(this).closest('.panel'),
  87. wrapper = parent.find('.panel-wrapper'),
  88. child = $(this).children('i');
  89. if (!wrapper.length) {
  90. wrapper = parent.children('.panel-heading').nextAll().wrapAll('<div/>').parent().addClass('panel-wrapper');
  91. collapseOpts = {};
  92. }
  93. wrapper.collapse(collapseOpts).on('hide.bs.collapse', function () {
  94. child.removeClass('ti-minus').addClass('ti-plus');
  95. }).on('show.bs.collapse', function () {
  96. child.removeClass('ti-plus').addClass('ti-minus');
  97. });
  98. });
  99. /* ===== Collapse Panels ===== */
  100. $(document).on('click', panelSelector, function (e) {
  101. e.preventDefault();
  102. var parent = $(this).closest('.panel'),
  103. wrapper = parent.find('.panel-wrapper');
  104. $(this).children('i').toggleClass('ti-plus').toggleClass('ti-minus');
  105. wrapper.collapse('toggle');
  106. });
  107. /* ===== Remove Panels ===== */
  108. $(document).on('click', panelRemover, function (e) {
  109. e.preventDefault();
  110. var removeParent = $(this).closest('.panel');
  111. function removeElement() {
  112. var col = removeParent.parent();
  113. removeParent.remove();
  114. col.filter(function () {
  115. return ($(this).is('[class*="col-"]') && $(this).children('*').length === 0);
  116. }).remove();
  117. }
  118. removeElement();
  119. });
  120. }(jQuery, window, document));
  121. /* ===== Tooltip Initialization ===== */
  122. $(function () {
  123. $('[data-toggle="tooltip"]').tooltip();
  124. /*$('body').tooltip({
  125. selector: '[data-toggle="tooltip"]'
  126. });*/
  127. });
  128. /* ===== Popover Initialization ===== */
  129. $(function () {
  130. $('[data-toggle="popover"]').popover();
  131. });
  132. $(function () {
  133. // Switchery
  134. var elems = Array.prototype.slice.call(document.querySelectorAll('.js-switch'));
  135. $('.js-switch').each(function() {
  136. if ($(this).attr('data-switchery') !== 'true'){
  137. new Switchery($(this)[0], $(this).data());
  138. }
  139. });
  140. });
  141. /* ===== Collepsible Toggle ===== */
  142. $(".collapseble").on("click", function () {
  143. $(".collapseblebox").fadeToggle(350);
  144. });
  145. /* ===== Resize all elements ===== */
  146. /* ===== Visited ul li ===== */
  147. /*$('.visited li a').on("click", function (e) {
  148. $('.visited li').removeClass('active');
  149. var $parent = $(this).parent();
  150. if (!$parent.hasClass('active')) {
  151. $parent.addClass('active');
  152. }
  153. e.preventDefault();
  154. });*/
  155. /* =================================================================
  156. Update 1.5
  157. this is for close icon when navigation open in mobile view
  158. ================================================================= */
  159. /* magnific stuff */
  160. $('.image-popup-vertical-fit').magnificPopup({
  161. type: 'image',
  162. closeOnContentClick: true,
  163. mainClass: 'mfp-img-mobile',
  164. image: {
  165. verticalFit: true
  166. }
  167. });
  168. $('.image-popup-fit-width').magnificPopup({
  169. type: 'image',
  170. closeOnContentClick: true,
  171. image: {
  172. verticalFit: false
  173. }
  174. });
  175. $('.image-popup-no-margins').magnificPopup({
  176. type: 'image',
  177. closeOnContentClick: true,
  178. closeBtnInside: false,
  179. fixedContentPos: true,
  180. mainClass: 'mfp-no-margins mfp-with-zoom', // class to remove default margin from left and right side
  181. image: {
  182. verticalFit: true
  183. },
  184. zoom: {
  185. enabled: true,
  186. duration: 300 // don't foget to change the duration also in CSS
  187. }
  188. });
  189. $('.popup-gallery').magnificPopup({
  190. delegate: 'a',
  191. type: 'image',
  192. tLoading: 'Loading image #%curr%...',
  193. mainClass: 'mfp-img-mobile',
  194. gallery: {
  195. enabled: true,
  196. navigateByImgClick: true,
  197. preload: [0,1] // Will preload 0 - before current, and 1 after the current image
  198. },
  199. image: {
  200. tError: '<a href="%url%">The image #%curr%</a> could not be loaded.',
  201. titleSrc: function(item) {
  202. return item.el.attr('title') + '<small>by Marsel Van Oosten</small>';
  203. }
  204. }
  205. });
  206. $('.zoom-gallery').magnificPopup({
  207. delegate: 'a',
  208. type: 'image',
  209. closeOnContentClick: false,
  210. closeBtnInside: false,
  211. mainClass: 'mfp-with-zoom mfp-img-mobile',
  212. image: {
  213. verticalFit: true,
  214. titleSrc: function(item) {
  215. return item.el.attr('title') + ' &middot; <a class="image-source-link" href="'+item.el.attr('data-source')+'" target="_blank">image source</a>';
  216. }
  217. },
  218. gallery: {
  219. enabled: true
  220. },
  221. zoom: {
  222. enabled: true,
  223. duration: 300, // don't foget to change the duration also in CSS
  224. opener: function(element) {
  225. return element.find('img');
  226. }
  227. }
  228. });
  229. $('#image-popups').magnificPopup({
  230. delegate: 'a',
  231. type: 'image',
  232. removalDelay: 500, //delay removal by X to allow out-animation
  233. callbacks: {
  234. beforeOpen: function() {
  235. // just a hack that adds mfp-anim class to markup
  236. this.st.image.markup = this.st.image.markup.replace('mfp-figure', 'mfp-figure mfp-with-anim');
  237. this.st.mainClass = this.st.el.attr('data-effect');
  238. }
  239. },
  240. closeOnContentClick: true,
  241. midClick: true // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source.
  242. });
  243. $('.popup-youtube, .popup-vimeo, .popup-gmaps').magnificPopup({
  244. disableOn: 700,
  245. type: 'iframe',
  246. mainClass: 'mfp-fade',
  247. removalDelay: 160,
  248. preloader: false,
  249. fixedContentPos: false
  250. });
  251. $('.popup-with-form').magnificPopup({
  252. type: 'inline',
  253. preloader: true,
  254. removalDelay: 500,
  255. // When elemened is focused, some mobile browsers in some cases zoom in
  256. // It looks not nice, so we disable it:
  257. callbacks: {
  258. beforeOpen: function() {
  259. if($(window).width() < 700) {
  260. this.st.focus = false;
  261. } else {
  262. this.st.focus = '#name';
  263. }
  264. this.st.mainClass = this.st.el.attr('data-effect');
  265. }
  266. }
  267. });
  268. // Inline popups
  269. $('.inline-popups').magnificPopup({
  270. removalDelay: 500, //delay removal by X to allow out-animation
  271. closeOnBgClick: true,
  272. //closeOnContentClick: true,
  273. callbacks: {
  274. beforeOpen: function() {
  275. this.st.mainClass = this.st.el.attr('data-effect');
  276. this.st.focus = '#request-input';
  277. },
  278. close: function() {
  279. if(typeof player !== 'undefined'){
  280. console.log('STOP STOP STOP')
  281. player.destroy();
  282. }
  283. }
  284. },
  285. midClick: true // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source.
  286. });
  287. $('.simple-ajax-popup-align-top').magnificPopup({
  288. type: 'ajax',
  289. alignTop: true,
  290. overflowY: 'scroll' // as we know that popup content is tall we set scroll overflow by default to avoid jump
  291. });
  292. $('.simple-ajax-popup').magnificPopup({
  293. type: 'ajax'
  294. });
  295. }
  296. /* ===== Sidebar ===== */
  297. $('.slimscrollright').slimScroll({
  298. height: '100%',
  299. position: 'right',
  300. size: "5px",
  301. color: '#dcdcdc'
  302. });
  303. $('.slimscrollsidebar').slimScroll({
  304. height: '100%',
  305. position: 'left',
  306. size: "6px",
  307. color: 'rgba(0,0,0,0.5)'
  308. });
  309. if(bowser.mobile !== true){
  310. $('.inbox-center').slimScroll({
  311. height: '100%',
  312. position: 'right',
  313. size: "5px",
  314. color: '#dcdcdc'
  315. });
  316. }
  317. $(".navbar-toggle").on("click", function () {
  318. $(".navbar-toggle i").toggleClass("ti-menu").addClass("ti-close");
  319. });
  320. /* ===== Login and Recover Password ===== */
  321. $(document).on("click", "#to-recover", function(e) {
  322. $("#loginform").slideUp();
  323. $("#recoverform").fadeIn();
  324. });
  325. $(document).on("click", ".to-register", function(e) {
  326. $("#loginform").slideUp();
  327. $("#registerForm").removeClass('hidden');
  328. $("#registerform").fadeIn();
  329. });
  330. $(document).on("click", "#leave-recover", function(e) {
  331. $("#loginform").slideDown();
  332. $("#recoverform").fadeOut();
  333. });
  334. $(document).on("click", "#leave-registration", function(e) {
  335. $("#registerform").fadeOut();
  336. $("#registerForm").addClass('hidden');
  337. $("#loginform").slideDown();
  338. });
  339. $(document).on("click", ".updateNow", function(e) {
  340. updateNow();
  341. });
  342. $(document).on("click", ".show-login", function(e) {
  343. buildLogin();
  344. });
  345. $(document).on("click", ".depenency-item", function(e) {
  346. alert($(this).attr('data-name'));
  347. });
  348. $(document).on("click", ".login-button", function(e) {
  349. e.preventDefault;
  350. $('div.login-box').block({
  351. message: '<h5><img width="20" src="plugins/images/busy.gif" /> Just a moment...</h4>',
  352. css: {
  353. color: '#fff',
  354. border: '1px solid #2cabe3',
  355. backgroundColor: '#2cabe3'
  356. }
  357. });
  358. var post = $( '#loginform' ).serializeArray();
  359. organizrAPI('POST','api/?v1/login',post).success(function(data) {
  360. var html = JSON.parse(data);
  361. if(html.data == true){
  362. location.reload();
  363. }else if(html.data == 'mismatch'){
  364. $('div.login-box').unblock({});
  365. $.toast().reset('all');
  366. message('Login Error',' Wrong username/email/password combo','bottom-right','#FFF','warning','10000');
  367. console.error('Organizr Function: Login failed - wrong username/email/password');
  368. }
  369. }).fail(function(xhr) {
  370. console.error("Organizr Function: Login Failed");
  371. });
  372. });
  373. $(document).on("click", ".register-button", function(e) {
  374. e.preventDefault;
  375. var post = $( '#registerForm' ).serializeArray();
  376. organizrAPI('POST','api/?v1/register',post).success(function(data) {
  377. var html = JSON.parse(data);
  378. console.log(html);
  379. if(html.data == true){
  380. location.reload();
  381. }else if(html.data == 'mismatch'){
  382. $.toast().reset('all');
  383. message('Registration Error',' Wrong Registration Password','bottom-right','#FFF','warning','10000');
  384. console.error('Organizr Function: Registration failed - Wrong Registration Password');
  385. }else if(html.data == 'username taken'){
  386. $.toast().reset('all');
  387. message('Registration Error',' Registration Error - Username/Email Taken','bottom-right','#FFF','warning','10000');
  388. console.error('Organizr Function: Registration Failed - Username/Email Taken');
  389. }
  390. }).fail(function(xhr) {
  391. console.error("Organizr Function: Login Failed");
  392. });
  393. });
  394. $(document).on("click", ".open-close", function () {
  395. $("body").toggleClass("show-sidebar");
  396. });
  397. //EDIT GROUP GET ID
  398. $(document).on("click", ".editGroupButton", function () {
  399. $('#edit-group-form [name=groupName]').val($(this).parent().parent().attr("data-group"));
  400. $('#edit-group-form [name=id]').val($(this).parent().parent().attr("data-id"));
  401. $('#edit-group-form [name=groupImage]').val($(this).parent().parent().attr("data-image"));
  402. $('#edit-group-form [name=oldGroupName]').val($(this).parent().parent().attr("data-group"));
  403. });
  404. //EDIT GROUP
  405. $(document).on("click", ".editGroup", function () {
  406. //Create POST Array
  407. var post = {
  408. action:'editUserGroup',
  409. api:'api/?v1/settings/user/manage/groups',
  410. id:$('#edit-group-form [name=id]').val(),
  411. groupName:$('#edit-group-form [name=groupName]').val(),
  412. groupImage:$('#edit-group-form [name=groupImage]').val(),
  413. oldGroupName:$('#edit-group-form [name=oldGroupName]').val(),
  414. messageTitle:'',
  415. messageBody:'Edited User Group '+$('#edit-group-form [name=groupName]').val(),
  416. error:'Organizr Function: User Group API Connection Failed'
  417. };
  418. if (typeof post.id == 'undefined' || post.id == '') {
  419. message('New Group Error',' Could not get Group ID','bottom-right','#FFF','error','5000');
  420. }
  421. if (typeof post.groupName == 'undefined' || post.groupName == '') {
  422. message('New Group Error',' Please set a Group Name','bottom-right','#FFF','warning','5000');
  423. }
  424. if (typeof post.groupImage == 'undefined' || post.groupImage == '') {
  425. message('New Group Error',' Please set a Group Image','bottom-right','#FFF','warning','5000');
  426. }
  427. if(post.id !== '' && post.groupName !== '' && post.groupImage !== '' ){
  428. var callbacks = $.Callbacks();
  429. callbacks.add( buildGroupManagement );
  430. settingsAPI(post,callbacks);
  431. clearForm('#edit-group-form');
  432. $.magnificPopup.close();
  433. }
  434. });
  435. //CHANGE DEFAULT GROUP
  436. $(document).on("click", ".changeDefaultGroup", function () {
  437. //Create POST Array
  438. var post = {
  439. action:'changeDefaultGroup',
  440. api:'api/?v1/settings/user/manage/groups',
  441. id:$(this).parent().parent().attr("data-id"),
  442. oldGroupID:$('#manageGroupTable').find('tr[data-default=true]').attr("data-group-id"),
  443. oldGroupName:$('#manageGroupTable').find('tr[data-default=true]').attr("data-group"),
  444. newGroupID:$(this).parent().parent().attr("data-group-id"),
  445. newGroupName:$(this).parent().parent().attr("data-group"),
  446. messageTitle:'',
  447. messageBody:'Changed Default Group to '+$(this).parent().parent().attr("data-group"),
  448. error:'Organizr Function: User Group API Connection Failed'
  449. };
  450. var callbacks = $.Callbacks();
  451. callbacks.add( buildGroupManagement );
  452. settingsAPI(post,callbacks);
  453. });
  454. //DELETE GROUP
  455. $(document).on("click", ".deleteUserGroup", function () {
  456. //Create POST Array
  457. var post = {
  458. action:'deleteUserGroup',
  459. api:'api/?v1/settings/user/manage/groups',
  460. id:$(this).parent().parent().attr("data-id"),
  461. groupID:$(this).parent().parent().attr("data-group-id"),
  462. groupName:$(this).parent().parent().attr("data-group"),
  463. messageTitle:'',
  464. messageBody:'Deleted User Group '+$(this).parent().parent().attr("data-group"),
  465. error:'Organizr Function: User Group API Connection Failed'
  466. };
  467. var callbacks = $.Callbacks();
  468. callbacks.add( buildGroupManagement );
  469. settingsAPI(post,callbacks);
  470. });
  471. //ADD GROUP
  472. $(document).on("click", ".addNewGroup", function () {
  473. //Create POST Array
  474. var post = {
  475. action:'addUserGroup',
  476. api:'api/?v1/settings/user/manage/groups',
  477. newGroupID:parseInt($('#manageGroupTable').find('tr[data-group-id]:nth-last-child(2)').attr('data-group-id')) + 1,
  478. newGroupName:$('#new-group-form [name=groupName]').val(),
  479. newGroupImage:$('#new-group-form [name=groupImage]').val(),
  480. messageTitle:'',
  481. messageBody:'Created User Group '+$('#new-group-form [name=groupName]').val(),
  482. error:'Organizr Function: User Group API Connection Failed'
  483. };
  484. if (typeof post.newGroupID == 'undefined' || post.newGroupID == '') {
  485. message('New Group Error',' Could not get next Group ID','bottom-right','#FFF','error','5000');
  486. }
  487. if (typeof post.newGroupName == 'undefined' || post.newGroupName == '') {
  488. message('New Group Error',' Please set a Group Name','bottom-right','#FFF','warning','5000');
  489. }
  490. if (typeof post.newGroupImage == 'undefined' || post.newGroupImage == '') {
  491. message('New Group Error',' Please set a Group Image','bottom-right','#FFF','warning','5000');
  492. }
  493. if(post.newGroupID !== '' && post.newGroupName !== '' && post.newGroupImage !== '' ){
  494. var callbacks = $.Callbacks();
  495. callbacks.add( buildGroupManagement );
  496. settingsAPI(post,callbacks);
  497. clearForm('#new-group-form');
  498. $.magnificPopup.close();
  499. }
  500. });
  501. // ADD USER
  502. $(document).on("click", ".addNewUser", function () {
  503. //Create POST Array
  504. var post = {
  505. action:'addNewUser',
  506. api:'api/?v1/settings/user/manage/users',
  507. username:$('#new-user-form [name=username]').val(),
  508. email:$('#new-user-form [name=email]').val(),
  509. password:$('#new-user-form [name=password]').val(),
  510. messageTitle:'',
  511. messageBody:'Added New User: '+$('#new-user-form [name=username]').val(),
  512. error:'Organizr Function: User API Connection Failed'
  513. };
  514. if (typeof post.username == 'undefined' || post.username == '') {
  515. message('New User Error',' Please set a Username','bottom-right','#FFF','error','5000');
  516. }
  517. if (typeof post.email == 'undefined' || post.email == '') {
  518. message('New User Error',' Please set an Email','bottom-right','#FFF','warning','5000');
  519. }
  520. if (typeof post.password == 'undefined' || post.password == '') {
  521. message('New User Error',' Please set a Password','bottom-right','#FFF','warning','5000');
  522. }
  523. if(post.username !== '' && post.email !== '' && post.password !== '' ){
  524. var callbacks = $.Callbacks();
  525. callbacks.add( buildUserManagement );
  526. settingsAPI(post,callbacks);
  527. clearForm('#new-user-form');
  528. $.magnificPopup.close();
  529. }
  530. });
  531. //EDIT GROUP GET ID
  532. $(document).on("click", ".editUserButton", function () {
  533. $('#edit-user-form [name=username]').val($(this).parent().parent().attr("data-username"));
  534. $('#edit-user-form [name=id]').val($(this).parent().parent().attr("data-id"));
  535. $('#edit-user-form [name=email]').val($(this).parent().parent().attr("data-email"));
  536. });
  537. //EDIT GROUP
  538. $(document).on("click", ".editUserAdmin", function () {
  539. //Create POST Array
  540. var post = {
  541. action:'editUser',
  542. api:'api/?v1/settings/user/manage/users',
  543. id:$('#edit-user-form [name=id]').val(),
  544. username:$('#edit-user-form [name=username]').val(),
  545. email:$('#edit-user-form [name=email]').val(),
  546. password:$('#edit-user-form [name=password]').val(),
  547. messageTitle:'',
  548. messageBody:'Edited User '+$('#edit-user-form [name=username]').val(),
  549. error:'Organizr Function: API Connection Failed'
  550. };
  551. if (typeof post.id == 'undefined' || post.id == '') {
  552. message('Edit User Error',' Could not get User ID','bottom-right','#FFF','error','5000');
  553. }
  554. if (typeof post.username == 'undefined' || post.username == '') {
  555. message('Edit User Error',' Please set a Username','bottom-right','#FFF','warning','5000');
  556. }
  557. if (typeof post.email == 'undefined' || post.email == '') {
  558. message('Edit User Error',' Please set a User Email','bottom-right','#FFF','warning','5000');
  559. }
  560. if (post.password !== '' && post.password !== $('#edit-user-form [name=password2]').val()){
  561. message('Edit User Error',' Passwords do not match!','bottom-right','#FFF','warning','5000');
  562. }
  563. console.log(post);
  564. if(post.id !== '' && post.username !== '' && post.email !== '' ){
  565. var callbacks = $.Callbacks();
  566. callbacks.add( buildUserManagement );
  567. settingsAPI(post,callbacks);
  568. clearForm('#edit-user-form');
  569. $.magnificPopup.close();
  570. }
  571. });
  572. // CHANGE USER GROUP
  573. $(document).on("change", ".userGroupSelect", function () {
  574. //Create POST Array
  575. var post = {
  576. action:'changeGroup',
  577. api:'api/?v1/settings/user/manage/users',
  578. id:$(this).parent().parent().attr("data-id"),
  579. username:$(this).parent().parent().attr("data-username"),
  580. oldGroup:$(this).parent().parent().attr("data-group"),
  581. newGroupID:$(this).find("option:selected").val(),
  582. newGroupName:$(this).find("option:selected").text(),
  583. messageTitle:'',
  584. messageBody:'User Info updated for '+$(this).parent().parent().attr("data-username"),
  585. error:'Organizr Function: User API Connection Failed'
  586. };
  587. var callbacks = $.Callbacks();
  588. callbacks.add( buildUserManagement );
  589. settingsAPI(post,callbacks);
  590. });
  591. // DELETE USER
  592. //DELETE GROUP
  593. $(document).on("click", ".deleteUser", function () {
  594. var user = $(this);
  595. swal({
  596. title: window.lang.translate('Delete ')+user.parent().parent().attr("data-username")+'?',
  597. type: "warning",
  598. showCancelButton: true,
  599. confirmButtonColor: "#DD6B55",
  600. confirmButtonText: window.lang.translate('Yes'),
  601. cancelButtonText: window.lang.translate('No'),
  602. closeOnConfirm: true,
  603. closeOnCancel: true
  604. }, function(isConfirm){
  605. if (isConfirm) {
  606. //Create POST Array
  607. var post = {
  608. action:'deleteUser',
  609. api:'api/?v1/settings/user/manage/users',
  610. id:user.parent().parent().attr("data-id"),
  611. username:user.parent().parent().attr("data-username"),
  612. messageTitle:'',
  613. messageBody:window.lang.translate('Deleted User')+': '+user.parent().parent().attr("data-username"),
  614. error:'Organizr Function: User API Connection Failed'
  615. };
  616. var callbacks = $.Callbacks();
  617. callbacks.add( buildUserManagement );
  618. settingsAPI(post,callbacks);
  619. }
  620. });
  621. });
  622. // CHANGE TAB GROUP
  623. $(document).on("change", ".tabGroupSelect", function () {
  624. //Create POST Array
  625. var post = {
  626. action:'changeGroup',
  627. api:'api/?v1/settings/tab/editor/tabs',
  628. id:$(this).parent().parent().attr("data-id"),
  629. tab:$(this).parent().parent().attr("data-name"),
  630. oldGroupID:$(this).parent().parent().attr("data-group-id"),
  631. newGroupID:$(this).find("option:selected").val(),
  632. newGroupName:$(this).find("option:selected").text(),
  633. messageTitle:'',
  634. messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
  635. error:'Organizr Function: Tab API Connection Failed'
  636. };
  637. var callbacks = $.Callbacks();
  638. callbacks.add( buildTabEditor );
  639. settingsAPI(post,callbacks);
  640. });
  641. // CHANGE TAB CATEGORY
  642. $(document).on("change", ".tabCategorySelect", function () {
  643. //Create POST Array
  644. var post = {
  645. action:'changeCategory',
  646. api:'api/?v1/settings/tab/editor/tabs',
  647. id:$(this).parent().parent().attr("data-id"),
  648. tab:$(this).parent().parent().attr("data-name"),
  649. newCategoryID:$(this).find("option:selected").val(),
  650. newCategoryName:$(this).find("option:selected").text(),
  651. messageTitle:'',
  652. messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
  653. error:'Organizr Function: Tab API Connection Failed'
  654. };
  655. var callbacks = $.Callbacks();
  656. callbacks.add( buildTabEditor );
  657. settingsAPI(post,callbacks);
  658. });
  659. // CHANGE TAB TYPE
  660. $(document).on("change", ".tabTypeSelect", function () {
  661. //Create POST Array
  662. var post = {
  663. action:'changeType',
  664. api:'api/?v1/settings/tab/editor/tabs',
  665. id:$(this).parent().parent().attr("data-id"),
  666. tab:$(this).parent().parent().attr("data-name"),
  667. newTypeID:$(this).find("option:selected").val(),
  668. newTypeName:$(this).find("option:selected").text(),
  669. messageTitle:'',
  670. messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
  671. error:'Organizr Function: Tab API Connection Failed'
  672. };
  673. var callbacks = $.Callbacks();
  674. callbacks.add( buildTabEditor );
  675. settingsAPI(post,callbacks);
  676. });
  677. // CHANGE ENABLED TAB
  678. $(document).on("change", ".enabledSwitch", function () {
  679. //Create POST Array
  680. var post = {
  681. action:'changeEnabled',
  682. api:'api/?v1/settings/tab/editor/tabs',
  683. id:$(this).parent().parent().attr("data-id"),
  684. tab:$(this).parent().parent().attr("data-name"),
  685. tabEnabled:$(this).prop("checked") ? 1 : 0,
  686. tabEnabledWord:$(this).prop("checked") ? "On" : "Off",
  687. messageTitle:'',
  688. messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
  689. error:'Organizr Function: Tab API Connection Failed'
  690. };
  691. var callbacks = $.Callbacks();
  692. callbacks.add( buildTabEditor );
  693. settingsAPI(post,callbacks);
  694. });
  695. // CHANGE SPLASH TAB
  696. $(document).on("change", ".splashSwitch", function () {
  697. //Create POST Array
  698. var post = {
  699. action:'changeSplash',
  700. api:'api/?v1/settings/tab/editor/tabs',
  701. id:$(this).parent().parent().attr("data-id"),
  702. tab:$(this).parent().parent().attr("data-name"),
  703. tabSplash:$(this).prop("checked") ? 1 : 0,
  704. tabSplashWord:$(this).prop("checked") ? "On" : "Off",
  705. messageTitle:'',
  706. messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
  707. error:'Organizr Function: Tab API Connection Failed'
  708. };
  709. var callbacks = $.Callbacks();
  710. callbacks.add( buildTabEditor );
  711. settingsAPI(post,callbacks);
  712. });
  713. // CHANGE DEFAULT TAB
  714. $(document).on("change", ".defaultSwitch", function () {
  715. //Create POST Array
  716. var post = {
  717. action:'changeDefault',
  718. api:'api/?v1/settings/tab/editor/tabs',
  719. id:$(this).parent().parent().parent().attr("data-id"),
  720. tab:$(this).parent().parent().parent().attr("data-name"),
  721. messageTitle:'',
  722. messageBody:'Changed Default Tab to: '+$(this).parent().parent().parent().attr("data-name"),
  723. error:'Organizr Function: Tab API Connection Failed'
  724. };
  725. var callbacks = $.Callbacks();
  726. callbacks.add( buildTabEditor );
  727. settingsAPI(post,callbacks);
  728. });
  729. //DELETE TAB
  730. $(document).on("click", ".deleteTab", function () {
  731. var user = $(this);
  732. swal({
  733. title: window.lang.translate('Delete ')+user.parent().parent().attr("data-name")+'?',
  734. type: "warning",
  735. showCancelButton: true,
  736. confirmButtonColor: "#DD6B55",
  737. confirmButtonText: window.lang.translate('Yes'),
  738. cancelButtonText: window.lang.translate('No'),
  739. closeOnConfirm: true,
  740. closeOnCancel: true
  741. }, function(isConfirm){
  742. if (isConfirm) {
  743. //Create POST Array
  744. var post = {
  745. action:'deleteTab',
  746. api:'api/?v1/settings/tab/editor/tabs',
  747. id:user.parent().parent().attr("data-id"),
  748. tab:user.parent().parent().attr("data-name"),
  749. messageTitle:'',
  750. messageBody:window.lang.translate('Deleted Tab')+': '+user.parent().parent().attr("data-name"),
  751. error:'Organizr Function: Tab Editor API Connection Failed'
  752. };
  753. var callbacks = $.Callbacks();
  754. callbacks.add( buildTabEditor );
  755. settingsAPI(post,callbacks);
  756. }
  757. });
  758. });
  759. //EDIT TAB GET ID
  760. $(document).on("click", ".editTabButton", function () {
  761. $('#edit-tab-form [name=tabName]').val($(this).parent().parent().attr("data-name"));
  762. $('#edit-tab-form [name=tabURL]').val($(this).parent().parent().attr("data-url"));
  763. $('#edit-tab-form [name=tabImage]').val($(this).parent().parent().attr("data-image"));
  764. $('#edit-tab-form [name=id]').val($(this).parent().parent().attr("data-id"));
  765. if( $(this).parent().parent().attr("data-url").indexOf('/?v') > 0){
  766. $('#edit-tab-form [name=tabURL]').prop('disabled', 'true');
  767. }else{
  768. $('#edit-tab-form [name=tabURL]').prop('disabled', null);
  769. }
  770. });
  771. //EDIT TAB
  772. $(document).on("click", ".editTab", function () {
  773. //Create POST Array
  774. var post = {
  775. action:'editTab',
  776. api:'api/?v1/settings/tab/editor/tabs',
  777. id:$('#edit-tab-form [name=id]').val(),
  778. tabName:$('#edit-tab-form [name=tabName]').val(),
  779. tabImage:$('#edit-tab-form [name=tabImage]').val(),
  780. tabURL:$('#edit-tab-form [name=tabURL]').val(),
  781. messageTitle:'',
  782. messageBody:'Edited Tab '+$('#edit-tab-form [name=tabName]').val(),
  783. error:'Organizr Function: Tab Editor API Connection Failed'
  784. };
  785. if (typeof post.id == 'undefined' || post.id == '') {
  786. message('Edit Tab Error',' Could not get Tab ID','bottom-right','#FFF','error','5000');
  787. }
  788. if (typeof post.tabName == 'undefined' || post.tabName == '') {
  789. message('Edit Tab Error',' Please set a Tab Name','bottom-right','#FFF','warning','5000');
  790. }
  791. if (typeof post.tabImage == 'undefined' || post.tabImage == '') {
  792. message('Edit Tab Error',' Please set a Tab Image','bottom-right','#FFF','warning','5000');
  793. }
  794. if (typeof post.tabURL == 'undefined' || post.tabURL == '') {
  795. message('Edit Tab Error',' Please set a Tab URL','bottom-right','#FFF','warning','5000');
  796. }
  797. if(post.id !== '' && post.tabName !== '' && post.tabImage !== '' && post.tabURL !== '' ){
  798. var callbacks = $.Callbacks();
  799. callbacks.add( buildTabEditor );
  800. settingsAPI(post,callbacks);
  801. clearForm('#edit-tab-form');
  802. $.magnificPopup.close();
  803. }
  804. });
  805. //ADD NEW TAB
  806. $(document).on("click", ".addNewTab", function () {
  807. //Create POST Array
  808. var post = {
  809. action:'addNewTab',
  810. api:'api/?v1/settings/tab/editor/tabs',
  811. tabOrder:parseInt($('#tabEditorTable').find('tr[data-order]').last().attr('data-order')) + 1,
  812. tabName:$('#new-tab-form [name=tabName]').val(),
  813. tabImage:$('#new-tab-form [name=tabImage]').val(),
  814. tabURL:$('#new-tab-form [name=tabURL]').val(),
  815. tabGroupID:1,
  816. tabEnabled:0,
  817. tabDefault:0,
  818. tabType:1,
  819. messageTitle:'',
  820. messageBody:'Created Tab '+$('#new-tab-form [name=tabName]').val(),
  821. error:'Organizr Function: Tab API Connection Failed'
  822. };
  823. if (typeof post.tabOrder == 'undefined' || post.tabOrder == '') {
  824. message('New Tab Error',' Could not get next Group ID','bottom-right','#FFF','error','5000');
  825. }
  826. if (typeof post.tabName == 'undefined' || post.tabName == '') {
  827. message('New Tab Error',' Please set a Tab Name','bottom-right','#FFF','error','5000');
  828. }
  829. if (typeof post.tabURL == 'undefined' || post.tabURL == '') {
  830. message('New Tab Error',' Please set a Tab URL','bottom-right','#FFF','warning','5000');
  831. }
  832. if (typeof post.tabImage == 'undefined' || post.tabImage == '') {
  833. message('New Tab Error',' Please set a Tab Image','bottom-right','#FFF','warning','5000');
  834. }
  835. if(post.tabOrder !== '' && post.tabName !== '' && post.tabURL !== '' && post.tabImage !== '' ){
  836. var callbacks = $.Callbacks();
  837. callbacks.add( buildTabEditor );
  838. settingsAPI(post,callbacks);
  839. clearForm('#new-tab-form');
  840. $.magnificPopup.close();
  841. }
  842. });
  843. //ADD NEW CATEGORY
  844. $(document).on("click", ".addNewCategory", function () {
  845. //Create POST
  846. var nextID = [];
  847. $($('#categoryEditorTable').find('tr[data-category-id]')).each(function () {
  848. nextID.push($(this).attr('data-category-id'));
  849. });
  850. var post = {
  851. action:'addNewCategory',
  852. api:'api/?v1/settings/tab/editor/categories',
  853. categoryOrder:parseInt($('#categoryEditorTable').find('tr[data-order]').last().attr('data-order')) + 1,
  854. categoryName:$('#new-category-form [name=name]').val(),
  855. categoryImage:$('#new-category-form [name=image]').val(),
  856. categoryID:Math.max.apply( null, nextID ) + 1,
  857. categoryDefault:0,
  858. messageTitle:'',
  859. messageBody:'Created Category '+$('#new-category-form [name=name]').val(),
  860. error:'Organizr Function: API Connection Failed'
  861. };
  862. console.log(post);
  863. if (typeof post.categoryID == 'undefined' || post.categoryID == '') {
  864. message('New Category Error',' Could not get next Category ID','bottom-right','#FFF','error','5000');
  865. }
  866. if (typeof post.categoryName == 'undefined' || post.categoryName == '') {
  867. message('New Category Error',' Please set a Category Name','bottom-right','#FFF','error','5000');
  868. }
  869. if (typeof post.categoryOrder == 'undefined' || post.categoryOrder == '') {
  870. message('New Category Error',' Could not get Category Order','bottom-right','#FFF','warning','5000');
  871. }
  872. if (typeof post.categoryImage == 'undefined' || post.categoryImage == '') {
  873. message('New Category Error',' Please set a Category Image','bottom-right','#FFF','warning','5000');
  874. }
  875. if(post.categoryID !== '' && post.categoryName !== '' && post.categoryOrder !== '' && post.categoryImage !== '' ){
  876. var callbacks = $.Callbacks();
  877. callbacks.add( buildCategoryEditor );
  878. settingsAPI(post,callbacks);
  879. clearForm('#new-category-form');
  880. $.magnificPopup.close();
  881. }
  882. });
  883. //DELETE CATEGORY
  884. $(document).on("click", ".deleteCategory", function () {
  885. var category = $(this);
  886. swal({
  887. title: window.lang.translate('Delete ')+category.parent().parent().attr("data-name")+'?',
  888. type: "warning",
  889. showCancelButton: true,
  890. confirmButtonColor: "#DD6B55",
  891. confirmButtonText: window.lang.translate('Yes'),
  892. cancelButtonText: window.lang.translate('No'),
  893. closeOnConfirm: true,
  894. closeOnCancel: true
  895. }, function(isConfirm){
  896. if (isConfirm) {
  897. //Create POST Array
  898. var post = {
  899. action:'deleteCategory',
  900. api:'api/?v1/settings/tab/editor/categories',
  901. id:category.parent().parent().attr("data-id"),
  902. category:category.parent().parent().attr("data-name"),
  903. messageTitle:'',
  904. messageBody:window.lang.translate('Deleted Category')+': '+category.parent().parent().attr("data-name"),
  905. error:'Organizr Function: API Connection Failed'
  906. };
  907. var callbacks = $.Callbacks();
  908. callbacks.add( buildCategoryEditor );
  909. settingsAPI(post,callbacks);
  910. }
  911. });
  912. });
  913. //EDIT CATEGORY GET ID
  914. $(document).on("click", ".editCategoryButton", function () {
  915. $('#edit-category-form [name=name]').val($(this).parent().parent().attr("data-name"));
  916. $('#edit-category-form [name=image]').val($(this).parent().parent().attr("data-image"));
  917. $('#edit-category-form [name=id]').val($(this).parent().parent().attr("data-id"));
  918. });
  919. //EDIT CATEGORY
  920. $(document).on("click", ".editCategory", function () {
  921. //Create POST Array
  922. var post = {
  923. action:'editCategory',
  924. api:'api/?v1/settings/tab/editor/categories',
  925. id:$('#edit-category-form [name=id]').val(),
  926. name:$('#edit-category-form [name=name]').val(),
  927. image:$('#edit-category-form [name=image]').val(),
  928. messageTitle:'',
  929. messageBody:'Edited Category '+$('#edit-category-form [name=name]').val(),
  930. error:'Organizr Function: API Connection Failed'
  931. };
  932. console.log(post)
  933. if (typeof post.id == 'undefined' || post.id == '') {
  934. message('Edit Tab Error',' Could not get Tab ID','bottom-right','#FFF','error','5000');
  935. }
  936. if (typeof post.name == 'undefined' || post.name == '') {
  937. message('Edit Tab Error',' Please set a Tab Name','bottom-right','#FFF','warning','5000');
  938. }
  939. if (typeof post.image == 'undefined' || post.image == '') {
  940. message('Edit Tab Error',' Please set a Tab Image','bottom-right','#FFF','warning','5000');
  941. }
  942. if(post.id !== '' && post.name !== '' && post.image !== ''){
  943. var callbacks = $.Callbacks();
  944. callbacks.add( buildCategoryEditor );
  945. settingsAPI(post,callbacks);
  946. clearForm('#edit-category-form');
  947. $.magnificPopup.close();
  948. }
  949. });
  950. //CHANGE DEFAULT CATEGORY
  951. $(document).on("click", ".changeDefaultCategory", function () {
  952. //Create POST Array
  953. var post = {
  954. action:'changeDefault',
  955. api:'api/?v1/settings/tab/editor/categories',
  956. id:$(this).parent().parent().attr("data-id"),
  957. oldCategoryName:$('#categoryEditorTable').find('tr[data-default=true]').attr("data-name"),
  958. newCategoryName:$(this).parent().parent().attr("data-name"),
  959. messageTitle:'',
  960. messageBody:'Changed Default Category to '+$(this).parent().parent().attr("data-name"),
  961. error:'Organizr Function: API Connection Failed'
  962. };
  963. var callbacks = $.Callbacks();
  964. callbacks.add( buildCategoryEditor );
  965. settingsAPI(post,callbacks);
  966. });
  967. // CHANGE CUSTOMIZE Options and CSS Save
  968. $(document).on("click", ".saveCss", function () {
  969. $('.cssTextarea').val(cssEditor.getValue()).trigger('change');
  970. });
  971. $(document).on("click", ".savecustomHTMLoneTextarea", function () {
  972. $('.customHTMLoneTextarea').val(customHTMLoneEditor.getValue()).trigger('change');
  973. });
  974. $(document).on("click", ".savecustomHTMLtwoTextarea", function () {
  975. $('.customHTMLtwoTextarea').val(customHTMLtwoEditor.getValue()).trigger('change');
  976. });
  977. $(document).on('change asColorPicker::close', '#customize-appearance-form :input', function(e) {
  978. $(this).attr('data-changed', true);
  979. switch ($(this).attr('type')) {
  980. case 'switch':
  981. case 'checkbox':
  982. var value = $(this).prop("checked") ? true : false;
  983. break;
  984. default:
  985. var value = $(this).val();
  986. }
  987. var post = {
  988. action:'editCustomizeAppearance',
  989. api:'api/?v1/settings/customize/appearance',
  990. name:$(this).attr("name"),
  991. value:value,
  992. messageTitle:'',
  993. messageBody:'Updated Value for '+$(this).attr("name"),
  994. error:'Organizr Function: API Connection Failed'
  995. };
  996. $('#customize-appearance-reload').removeClass('hidden');
  997. var callbacks = $.Callbacks();
  998. //callbacks.add( buildCustomizeAppearance );
  999. settingsAPI(post,callbacks);
  1000. if($(this).hasClass('themeChanger')){
  1001. changeTheme(value);
  1002. }
  1003. if($(this).hasClass('styleChanger')){
  1004. changeStyle(value);
  1005. }
  1006. });
  1007. //DELETE IMAGE
  1008. $(document).on("click", ".deleteImage", function () {
  1009. var image = $(this);
  1010. swal({
  1011. title: window.lang.translate('Delete ')+image.attr("data-image-name")+'?',
  1012. type: "warning",
  1013. showCancelButton: true,
  1014. confirmButtonColor: "#DD6B55",
  1015. confirmButtonText: window.lang.translate('Yes'),
  1016. cancelButtonText: window.lang.translate('No'),
  1017. closeOnConfirm: true,
  1018. closeOnCancel: true
  1019. }, function(isConfirm){
  1020. if (isConfirm) {
  1021. //Create POST Array
  1022. var post = {
  1023. action:'deleteImage',
  1024. api:'api/?v1/settings/image/manager/view',
  1025. imageName:image.attr("data-image-name"),
  1026. imagePath:image.attr("data-image-path"),
  1027. messageTitle:'',
  1028. messageBody:window.lang.translate('Deleted Image')+': '+image.attr("data-image-name"),
  1029. error:'Organizr Function: User API Connection Failed'
  1030. };
  1031. var callbacks = $.Callbacks();
  1032. callbacks.add( buildImageManagerView );
  1033. settingsAPI(post,callbacks);
  1034. }
  1035. });
  1036. });
  1037. // RELOAD Page
  1038. $(document).on("click", ".reload", function () {
  1039. location.reload();
  1040. });
  1041. // ENABLE PLUGIN
  1042. $(document).on('click', '.enablePlugin', function() {
  1043. var post = {
  1044. action:'enable',
  1045. api:'api/?v1/settings/plugins/list',
  1046. name:$(this).attr('data-plugin-name'),
  1047. configName:$(this).attr('data-config-name'),
  1048. messageTitle:'',
  1049. messageBody:'Enabling '+$(this).attr('data-plugin-name'),
  1050. error:'Organizr Function: API Connection Failed'
  1051. };
  1052. //$('#customize-appearance-reload').removeClass('hidden');
  1053. var callbacks = $.Callbacks();
  1054. //callbacks.add( buildCustomizeAppearance );
  1055. settingsAPI(post,callbacks);
  1056. ajaxloader(".content-wrap","in");
  1057. setTimeout(function(){ buildPlugins();ajaxloader(); }, 3000);
  1058. });
  1059. // DISABLE PLUGIN
  1060. $(document).on('click', '.disablePlugin', function() {
  1061. var plugin = $(this);
  1062. swal({
  1063. title: window.lang.translate('Disable')+' '+plugin.attr("data-plugin-name")+'?',
  1064. type: "warning",
  1065. showCancelButton: true,
  1066. confirmButtonColor: "#DD6B55",
  1067. confirmButtonText: window.lang.translate('Yes'),
  1068. cancelButtonText: window.lang.translate('No'),
  1069. closeOnConfirm: true,
  1070. closeOnCancel: true
  1071. }, function(isConfirm){
  1072. if (isConfirm) {
  1073. //Create POST Array
  1074. var post = {
  1075. action:'disable',
  1076. api:'api/?v1/settings/plugins/list',
  1077. name:plugin.attr('data-plugin-name'),
  1078. configName:plugin.attr('data-config-name'),
  1079. messageTitle:'',
  1080. messageBody:'Disabling '+plugin.attr('data-plugin-name'),
  1081. error:'Organizr Function: API Connection Failed'
  1082. };
  1083. //$('#customize-appearance-reload').removeClass('hidden');
  1084. var callbacks = $.Callbacks();
  1085. //callbacks.add( buildCustomizeAppearance );
  1086. settingsAPI(post,callbacks);
  1087. ajaxloader(".content-wrap","in");
  1088. setTimeout(function(){ buildPlugins();ajaxloader(); }, 3000);
  1089. }
  1090. });
  1091. });
  1092. // SSO Option change
  1093. $(document).on('change', '#sso-form :input', function(e) {
  1094. var input = $(this);
  1095. switch ($(this).attr('type')) {
  1096. case 'switch':
  1097. case 'checkbox':
  1098. var value = $(this).prop("checked") ? true : false;
  1099. break;
  1100. default:
  1101. var value = $(this).val();
  1102. }
  1103. var post = {
  1104. api:'api/?v1/update/config',
  1105. name:$(this).attr("name"),
  1106. type:$(this).attr("data-type"),
  1107. value:value,
  1108. messageTitle:'',
  1109. messageBody:'Updated Value for '+$(this).parent().parent().find('label').text(),
  1110. error:'Organizr Function: API Connection Failed'
  1111. };
  1112. var callbacks = $.Callbacks();
  1113. //callbacks.add( buildCustomizeAppearance );
  1114. settingsAPI(post,callbacks);
  1115. //disable button then renable
  1116. $('#sso-form :input').prop('disabled', 'true');
  1117. setTimeout(
  1118. function(){
  1119. $('#sso-form :input').prop('disabled', null);
  1120. input.emulateTab();
  1121. },
  1122. 2000
  1123. );
  1124. });
  1125. // MAIN SETTINGS PAGE
  1126. $(document).on('change', '#settings-main-form :input', function(e) {
  1127. var input = $(this);
  1128. switch ($(this).attr('type')) {
  1129. case 'switch':
  1130. case 'checkbox':
  1131. var value = $(this).prop("checked") ? true : false;
  1132. break;
  1133. default:
  1134. var value = $(this).val();
  1135. }
  1136. var post = {
  1137. api:'api/?v1/update/config',
  1138. name:$(this).attr("name"),
  1139. type:$(this).attr("data-type"),
  1140. value:value,
  1141. messageTitle:'',
  1142. messageBody:'Updated Value for '+$(this).parent().parent().find('label').text(),
  1143. error:'Organizr Function: API Connection Failed'
  1144. };
  1145. var callbacks = $.Callbacks();
  1146. //callbacks.add( buildCustomizeAppearance );
  1147. settingsAPI(post,callbacks);
  1148. //disable button then renable
  1149. $('#settings-main-form :input').prop('disabled', 'true');
  1150. setTimeout(
  1151. function(){
  1152. $('#settings-main-form :input').prop('disabled', null);
  1153. input.emulateTab();
  1154. },
  1155. 2000
  1156. );
  1157. });
  1158. // AUTH BACKEND HIDE SHOW
  1159. $(document).on('change', '#authSelect, #authBackendSelect', function(e) {
  1160. changeAuth();
  1161. });
  1162. $(document).on("click", ".getSSOPlexToken", function () {
  1163. $('.ssoPlexTokenMessage').text("Grabbing Token");
  1164. $('.ssoPlexTokenHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
  1165. var plex_username = $('#sso-plex-token-form [name=username]').val().trim();
  1166. var plex_password = $('#sso-plex-token-form [name=password]').val().trim();
  1167. if ((plex_password !== '') && (plex_password !== '')) {
  1168. $.ajax({
  1169. type: 'POST',
  1170. headers: {
  1171. 'X-Plex-Product':'Organizr',
  1172. 'X-Plex-Version':'2.0',
  1173. 'X-Plex-Client-Identifier':'01010101-10101010'
  1174. },
  1175. url: 'https://plex.tv/users/sign_in.json',
  1176. data: {
  1177. 'user[login]': plex_username,
  1178. 'user[password]': plex_password,
  1179. force: true
  1180. },
  1181. cache: false,
  1182. async: true,
  1183. complete: function(xhr, status) {
  1184. var result = $.parseJSON(xhr.responseText);
  1185. if (xhr.status === 201) {
  1186. $('.ssoPlexTokenMessage').text(xhr.statusText);
  1187. $('.ssoPlexTokenHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
  1188. $('#sso-form [name=plexToken]').val(result.user.authToken);
  1189. $('#sso-form [name=plexToken]').change();
  1190. } else {
  1191. $('.ssoPlexTokenMessage').text(xhr.statusText);
  1192. $('.ssoPlexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
  1193. }
  1194. }
  1195. });
  1196. } else {
  1197. $('.ssoPlexTokenMessage').text("Enter Username and Password");
  1198. $('.ssoPlexTokenHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
  1199. }
  1200. });
  1201. $(document).on("click", ".getPlexMachineSSO", function () {
  1202. var plex_token = $('#sso-form [name=plexToken]').val().trim();
  1203. if (plex_token !== '') {
  1204. $('.ssoPlexMachineMessage').text("Grabbing List");
  1205. $('.ssoPlexMachineHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
  1206. $.ajax({
  1207. type: 'GET',
  1208. headers: {
  1209. 'X-Plex-Product':'Organizr',
  1210. 'X-Plex-Version':'2.0',
  1211. 'X-Plex-Client-Identifier':'01010101-10101010',
  1212. 'X-Plex-Token':plex_token,
  1213. },
  1214. url: 'https://plex.tv/pms/servers.xml',
  1215. cache: false,
  1216. async: true,
  1217. complete: function(xhr, status) {
  1218. var result = $.parseXML(xhr.responseText);
  1219. if (xhr.status === 200) {
  1220. $('.ssoPlexMachineMessage').text('Choose Plex Server');
  1221. $('.ssoPlexMachineHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning');
  1222. var machines = '<option lang="en">Choose Plex Machine</option>';
  1223. $('Server', result).each(function(){
  1224. if($(this).attr('owned') == 1){
  1225. var name = $(this).attr('name');
  1226. var machine = $(this).attr('machineIdentifier');
  1227. machines += '<option value="'+machine+'">'+name+'</option>';
  1228. }
  1229. })
  1230. var listing = `<select class="form-control" id="ssoPlexMachineSelector" data-type="select">`+machines+`</select>`;
  1231. $('.ssoPlexMachineListing').html(listing);
  1232. } else {
  1233. $('.ssoPlexTokenMessage').text(xhr.statusText);
  1234. $('.ssoPlexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
  1235. }
  1236. }
  1237. });
  1238. } else {
  1239. $('.ssoPlexMachineMessage').text("Plex Token Needed");
  1240. $('.ssoPlexMachineHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
  1241. }
  1242. });
  1243. $(document).on('change', '#ssoPlexMachineSelector', function(e) {
  1244. $('#sso-form [name=plexID]').val($(this).val());
  1245. $('#sso-form [name=plexID]').change();
  1246. });
  1247. $(document).on("click", ".getauthPlexToken", function () {
  1248. $('.authPlexTokenMessage').text("Grabbing Token");
  1249. $('.authPlexTokenHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
  1250. var plex_username = $('#auth-plex-token-form [name=username]').val().trim();
  1251. var plex_password = $('#auth-plex-token-form [name=password]').val().trim();
  1252. if ((plex_password !== '') && (plex_password !== '')) {
  1253. $.ajax({
  1254. type: 'POST',
  1255. headers: {
  1256. 'X-Plex-Product':'Organizr',
  1257. 'X-Plex-Version':'2.0',
  1258. 'X-Plex-Client-Identifier':'01010101-10101010'
  1259. },
  1260. url: 'https://plex.tv/users/sign_in.json',
  1261. data: {
  1262. 'user[login]': plex_username,
  1263. 'user[password]': plex_password,
  1264. force: true
  1265. },
  1266. cache: false,
  1267. async: true,
  1268. complete: function(xhr, status) {
  1269. var result = $.parseJSON(xhr.responseText);
  1270. if (xhr.status === 201) {
  1271. $('.authPlexTokenMessage').text(xhr.statusText);
  1272. $('.authPlexTokenHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
  1273. $('#settings-main-form [name=plexToken]').val(result.user.authToken);
  1274. $('#settings-main-form [name=plexToken]').change();
  1275. } else {
  1276. $('.authPlexTokenMessage').text(xhr.statusText);
  1277. $('.authPlexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
  1278. }
  1279. }
  1280. });
  1281. } else {
  1282. $('.authPlexTokenMessage').text("Enter Username and Password");
  1283. $('.authPlexTokenHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
  1284. }
  1285. });
  1286. $(document).on("click", ".getPlexMachineAuth", function () {
  1287. var plex_token = $('#settings-main-form [name=plexToken]').val().trim();
  1288. if (plex_token !== '') {
  1289. $('.authPlexMachineMessage').text("Grabbing List");
  1290. $('.authPlexMachineHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
  1291. $.ajax({
  1292. type: 'GET',
  1293. headers: {
  1294. 'X-Plex-Product':'Organizr',
  1295. 'X-Plex-Version':'2.0',
  1296. 'X-Plex-Client-Identifier':'01010101-10101010',
  1297. 'X-Plex-Token':plex_token,
  1298. },
  1299. url: 'https://plex.tv/pms/servers.xml',
  1300. cache: false,
  1301. async: true,
  1302. complete: function(xhr, status) {
  1303. var result = $.parseXML(xhr.responseText);
  1304. if (xhr.status === 200) {
  1305. $('.authPlexMachineMessage').text('Choose Plex Server');
  1306. $('.authPlexMachineHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning');
  1307. var machines = '<option lang="en">Choose Plex Machine</option>';
  1308. $('Server', result).each(function(){
  1309. if($(this).attr('owned') == 1){
  1310. var name = $(this).attr('name');
  1311. var machine = $(this).attr('machineIdentifier');
  1312. machines += '<option value="'+machine+'">'+name+'</option>';
  1313. }
  1314. })
  1315. var listing = `<select class="form-control" id="authPlexMachineSelector" data-type="select">`+machines+`</select>`;
  1316. $('.authPlexMachineListing').html(listing);
  1317. } else {
  1318. $('.authPlexTokenMessage').text(xhr.statusText);
  1319. $('.authPlexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
  1320. }
  1321. }
  1322. });
  1323. } else {
  1324. $('.authPlexMachineMessage').text("Plex Token Needed");
  1325. $('.authPlexMachineHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
  1326. }
  1327. });
  1328. $(document).on('change', '#authPlexMachineSelector', function(e) {
  1329. $('#settings-main-form [name=plexID]').val($(this).val());
  1330. $('#settings-main-form [name=plexID]').change();
  1331. });
  1332. $(document).on("click", ".closeErrorPage", function () {
  1333. $('.error-page').html('');
  1334. $('.error-page').fadeOut();
  1335. });
  1336. // test Location
  1337. $(document).on("click", ".testPath", function () {
  1338. var path = $("#form-location").val();
  1339. if (typeof path == 'undefined' || path == '') {
  1340. message('Path Error',' Please enter a path for DB','bottom-right','#FFF','warning','10000');
  1341. }else{
  1342. organizrAPI('POST','api/?v1/wizard_path',{path:path}).success(function(data) {
  1343. var html = JSON.parse(data);
  1344. console.log(html)
  1345. if(html.data == true){
  1346. message('Path',' Path is good to go','bottom-right','#FFF','success','10000');
  1347. }else{
  1348. message('Path Error',' Path is not writable','bottom-right','#FFF','warning','10000');
  1349. }
  1350. }).fail(function(xhr) {
  1351. console.error("Organizr Function: Connection Failed");
  1352. });
  1353. }
  1354. });
  1355. // Save Homepage Form
  1356. $(document).on('change', '.homepageForm :input', function(e) {
  1357. var input = $(this);
  1358. switch ($(this).attr('type')) {
  1359. case 'switch':
  1360. case 'checkbox':
  1361. var value = $(this).prop("checked") ? true : false;
  1362. break;
  1363. default:
  1364. var value = $(this).val();
  1365. }
  1366. var post = {
  1367. api:'api/?v1/update/config',
  1368. name:$(this).attr("name"),
  1369. type:$(this).attr("data-type"),
  1370. value:value,
  1371. messageTitle:'',
  1372. messageBody:'Updated Value for '+$(this).parent().parent().find('label').text(),
  1373. error:'Organizr Function: API Connection Failed'
  1374. };
  1375. var callbacks = $.Callbacks();
  1376. //callbacks.add( buildCustomizeAppearance );
  1377. settingsAPI(post,callbacks);
  1378. //disable button then renable
  1379. $('.homepageForm :input').prop('disabled', 'true');
  1380. setTimeout(
  1381. function(){
  1382. $('.homepageForm :input').prop('disabled', null);
  1383. input.emulateTab();
  1384. },
  1385. 2000
  1386. );
  1387. });
  1388. $(document).on({
  1389. mouseenter: function () {
  1390. $(this).find('.progress').toggleClass('progress-lg');
  1391. $(this).find('.progress').find('span').toggleClass('hidden');
  1392. $(this).find('.white-box').toggleClass('nowPlayingHover');
  1393. },
  1394. mouseleave: function () {
  1395. $(this).find('.progress').toggleClass('progress-lg');
  1396. $(this).find('.progress').find('span').toggleClass('hidden');
  1397. $(this).find('.white-box').toggleClass('nowPlayingHover');
  1398. }
  1399. }, '.nowPlayingItem');
  1400. // recent filter
  1401. $(document).on("click", ".recent-filter li>a", function () {
  1402. var filter = $(this).attr('data-filter');
  1403. var type = $(this).attr('server-filter'); //plex or emby
  1404. //console.log(filter);
  1405. if(filter == 'all'){
  1406. $('.'+type+'-recent').find('.recent-item').parent().removeClass('hidden');
  1407. }else{
  1408. $('.'+type+'-recent').find('.recent-item').parent().removeClass('hidden');
  1409. $('.'+type+'-recent').find('.recent-item:not(.'+ filter + ')').parent().addClass('hidden');
  1410. }
  1411. var owl = $('.'+type+'-recent');
  1412. owl.owlCarousel();
  1413. owl.trigger('refresh.owl.carousel');
  1414. owl.trigger('to.owl.carousel',0);
  1415. });
  1416. // request search filter
  1417. $(document).on("click", ".filter-request-result", function () {
  1418. var filter = $(this).attr('data-filter');
  1419. if(filter == 'request-result-all'){
  1420. $('.request-result-item').removeClass('hidden');
  1421. }else{
  1422. $('.request-result-item').addClass('hidden');
  1423. $('.'+filter).removeClass('hidden');
  1424. }
  1425. });
  1426. //playlist filter
  1427. $(document).on("click", ".playlist-filter li>a", function () {
  1428. var filter = $(this).attr('data-filter');
  1429. var title = decodeURI($(this).attr('data-title'));
  1430. var type = $(this).attr('server-filter'); //plex or emby
  1431. $('.'+type+'-playlistTitle').html(title);
  1432. $('.'+type+'-playlist').addClass('hidden');
  1433. $('.'+filter+'-playlist').removeClass('hidden');
  1434. });
  1435. // refresh cache image
  1436. $(document).on("click", ".refreshImage", function(e) {
  1437. message('',' Refreshing Image...','bottom-right','#FFF','success','1000');
  1438. e.preventDefault;
  1439. var orginalElement = $(this).parent().parent().parent().parent().find('.imageSource');
  1440. //console.log(orginalElement)
  1441. var original = $(this).attr('data-image');
  1442. orginalElement.attr('src', original);
  1443. //console.log('replaced image with : '+original);
  1444. setTimeout(function(){
  1445. message('Image Refreshed ',' Clear Cache Please','bottom-right','#FFF','success','3000');
  1446. }, 1000);
  1447. });
  1448. // open tab code
  1449. $(document).on("click", ".openTab", function(e) {
  1450. if($(this).attr("data-open-tab") === "true") {
  1451. var tabName = $(this).attr("data-tab-name");
  1452. var container = $("#container-"+tabName);
  1453. var activeFrame = container.children('iframe');
  1454. if(activeFrame.length === 1){
  1455. $('#menu-'+tabName+' a').trigger("click");
  1456. activeFrame.attr("src", $(this).attr("data-url"));
  1457. }else{
  1458. container.attr("data-url", $(this).attr("data-url"));
  1459. $('#menu-'+tabName+' a').trigger("click");
  1460. }
  1461. }else{
  1462. var source = $(this).attr("data-url");
  1463. window.open(source, '_blank');
  1464. }
  1465. $.magnificPopup.close();
  1466. });
  1467. //request click
  1468. $(document).on("click", ".request-item", function(e) {
  1469. var target = $(this).attr('data-target');
  1470. $('#link-'+target).trigger('click');
  1471. });
  1472. // metadata start
  1473. $(document).on("click", ".metadata-get", function(e) {
  1474. $("#preloader").fadeIn();
  1475. var key = $(this).attr('data-key');
  1476. var uid = $(this).attr('data-uid');
  1477. var source = $(this).attr('data-source');
  1478. switch (source) {
  1479. case 'plex':
  1480. var action = 'getPlexMetadata';
  1481. break;
  1482. case 'emby':
  1483. var action = 'getEmbyMetadata';
  1484. break;
  1485. default:
  1486. }
  1487. ajaxloader(".content-wrap","in");
  1488. organizrAPI('POST','api/?v1/homepage/connect',{action:action, key:key}).success(function(data) {
  1489. var response = JSON.parse(data);
  1490. $('.'+uid+'-metadata-info').html('');
  1491. $('.'+uid+'-metadata-info').html(buildMetadata(response.data, source));
  1492. $('.'+uid).trigger('click');
  1493. $(".metadata-actors").owlCarousel({
  1494. autoplay: true,
  1495. slideSpeed : 300,
  1496. paginationSpeed : 400,
  1497. margin:40,
  1498. nav:false,
  1499. autoplay:true,
  1500. dots:false,
  1501. responsive:{
  1502. 0:{
  1503. items:2
  1504. },
  1505. 500:{
  1506. items:3
  1507. },
  1508. 650:{
  1509. items:4
  1510. },
  1511. 800:{
  1512. items:5
  1513. },
  1514. 950:{
  1515. items:6
  1516. },
  1517. 992:{
  1518. items:4
  1519. },
  1520. 1250:{
  1521. items:5
  1522. },
  1523. 1400:{
  1524. items:6
  1525. },
  1526. 1550:{
  1527. items:7
  1528. },
  1529. 1700:{
  1530. items:8
  1531. },
  1532. 1850:{
  1533. items:9
  1534. }
  1535. }
  1536. });
  1537. }).fail(function(xhr) {
  1538. console.error("Organizr Function: API Connection Failed");
  1539. });
  1540. ajaxloader();
  1541. $("#preloader").fadeOut();
  1542. });
  1543. // sab play/resume
  1544. $(document).on("click", ".downloader", function(e) {
  1545. var action = $(this).attr('data-action');
  1546. var source = $(this).attr('data-source');
  1547. var target = $(this).attr('data-target');
  1548. //console.log(action);
  1549. //console.log(source);
  1550. //console.log(target);
  1551. ajaxloader(".content-wrap","in");
  1552. organizrAPI('POST','api/?v1/downloader',{action:action, source:source, target:target}).success(function(data) {
  1553. var response = JSON.parse(data);
  1554. //console.log(response);
  1555. homepageDownloader(source);
  1556. }).fail(function(xhr) {
  1557. console.error("Organizr Function: API Connection Failed");
  1558. });
  1559. ajaxloader();
  1560. });
  1561. // purge log
  1562. $(document).on("click", ".purgeLog", function () {
  1563. var log = $('.swapLog.active').attr('data-name');
  1564. alert('This action is not set yet - but this would have purged the '+log+' log');
  1565. });
  1566. //Show Passowrd
  1567. $(document).on("click", ".showPassword", function () {
  1568. var toggle = $(this).parent().parent().find('.password-alt');
  1569. if (toggle.attr('type') === "password") {
  1570. toggle.attr('type', 'text');
  1571. } else {
  1572. toggle.attr('type', 'password');
  1573. }
  1574. $(this).find('.passwordToggle').toggleClass('fa-eye').toggleClass('fa-eye-slash');
  1575. });
  1576. // calendar popups
  1577. $(document).on('click', "a[class*=ID-]", function(){
  1578. //$("#preloader").fadeIn();
  1579. var details = $(this).attr('data-details');
  1580. var target = $(this).attr('data-target')+'-metadata-info';
  1581. var json = JSON.parse(details);
  1582. $('.'+target).html(buildCalendarMetadata(json));
  1583. //$("#preloader").fadeOut();
  1584. myLazyLoad.update();
  1585. });
  1586. // request filter
  1587. $(document).on("change", ".filter-request-input", function () {
  1588. $('.request-item').parent().removeClass('hidden');
  1589. var filterArray = [];
  1590. $('.filter-request-input').each(function () {
  1591. var value = $(this).prop('checked');
  1592. var filter = $(this).attr('data-filter');
  1593. if(value == false){
  1594. filterArray.push('.'+filter);
  1595. }
  1596. });
  1597. $('.request-item').each(function () {
  1598. var element = $(this);
  1599. var string = filterArray.join(', ');
  1600. if(element.is(string)){
  1601. element.parent().addClass('hidden');
  1602. }
  1603. });
  1604. var owl = $('.request-items');
  1605. owl.owlCarousel();
  1606. owl.trigger('refresh.owl.carousel');
  1607. owl.trigger('to.owl.carousel',0);
  1608. });
  1609. //search ombi
  1610. var typingTimer;
  1611. //on keyup, start the countdown
  1612. $(document).on('keyup', '#request-input', function () {
  1613. clearTimeout(typingTimer);
  1614. typingTimer = setTimeout(doneTyping, 750);
  1615. });
  1616. //on keydown, clear the countdown
  1617. $(document).on('keydown', '#request-input', function () {
  1618. clearTimeout(typingTimer);
  1619. });
  1620. /* ===== Open-Close Right Sidebar ===== */
  1621. $(document).on("click", ".right-side-toggle", function () {
  1622. $(".right-sidebar").slideDown(50).toggleClass("shw-rside");
  1623. $(".fxhdr").on("click", function () {
  1624. $("body").toggleClass("fix-header"); /* Fix Header JS */
  1625. });
  1626. $(".fxsdr").on("click", function () {
  1627. $("body").toggleClass("fix-sidebar"); /* Fix Sidebar JS */
  1628. });
  1629. /* ===== Service Panel JS ===== */
  1630. var fxhdr = $('.fxhdr');
  1631. if ($("body").hasClass("fix-header")) {
  1632. fxhdr.attr('checked', true);
  1633. } else {
  1634. fxhdr.attr('checked', false);
  1635. }
  1636. });