/*jslint browser: true*/ /*global $, jQuery, alert*/ var idleTime = 0; var hasCookie = false; var loginAttempts = 0; $(document).ajaxComplete(function () { pageLoad(); }); $(document).ready(function () { pageLoad(); var clipboard = new Clipboard('.clipboard'); var internalClipboard = new Clipboard('#internal-clipboard'); clipboard.on('success', function(e) { message('Clipboard',e.text,activeInfo.settings.notifications.position,'#FFF','info','5000'); e.clearSelection(); }); internalClipboard.on('success', function(e) { message('Clipboard',e.text,activeInfo.settings.notifications.position,'#FFF','info','5000'); e.clearSelection(); }); "use strict"; var body = $("body"); $(window).scroll(function(){ if ($(this).scrollTop() > 100) { $('#scroll').fadeIn(); } else { $('#scroll').fadeOut(); } }); $('#scroll').click(function(){ $("html, body").animate({ scrollTop: 0 }, 600); return false; }); $(function () { //$("#preloader").fadeOut(); var set = function () { var topOffset = 40, width = (window.innerWidth > 0) ? window.innerWidth : this.screen.width, height = ((window.innerHeight > 0) ? window.innerHeight : this.screen.height) - 1; if (width < 768) { $('div.navbar-collapse').addClass('collapse'); topOffset = 100; /* 2-row-menu */ } else { $('div.navbar-collapse').removeClass('collapse'); } /* ===== This is for resizing window ===== */ if (width < 768) { body.addClass('content-wrapper'); $(".sidebar-nav, .slimScrollDiv").css("overflow-x", "visible").parent().css("overflow", "visible"); } else { body.removeClass('content-wrapper'); } height = height - topOffset; if (height < 1) { height = 1; } if (height > topOffset) { $("#page-wrapper").css("min-height", (height) + "px"); //$("#page-wrapper").css("max-height", (height) + "px"); } }, url = window.location, element = $('ul.nav a').filter(function () { return this.href === url || url.href.indexOf(this.href) === 0; }).addClass('activez').parent().parent().addClass('ok').parent(); if (element.is('li')) { element.addClass('activezo'); } $(window).ready(set); $(window).bind("resize", set); }); body.trigger("resize"); //Increment the idle time counter every minute. var idleInterval = setInterval(timerIncrement, 60000); // 1 minute hasCookie = (getCookie('organizrToken')) ? true : false; //Zero the idle timer on mouse movement. $(this).mousemove(function (e) { idleTime = 0; }); $(this).keypress(function (e) { idleTime = 0; }); myLazyLoad = new LazyLoad({ elements_selector: ".lazyload" }); /* ===== Collapsible Panels JS ===== */ (function ($, window, document) { var panelSelector = '[data-perform="panel-collapse"]', panelRemover = '[data-perform="panel-dismiss"]'; $(panelSelector).each(function () { var collapseOpts = { toggle: false }, parent = $(this).closest('.panel'), wrapper = parent.find('.panel-wrapper'), child = $(this).children('i'); if (!wrapper.length) { wrapper = parent.children('.panel-heading').nextAll().wrapAll('
').parent().addClass('panel-wrapper'); collapseOpts = {}; } wrapper.collapse(collapseOpts).on('hide.bs.collapse', function () { child.removeClass('ti-minus').addClass('ti-plus'); }).on('show.bs.collapse', function () { child.removeClass('ti-plus').addClass('ti-minus'); }); }); /* ===== Collapse Panels ===== */ $(document).on('click', panelSelector, function (e) { e.preventDefault(); var parent = $(this).closest('.panel'), wrapper = parent.find('.panel-wrapper'); $(this).children('i').toggleClass('ti-plus').toggleClass('ti-minus'); wrapper.collapse('toggle'); }); /* ===== Remove Panels ===== */ $(document).on('click', panelRemover, function (e) { e.preventDefault(); var removeParent = $(this).closest('.panel'); function removeElement() { var col = removeParent.parent(); removeParent.remove(); col.filter(function () { return ($(this).is('[class*="col-"]') && $(this).children('*').length === 0); }).remove(); } removeElement(); }); }(jQuery, window, document)); }); function pageLoad(){ "use strict"; //Start Organizr $(function () { if($('#preloader:visible').length == 1){ $("#preloader").fadeOut(); } myLazyLoad.update(); }); $('#page-wrapper').overlayScrollbars({ scrollbars : { autoHide: "move"}}); $('.default-scroller').overlayScrollbars({ scrollbars : { autoHide: "scroll"}}); $('.nav-bar-rtl').overlayScrollbars({ scrollbars : { autoHide: "leave"}}); $('.inbox-center').overlayScrollbars({ scrollbars : { autoHide: "leave"}}); $('.mailbox').overlayScrollbars({ scrollbars : { autoHide: "leave"}}); $('.fc-scroller').overlayScrollbars({ scrollbars : { autoHide: "leave"}}); /* ===== Tooltip Initialization ===== */ $(function () { if(bowser.mobile !== true) { $('[data-toggle="tooltip"]').tooltip(); } /*$('body').tooltip({ selector: '[data-toggle="tooltip"]' });*/ }); /* ===== Popover Initialization ===== */ $(function () { $('[data-toggle="popover"]').popover({trigger: "hover",}); }); $(function () { // Switchery var elems = Array.prototype.slice.call(document.querySelectorAll('.js-switch')); $('.js-switch').each(function() { if ($(this).attr('data-switchery') !== 'true'){ new Switchery($(this)[0], $(this).data()); } }); }); /* ===== Collepsible Toggle ===== */ $(".collapseble").on("click", function () { $(".collapseblebox").fadeToggle(350); }); /* ===== Resize all elements ===== */ /* ===== Visited ul li ===== */ /*$('.visited li a').on("click", function (e) { $('.visited li').removeClass('active'); var $parent = $(this).parent(); if (!$parent.hasClass('active')) { $parent.addClass('active'); } e.preventDefault(); });*/ /* ================================================================= Update 1.5 this is for close icon when navigation open in mobile view ================================================================= */ /* magnific stuff */ $('.popup-with-form').magnificPopup({ type: 'inline', preloader: true, removalDelay: 500, showCloseBtn: false, // When elemened is focused, some mobile browsers in some cases zoom in // It looks not nice, so we disable it: callbacks: { beforeOpen: function() { if($(window).width() < 700) { this.st.focus = false; } else { this.st.focus = '#name'; } this.st.mainClass = this.st.el.attr('data-effect'); }, beforeClose: function () { // Callback available since v0.9.0 if($.magnificPopup.instance.currItem.inlineElement.find('.rubberBand').length !== 0){ if(!$.magnificPopup.instance.currItem.inlineElement.find('.rubberBand').hasClass('hidden')){ var magIndex = $.magnificPopup.instance.currItem.index; message('You forgot to save','Would you like to go back?',activeInfo.settings.notifications.position,'#FFF','warning','5000'); } } }, } }); // Inline popups $('.inline-popups').magnificPopup({ removalDelay: 500, //delay removal by X to allow out-animation closeOnBgClick: true, showCloseBtn: false, //closeOnContentClick: true, callbacks: { beforeOpen: function() { this.st.mainClass = this.st.el.attr('data-effect'); this.st.focus = '.inline-focus'; }, close: function() { if(typeof player !== 'undefined'){ console.log('STOP STOP STOP'); player.destroy(); } } }, midClick: true // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source. }); } /* ===== Sidebar ===== */ $('.slimscrollright').slimScroll({ height: '100%', position: 'right', size: "5px", color: '#dcdcdc' }); $('.slimscrollsidebar').slimScroll({ height: '100%', position: 'left', size: "6px", color: 'rgba(0,0,0,0.5)' }); $(".navbar-toggle").on("click", function () { $(".navbar-toggle i").toggleClass("ti-menu").addClass("ti-close"); }); /* ===== Login and Recover Password ===== */ $(document).on("click", "#to-recover", function(e) { $("#loginform").slideUp(); $("#recoverform").fadeIn(); }); $(document).on("click", ".to-register", function(e) { $("#loginform").slideUp(); $("#registerForm").removeClass('hidden'); $("#registerform").fadeIn(); }); $(document).on("click", "#leave-recover", function(e) { $("#loginform").slideDown(); $("#recoverform").fadeOut(); }); $(document).on("click", "#leave-registration", function(e) { $("#registerform").fadeOut(); $("#registerForm").addClass('hidden'); $("#loginform").slideDown(); }); $(document).on("click", ".updateNow", function(e) { updateNow(); }); $(document).on("click", ".show-login", function(e) { buildLogin(); }); $(document).on("click", ".depenency-item", function(e) { alert($(this).attr('data-name')); }); function doneTypingMediaSearch () { var mediaSearchQuery = $('#mediaSearchQuery'); var query = mediaSearchQuery.val(); var server = mediaSearchQuery.attr('data-server'); if(query == '' || query == ' '){ return false; } switch (server) { case 'plex': var action = 'getPlexSearch'; break; case 'emby': var action = 'getEmbySearch'; break; default: } organizrAPI2('GET','api/v2/homepage/'+server+'/search/' + query).success(function(data) { try { let response = data.response; $('.mediaSearch-div').html(buildMediaResults(response.data,server,query)); if(bowser.mobile !== true){ $('.resultBox-inside').slimScroll({ height: '100%', position: 'right', size: "5px", color: '#dcdcdc' }); //$('.resultBox-inside').overlayScrollbars({ scrollbars : { autoHide: "leave"}}); } }catch(e) { organizrCatchError(e,data); } }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }) } $(document).on("click", ".login-button", function(e) { e.preventDefault; var oAuthEntered = $('#oAuth-Input').val(); var usernameEntered = $('#login-username-Input').val(); if(oAuthEntered == '' && usernameEntered == ''){ message('Login Error', ' You need to enter a Username', activeInfo.settings.notifications.position, '#FFF', 'warning', '10000'); $('#login-username-Input').focus(); return false; } loginAttempts = loginAttempts + 1; $('#login-attempts').val(loginAttempts); var check = (local('g','loggingIn')); if(check == null) { local('s','loggingIn', true); $('div.login-box').block({ message: '
Just a moment...
', css: { color: '#fff', border: '1px solid #2cabe3', backgroundColor: '#2cabe3' } }); var post = $('#loginform').serializeToJSON(); organizrAPI2('POST', 'api/v2/login', post).success(function (data) { local('set','message','Welcome|Login Successful|success'); local('r','loggingIn'); location.reload(); }).fail(function (xhr) { $('div.login-box').unblock({}); switch (xhr.status){ case 401: if(xhr.responseJSON.response.message == '2FA Code incorrect'){ $('div.login-box').unblock({}); $('#tfa-div').removeClass('hidden'); $('#loginform [name=tfaCode]').focus(); } break; case 403: $('div.login-box').block({ message: '
Locked Out!
', css: { color: '#fff', border: '1px solid #e91e63', backgroundColor: '#f44336' } }); setTimeout(function(){ local('r','loggingIn'); location.reload() }, 10000); break; case 422: $('div.login-box').unblock({}); $('#tfa-div').removeClass('hidden'); $('#loginform [name=tfaCode]').focus(); break; default: message('Login Error', 'API Connection Failed', activeInfo.settings.notifications.position, '#FFF', 'error', '10000'); console.error("Organizr Function: API Connection Failed"); } message('Login Error', xhr.responseJSON.response.message, activeInfo.settings.notifications.position, '#FFF', 'warning', '10000'); console.error("Organizr Function: " + xhr.responseJSON.response.message); local('r','loggingIn'); }); } }); $(document).on("click", ".unlockButton", function(e) { e.preventDefault; var post = { password:$('#unlockPassword').val() }; if(post == ''){ message('Password cannot be blank', '', activeInfo.settings.notifications.position, '#FFF', 'error', '5000'); return false; } organizrAPI2('POST','api/v2/users/unlock',post).success(function(data) { let html = data.response; location.reload(); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); }); $(document).on("click", ".register-button", function(e) { e.preventDefault; var post = $( '#registerForm' ).serializeToJSON(); console.log(post) organizrAPI2('POST','api/v2/users/register',post).success(function(data) { let html = data.response; location.reload(); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); }); $(document).on("click", ".reset-button", function(e) { e.preventDefault; var email = $('#recover-input').val(); if(email !== ''){ var post = { email:email }; message('Submitting request...','',activeInfo.settings.notifications.position,'#FFF','info','10000'); organizrAPI2('POST','api/v2/users/recover',post).success(function(data) { var html = data.response; message('Recover Password',html.message,activeInfo.settings.notifications.position,'#FFF','success','10000'); $('#leave-recover').trigger('click'); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); }else{ message('Recover Error','Enter Email',activeInfo.settings.notifications.position,'#FFF','warning','10000'); } }); $(document).on("click", ".open-close", function () { $("body").toggleClass("show-sidebar"); }); //EDIT GROUP GET ID $(document).on("click", ".editGroupButton", function () { $('#edit-group-form [name=group]').val($(this).parent().parent().attr("data-group")); $('#edit-group-form [name=id]').val($(this).parent().parent().attr("data-id")); $('#edit-group-form [name=image]').val($(this).parent().parent().attr("data-image")); }); //EDIT GROUP $(document).on("click", ".editGroup", function () { var info = $('#edit-group-form').serializeToJSON(); var callbacks = $.Callbacks(); if (typeof info.id == 'undefined' || info.id == '') { message('Edit Tab Error',' Could not get ID',activeInfo.settings.notifications.position,'#FFF','error','5000'); return false; } if (typeof info.group == 'undefined' || info.group == '') { message('Edit Tab Error',' Please set a Name',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if (typeof info.image == 'undefined' || info.image == '') { message('Edit Tab Error',' Please set an Image',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } callbacks.add( buildGroupManagement ); organizrAPI2('PUT','api/v2/groups/' + info.id,info,true).success(function(data) { try { var response = data.response; $('.groupIconImageList').val(null).trigger('change'); $('.groupIconIconList').val(null).trigger('change'); }catch(e) { organizrCatchError(e,data); } message(response.message,'',activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } clearForm('#edit-group-form'); $.magnificPopup.close(); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); }); //CHANGE DEFAULT GROUP $(document).on("click", ".changeDefaultGroup", function () { var id = $(this).parent().parent().attr("data-id"); var callbacks = $.Callbacks(); callbacks.add( buildGroupManagement ); organizrAPI2('PUT','api/v2/groups/' + id, {"default":1},true).success(function(data) { try { var response = data.response; message(response.message,'',activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }catch(e) { organizrCatchError(e,data); } }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); }); //DELETE GROUP $(document).on("click", ".deleteUserGroup", function () { var el = $(this); swal({ title: window.lang.translate('Delete ')+el.parent().parent().attr("data-group")+'?', icon: "warning", buttons: { cancel: window.lang.translate('No'), confirm: window.lang.translate('Yes'), }, dangerMode: true, confirmButtonColor: "#DD6B55" }).then(function(willDelete) { if (willDelete) { var id = el.parent().parent().attr("data-id"); var callbacks = $.Callbacks(); callbacks.add( buildGroupManagement ); organizrAPI2('DELETE','api/v2/groups/' + id, null,true).success(function(data) { try { message('Group Deleted','',activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }catch(e) { organizrCatchError(e,data); } }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); } }); }); //ADD GROUP $(document).on("click", ".addNewGroup", function () { var info = $('#new-group-form').serializeToJSON(); console.log(info); if (typeof info.group == 'undefined' || info.group == '') { message('New Group Error',' Please set a Group Name',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if (typeof info.image == 'undefined' || info.image == '') { message('New Group Error',' Please set a Group Image',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } var callbacks = $.Callbacks(); callbacks.add( buildGroupManagement ); organizrAPI2('POST','api/v2/groups',info,true).success(function(data) { try { var response = data.response; $('.groupIconImageList').val(null).trigger('change'); $('.groupIconIconList').val(null).trigger('change'); message(response.message,'',activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } clearForm('#new-group-form'); $.magnificPopup.close(); }catch(e) { organizrCatchError(e,data); } }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); }); // ADD USER $(document).on("click", ".addNewUser", function () { var userInfo = $('#new-user-form').serializeToJSON(); $.each(userInfo, function(i,v) { if(v == ''){ delete userInfo[i]; } }) console.log(userInfo) var callbacks = $.Callbacks(); callbacks.add( buildUserManagement ); organizrAPI2('POST','api/v2/users', userInfo,true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('User Created',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } clearForm('#new-user-form'); $('#jsGrid-Users').jsGrid('render'); $.magnificPopup.close(); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); }); //EDIT GROUP GET ID $(document).on("click", ".editUserButton", function () { $('#edit-user-form [name=username]').val($(this).parent().parent().attr("data-username")); $('#edit-user-form [name=id]').val($(this).parent().parent().attr("data-id")); $('#edit-user-form [name=email]').val($(this).parent().parent().attr("data-email")); }); //EDIT GROUP $(document).on("click", ".editUserAdmin", function () { var userInfo = $('#edit-user-form').serializeToJSON(); $.each(userInfo, function(i,v) { if(v == ''){ delete userInfo[i]; } }) if (typeof userInfo.id == 'undefined' || userInfo.id == '') { message('Edit User Error',' Could not get User ID',activeInfo.settings.notifications.position,'#FFF','error','5000'); return false; } if (userInfo.password !== '' && userInfo.password !== userInfo.password2){ message('Edit User Error',' Passwords do not match!',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } var callbacks = $.Callbacks(); callbacks.add( buildUserManagement ); organizrAPI2('PUT','api/v2/users/' + userInfo.id, userInfo,true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('User Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } clearForm('#edit-user-form'); $.magnificPopup.close(); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); }); // CHANGE USER GROUP $(document).on("change", ".userGroupSelect", function () { var id = $(this).parent().parent().attr("data-id"); var groupId = $(this).find("option:selected").val(); var callbacks = $.Callbacks(); callbacks.add( buildUserManagement ); organizrAPI2('PUT','api/v2/users/' + id, {"group_id":groupId},true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('User Group Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); }); // DELETE USER //DELETE GROUP $(document).on("click", ".deleteUser", function () { var user = $(this); swal({ title: window.lang.translate('Delete ')+user.parent().parent().attr("data-username")+'?', icon: "warning", buttons: { cancel: window.lang.translate('No'), confirm: window.lang.translate('Yes'), }, dangerMode: true, confirmButtonColor: "#DD6B55" }).then(function(willDelete) { if (willDelete) { var id = user.parent().parent().attr("data-id"); var callbacks = $.Callbacks(); callbacks.add( buildUserManagement ); organizrAPI2('DELETE','api/v2/users/' + id, null,true).success(function(data) { message('User Deleted','',activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'User Delete Error'); }); } }); }); // CHANGE TAB GROUP MIN $(document).on("change", ".tabGroupSelectMax", function (event) { var id = $(this).parent().parent().attr("data-id"); var groupID = $(this).find("option:selected").val(); var callbacks = $.Callbacks(); organizrAPI2('PUT','api/v2/tabs/' + id, {"group_id_max":groupID},true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('Tab Group Max Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Tab Group Error'); }); }); // CHANGE TAB GROUP MAX $(document).on("change", ".tabGroupSelectMin", function (event) { var id = $(this).parent().parent().attr("data-id"); var groupID = $(this).find("option:selected").val(); var callbacks = $.Callbacks(); organizrAPI2('PUT','api/v2/tabs/' + id, {"group_id":groupID},true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('Tab Group Min Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Tab Group Error'); }); }); // CHANGE TAB CATEGORY $(document).on("change", ".tabCategorySelect", function () { var id = $(this).parent().parent().attr("data-id"); var categoryID = $(this).find("option:selected").val(); var callbacks = $.Callbacks(); organizrAPI2('PUT','api/v2/tabs/' + id, {"category_id":categoryID},true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('Tab Category Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Tab Category Error'); }); }); // CHANGE TAB TYPE $(document).on("change", ".tabTypeSelect", function () { var id = $(this).parent().parent().attr("data-id"); var type = $(this).find("option:selected").val(); var callbacks = $.Callbacks(); organizrAPI2('PUT','api/v2/tabs/' + id, {"type":type},true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('Tab Type Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Tab Type Error'); }); }); // CHANGE ENABLED TAB $(document).on("change", ".enabledSwitch", function () { var id = $(this).parent().parent().attr("data-id"); var enabled = $(this).prop("checked") ? 1 : 0; var callbacks = $.Callbacks(); organizrAPI2('PUT','api/v2/tabs/' + id, {"enabled":enabled},true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('Tab Enable Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Tab Enable Error'); }); }); // CHANGE SPLASH TAB $(document).on("change", ".splashSwitch", function () { var id = $(this).parent().parent().attr("data-id"); var splash = $(this).prop("checked") ? 1 : 0; var callbacks = $.Callbacks(); organizrAPI2('PUT','api/v2/tabs/' + id, {"splash":splash},true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('Tab Splash Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Tab Splash Error'); }); }); // CHANGE SPLASH TAB $(document).on("change", ".pingSwitch", function () { var id = $(this).parent().parent().attr("data-id"); var ping = $(this).prop("checked") ? 1 : 0; var callbacks = $.Callbacks(); organizrAPI2('PUT','api/v2/tabs/' + id, {"ping":ping},true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('Tab Ping Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Tab Ping Error'); }); }); // CHANGE PRELOAD TAB $(document).on("change", ".preloadSwitch", function () { var id = $(this).parent().parent().attr("data-id"); var preload = $(this).prop("checked") ? 1 : 0; var callbacks = $.Callbacks(); organizrAPI2('PUT','api/v2/tabs/' + id, {"preload":preload},true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('Tab Preload Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Tab Preload Error'); }); }); // CHANGE ADD TO ADMIN TAB $(document).on("change", ".addToAdminSwitch", function () { var id = $(this).parent().parent().attr("data-id"); var data = $(this).prop("checked") ? 1 : 0; var callbacks = $.Callbacks(); organizrAPI2('PUT','api/v2/tabs/' + id, {"add_to_admin":data},true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('Tab Add To Admin Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Tab Add To Admin Error'); }); }); // CHANGE DEFAULT TAB $(document).on("change", ".defaultSwitch", function () { var id = $(this).parent().parent().parent().attr("data-id"); var callbacks = $.Callbacks(); organizrAPI2('PUT','api/v2/tabs/' + id, {"default":1},true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('Default Tab Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Default Tab Error'); }); }); //DELETE TAB $(document).on("click", ".deleteTab", function () { var tab = $(this); swal({ title: window.lang.translate('Delete ') + tab.parent().parent().attr("data-name") + '?', icon: "warning", buttons: { cancel: window.lang.translate('No'), confirm: window.lang.translate('Yes'), }, dangerMode: true, confirmButtonColor: "#DD6B55" }).then(function(willDelete) { if (willDelete) { var id = tab.parent().parent().attr("data-id"); var callbacks = $.Callbacks(); callbacks.add( buildTabEditor ); organizrAPI2('DELETE','api/v2/tabs/' + id, null,true).success(function(data) { message('Tab Deleted','',activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Tab Deleted Error'); }); } }); }); function convertMsToMinutes(ms){ if(ms === false || ms === 0 || ms === "0"){ return 0; }else{ return (ms / 1000) / 60; } } function convertMinutesToMs(minutes){ if(minutes === false || minutes === 0 || minutes === "0"){ return 0; }else{ return (minutes * 1000) * 60; } } //EDIT TAB $(document).on("click", ".editTab", function () { var originalTabName = $('#originalTabName').html(); var tabInfo = $('#edit-tab-form').serializeToJSON(); let tabNameLower = tabInfo.name.toLowerCase(); let originalTabNameLower = originalTabName.toLowerCase(); if (typeof tabInfo.id == 'undefined' || tabInfo.id == '') { message('Edit Tab Error',' Could not get Tab ID',activeInfo.settings.notifications.position,'#FFF','error','5000'); return false; } if (typeof tabInfo.name == 'undefined' || tabInfo.name == '') { message('Edit Tab Error',' Please set a Tab Name',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if (typeof tabInfo.image == 'undefined' || tabInfo.image == '') { message('Edit Tab Error',' Please set a Tab Image',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if ((typeof tabInfo.url == 'undefined' || tabInfo.url == '') && (typeof tabInfo.url_local == 'undefined' || tabInfo.url_local == '')) { message('Edit Tab Error',' Please set a Tab URL or Local URL',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if(checkIfTabNameExists(tabInfo.name) && originalTabNameLower !== tabNameLower){ message('Edit Tab Error',' Tab name already used',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if(tabInfo.timeout_ms !== '' || typeof tabInfo.timeout_ms !== 'undefined'){ tabInfo.timeout_ms = convertMinutesToMs(tabInfo.timeout_ms); } if(tabInfo.id !== '' && tabInfo.tabName !== '' && tabInfo.tabImage !== ''){ var callbacks = $.Callbacks(); callbacks.add( buildTabEditor ); organizrAPI2('PUT','api/v2/tabs/' + tabInfo.id,tabInfo,true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('Tab Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } clearForm('#edit-tab-form'); $.magnificPopup.close(); }).fail(function(xhr) { OrganizrApiError(xhr, 'Tab Error'); }); } }); //ADD NEW TAB $(document).on("click", ".addNewTab", function () { var tabInfo = $('#new-tab-form').serializeToJSON(); tabInfo['order'] = parseInt($('#tabEditorTable').find('tr[data-order]').last().attr('data-order')) + 1; if (typeof tabInfo.name == 'undefined' || tabInfo.name == '') { message('Edit Tab Error',' Please set a Tab Name',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if (typeof tabInfo.image == 'undefined' || tabInfo.image == '') { message('Edit Tab Error',' Please set a Tab Image',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if ((typeof tabInfo.url == 'undefined' || tabInfo.url == '') && (typeof tabInfo.url_local == 'undefined' || tabInfo.url_local == '')) { message('Edit Tab Error',' Please set a Tab URL or Local URL',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if(checkIfTabNameExists(tabInfo.name)){ message('Edit Tab Error',' Tab name already used',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if(tabInfo.timeout_ms !== '' || typeof tabInfo.timeout_ms !== 'undefined'){ tabInfo.timeout_ms = convertMinutesToMs(tabInfo.timeout_ms); } if(tabInfo.order !== '' && tabInfo.name !== '' && (tabInfo.url !== '' || tabInfo.url_local !== '') && tabInfo.image !== '' ){ var callbacks = $.Callbacks(); callbacks.add( buildTabEditor ); organizrAPI2('POST','api/v2/tabs',tabInfo,true).success(function(data) { try { var response = data.response; $('.tabIconImageList').val(null).trigger('change'); $('.tabIconIconList').val(null).trigger('change'); }catch(e) { organizrCatchError(e,data); } message('Tab Created',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } clearForm('#new-tab-form'); $.magnificPopup.close(); }).fail(function(xhr) { OrganizrApiError(xhr, 'Tab Error'); }); } }); //ADD NEW CATEGORY $(document).on("click", ".addNewCategory", function () { var categoryInfo = $('#new-category-form').serializeToJSON(); categoryInfo['order'] = parseInt($('#categoryEditorTable').find('tr[data-order]').last().attr('data-order')) + 1; if (typeof categoryInfo.category == 'undefined' || categoryInfo.category == '') { message('Edit Tab Error',' Please set a Category Name',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if (typeof categoryInfo.image == 'undefined' || categoryInfo.image == '') { message('Edit Tab Error',' Please set a Category Image',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if(categoryInfo.category !== '' && categoryInfo.image !== ''){ var callbacks = $.Callbacks(); callbacks.add( buildCategoryEditor ); organizrAPI2('POST','api/v2/categories',categoryInfo,true).success(function(data) { try { var response = data.response; console.log(response); }catch(e) { organizrCatchError(e,data); } message('Category Added',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } clearForm('#new-category-form'); $.magnificPopup.close(); }).fail(function(xhr) { OrganizrApiError(xhr, 'Category Error'); }); } }); //DELETE CATEGORY $(document).on("click", ".deleteCategory", function () { var category = $(this); swal({ title: window.lang.translate('Delete ')+category.parent().parent().attr("data-name")+'?', icon: "warning", buttons: { cancel: window.lang.translate('No'), confirm: window.lang.translate('Yes'), }, dangerMode: true, confirmButtonColor: "#DD6B55" }).then(function(willDelete) { if (willDelete) { var id = category.parent().parent().attr("data-id"); var callbacks = $.Callbacks(); callbacks.add( buildCategoryEditor ); organizrAPI2('DELETE','api/v2/categories/' + id, null,true).success(function(data) { message('Category Deleted','',activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Category Deleted Error'); }); } }); }); //EDIT CATEGORY GET ID $(document).on("click", ".editCategoryButton", function () { $('#edit-category-form [name=category]').val($(this).parent().parent().attr("data-name")); $('#edit-category-form [name=image]').val($(this).parent().parent().attr("data-image")); $('#edit-category-form [name=id]').val($(this).parent().parent().attr("data-id")); }); //EDIT CATEGORY $(document).on("click", ".editCategory", function () { var categoryInfo = $('#edit-category-form').serializeToJSON(); if (typeof categoryInfo.id == 'undefined' || categoryInfo.id == '') { message('Edit Tab Error',' Could not get Category ID',activeInfo.settings.notifications.position,'#FFF','error','5000'); return false; } if (typeof categoryInfo.category == 'undefined' || categoryInfo.category == '') { message('Edit Tab Error',' Please set a Category Name',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if (typeof categoryInfo.image == 'undefined' || categoryInfo.image == '') { message('Edit Tab Error',' Please set a Category Image',activeInfo.settings.notifications.position,'#FFF','warning','5000'); return false; } if(categoryInfo.id !== '' && categoryInfo.category !== '' && categoryInfo.image !== ''){ var callbacks = $.Callbacks(); callbacks.add( buildCategoryEditor ); organizrAPI2('PUT','api/v2/categories/' + categoryInfo.id,categoryInfo,true).success(function(data) { try { var response = data.response; console.log(response); }catch(e) { organizrCatchError(e,data); } message('Category Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } clearForm('#edit-category-form'); $.magnificPopup.close(); }).fail(function(xhr) { OrganizrApiError(xhr, 'Category Error'); }); } }); //CHANGE DEFAULT CATEGORY $(document).on("click", ".changeDefaultCategory", function () { var id = $(this).parent().parent().attr("data-id"); var callbacks = $.Callbacks(); callbacks.add( buildCategoryEditor ); organizrAPI2('PUT','api/v2/categories/' + id, {"default":1},true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message('Default Category Updated',response.message,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Default Cateogry Error'); }); }); // CHANGE CUSTOMIZE Options and CSS Save $(document).on("click", ".saveCss", function () { $('.cssTextarea').val(cssEditor.getValue()).trigger('change'); }); $(document).on("click", ".saveThemeCss", function () { $('.cssThemeTextarea').val(cssThemeEditor.getValue()).trigger('change'); }); $(document).on("click", ".saveJava", function () { $('.javaTextarea').val(javaEditor.getValue()).trigger('change'); }); $(document).on("click", ".saveThemeJava", function () { $('.javaThemeTextarea').val(javaThemeEditor.getValue()).trigger('change'); }); $(document).on('focusout', 'input.pick-a-color-custom-options', function(e) { var original = $(this).attr('data-original'); var newValue = $(this).val(); if((original !== newValue) && (newValue !== '#987654') && newValue !== ''){ $(this).change(); $(this).attr('data-original', newValue); }else if(newValue == ''){ $(this).attr('style',''); } }); $(document).on('change keydown', '.addFormTick :input', function(e) { $(this).attr('data-changed', true); $(this).closest('.form-group').addClass('has-success'); var formID = $(this).closest('form').attr('id'); $('#'+formID+'-save').removeClass('hidden'); $('#'+formID+'-reset').removeClass('hidden'); switch ($(this).attr('type')) { case 'switch': case 'checkbox': var value = $(this).prop("checked") ? true : false; break; default: var value = $(this).val(); } if($(this).hasClass('themeChanger')){ organizrAPI2('GET','api/v2/themes').success(function(data) { try { let response = data.response; let path = response.data[value]['path']; changeTheme(path + '/' + value); }catch(e) { organizrCatchError(e,data); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Theme Preview Error'); }); } if($(this).hasClass('styleChanger')){ changeStyle(value); } if($(this).hasClass('notifyChanger')){ activeInfo.settings.notifications.backbone = value; defineNotification(); } if($(this).hasClass('notifyPositionChanger')){ activeInfo.settings.notifications.position = value; } if($(this).hasClass('authDebug')){ activeInfo.settings.misc.authDebug = value; } }); // Additional handler for Switchery switches that don't trigger standard change events $(document).on('click', '.addFormTick .js-switch', function(e) { var checkbox = this; // Wait for Switchery to update the checkbox state setTimeout(function() { $(checkbox).attr('data-changed', true); $(checkbox).closest('.form-group').addClass('has-success'); var formID = $(checkbox).closest('form').attr('id'); $('#'+formID+'-save').removeClass('hidden'); $('#'+formID+'-reset').removeClass('hidden'); }, 100); }); //DELETE IMAGE $(document).on("click", ".deleteImage", function () { var image = $(this); swal({ title: window.lang.translate('Delete ')+image.attr("data-image-name")+'?', icon: "warning", buttons: { cancel: window.lang.translate('No'), confirm: window.lang.translate('Yes'), }, dangerMode: true, confirmButtonColor: "#DD6B55" }).then(function(willDelete) { if (willDelete) { var post = { api:'api/v2/image/' + image.attr("data-image-name-ext"), messageTitle:'', messageBody:window.lang.translate('Deleted Image')+': '+image.attr("data-image-name"), error:'Organizr Function: User API Connection Failed' }; var callbacks = $.Callbacks(); callbacks.add( buildImageManagerView ); organizrAPI2('DELETE',post.api,'',true).success(function(data) { try { var response = data.response; }catch(e) { organizrCatchError(e,data); } message(post.messageTitle,post.messageBody,activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Image Error'); }); } }); }); // RELOAD Page $(document).on("click", ".reload", function () { location.reload(); }); // ENABLE PLUGIN $(document).on('click', '.enablePlugin', function() { ajaxloader(".content-wrap","in"); let pluginConfigValue = $(this).attr('data-config-name'); let callbacks = $.Callbacks(); callbacks.add( ajaxloader ); let data = {}; data[pluginConfigValue] = 'true'; organizrAPI2('PUT','api/v2/config', data,true).success(function(data) { try { message('Plugin Enabled','',activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } buildPlugins('disabled'); //buildPlugins('enabled'); }catch(e) { organizrCatchError(e,data); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Plugin Error'); ajaxloader(); }); }); // DISABLE PLUGIN $(document).on('click', '.disablePlugin', function() { var plugin = $(this); swal({ title: window.lang.translate('Disable')+' '+plugin.attr("data-plugin-name")+'?', icon: "warning", buttons: { cancel: window.lang.translate('No'), confirm: window.lang.translate('Yes'), }, dangerMode: true, confirmButtonColor: "#DD6B55" }).then(function(willDelete) { if (willDelete) { ajaxloader(".content-wrap","in"); let pluginConfigValue = plugin.attr('data-config-name'); var callbacks = $.Callbacks(); callbacks.add( ajaxloader ); var data = {}; data[pluginConfigValue] = 'false'; organizrAPI2('PUT','api/v2/config', data,true).success(function(data) { try { message('Plugin Disabled','',activeInfo.settings.notifications.position,"#FFF","success","5000"); if(callbacks){ callbacks.fire(); } buildPlugins('enabled'); }catch(e) { organizrCatchError(e,data); } }).fail(function(xhr) { OrganizrApiError(xhr, 'Plugin Error'); ajaxloader(); }); } }); }); // AUTH BACKEND HIDE SHOW $(document).on('change', '#authSelect, #authBackendSelect', function(e) { changeAuth(); }); $(document).on('change', '#plexMachineSelector', function(e) { let selector = $(this).attr('data-selector'); $(selector).val($(this).val()); $(selector).change(); messageSingle('Machine ID selected','Please save...',activeInfo.settings.notifications.position,'#FFF','success','5000'); }); $(document).on("click", ".closeErrorPage", function () { $('.error-page').html(''); $('.error-page').fadeOut(); }); // test Location $(document).on("click", ".testPath", function () { var path = $("#form-dbPath").val(); if (typeof path == 'undefined' || path == '') { message('Path Error',' Please enter a path for DB',activeInfo.settings.notifications.position,'#FFF','warning','10000'); }else{ organizrAPI2('POST','api/v2/test/path',{path:path}).success(function(data) { var html = data.response; message('Path',' Path is good to go',activeInfo.settings.notifications.position,'#FFF','success','10000'); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); } }); $(document).on({ mouseenter: function () { $(this).find('.progress').toggleClass('progress-lg'); $(this).find('.progress').find('span').toggleClass('hidden'); $(this).find('.white-box').toggleClass('nowPlayingHover'); }, mouseleave: function () { $(this).find('.progress').toggleClass('progress-lg'); $(this).find('.progress').find('span').toggleClass('hidden'); $(this).find('.white-box').toggleClass('nowPlayingHover'); } }, '.nowPlayingItem'); // recent filter $(document).on("click", ".recent-filter li>a", function () { var filter = $(this).attr('data-filter'); var type = $(this).attr('server-filter'); //plex or emby //console.log(filter); if(filter == 'all'){ $('.'+type+'-recent').find('.recent-item').parent().removeClass('hidden'); }else{ $('.'+type+'-recent').find('.recent-item').parent().removeClass('hidden'); $('.'+type+'-recent').find('.recent-item:not(.'+ filter + ')').parent().addClass('hidden'); } var owl = $('.'+type+'-recent'); owl.owlCarousel(); owl.trigger('refresh.owl.carousel'); owl.trigger('to.owl.carousel',0); }); // request search filter $(document).on("click", ".filter-request-result", function () { var filter = $(this).attr('data-filter'); if(filter == 'request-result-all'){ $('.request-result-item').removeClass('hidden'); }else{ $('.request-result-item').addClass('hidden'); $('.'+filter).removeClass('hidden'); } }); //playlist filter $(document).on("click", ".playlist-filter li>a", function () { var filter = $(this).attr('data-filter'); var button = $(this).attr('data-filter')+'-playlist'; var title = decodeURI($(this).attr('data-title')); var type = $(this).attr('server-filter'); //plex or emby $('.'+type+'-playlistTitle').html(title); $('.'+type+'-playlist').addClass('hidden'); $('.'+filter+'-playlist').removeClass('hidden'); $('.playlist-next').attr('onclick','owlChange(\''+button+'\',\'next\');'); $('.playlist-previous').attr('onclick','owlChange(\''+button+'\',\'previous\');'); }); // refresh cache image $(document).on("click", ".refreshImage", function(e) { message('',' Refreshing Image...',activeInfo.settings.notifications.position,'#FFF','success','1000'); e.preventDefault; var original = $(this).attr('data-image'); var type = $(this).attr('data-type'); switch (type) { case 'nowPlaying': var orginalElement = $(this).parent().parent().parent().parent().find('.imageSource'); orginalElement.attr('src', original); break; case 'recent-item': var orginalElementAlt = $(this).parent().parent().parent().find('.imageSourceAlt'); var orginalElement = $(this).parent().parent().parent().parent().find('.imageSource'); orginalElement.attr('style', 'background-image: url("'+original+'");'); orginalElementAlt.attr('src', original); break; default: } setTimeout(function(){ message('Image Refreshed ',' Clear Cache Please',activeInfo.settings.notifications.position,'#FFF','success','3000'); }, 1000); }); // open tab code $(document).on("click", ".openTab", function(e) { if($(this).attr("data-open-tab") === "true") { var tabName = $(this).attr("data-tab-name"); var container = $("#container-"+tabName); var activeFrame = container.children('iframe'); if(activeFrame.length === 1){ $('#menu-'+tabName+' a').trigger("click"); activeFrame.attr("src", $(this).attr("data-url")); }else{ container.attr("data-url", $(this).attr("data-url")); $('#menu-'+tabName+' a').trigger("click"); } }else{ var source = $(this).attr("data-url"); window.open(source, '_blank'); } $.magnificPopup.close(); }); //request click $(document).on("click", ".request-item", function(e) { var target = $(this).attr('data-target'); $('#link-'+target).trigger('click'); }); // metadata start $(document).on("click", ".metadata-get", function(e) { if($(e.target).hasClass('mdi-refresh')) return; $("#preloader").fadeIn(); var key = $(this).attr('data-key'); var uid = $(this).attr('data-uid'); var source = $(this).attr('data-source'); switch (source) { case 'plex': var action = 'getPlexMetadata'; break; case 'emby': case 'jellyfin': var action = 'getEmbyMetadata'; break; case 'jellystat': var action = 'getJellyStatMetadata'; break; default: } ajaxloader(".content-wrap","in"); organizrAPI2('POST','api/v2/homepage/'+source+'/metadata',{key:key}).success(function(data) { let response = data.response; // Determine effective source for icon/button (e.g., emby/jellyfin) when coming from jellystat let effectiveSource = source; try { if (source === 'jellystat' && response && response.data && response.data.content && response.data.content[0]) { const c = response.data.content[0]; if (c.tabName) { const name = String(c.tabName).toLowerCase(); if (name.indexOf('emby') !== -1) { effectiveSource = 'emby'; } else if (name.indexOf('jellyfin') !== -1) { effectiveSource = 'jellyfin'; } } // Fallback inference from address if tabName did not resolve if ((effectiveSource === 'jellystat' || effectiveSource === source) && c.address) { const addr = String(c.address).toLowerCase(); if (addr.indexOf('jellyfin') !== -1) { effectiveSource = 'jellyfin'; } else if (addr.indexOf('emby') !== -1) { effectiveSource = 'emby'; } } } } catch (e) { /* no-op */ } $('.'+uid+'-metadata-info').html(''); $('.'+uid+'-metadata-info').html(buildMetadata(response.data, effectiveSource)); $('.'+uid).trigger('click'); $(".metadata-actors").owlCarousel({ autoplay: true, slideSpeed : 300, paginationSpeed : 400, nav:false, dots:false, margin:10, autoWidth:true, items:4 }); ajaxloader(); $("#preloader").fadeOut(); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); ajaxloader(); $("#preloader").fadeOut(); }); }); // sab play/resume $(document).on("click", ".downloader", function(e) { $(this).find('i').attr('class', 'fa fa-spin fa-circle-o-notch'); let action = $(this).attr('data-action'); let source = $(this).attr('data-source'); let target = $(this).attr('data-target'); let api = null; switch (source){ case 'sabnzbd': api = 'api/v2/homepage/sabnzbd/queue/' + action; break; default: return false; } messageSingle('Sending command to downloader', '', activeInfo.settings.notifications.position, '#FFF', 'info', '2500'); organizrAPI2('POST',api,{target:target}).success(function(data) { homepageDownloader(source); messageSingle('Successful', '', activeInfo.settings.notifications.position, '#FFF', 'success', '2500'); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); }); // test tab $(document).on("click", ".testTab", function () { var input = $('#new-tab-form-inputURLNew'); if(input.val() == ''){ message('','Please enter a URL',activeInfo.settings.notifications.position,'#FFF','warning','5000'); } if(input.val() !== ''){ var post = { url:input.val() }; organizrAPI2('POST','api/v2/test/iframe',post).success(function(data) { let html = data.response; $('.tabTestMessage.alert-success').removeClass('hidden'); $('.tabTestMessage.alert-danger').addClass('hidden'); setTimeout(function(){ $('.tabTestMessage.alert-success').addClass('hidden'); }, 5000); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); $('.tabTestMessage.alert-danger').removeClass('hidden'); $('.tabTestMessage.alert-success').addClass('hidden'); setTimeout(function(){ $('.tabTestMessage.alert-danger').addClass('hidden'); }, 5000); }); } }); $(document).on("click", ".testEditTab", function () { var input = $('#edit-tab-form-inputURL'); if(input.val() == ''){ message('','Please enter a URL',activeInfo.settings.notifications.position,'#FFF','warning','5000'); } if(input.val() !== ''){ var post = { url:input.val() }; message('Checking URL now...','',activeInfo.settings.notifications.position,'#FFF','info','5000'); organizrAPI2('POST','api/v2/test/iframe',post).success(function(data) { let html = data.response; $('.tabEditTestMessage.alert-success').removeClass('hidden'); $('.tabEditTestMessage.alert-danger').addClass('hidden'); setTimeout(function(){ $('.tabEditTestMessage.alert-success').addClass('hidden'); }, 5000); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); $('.tabEditTestMessage.alert-danger').removeClass('hidden'); $('.tabEditTestMessage.alert-success').addClass('hidden'); setTimeout(function(){ $('.tabEditTestMessage.alert-danger').addClass('hidden'); }, 5000); }); } }); // new api key $(document).on("click", ".newAPIKey", function () { let newCode = generateCode(); $('#settings-main-form [name=organizrAPI]').val(newCode).change().parent().find('.clipboard').attr('data-clipboard-text',newCode); }); // purge log $(document).on("click", ".purgeLog", function () { let logId = $('.choose-organizr-log option:selected').attr('data-id'); if(logId){ let post = { api:'api/v2/log/' + logId, messageTitle:'', messageBody:window.lang.translate('Deleted Log'), error:'Organizr Function: User API Connection Failed' }; organizrAPI2('DELETE',post.api,'',true).success(function(data) { loadSettingsPage2('api/v2/page/settings_settings_logs','#settings-settings-logs','Log Viewer'); try { let response = data.response; message(post.messageTitle,post.messageBody,activeInfo.settings.notifications.position,"#FFF","success","5000"); }catch(e) { organizrCatchError(e,data); } }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); }else{ message('','Could not get Log Id',activeInfo.settings.notifications.position,'#FFF','warning','5000'); } }); $(document).on("click", ".delete-backup", function () { $('#settings-settings-backup').block({ message: '

Deleting Backup...

', css: { color: '#fff', border: '1px solid #5761a9', backgroundColor: '#707cd2' } }); let filename = $(this).attr('data-file'); if(filename !== ''){ let post = { api:'api/v2/backup/' + filename, messageTitle:'', messageBody:window.lang.translate('Deleted Backup')+': '+filename, error:'Organizr Function: Backup API Connection Failed' }; organizrAPI2('DELETE',post.api,'',true).success(function(data) { message(post.messageTitle,post.messageBody,activeInfo.settings.notifications.position,"#FFF","success","5000"); getOrganizrBackups(); $('#settings-settings-backup').unblock(); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); $('#settings-settings-backup').unblock(); }); } }); //Show Password $(document).on("click", ".showPassword", function () { var toggle = $(this).parent().parent().find('.password-alt'); if (toggle.attr('type') === "password") { toggle.attr('type', 'text'); } else { toggle.attr('type', 'password'); } $(this).find('.passwordToggle').toggleClass('fa-eye').toggleClass('fa-eye-slash'); }); $(document).on("click", ".emailUser", function () { var email = $(this).parent().parent().attr('data-email'); if(activeInfo.plugins["PHPMAILER-enabled"] == true){ $('.emailModal').click(); $('#sendEmailToInput').val(email); }else{ message('Email','Plugin not setup',activeInfo.settings.notifications.position,'#FFF','warning','5000'); } }); // calendar popups $(document).on('click', "a[class*=ID-]", function(){ //$("#preloader").fadeIn(); var details = $(this).attr('data-details'); var target = $(this).attr('data-target')+'-metadata-info'; var json = JSON.parse(details); $('.'+target).html(buildCalendarMetadata(json)); //$("#preloader").fadeOut(); myLazyLoad.update(); }); // request filter $(document).on("change", ".filter-request-input", function () { $('.request-item').parent().removeClass('hidden'); var filterArray = []; $('.filter-request-input').each(function () { var value = $(this).prop('checked'); var filter = $(this).attr('data-filter'); if(value == false){ filterArray.push('.'+filter); } }); $('.request-item').each(function () { var element = $(this); var string = filterArray.join(', '); if(element.is(string)){ element.parent().addClass('hidden'); } }); var owl = $('.request-items'); owl.owlCarousel(); owl.trigger('refresh.owl.carousel'); owl.trigger('to.owl.carousel',0); }); //search ombi var typingTimer; //on keyup, start the countdown $(document).on('keyup', '#request-input', function () { clearTimeout(typingTimer); typingTimer = setTimeout(doneTyping, 750); }); $(document).on('keyup', '#mediaSearchQuery', function () { clearTimeout(typingTimer); typingTimer = setTimeout(doneTypingMediaSearch, 750); }); //on keydown, clear the countdown $(document).on('keydown', '#request-input', function () { clearTimeout(typingTimer); }); $(document).on('keydown', '#mediaSearchQuery', function () { clearTimeout(typingTimer); }); $(document).on('keydown', 'body', function () { blockDev(); }); /* ===== Open-Close Right Sidebar ===== */ $(document).on("click", ".right-side-toggle", function () { $(".right-sidebar").slideDown(50).toggleClass("shw-rside"); $(".fxhdr").on("click", function () { $("body").toggleClass("fix-header"); /* Fix Header JS */ }); $(".fxsdr").on("click", function () { $("body").toggleClass("fix-sidebar"); /* Fix Sidebar JS */ }); /* ===== Service Panel JS ===== */ var fxhdr = $('.fxhdr'); if ($("body").hasClass("fix-header")) { fxhdr.attr('checked', true); } else { fxhdr.attr('checked', false); } }); $(document).on('mousewheel', '.recent-items .owl-stage', function (e) { if (e.shiftKey) { if (e.deltaY>0) { $('.recent-items').trigger('next.owl'); } else { $('.recent-items').trigger('prev.owl'); } e.preventDefault(); } }); $(document).on('mousewheel', '.playlist-items .owl-stage', function (e) { if (e.shiftKey) { if (e.deltaY>0) { $('.playlist-items').trigger('next.owl'); } else { $('.playlist-items').trigger('prev.owl'); } e.preventDefault(); } }); $(document).on('mousewheel', '.request-items .owl-stage', function (e) { if (e.shiftKey) { if (e.deltaY>0) { $('.request-items').trigger('next.owl'); } else { $('.request-items').trigger('prev.owl'); } e.preventDefault(); } }); Mousetrap.bind('r r', function() { reloadCurrentTab() }); Mousetrap.bind("c c", function() { closeCurrentTab(event) }); Mousetrap.bind("s s", function() { openSettings() }); Mousetrap.bind("h h", function() { openHomepage() }); Mousetrap.bind("f f", function() { toggleFullScreen() }); Mousetrap.bind("d d", function() { toggleDebug() }); Mousetrap.bind("esc", function () { $('.splash-screen').removeClass('in').addClass('hidden') }); Mousetrap.bind('ctrl+shift+up', function(e) { var getCurrentTab = $('.allTabsList a.active').parent(); var previousTab = getCurrentTab.prev().children(); previousTab.trigger("click"); parent.focus(); return false; }); Mousetrap.bind('ctrl+shift+down', function(e) { var getCurrentTab = $('.allTabsList a.active').parent(); var nextTab = getCurrentTab.next().children(); nextTab.trigger("click"); return false; }); $(document).on('change', "#choose-calender-filter, #choose-calender-filter-status", function (e) { filter = $('#choose-calender-filter').val(); filterDownload = $('#choose-calender-filter-status').val(); $('#calendar').fullCalendar('rerenderEvents'); $('.fc-scroller').overlayScrollbars({ scrollbars : { autoHide: "leave"}}); }); $(document).on('keyup', "#debug-input", function(e ){ console.log(this); if(e.keyCode == 13) { orgDebug(); } }); // settings menu open if not open $(document).on('click', ".sticon", function(){ var target = $(this).attr('href'); var menu = $(target).find('.customtab2 > li'); if(menu.length !== 0){ var isActive = false; $(menu).each(function (index, value) { var hasClass = $(this).hasClass('active'); if(hasClass){ isActive = true; } }); if(isActive == false){ let el = $(menu).find('a').first(); $(el).trigger('click'); } } }); // open help modal $(document).on('click', ".help-modal", function(){ var type = $(this).attr('data-modal'); var title = ''; var body = ''; //clear modal first $('#help-modal-title').html(''); $('#help-modal-body').html(''); //alter info switch (type) { case 'tabs': title = 'Tab Help'; var items = [ {title:"Name", body:"The text that will be displayed for that certain tab"}, {title:"Category", body:"Each Tab is assigned a Category, the default is unsorted. You may create new categories on the Category settings tab"}, {title:"Group", body:"The lowest Group that will have access to this tab"}, {title:"Type", body:"Internal is for Organizr pages
iFrame is for all others
New Window is for items to open in a new window"}, {title:"Default", body:"You can choose one tab to be the first opened tab on page load"}, {title:"Active", body:"Either mark a tab as active or inactive"}, {title:"Splash", body:"Toggle this to add the tab to the Splash Page on page load"}, {title:"Ping", body:"Enable Organizr to ping the status of the local URL of this tab"}, {title:"Preload", body:"Toggle this tab to loaded in the background on page load"}, ]; body = buildAccordion(items); break; default: return null; } $('#help-modal-title').html(title); $('#help-modal-body').html(body); $('.help-modal-lg').modal('show'); }); $(document).on('click', ".close-popup", function(){ $.magnificPopup.close(); }); // open help modal $(document).on('click', ".copyDebug", function(){ copyDebug(); $('#internal-clipboard').trigger('click'); }); // AccountDN change $(document).on("keyup", "#authBackendHostPrefix-input, #authBackendHostSuffix-input", function () { var newDN = $('#authBackendHostPrefix-input').val() + 'TestAcct' + $('#authBackendHostSuffix-input').val(); $('#accountDN').html(newDN); }); // homepage healthchecks $(document).on('click', ".showMoreHealth", function(){ var id = $(this).attr('data-id'); $('.showMoreHealthDiv-'+id).toggleClass('d-none'); $(this).find('.card-body').toggleClass('healthPosition'); }); //IP INFO $(document).on('click', ".ipInfo", function(){ organizrAPI2('GET','api/v2/ip/'+$(this).text()).success(function(data) { try { let response = data.response.data; var region = (typeof response.region == 'undefined') ? ' N/A' : response.region; var ip = (typeof response.ip == 'undefined') ? ' N/A' : response.ip; var hostname = (typeof response.hostname == 'undefined') ? ' N/A' : response.hostname; var loc = (typeof response.loc == 'undefined') ? ' N/A' : response.loc; var org = (typeof response.org == 'undefined') ? ' N/A' : response.org; var city = (typeof response.city == 'undefined') ? ' N/A' : response.city; var country = (typeof response.country == 'undefined') ? ' N/A' : response.country; var phone = (typeof response.phone == 'undefined') ? ' N/A' : response.phone; var div = '
' + '
' + '
' + '

'+ip+'

' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
Hostname'+hostname+'
Location'+loc+'
Org'+org+'
City'+city+'
Country'+country+'
Phone'+phone+'
Region'+region+'
' + '
' + '
' + '
' + '
'; swal({ content: createElementFromHTML(div), buttons: false, className: 'bg-org' }); }catch(e) { organizrCatchError(e,data); } }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); }); }); // set active for group list $(document).on('click', '.allGroupsList', function() { //$(this).toggleClass('active'); }); // Control init of custom netdata JSON editor $(document).on('click', 'li a[aria-controls="Custom data"]', function() { var resizeEditor = function(jsonEditor) { const aceEditor = jsonEditor; const newHeight = aceEditor.getSession().getScreenLength() * (aceEditor.renderer.lineHeight + aceEditor.renderer.scrollBar.getWidth()); aceEditor.container.style.height = newHeight + 'px'; aceEditor.resize(); } jsonEditor = ace.edit("netdataCustomTextAce"); var JsonMode = ace.require("ace/mode/javascript").Mode; jsonEditor.session.setMode(new JsonMode()); jsonEditor.setTheme("ace/theme/idle_fingers"); jsonEditor.setShowPrintMargin(false); jsonEditor.session.on('change', function(delta) { $('#netdataCustomText').val(jsonEditor.getValue()); $('#customize-appearance-form-save').removeClass('hidden'); }); }); $(document).on('click', '.imageManagerItem', function() { createImageSwal($(this)); }); $(document).on('click', '.close-editHomepageItemDiv',function () { //$('body').removeAttr('style'); //$('html').removeAttr('style'); Custombox.modal.closeAll() }) // Trakt image fix $(document).on('click', '.get-tmdb-image', function() { let target = $(this).attr('data-target'); let type = $(this).hasClass('tmdb-tv') ? 'tv' : 'movie'; let classList = $(this).attr('class'); checkMetadataDiv(target,type,classList); }); function checkMetadataDiv(target,type,classList){ let classArray = classList.split(/\s+/); $(classArray).each(function (i,v) { if(v.includes('--')){ let getId = v.split('--'); getTmdbImages(getId[1], type).success(function(data) { try { let response = data; let bg = 'https://image.tmdb.org/t/p/w1280'; if(typeof response.backdrops !== 'undefined'){ bg = bg + response.backdrops[0]['file_path']; $('.' + target + '-metadata-info .user-bg').css('background-image' , ''); setTimeout(function(){ $('.' + target + '-metadata-info .user-bg').css('background-image' , 'url('+bg+')'); }, 25); } }catch(e) { console.log('tmdb Error'); } }).fail(function(xhr) { console.log('tmdb Error'); }); } }); } // Plugins settings bind $(document).on('click', '[id$=-settings-button]', function() { let el = $(this)[0]; let bind = $(el).attr('data-bind'); let api = $(el).attr('data-api'); let prefix = $(el).attr('data-config-prefix'); if(bind == 'true' && api !== 'false' && prefix !== 'false'){ ajaxloader(".content-wrap","in"); organizrAPI2('GET',api).success(function(data) { var response = data.response; $('#'+prefix+'-settings-items').html(buildFormGroup(response.data)); }).fail(function(xhr) { OrganizrApiError(xhr); }); ajaxloader(); } }); $(document).on('change', '[id*=-form-chooseI]', function (e) { let el = $(this)[0]; let id = $(el).attr('id'); let newForm = (id.includes('new')) ? 'New' : ''; let pasteId = id.match(/(?:[a-z]*-){1,5}/) + 'inputImage' + newForm; let newValue = $('#'+id).val(); if(newValue !== 'Select or type Icon'){ $('#'+pasteId).val(newValue); } }); // SETTINGS DROPDOWN CHANGE $(document).on("change", ".settings-dropdown-box", function () { let id = $(this).val(); $(id).click(); }); $(document).on('click', '.nav-non-mobile li a', function() { let id = $(this).attr('id'); let menu = $(this).parent().parent().attr('data-dropdown'); $('.' + menu).val('#' + id); }); // TOGGLE OVERSEERR ALL SEASONS $(document).on("change", ".select-all-overseerr-seasons", function () { var enabled = $(this).prop("checked") ? 1 : 0; $.each($('.overseerr-season'), function(i,v) { let seasonEnabled = $(v).prop("checked") ? 1 : 0; if(enabled !== seasonEnabled){ $(v).trigger('click'); } }); }); $(document).on("change", ".overseerr-season", function () { let enableButtonDisabled = true; let requestedSeasons = []; $.each($('.overseerr-season'), function(i,v) { let seasonEnabled = $(v).prop("checked") ? 1 : 0; if(seasonEnabled){ let seasonNumber = $(v).attr('data-seasonNumber'); requestedSeasons.push(seasonNumber); enableButtonDisabled = false; } }); $('.submit-overseerr-seasons').attr('disabled', enableButtonDisabled); $('.submit-overseerr-seasons').attr('data-seasons', requestedSeasons); }); // Toggle Side Menu $(document).on('click', '.toggle-side-menu', function() { toggleTopBarHamburger(); }); // Toggle Side Menu Other $(document).on('click', '.ti-shift-left.mouse', function() { toggleSideMenu(); }); // Log Details $(document).on('click', '.log-details', function() { let trace = $(this).attr('data-trace'); let activateClipboard = $(this).attr('data-clipboard'); let el = $(this); el.find('i').toggleClass('fa fa-lg fa-spin mdi-reload'); organizrAPI2('GET','api/v2/log/all/'+trace).success(function(data) { try { let response = data.response; if(activateClipboard){ clipboard(true,JSON.stringify(response.data)); }else{ formatLogDetails(response.data); } }catch(e) { organizrCatchError(e,data); } el.find('i').toggleClass('fa fa-lg fa-spin mdi-reload'); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); el.find('i').toggleClass('fa fa-lg fa-spin mdi-reload'); }) }); // Choose Log choose-organizr-log $(document).on("change", ".choose-organizr-log", function () { organizrLogTable.ajax.url($(this).val()).load(); }); // Test cron $(document).on('click', '.test-cron', function() { let cron = $(this).parent().parent().find('input').val(); testAPIConnection('cron',cron); }); // Test Folder $(document).on('click', '.test-folder', function() { let folder = $(this).parent().parent().find('input').val(); testAPIConnection('folder',{'folder':folder}); }); // Toggle Homepage Donation History $(document).on('click', '.toggle-donation-history', function() { let status = $(this).attr('data-status'); if(status === 'hidden'){ $(this).attr('data-status', 'show'); $('.donation-history').removeClass('hidden'); let info = ''; let el = $(this); el.find('i').toggleClass('fa-lg fa-spin ti-reload'); organizrAPI2('GET','api/v2/homepage/donate').success(function(data) { try { let response = data.response; if(response.data){ $.each(response.data, function(i,v) { let m = moment.tz(v.date, activeInfo.timezone); v.date = moment(m).format('LLL'); let user = activeInfo.user.groupID == 0 ? '  '+v.email+'' : ''; info += '
  • '+v.date+user+'$'+v.amount+'
  • ' }) info = ''; }else{ info = 'No history...'; } }catch(e) { info = 'An error occurred'; organizrCatchError(e,data); } let html = '

    Recent Donations

    '+info+'
    '; $('.donation-history').html(html); el.find('i').toggleClass('fa-lg fa-spin ti-reload'); }).fail(function(xhr) { OrganizrApiError(xhr, 'API Error'); el.find('i').toggleClass('fa-lg fa-spin ti-reload'); }) }else{ $(this).attr('data-status', 'hidden'); $('.donation-history').addClass('hidden'); } });