/*jslint browser: true*/
/*global $, jQuery, alert*/
var idleTime = 0;
var hasCookie = false;
$(document).ajaxComplete(function () {
pageLoad();
});
$(document).ready(function () {
pageLoad();
var clipboard = new Clipboard('.clipboard');
clipboard.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 < 1170) {
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");
}
},
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();
});
/* ===== Tooltip Initialization ===== */
$(function () {
$('[data-toggle="tooltip"]').tooltip();
/*$('body').tooltip({
selector: '[data-toggle="tooltip"]'
});*/
});
/* ===== Popover Initialization ===== */
$(function () {
$('[data-toggle="popover"]').popover();
});
$(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,
// 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,
//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)'
});
if(bowser.mobile !== true){
$('.inbox-center').slimScroll({
height: '100%',
position: 'right',
size: "5px",
color: '#dcdcdc'
});
}
$(".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:
}
organizrAPI('POST','api/?v1/homepage/connect',{action:action, query:query}).success(function(data) {
var response = JSON.parse(data);
$('.mediaSearch-div').html(buildMediaResults(response.data,server,query));
if(bowser.mobile !== true){
$('.resultBox-inside').slimScroll({
height: '100%',
position: 'right',
size: "5px",
color: '#dcdcdc'
});
}
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
})
}
$(document).on("click", ".login-button", function(e) {
e.preventDefault;
$('div.login-box').block({
message: '
Just a moment...',
css: {
color: '#fff',
border: '1px solid #2cabe3',
backgroundColor: '#2cabe3'
}
});
var post = $( '#loginform' ).serializeArray();
organizrAPI('POST','api/?v1/login',post).success(function(data) {
var html = JSON.parse(data);
if(html.data == true){
location.reload();
}else if(html.data == 'mismatch'){
$('div.login-box').unblock({});
message('Login Error',' Wrong username/email/password combo',activeInfo.settings.notifications.position,'#FFF','warning','10000');
console.error('Organizr Function: Login failed - wrong username/email/password');
}else{
$('div.login-box').unblock({});
message('Login Error',html.data,activeInfo.settings.notifications.position,'#FFF','warning','10000');
console.error('Organizr Function: Login failed');
}
}).fail(function(xhr) {
console.error("Organizr Function: Login Failed");
});
});
$(document).on("click", ".unlockButton", function(e) {
e.preventDefault;
var post = {
password:$('#unlockPassword').val()
};
organizrAPI('POST','api/?v1/unlock',post).success(function(data) {
var html = JSON.parse(data);
console.log(html);
if(html.data == true){
location.reload();
}else if(html.data == 'Password Incorrect'){
message('Login Error',' Wrong password',activeInfo.settings.notifications.position,'#FFF','warning','10000');
console.error('Organizr Function: Login failed - wrong password');
}else{
message('Login Error',html.data,activeInfo.settings.notifications.position,'#FFF','warning','10000');
console.error('Organizr Function: Login failed');
}
}).fail(function(xhr) {
console.error("Organizr Function: Login Failed");
});
});
$(document).on("click", ".register-button", function(e) {
e.preventDefault;
var post = $( '#registerForm' ).serializeArray();
organizrAPI('POST','api/?v1/register',post).success(function(data) {
var html = JSON.parse(data);
console.log(html);
if(html.data == true){
location.reload();
}else if(html.data == 'mismatch'){
message('Registration Error',' Wrong Registration Password',activeInfo.settings.notifications.position,'#FFF','warning','10000');
console.error('Organizr Function: Registration failed - Wrong Registration Password');
}else if(html.data == 'username taken'){
message('Registration Error',' Registration Error - Username/Email Taken',activeInfo.settings.notifications.position,'#FFF','warning','10000');
console.error('Organizr Function: Registration Failed - Username/Email Taken');
}
}).fail(function(xhr) {
console.error("Organizr Function: Login Failed");
});
});
$(document).on("click", ".reset-button", function(e) {
e.preventDefault;
var email = $('#recover-input').val();
if(email !== ''){
var post = {
email:email
};
organizrAPI('POST','api/?v1/recover',post).success(function(data) {
var html = JSON.parse(data);
if(html.data == true){
message('Recover Password',' Email Sent',activeInfo.settings.notifications.position,'#FFF','success','10000');
$('#leave-recover').trigger('click');
}else if(html.data == 'an error occured'){
message('Recover Error',' User Error',activeInfo.settings.notifications.position,'#FFF','warning','10000');
console.error('Organizr Function: Recover failed - Wrong Registration Password');
}else if(html.data == 'username taken'){
message('Recover Error',' Registration Error - Username/Email Taken',activeInfo.settings.notifications.position,'#FFF','warning','10000');
console.error('Organizr Function: Recover Failed - Username/Email Taken');
}
}).fail(function(xhr) {
console.error("Organizr Function: Login Failed");
});
}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=groupName]').val($(this).parent().parent().attr("data-group"));
$('#edit-group-form [name=id]').val($(this).parent().parent().attr("data-id"));
$('#edit-group-form [name=groupImage]').val($(this).parent().parent().attr("data-image"));
$('#edit-group-form [name=oldGroupName]').val($(this).parent().parent().attr("data-group"));
});
//EDIT GROUP
$(document).on("click", ".editGroup", function () {
//Create POST Array
var post = {
action:'editUserGroup',
api:'api/?v1/settings/user/manage/groups',
id:$('#edit-group-form [name=id]').val(),
groupName:$('#edit-group-form [name=groupName]').val(),
groupImage:$('#edit-group-form [name=groupImage]').val(),
oldGroupName:$('#edit-group-form [name=oldGroupName]').val(),
messageTitle:'',
messageBody:'Edited User Group '+$('#edit-group-form [name=groupName]').val(),
error:'Organizr Function: User Group API Connection Failed'
};
if (typeof post.id == 'undefined' || post.id == '') {
message('New Group Error',' Could not get Group ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
}
if (typeof post.groupName == 'undefined' || post.groupName == '') {
message('New Group Error',' Please set a Group Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if (typeof post.groupImage == 'undefined' || post.groupImage == '') {
message('New Group Error',' Please set a Group Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if(post.id !== '' && post.groupName !== '' && post.groupImage !== '' ){
var callbacks = $.Callbacks();
callbacks.add( buildGroupManagement );
settingsAPI(post,callbacks);
clearForm('#edit-group-form');
$.magnificPopup.close();
}
});
//CHANGE DEFAULT GROUP
$(document).on("click", ".changeDefaultGroup", function () {
//Create POST Array
var post = {
action:'changeDefaultGroup',
api:'api/?v1/settings/user/manage/groups',
id:$(this).parent().parent().attr("data-id"),
oldGroupID:$('#manageGroupTable').find('tr[data-default=true]').attr("data-group-id"),
oldGroupName:$('#manageGroupTable').find('tr[data-default=true]').attr("data-group"),
newGroupID:$(this).parent().parent().attr("data-group-id"),
newGroupName:$(this).parent().parent().attr("data-group"),
messageTitle:'',
messageBody:'Changed Default Group to '+$(this).parent().parent().attr("data-group"),
error:'Organizr Function: User Group API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildGroupManagement );
settingsAPI(post,callbacks);
});
//DELETE GROUP
$(document).on("click", ".deleteUserGroup", function () {
//Create POST Array
var post = {
action:'deleteUserGroup',
api:'api/?v1/settings/user/manage/groups',
id:$(this).parent().parent().attr("data-id"),
groupID:$(this).parent().parent().attr("data-group-id"),
groupName:$(this).parent().parent().attr("data-group"),
messageTitle:'',
messageBody:'Deleted User Group '+$(this).parent().parent().attr("data-group"),
error:'Organizr Function: User Group API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildGroupManagement );
settingsAPI(post,callbacks);
});
//ADD GROUP
$(document).on("click", ".addNewGroup", function () {
//Create POST Array
var post = {
action:'addUserGroup',
api:'api/?v1/settings/user/manage/groups',
newGroupID:parseInt($('#manageGroupTable').find('tr[data-group-id]:nth-last-child(2)').attr('data-group-id')) + 1,
newGroupName:$('#new-group-form [name=groupName]').val(),
newGroupImage:$('#new-group-form [name=groupImage]').val(),
messageTitle:'',
messageBody:'Created User Group '+$('#new-group-form [name=groupName]').val(),
error:'Organizr Function: User Group API Connection Failed'
};
if (typeof post.newGroupID == 'undefined' || post.newGroupID == '') {
message('New Group Error',' Could not get next Group ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
}
if (typeof post.newGroupName == 'undefined' || post.newGroupName == '') {
message('New Group Error',' Please set a Group Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if (typeof post.newGroupImage == 'undefined' || post.newGroupImage == '') {
message('New Group Error',' Please set a Group Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if(post.newGroupID !== '' && post.newGroupName !== '' && post.newGroupImage !== '' ){
var callbacks = $.Callbacks();
callbacks.add( buildGroupManagement );
settingsAPI(post,callbacks);
clearForm('#new-group-form');
$.magnificPopup.close();
}
});
// ADD USER
$(document).on("click", ".addNewUser", function () {
//Create POST Array
var post = {
action:'addNewUser',
api:'api/?v1/settings/user/manage/users',
username:$('#new-user-form [name=username]').val(),
email:$('#new-user-form [name=email]').val(),
password:$('#new-user-form [name=password]').val(),
messageTitle:'',
messageBody:'Added New User: '+$('#new-user-form [name=username]').val(),
error:'Organizr Function: User API Connection Failed'
};
if (typeof post.username == 'undefined' || post.username == '') {
message('New User Error',' Please set a Username',activeInfo.settings.notifications.position,'#FFF','error','5000');
}
if (typeof post.email == 'undefined' || post.email == '') {
message('New User Error',' Please set an Email',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if (typeof post.password == 'undefined' || post.password == '') {
message('New User Error',' Please set a Password',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if(post.username !== '' && post.email !== '' && post.password !== '' ){
var callbacks = $.Callbacks();
callbacks.add( buildUserManagement );
settingsAPI(post,callbacks);
clearForm('#new-user-form');
$.magnificPopup.close();
}
});
//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 () {
//Create POST Array
var post = {
action:'editUser',
api:'api/?v1/settings/user/manage/users',
id:$('#edit-user-form [name=id]').val(),
username:$('#edit-user-form [name=username]').val(),
email:$('#edit-user-form [name=email]').val(),
password:$('#edit-user-form [name=password]').val(),
messageTitle:'',
messageBody:'Edited User '+$('#edit-user-form [name=username]').val(),
error:'Organizr Function: API Connection Failed'
};
if (typeof post.id == 'undefined' || post.id == '') {
message('Edit User Error',' Could not get User ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
}
if (typeof post.username == 'undefined' || post.username == '') {
message('Edit User Error',' Please set a Username',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if (typeof post.email == 'undefined' || post.email == '') {
message('Edit User Error',' Please set a User Email',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if (post.password !== '' && post.password !== $('#edit-user-form [name=password2]').val()){
message('Edit User Error',' Passwords do not match!',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if(post.id !== '' && post.username !== '' && post.email !== '' ){
var callbacks = $.Callbacks();
callbacks.add( buildUserManagement );
settingsAPI(post,callbacks);
clearForm('#edit-user-form');
$.magnificPopup.close();
}
});
// CHANGE USER GROUP
$(document).on("change", ".userGroupSelect", function () {
//Create POST Array
var post = {
action:'changeGroup',
api:'api/?v1/settings/user/manage/users',
id:$(this).parent().parent().attr("data-id"),
username:$(this).parent().parent().attr("data-username"),
oldGroup:$(this).parent().parent().attr("data-group"),
newGroupID:$(this).find("option:selected").val(),
newGroupName:$(this).find("option:selected").text(),
messageTitle:'',
messageBody:'User Info updated for '+$(this).parent().parent().attr("data-username"),
error:'Organizr Function: User API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildUserManagement );
settingsAPI(post,callbacks);
});
// DELETE USER
//DELETE GROUP
$(document).on("click", ".deleteUser", function () {
var user = $(this);
swal({
title: window.lang.translate('Delete ')+user.parent().parent().attr("data-username")+'?',
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: window.lang.translate('Yes'),
cancelButtonText: window.lang.translate('No'),
closeOnConfirm: true,
closeOnCancel: true
}, function(isConfirm){
if (isConfirm) {
//Create POST Array
var post = {
action:'deleteUser',
api:'api/?v1/settings/user/manage/users',
id:user.parent().parent().attr("data-id"),
username:user.parent().parent().attr("data-username"),
messageTitle:'',
messageBody:window.lang.translate('Deleted User')+': '+user.parent().parent().attr("data-username"),
error:'Organizr Function: User API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildUserManagement );
settingsAPI(post,callbacks);
}
});
});
// CHANGE TAB GROUP
$(document).on("change", ".tabGroupSelect", function () {
//Create POST Array
var post = {
action:'changeGroup',
api:'api/?v1/settings/tab/editor/tabs',
id:$(this).parent().parent().attr("data-id"),
tab:$(this).parent().parent().attr("data-name"),
oldGroupID:$(this).parent().parent().attr("data-group-id"),
newGroupID:$(this).find("option:selected").val(),
newGroupName:$(this).find("option:selected").text(),
messageTitle:'',
messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
error:'Organizr Function: Tab API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildTabEditor );
settingsAPI(post,callbacks);
});
// CHANGE TAB CATEGORY
$(document).on("change", ".tabCategorySelect", function () {
//Create POST Array
var post = {
action:'changeCategory',
api:'api/?v1/settings/tab/editor/tabs',
id:$(this).parent().parent().attr("data-id"),
tab:$(this).parent().parent().attr("data-name"),
newCategoryID:$(this).find("option:selected").val(),
newCategoryName:$(this).find("option:selected").text(),
messageTitle:'',
messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
error:'Organizr Function: Tab API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildTabEditor );
settingsAPI(post,callbacks);
});
// CHANGE TAB TYPE
$(document).on("change", ".tabTypeSelect", function () {
//Create POST Array
var post = {
action:'changeType',
api:'api/?v1/settings/tab/editor/tabs',
id:$(this).parent().parent().attr("data-id"),
tab:$(this).parent().parent().attr("data-name"),
newTypeID:$(this).find("option:selected").val(),
newTypeName:$(this).find("option:selected").text(),
messageTitle:'',
messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
error:'Organizr Function: Tab API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildTabEditor );
settingsAPI(post,callbacks);
});
// CHANGE ENABLED TAB
$(document).on("change", ".enabledSwitch", function () {
//Create POST Array
var post = {
action:'changeEnabled',
api:'api/?v1/settings/tab/editor/tabs',
id:$(this).parent().parent().attr("data-id"),
tab:$(this).parent().parent().attr("data-name"),
tabEnabled:$(this).prop("checked") ? 1 : 0,
tabEnabledWord:$(this).prop("checked") ? "On" : "Off",
messageTitle:'',
messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
error:'Organizr Function: Tab API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildTabEditor );
settingsAPI(post,callbacks);
});
// CHANGE SPLASH TAB
$(document).on("change", ".splashSwitch", function () {
//Create POST Array
var post = {
action:'changeSplash',
api:'api/?v1/settings/tab/editor/tabs',
id:$(this).parent().parent().attr("data-id"),
tab:$(this).parent().parent().attr("data-name"),
tabSplash:$(this).prop("checked") ? 1 : 0,
tabSplashWord:$(this).prop("checked") ? "On" : "Off",
messageTitle:'',
messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
error:'Organizr Function: Tab API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildTabEditor );
settingsAPI(post,callbacks);
});
// CHANGE SPLASH TAB
$(document).on("change", ".pingSwitch", function () {
//Create POST Array
var post = {
action:'changePing',
api:'api/?v1/settings/tab/editor/tabs',
id:$(this).parent().parent().attr("data-id"),
tab:$(this).parent().parent().attr("data-name"),
tabPing:$(this).prop("checked") ? 1 : 0,
tabPingWord:$(this).prop("checked") ? "On" : "Off",
messageTitle:'',
messageBody:'Tab Info updated for '+$(this).parent().parent().attr("data-name"),
error:'Organizr Function: Tab API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildTabEditor );
settingsAPI(post,callbacks);
});
// CHANGE DEFAULT TAB
$(document).on("change", ".defaultSwitch", function () {
//Create POST Array
var post = {
action:'changeDefault',
api:'api/?v1/settings/tab/editor/tabs',
id:$(this).parent().parent().parent().attr("data-id"),
tab:$(this).parent().parent().parent().attr("data-name"),
messageTitle:'',
messageBody:'Changed Default Tab to: '+$(this).parent().parent().parent().attr("data-name"),
error:'Organizr Function: Tab API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildTabEditor );
settingsAPI(post,callbacks);
});
//DELETE TAB
$(document).on("click", ".deleteTab", function () {
var user = $(this);
swal({
title: window.lang.translate('Delete ')+user.parent().parent().attr("data-name")+'?',
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: window.lang.translate('Yes'),
cancelButtonText: window.lang.translate('No'),
closeOnConfirm: true,
closeOnCancel: true
}, function(isConfirm){
if (isConfirm) {
//Create POST Array
var post = {
action:'deleteTab',
api:'api/?v1/settings/tab/editor/tabs',
id:user.parent().parent().attr("data-id"),
tab:user.parent().parent().attr("data-name"),
messageTitle:'',
messageBody:window.lang.translate('Deleted Tab')+': '+user.parent().parent().attr("data-name"),
error:'Organizr Function: Tab Editor API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildTabEditor );
settingsAPI(post,callbacks);
}
});
});
//EDIT TAB GET ID
$(document).on("click", ".editTabButton", function () {
$('#edit-tab-form [name=tabName]').val($(this).parent().parent().attr("data-name"));
$('#edit-tab-form [name=tabURL]').val($(this).parent().parent().attr("data-url"));
$('#edit-tab-form [name=pingURL]').val($(this).parent().parent().attr("data-ping-url"));
$('#edit-tab-form [name=tabImage]').val($(this).parent().parent().attr("data-image"));
$('#edit-tab-form [name=id]').val($(this).parent().parent().attr("data-id"));
if( $(this).parent().parent().attr("data-url").indexOf('/?v') > 0){
$('#edit-tab-form [name=tabURL]').prop('disabled', 'true');
}else{
$('#edit-tab-form [name=tabURL]').prop('disabled', null);
}
});
//EDIT TAB
$(document).on("click", ".editTab", function () {
//Create POST Array
var post = {
action:'editTab',
api:'api/?v1/settings/tab/editor/tabs',
id:$('#edit-tab-form [name=id]').val(),
tabName:$('#edit-tab-form [name=tabName]').val(),
tabImage:$('#edit-tab-form [name=tabImage]').val(),
tabURL:$('#edit-tab-form [name=tabURL]').val(),
pingURL:$('#edit-tab-form [name=pingURL]').val(),
messageTitle:'',
messageBody:'Edited Tab '+$('#edit-tab-form [name=tabName]').val(),
error:'Organizr Function: Tab Editor API Connection Failed'
};
if (typeof post.id == 'undefined' || post.id == '') {
message('Edit Tab Error',' Could not get Tab ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
}
if (typeof post.tabName == 'undefined' || post.tabName == '') {
message('Edit Tab Error',' Please set a Tab Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if (typeof post.tabImage == 'undefined' || post.tabImage == '') {
message('Edit Tab Error',' Please set a Tab Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if (typeof post.tabURL == 'undefined' || post.tabURL == '') {
message('Edit Tab Error',' Please set a Tab URL',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if(post.id !== '' && post.tabName !== '' && post.tabImage !== '' && post.tabURL !== '' ){
var callbacks = $.Callbacks();
callbacks.add( buildTabEditor );
settingsAPI(post,callbacks);
clearForm('#edit-tab-form');
$.magnificPopup.close();
}
});
//ADD NEW TAB
$(document).on("click", ".addNewTab", function () {
//Create POST Array
var post = {
action:'addNewTab',
api:'api/?v1/settings/tab/editor/tabs',
tabOrder:parseInt($('#tabEditorTable').find('tr[data-order]').last().attr('data-order')) + 1,
tabName:$('#new-tab-form [name=tabName]').val(),
tabImage:$('#new-tab-form [name=tabImage]').val(),
tabURL:$('#new-tab-form [name=tabURL]').val(),
pingURL:$('#new-tab-form [name=pingURL]').val(),
tabGroupID:1,
tabEnabled:0,
tabDefault:0,
tabType:1,
messageTitle:'',
messageBody:'Created Tab '+$('#new-tab-form [name=tabName]').val(),
error:'Organizr Function: Tab API Connection Failed'
};
if (typeof post.tabOrder == 'undefined' || post.tabOrder == '') {
message('New Tab Error',' Could not get next Group ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
}
if (typeof post.tabName == 'undefined' || post.tabName == '') {
message('New Tab Error',' Please set a Tab Name',activeInfo.settings.notifications.position,'#FFF','error','5000');
}
if (typeof post.tabURL == 'undefined' || post.tabURL == '') {
message('New Tab Error',' Please set a Tab URL',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if (typeof post.tabImage == 'undefined' || post.tabImage == '') {
message('New Tab Error',' Please set a Tab Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if(post.tabOrder !== '' && post.tabName !== '' && post.tabURL !== '' && post.tabImage !== '' ){
var callbacks = $.Callbacks();
callbacks.add( buildTabEditor );
settingsAPI(post,callbacks);
clearForm('#new-tab-form');
$.magnificPopup.close();
}
});
//ADD NEW CATEGORY
$(document).on("click", ".addNewCategory", function () {
//Create POST
var nextID = [];
$($('#categoryEditorTable').find('tr[data-category-id]')).each(function () {
nextID.push($(this).attr('data-category-id'));
});
var post = {
action:'addNewCategory',
api:'api/?v1/settings/tab/editor/categories',
categoryOrder:parseInt($('#categoryEditorTable').find('tr[data-order]').last().attr('data-order')) + 1,
categoryName:$('#new-category-form [name=name]').val(),
categoryImage:$('#new-category-form [name=image]').val(),
categoryID:Math.max.apply( null, nextID ) + 1,
categoryDefault:0,
messageTitle:'',
messageBody:'Created Category '+$('#new-category-form [name=name]').val(),
error:'Organizr Function: API Connection Failed'
};
console.log(post);
if (typeof post.categoryID == 'undefined' || post.categoryID == '') {
message('New Category Error',' Could not get next Category ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
}
if (typeof post.categoryName == 'undefined' || post.categoryName == '') {
message('New Category Error',' Please set a Category Name',activeInfo.settings.notifications.position,'#FFF','error','5000');
}
if (typeof post.categoryOrder == 'undefined' || post.categoryOrder == '') {
message('New Category Error',' Could not get Category Order',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if (typeof post.categoryImage == 'undefined' || post.categoryImage == '') {
message('New Category Error',' Please set a Category Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if(post.categoryID !== '' && post.categoryName !== '' && post.categoryOrder !== '' && post.categoryImage !== '' ){
var callbacks = $.Callbacks();
callbacks.add( buildCategoryEditor );
settingsAPI(post,callbacks);
clearForm('#new-category-form');
$.magnificPopup.close();
}
});
//DELETE CATEGORY
$(document).on("click", ".deleteCategory", function () {
var category = $(this);
swal({
title: window.lang.translate('Delete ')+category.parent().parent().attr("data-name")+'?',
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: window.lang.translate('Yes'),
cancelButtonText: window.lang.translate('No'),
closeOnConfirm: true,
closeOnCancel: true
}, function(isConfirm){
if (isConfirm) {
//Create POST Array
var post = {
action:'deleteCategory',
api:'api/?v1/settings/tab/editor/categories',
id:category.parent().parent().attr("data-id"),
category:category.parent().parent().attr("data-name"),
messageTitle:'',
messageBody:window.lang.translate('Deleted Category')+': '+category.parent().parent().attr("data-name"),
error:'Organizr Function: API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildCategoryEditor );
settingsAPI(post,callbacks);
}
});
});
//EDIT CATEGORY GET ID
$(document).on("click", ".editCategoryButton", function () {
$('#edit-category-form [name=name]').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 () {
//Create POST Array
var post = {
action:'editCategory',
api:'api/?v1/settings/tab/editor/categories',
id:$('#edit-category-form [name=id]').val(),
name:$('#edit-category-form [name=name]').val(),
image:$('#edit-category-form [name=image]').val(),
messageTitle:'',
messageBody:'Edited Category '+$('#edit-category-form [name=name]').val(),
error:'Organizr Function: API Connection Failed'
};
console.log(post);
if (typeof post.id == 'undefined' || post.id == '') {
message('Edit Tab Error',' Could not get Tab ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
}
if (typeof post.name == 'undefined' || post.name == '') {
message('Edit Tab Error',' Please set a Tab Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if (typeof post.image == 'undefined' || post.image == '') {
message('Edit Tab Error',' Please set a Tab Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
}
if(post.id !== '' && post.name !== '' && post.image !== ''){
var callbacks = $.Callbacks();
callbacks.add( buildCategoryEditor );
settingsAPI(post,callbacks);
clearForm('#edit-category-form');
$.magnificPopup.close();
}
});
//CHANGE DEFAULT CATEGORY
$(document).on("click", ".changeDefaultCategory", function () {
//Create POST Array
var post = {
action:'changeDefault',
api:'api/?v1/settings/tab/editor/categories',
id:$(this).parent().parent().attr("data-id"),
oldCategoryName:$('#categoryEditorTable').find('tr[data-default=true]').attr("data-name"),
newCategoryName:$(this).parent().parent().attr("data-name"),
messageTitle:'',
messageBody:'Changed Default Category to '+$(this).parent().parent().attr("data-name"),
error:'Organizr Function: API Connection Failed'
};
var callbacks = $.Callbacks();
callbacks.add( buildCategoryEditor );
settingsAPI(post,callbacks);
});
// 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("click", ".savecustomHTMLoneTextarea", function () {
$('.customHTMLoneTextarea').val(customHTMLoneEditor.getValue()).trigger('change');
});
$(document).on("click", ".savecustomHTMLtwoTextarea", function () {
$('.customHTMLtwoTextarea').val(customHTMLtwoEditor.getValue()).trigger('change');
});
$(document).on('focusout', 'input.pick-a-color', 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');
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')){
changeTheme(value);
}
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;
}
});
//DELETE IMAGE
$(document).on("click", ".deleteImage", function () {
var image = $(this);
swal({
title: window.lang.translate('Delete ')+image.attr("data-image-name")+'?',
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: window.lang.translate('Yes'),
cancelButtonText: window.lang.translate('No'),
closeOnConfirm: true,
closeOnCancel: true
}, function(isConfirm){
if (isConfirm) {
//Create POST Array
var post = {
action:'deleteImage',
api:'api/?v1/settings/image/manager/view',
imageName:image.attr("data-image-name"),
imagePath:image.attr("data-image-path"),
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 );
settingsAPI(post,callbacks);
}
});
});
// RELOAD Page
$(document).on("click", ".reload", function () {
location.reload();
});
// ENABLE PLUGIN
$(document).on('click', '.enablePlugin', function() {
var post = {
action:'enable',
api:'api/?v1/settings/plugins/list',
name:$(this).attr('data-plugin-name'),
configName:$(this).attr('data-config-name'),
messageTitle:'',
messageBody:'Enabling '+$(this).attr('data-plugin-name'),
error:'Organizr Function: API Connection Failed'
};
//$('#customize-appearance-reload').removeClass('hidden');
var callbacks = $.Callbacks();
//callbacks.add( buildCustomizeAppearance );
settingsAPI(post,callbacks);
ajaxloader(".content-wrap","in");
setTimeout(function(){ buildPlugins();ajaxloader(); }, 3000);
});
// DISABLE PLUGIN
$(document).on('click', '.disablePlugin', function() {
var plugin = $(this);
swal({
title: window.lang.translate('Disable')+' '+plugin.attr("data-plugin-name")+'?',
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: window.lang.translate('Yes'),
cancelButtonText: window.lang.translate('No'),
closeOnConfirm: true,
closeOnCancel: true
}, function(isConfirm){
if (isConfirm) {
//Create POST Array
var post = {
action:'disable',
api:'api/?v1/settings/plugins/list',
name:plugin.attr('data-plugin-name'),
configName:plugin.attr('data-config-name'),
messageTitle:'',
messageBody:'Disabling '+plugin.attr('data-plugin-name'),
error:'Organizr Function: API Connection Failed'
};
//$('#customize-appearance-reload').removeClass('hidden');
var callbacks = $.Callbacks();
//callbacks.add( buildCustomizeAppearance );
settingsAPI(post,callbacks);
ajaxloader(".content-wrap","in");
setTimeout(function(){ buildPlugins();ajaxloader(); }, 3000);
}
});
});
// AUTH BACKEND HIDE SHOW
$(document).on('change', '#authSelect, #authBackendSelect', function(e) {
changeAuth();
});
$(document).on("click", ".getSSOPlexToken", function () {
$('.ssoPlexTokenMessage').text("Grabbing Token");
$('.ssoPlexTokenHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
var plex_username = $('#sso-plex-token-form [name=username]').val().trim();
var plex_password = $('#sso-plex-token-form [name=password]').val().trim();
if ((plex_password !== '') && (plex_password !== '')) {
$.ajax({
type: 'POST',
headers: {
'X-Plex-Product':'Organizr',
'X-Plex-Version':'2.0',
'X-Plex-Client-Identifier':'01010101-10101010'
},
url: 'https://plex.tv/users/sign_in.json',
data: {
'user[login]': plex_username,
'user[password]': plex_password,
force: true
},
cache: false,
async: true,
complete: function(xhr, status) {
var result = $.parseJSON(xhr.responseText);
if (xhr.status === 201) {
$('.ssoPlexTokenMessage').text(xhr.statusText);
$('.ssoPlexTokenHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
$('#sso-form [name=plexToken]').val(result.user.authToken);
$('#sso-form [name=plexToken]').change();
} else {
$('.ssoPlexTokenMessage').text(xhr.statusText);
$('.ssoPlexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
}
}
});
} else {
$('.ssoPlexTokenMessage').text("Enter Username and Password");
$('.ssoPlexTokenHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
}
});
$(document).on("click", ".getPlexMachineSSO", function () {
var plex_token = $('#sso-form [name=plexToken]').val().trim();
if (plex_token !== '') {
$('.ssoPlexMachineMessage').text("Grabbing List");
$('.ssoPlexMachineHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
$.ajax({
type: 'GET',
headers: {
'X-Plex-Product':'Organizr',
'X-Plex-Version':'2.0',
'X-Plex-Client-Identifier':'01010101-10101010',
'X-Plex-Token':plex_token,
},
url: 'https://plex.tv/pms/servers.xml',
cache: false,
async: true,
complete: function(xhr, status) {
var result = $.parseXML(xhr.responseText);
if (xhr.status === 200) {
$('.ssoPlexMachineMessage').text('Choose Plex Server');
$('.ssoPlexMachineHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning');
var machines = '';
$('Server', result).each(function(){
if($(this).attr('owned') == 1){
var name = $(this).attr('name');
var machine = $(this).attr('machineIdentifier');
machines += '';
}
});
var listing = '';
$('.ssoPlexMachineListing').html(listing);
} else {
$('.ssoPlexTokenMessage').text(xhr.statusText);
$('.ssoPlexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
}
}
});
} else {
$('.ssoPlexMachineMessage').text("Plex Token Needed");
$('.ssoPlexMachineHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
}
});
$(document).on('change', '#ssoPlexMachineSelector', function(e) {
$('#sso-form [name=plexID]').val($(this).val());
$('#sso-form [name=plexID]').change();
});
$(document).on("click", ".getauthPlexToken", function () {
$('.authPlexTokenMessage').text("Grabbing Token");
$('.authPlexTokenHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
var plex_username = $('#auth-plex-token-form [name=username]').val().trim();
var plex_password = $('#auth-plex-token-form [name=password]').val().trim();
if ((plex_password !== '') && (plex_password !== '')) {
$.ajax({
type: 'POST',
headers: {
'X-Plex-Product':'Organizr',
'X-Plex-Version':'2.0',
'X-Plex-Client-Identifier':'01010101-10101010'
},
url: 'https://plex.tv/users/sign_in.json',
data: {
'user[login]': plex_username,
'user[password]': plex_password,
force: true
},
cache: false,
async: true,
complete: function(xhr, status) {
var result = $.parseJSON(xhr.responseText);
if (xhr.status === 201) {
$('.authPlexTokenMessage').text(xhr.statusText);
$('.authPlexTokenHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
$('#settings-main-form [name=plexToken]').val(result.user.authToken);
$('#settings-main-form [name=plexToken]').change();
} else {
$('.authPlexTokenMessage').text(xhr.statusText);
$('.authPlexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
}
}
});
} else {
$('.authPlexTokenMessage').text("Enter Username and Password");
$('.authPlexTokenHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
}
});
$(document).on("click", ".getPlexMachineAuth", function () {
var plex_token = $('#settings-main-form [name=plexToken]').val().trim();
if (plex_token !== '') {
$('.authPlexMachineMessage').text("Grabbing List");
$('.authPlexMachineHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
$.ajax({
type: 'GET',
headers: {
'X-Plex-Product':'Organizr',
'X-Plex-Version':'2.0',
'X-Plex-Client-Identifier':'01010101-10101010',
'X-Plex-Token':plex_token,
},
url: 'https://plex.tv/pms/servers.xml',
cache: false,
async: true,
complete: function(xhr, status) {
var result = $.parseXML(xhr.responseText);
if (xhr.status === 200) {
$('.authPlexMachineMessage').text('Choose Plex Server');
$('.authPlexMachineHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning');
var machines = '';
$('Server', result).each(function(){
if($(this).attr('owned') == 1){
var name = $(this).attr('name');
var machine = $(this).attr('machineIdentifier');
machines += '';
}
});
var listing = '';
$('.authPlexMachineListing').html(listing);
} else {
$('.authPlexTokenMessage').text(xhr.statusText);
$('.authPlexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
}
}
});
} else {
$('.authPlexMachineMessage').text("Plex Token Needed");
$('.authPlexMachineHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
}
});
$(document).on('change', '#authPlexMachineSelector', function(e) {
$('#settings-main-form [name=plexID]').val($(this).val());
$('#settings-main-form [name=plexID]').change();
});
$(document).on("click", ".closeErrorPage", function () {
$('.error-page').html('');
$('.error-page').fadeOut();
});
// test Location
$(document).on("click", ".testPath", function () {
var path = $("#form-location").val();
if (typeof path == 'undefined' || path == '') {
message('Path Error',' Please enter a path for DB',activeInfo.settings.notifications.position,'#FFF','warning','10000');
}else{
organizrAPI('POST','api/?v1/wizard_path',{path:path}).success(function(data) {
var html = JSON.parse(data);
console.log(html);
if(html.data == true){
message('Path',' Path is good to go',activeInfo.settings.notifications.position,'#FFF','success','10000');
}else{
message('Path Error',' Path is not writable',activeInfo.settings.notifications.position,'#FFF','warning','10000');
}
}).fail(function(xhr) {
console.error("Organizr Function: Connection Failed");
});
}
});
$(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().find('.imageSource');
orginalElement.attr('style', 'background-image: url("'+original+'");');
orginalElementAlt.attr('src', original);
break;
default:
}
//console.log(orginalElement)
//console.log('replaced image with : '+original);
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':
var action = 'getEmbyMetadata';
break;
default:
}
ajaxloader(".content-wrap","in");
organizrAPI('POST','api/?v1/homepage/connect',{action:action, key:key}).success(function(data) {
var response = JSON.parse(data);
$('.'+uid+'-metadata-info').html('');
$('.'+uid+'-metadata-info').html(buildMetadata(response.data, source));
$('.'+uid).trigger('click');
$(".metadata-actors").owlCarousel({
autoplay: true,
slideSpeed : 300,
paginationSpeed : 400,
nav:false,
dots:false,
margin:10,
autoWidth:true,
items:4
});
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
ajaxloader();
$("#preloader").fadeOut();
});
// sab play/resume
$(document).on("click", ".downloader", function(e) {
var action = $(this).attr('data-action');
var source = $(this).attr('data-source');
var target = $(this).attr('data-target');
//console.log(action);
//console.log(source);
//console.log(target);
ajaxloader(".content-wrap","in");
organizrAPI('POST','api/?v1/downloader',{action:action, source:source, target:target}).success(function(data) {
var response = JSON.parse(data);
//console.log(response);
homepageDownloader(source);
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
ajaxloader();
});
// 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()
};
organizrAPI('POST','api/?v1/test/iframe',post).success(function(data) {
var html = JSON.parse(data);
if(html.data == true){
$('.tabTestMessage.alert-success').removeClass('hidden');
$('.tabTestMessage.alert-danger').addClass('hidden');
}else{
$('.tabTestMessage.alert-danger').removeClass('hidden');
$('.tabTestMessage.alert-success').addClass('hidden');
}
}).fail(function(xhr) {
console.error("Organizr Function: Check Failed");
});
}
});
$(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()
};
organizrAPI('POST','api/?v1/test/iframe',post).success(function(data) {
var html = JSON.parse(data);
if(html.data == true){
$('.tabEditTestMessage.alert-success').removeClass('hidden');
$('.tabEditTestMessage.alert-danger').addClass('hidden');
}else{
$('.tabEditTestMessage.alert-danger').removeClass('hidden');
$('.tabEditTestMessage.alert-success').addClass('hidden');
}
}).fail(function(xhr) {
console.error("Organizr Function: Check Failed");
});
}
});
// new api key
$(document).on("click", ".newAPIKey", function () {
$('#settings-main-form [name=organizrAPI]').val(generateCode());
$('#settings-main-form [name=organizrAPI]').change();
});
// purge logvcfdD\o8i 8
$(document).on("click", ".purgeLog", function () {
var name = $('.swapLog.active').attr('data-name');
var path = $('.swapLog.active').attr('data-path');
if(name !== '' && path !== ''){
removeFile(path,name);
setTimeout(function(){ loadSettingsPage('api/?v1/settings/settings/logs','#settings-settings-logs','Log Viewer'); }, 1500);
}
});
//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() });
Mousetrap.bind("s s", function() { openSettings() });
Mousetrap.bind("h h", function() { openHomepage() });
Mousetrap.bind("f f", function() { toggleFullScreen() });
Mousetrap.bind("esc", function () {
$('.splash-screen').removeClass('in').addClass('hidden')
});
$(document).on('change', "#new-tab-form-chooseImage", function (e) {
var newIcon = $('#new-tab-form-chooseImage').val();
if(newIcon !== 'Select or type Icon'){
$('#new-tab-form-inputImageNew').val(newIcon);
}
});
$(document).on('change', "#edit-tab-form-chooseImage", function (e) {
var newIcon = $('#edit-tab-form-chooseImage').val();
if(newIcon !== 'Select or type Icon'){
$('#edit-tab-form-inputImage').val(newIcon);
}
});
$(document).on('change', "#new-tab-form-chooseIcon", function (e) {
var newIcon = $('#new-tab-form-chooseIcon').val();
if(newIcon !== 'Select or type Icon'){
$('#new-tab-form-inputImageNew').val(newIcon);
}
});
$(document).on('change', "#edit-tab-form-chooseIcon", function (e) {
var newIcon = $('#edit-tab-form-chooseIcon').val();
if(newIcon !== 'Select or type Icon'){
$('#edit-tab-form-inputImage').val(newIcon);
}
});
$(document).on('change', "#choose-calender-filter", function (e) {
filter = $('#choose-calender-filter').val();
$('#calendar-filter-modal').modal('hide');
console.log("Calendar Filter: "+filter);
$('#calendar').fullCalendar('rerenderEvents');
});