// Create language switcher instance
var lang = new Lang();
loadLanguageList();
lang.init({
defaultLang: 'en',
currentLang: language(moment.locale(navigator.languages[0])),
cookie: {
name: 'organizrLanguage',
expiry: 365,
path: '/'
},
allowCookieOverride: true
});
var timeouts = {};
// Start Organizr
$(document).ready(function () {
launch();
});
/* NORMAL FUNCTIONS */
function getHiddenProp(){
var prefixes = ['webkit','moz','ms','o'];
// if 'hidden' is natively supported just return it
if ('hidden' in document) return 'hidden';
// otherwise loop over all the known prefixes until we find one
for (var i = 0; i < prefixes.length; i++){
if ((prefixes[i] + 'Hidden') in document)
return prefixes[i] + 'Hidden';
}
// otherwise it's not supported
return null;
}
function isHidden() {
var prop = getHiddenProp();
if (!prop) return false;
return document[prop];
}
function loadLanguageList(){
var languages = languageList();
$.each(languages, function(i,v) {
lang.dynamic(i, 'js/langpack/'+i+'.json');
});
lang.dynamic('strings', 'js/langpack/strings.json');
}
function languageList(){
return {
'en':{
'lang':'English',
'image':'plugins/images/languages/en.png'
},
'nb':{
'lang':'Bokmål',
'image':'plugins/images/languages/nb.png'
},
'nl':{
'lang':'Dutch',
'image':'plugins/images/languages/nl.png'
},
'fr':{
'lang':'French',
'image':'plugins/images/languages/fr.png'
},
'de':{
'lang':'German',
'image':'plugins/images/languages/de.png'
},
'de-ch':{
'lang':'German (Switzerland)',
'image':'plugins/images/languages/de-ch.png'
},
'it':{
'lang':'Italian',
'image':'plugins/images/languages/it.png'
}
};
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function contains(target, pattern){
var value = 0;
pattern.forEach(function(word){
value = value + target.includes(word);
});
return (value === 1)
}
function isNumberKey(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode;
if ((charCode < 48 || charCode > 57))
return false;
return true;
}
function timerIncrement() {
//check for cookieExpiry
if(hasCookie){
if(getCookie('organizrToken')){
//do nothing
}else{
location.reload();
}
}
idleTime = idleTime + 1;
if(activeInfo.settings.lockout.enabled){
if (idleTime > activeInfo.settings.lockout.timer && $('#lockScreen').length !== 1) {
if(activeInfo.user.groupID <= activeInfo.settings.lockout.minGroup && activeInfo.user.groupID >= activeInfo.settings.lockout.maxGroup){
lock();
}
}
}
}
function ajaxloader(element=null, action='out'){
var loader = `
`;
switch (action) {
case 'in':
case 'fadein':
$(loader).appendTo(element);
break;
case 'out':
case 'fadeout':
$('.ajaxloader').remove();
break;
default:
$('.ajaxloader').remove();
}
}
function getDefault(tabName,tabType){
if(getHash() === false){
if(tabName !== null && tabType !== null){
switchTab(tabName,tabType);
}else{
$('#side-menu').children().first().children().click()
}
}else{
var hashTab = getHash();
var hashType = getTabType(hashTab);
if (typeof hashTab !== 'undefined' && typeof hashType !== 'undefined') {
switchTab(hashTab,hashType);
}else{
console.warn("Tab Function: "+hashTab+" is not a defined tab");
}
}
}
function getTabType(tabName){
var tabType = $('#menu-'+tabName);
if (typeof tabType !== 'undefined') {
return tabType.attr('type');
}else{
return false;
}
}
function getHash(){
if ($(location).attr('hash')){
return $(location).attr('hash').substr(1);
}
return false;
}
function setHash(hash){
window.location.hash = '#'+hash;
}
function getQueryVariable(variable){
var query = window.location.search.substring(1);
console.log(query);
var vars = query.split("&");
console.log(vars);
for (var i=0;i';
}else{
return '';
}
}else{
return '';
}
}
function cleanClass(string){
return string.replace(/ +/g, "-").replace(/\W+/g, "-");
}
function noTabs(arrayItems){
if (arrayItems.data.user.loggedin === true) {
organizrConnect('api/?v1/no_tabs').success(function(data) {
var json = JSON.parse(data);
console.log("Organizr Function: No Tabs Available");
$(json.data).appendTo($('.organizr-area'));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}else {
$('.show-login').trigger('click');
}
}
function formatImage (icon) {
if (!icon.id || icon.text == 'Select or type Icon') {
return icon.text;
}
var baseUrl = "/user/pages/images/flags";
var $icon = $(
' ' + icon.text + ''
);
return $icon;
}
function formatIcon (icon) {
if (!icon.id || icon.text == 'Select or type Icon') {
return icon.text;
}
var $icon = $(
''+iconPrefix(icon.id)+ icon.text + ''
);
return $icon;
}
function logout(){
message('',' Goodbye!',activeInfo.settings.notifications.position,'#FFF','success','10000');
organizrAPI('GET','api/?v1/logout').success(function(data) {
var html = JSON.parse(data);
if(html.data == true){
location.reload();
}else{
message('Logout Error',' An Error Occured',activeInfo.settings.notifications.position,'#FFF','warning','10000');
console.error('Organizr Function: Logout failed');
}
}).fail(function(xhr) {
console.error("Organizr Function: Logout Failed");
});
}
function reloadOrganizr(){
location.reload();
}
function hideFrames(){
$(".iFrame-listing div[class^='frame-container']").addClass("hidden").removeClass('show');
$(".internal-listing div[class^='internal-container']").addClass("hidden").removeClass('show');
}
function closeSideMenu(){
$('.fix-header').removeClass('show-sidebar');
}
function removeMenuActive(){
$("#side-menu a").removeClass('active');
}
function swapDisplay(type){
switch (type) {
case 'internal':
$('body').removeClass('fix-header');
$('.iFrame-listing').addClass('hidden').removeClass('show');
$('.internal-listing').addClass('show').removeClass('hidden');
$('.login-area').addClass('hidden').removeClass('show');
//$('body').removeClass('fix-header');
break;
case 'iframe':
$('body').addClass('fix-header');
$('.iFrame-listing').addClass('show').removeClass('hidden');
$('.internal-listing').addClass('hidden').removeClass('show');
$('.login-area').addClass('hidden').removeClass('show');
//$('body').addClass('fix-header');
break;
case 'login':
$('body').removeClass('fix-header');
$('.iFrame-listing').addClass('hidden').removeClass('show');
$('.internal-listing').addClass('hidden').removeClass('show');
$('.login-area').addClass('show').removeClass('hidden');
if(activeInfo.settings.misc.minimalLoginScreen == true){
$('.sidebar').addClass('hidden');
$('.navbar').addClass('hidden');
$('#pagewrapper').addClass('hidden');
}
break;
default:
}
}
function toggleParentActive(tab){
var childTab = $('#menu-'+tab);
if(childTab.parent().hasClass('nav-second-level')){
if(!childTab.parent().hasClass('in')){
childTab.parent().addClass('collapse in');
childTab.parent().parent().addClass('active');
}
}
}
function swapBodyClass(tab){
var prior = $('body').attr('data-active-tab');
if(prior !== ''){
$('body').removeClass('active-tab-'+prior);
}
$('body').attr('data-active-tab', tab);
$('body').addClass('active-tab-'+tab);
}
function switchTab(tab, type){
if(type !== 2){
hideFrames();
closeSideMenu();
removeMenuActive();
toggleParentActive(tab);
setHash(tab);
swapBodyClass(tab);
}
switch (type) {
case 0:
case '0':
case 'internal':
swapDisplay('internal');
var newTab = $('#internal-'+tab);
var tabURL = newTab.attr('data-url');
$('#menu-'+cleanClass(tab)).find('a').addClass("active");
if(newTab.hasClass('loaded')){
console.log('Tab Function: Switching to tab: '+tab);
newTab.addClass("show").removeClass('hidden');
}else{
$("#preloader").fadeIn();
console.log('Tab Function: Loading new tab for: '+tab);
$('#menu-'+tab+' a').children().addClass('tabLoaded');
newTab.addClass("show loaded").removeClass('hidden');
loadInternal(tabURL,cleanClass(tab));
$("#preloader").fadeOut();
}
break;
case 1:
case '1':
case 'iframe':
swapDisplay('iframe');
var newTab = $('#container-'+tab);
var tabURL = newTab.attr('data-url');
$('#menu-'+cleanClass(tab)).find('a').addClass("active");
if(newTab.hasClass('loaded')){
console.log('Tab Function: Switching to tab: '+tab);
newTab.addClass("show").removeClass('hidden');
}else{
$("#preloader").fadeIn();
console.log('Tab Function: Loading new tab for: '+tab);
$('#menu-'+tab+' a').children().addClass('tabLoaded');
newTab.addClass("show loaded").removeClass('hidden');
$(buildFrame(tab,tabURL)).appendTo(newTab);
$("#preloader").fadeOut();
}
break;
case 2:
case 3:
case '2':
case '3':
case '_blank':
case 'popout':
popTab(cleanClass(tab), type);
break;
default:
console.error('Tab Function: Action not set');
}
}
function popTab(tab, type){
switch (type) {
case 0:
case '0':
case 'internal':
console.warn('Tab Function: New window not supported for tab: '+tab);
break;
case 1:
case '1':
case 'iframe':
case 2:
case 3:
case '2':
case '3':
case '_blank':
case 'popout':
console.log('Tab Function: Creating New Window for tab: '+tab);
var url = $('#menu-'+cleanClass(tab)).attr('data-url');
window.open(url, '_blank');
break;
default:
console.error('Tab Function: Action not set');
}
}
function closeTab(tab, type){
}
function reloadTab(tab, type){
$("#preloader").fadeIn();
console.log('Tab Function: Reloading tab: '+tab);
switch (type) {
case 0:
case '0':
case 'internal':
break;
case 1:
case '1':
case 'iframe':
$('#frame-'+cleanClass(tab)).attr('src', $('#frame-'+cleanClass(tab)).attr('src'));
break;
case 2:
case 3:
case '2':
case '3':
case '_blank':
case 'popout':
break;
default:
console.error('Tab Function: Action not set');
}
$("#preloader").fadeOut();
}
function reloadCurrentTab(){
$("#preloader").fadeIn();
console.log('Tab Function: Reloading Current tab');
var iframe = $('.iFrame-listing').find('.show');
var internal = $('.internal-listing').find('.show');
if(iframe.length > 0){
var type = 'iframe';
}else if(internal.length > 0){
var type = 'internal';
}else{
var type = 'not set';
}
switch (type) {
case 0:
case '0':
case 'internal':
var activeInternal = $('.internal-listing').find('.show');
$(activeInternal).html('');
loadInternal(activeInternal.attr('data-url'),activeInternal.attr('data-name'));
break;
case 1:
case '1':
case 'iframe':
var activeFrame = $('.iFrame-listing').find('.show').children('iframe');
activeFrame.attr('src', activeFrame.attr('src'));
break;
case 2:
case 3:
case '2':
case '3':
case '_blank':
case 'popout':
break;
default:
console.error('Tab Function: Action not set');
}
$("#preloader").fadeOut();
}
function loadNextTab(){
var next = $('#page-wrapper').find('.loaded').attr('data-name');
if (typeof next !== 'undefined') {
var type = $('#page-wrapper').find('.loaded').attr('data-type');
switchTab(next,type);
}else{
console.log("Tab Function: No Available Tab to open");
}
}
function closeCurrentTab(){
var iframe = $('.iFrame-listing').find('.show');
var internal = $('.internal-listing').find('.show');
if(iframe.length > 0){
var type = 'iframe';
}else if(internal.length > 0){
var type = 'internal';
}else{
var type = 'not set';
}
switch (type) {
case 0:
case '0':
case 'internal':
var tab = $('.internal-listing').find('.show').attr('data-name');
console.log('Tab Function: Closing tab: '+tab);
$('#internal-'+cleanClass(tab)).html('');
$('#menu-'+cleanClass(tab)+' a').removeClass("active");
$('#menu-'+tab+' a').children().removeClass('tabLoaded');
$('#internal-'+cleanClass(tab)).removeClass("loaded show");
$('#menu-'+cleanClass(tab)).removeClass("active");
loadNextTab();
break;
case 1:
case '1':
case 'iframe':
var tab = $('.iFrame-listing').find('.show').children('iframe').attr('data-name');
console.log('Tab Function: Closing tab: '+tab);
$('#menu-'+cleanClass(tab)+' a').removeClass("active");
$('#menu-'+tab+' a').children().removeClass('tabLoaded');
$('#container-'+cleanClass(tab)).removeClass("loaded show");
$('#frame-'+cleanClass(tab)).remove();
loadNextTab();
break;
case 2:
case 3:
case '2':
case '3':
case '_blank':
case 'popout':
break;
default:
console.error('Tab Function: Action not set');
}
}
function tabActions(event,name, type){
$('.splash-screen').removeClass('in').addClass('hidden');
if(event.ctrlKey){
popTab(cleanClass(name), type);
}else if(event.altKey){
console.log('alt key');
}else if(event.shiftKey){
reloadTab(cleanClass(name), type);
}else{
switchTab(cleanClass(name), type);
}
}
function reverseObject(object) {
var newObject = {};
var keys = [];
for (var key in object) {
keys.push(key);
}
for (var i = keys.length - 1; i >= 0; i--) {
var value = object[keys[i]];
newObject[keys[i]]= value;
}
return newObject;
}
function hasValue(test){
if(Array.isArray(test) && test[0] !== ''){
return true;
}else{
return false;
}
return false;
}
function arrayContains(needle, arrhaystack){
return (arrhaystack.indexOf(needle) > -1);
}
/* END NORMAL FUNCTIONS */
/* BUILD FUNCTIONS */
/* END BUILD FUNCTIONS */
/* ORGANIZR API FUNCTIONS */
function selectOptions(options, active){
var selectOptions = '';
$.each(options, function(i,v) {
activeTest = active.split(',');
if(activeTest.length > 1){
var selected = (arrayContains(v.value, activeTest)) ? 'selected' : '';
}else{
var selected = (active.toString() == v.value) ? 'selected' : '';
}
var disabled = (v.disabled) ? ' disabled' : '';
selectOptions += '';
});
return selectOptions;
}
function accordionOptions(options, parentID){
//console.log(options);
var accordionOptions = '';
$.each(options, function(i,v) {
var id = v.id;
var extraClass = (v.class) ? ' '+v.class : '';
var header = (v.header) ? ' '+v.header : '';
if(typeof v.body == 'object'){
if(typeof v.body.length == 'undefined'){
var body = buildFormItem(v.body);
}else{
var body = '';
$.each(v.body, function(int,val) {
body += buildFormItem(val);
});
}
}else{
var body = v.body;
}
accordionOptions += `
`;
});
return accordionOptions;
}
function buildFormItem(item){
var placeholder = (item.placeholder) ? ' placeholder="'+item.placeholder+'"' : '';
var id = (item.id) ? ' id="'+item.id+'"' : '';
var type = (item.type) ? ' data-type="'+item.type+'"' : '';
var value = (item.value) ? ' value="'+item.value+'"' : '';
var textarea = (item.value) ? item.value : '';
var name = (item.name) ? ' name="'+item.name+'"' : '';
var extraClass = (item.class) ? ' '+item.class : '';
var icon = (item.icon) ? ' '+item.icon : '';
var text = (item.text) ? ' '+item.text : '';
var attr = (item.attr) ? ' '+item.attr : '';
var disabled = (item.disabled) ? ' disabled' : '';
var href = (item.href) ? ' href="'+item.href+'"' : '';
var pwd1 = createRandomString(6);
var pwd2 = createRandomString(6);
var pwd3 = createRandomString(6);
var helpInfo = (item.help) ? '
'+item.help+'
' : '';
var smallLabel = (item.smallLabel) ? ''+helpInfo : ''+helpInfo;
var pwgMgr = `
`;
//+tof(item.value,'c')+`
switch (item.type) {
case 'input':
case 'text':
return smallLabel+'';
break;
case 'number':
return smallLabel+'';
break;
case 'textbox':
return smallLabel+'';
break;
case 'password':
return smallLabel+pwgMgr+'';
break;
case 'password-alt':
return smallLabel+'
'+pwgMgr+'
';
break;
case 'hidden':
return '';
break;
case 'select':
return smallLabel+'';
break;
case 'select2':
return smallLabel+'';
break;
case 'switch':
case 'checkbox':
return smallLabel+'';
break;
case 'button':
return smallLabel+'';
break;
case 'blank':
return '';
break;
case 'accordion':
return '
'+accordionOptions(item.options, item.id)+'
';
break;
case 'html':
return item.html;
break;
default:
return false;
}
}
function buildPluginsItem(array){
var activePlugins = '';
var inactivePlugins = '';
$.each(array, function(i,v) {
var settingsPage = (v.settings == true) ? `
` : '';
var href = (v.settings == true) ? '#'+v.idPrefix+'-settings-page' : 'javascript:void(0);';
if(v.enabled == true){
var activeToggle = `
`;
$.each(v, function(i,v) {
var override = '6';
if(typeof v.override !== 'undefined'){
override = v.override;
}
count++;
if (count % 2 !== 0) {
group += '
';
}
var helpID = '#help-info-'+v.name;
var helpTip = (v.help) ? '' : '';
group += `
`+buildFormItem(v)+`
`;
if (count % 2 == 0 || count == total) {
group += '
';
}
});
group += '
';
}
});
return uList+'
'+group;
}
function buildImageManagerViewItem(array){
var imageListing = '';
if (Array.isArray(array)) {
$.each(array, function(i,v) {
var filepath = v.split("/");
var name = filepath[3].split(".");
imageListing += `
`+name[0]+`
`;
});
}
return imageListing;
}
function buildImageManagerView(){
organizrAPI('GET','api/?v1/image/list').success(function(data) {
var response = JSON.parse(data);
$('#settings-image-manager-list').html(buildImageManagerViewItem(response.data));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}
function buildCustomizeAppearance(){
organizrAPI('GET','api/?v1/customize/appearance').success(function(data) {
var response = JSON.parse(data);
$('#customize-appearance-form').html(buildFormGroup(response.data));
cssEditor = ace.edit("customCSSEditor");
var CssMode = ace.require("ace/mode/css").Mode;
cssEditor.session.setMode(new CssMode());
cssEditor.setTheme("ace/theme/idle_fingers");
cssEditor.setShowPrintMargin(false);
cssEditor.session.on('change', function(delta) {
$('.cssTextarea').val(cssEditor.getValue());
$('#customize-appearance-form-save').removeClass('hidden');
});
cssThemeEditor = ace.edit("customThemeCSSEditor");
var CssThemeMode = ace.require("ace/mode/css").Mode;
cssThemeEditor.session.setMode(new CssThemeMode());
cssThemeEditor.setTheme("ace/theme/idle_fingers");
cssThemeEditor.setShowPrintMargin(false);
cssThemeEditor.session.on('change', function(delta) {
$('.cssThemeTextarea').val(cssThemeEditor.getValue());
$('#customize-appearance-form-save').removeClass('hidden');
});
javaEditor = ace.edit("customJavaEditor");
var JavaMode = ace.require("ace/mode/javascript").Mode;
javaEditor.session.setMode(new JavaMode());
javaEditor.setTheme("ace/theme/idle_fingers");
javaEditor.setShowPrintMargin(false);
javaEditor.session.on('change', function(delta) {
$('.javaTextarea').val(javaEditor.getValue());
$('#customize-appearance-form-save').removeClass('hidden');
});
javaThemeEditor = ace.edit("customThemeJavaEditor");
var JavaThemeMode = ace.require("ace/mode/javascript").Mode;
javaThemeEditor.session.setMode(new JavaThemeMode());
javaThemeEditor.setTheme("ace/theme/idle_fingers");
javaThemeEditor.setShowPrintMargin(false);
javaThemeEditor.session.on('change', function(delta) {
$('.javaThemeTextarea').val(javaThemeEditor.getValue());
$('#customize-appearance-form-save').removeClass('hidden');
});
$("input.pick-a-color").ColorPickerSliders({
placement: 'bottom',
color: '#987654',
hsvpanel: true,
previewformat: 'hex',
});
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}
function buildSSO(){
organizrAPI('GET','api/?v1/sso').success(function(data) {
var response = JSON.parse(data);
$('#sso-form').html(buildFormGroup(response.data));
}).fail(function (xhr) {
console.error("Organizr Function: API Connection Failed");
});
}
function buildSettingsMain(){
organizrAPI('GET','api/?v1/settings/main').success(function(data) {
var response = JSON.parse(data);
$('#settings-main-form').html(buildFormGroup(response.data));
changeAuth();
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}
function buildUserManagement(){
organizrAPI('GET','api/?v1/user/list').success(function(data) {
var response = JSON.parse(data);
$('#manageUserTable').html(buildUserManagementItem(response.data));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}
function buildGroupManagement(){
organizrAPI('GET','api/?v1/user/list').success(function(data) {
var response = JSON.parse(data);
$('#manageGroupTable').html(buildGroupManagementItem(response.data));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}
function buildTabEditor(){
organizrAPI('GET','api/?v1/tab/list').success(function(data) {
var response = JSON.parse(data);
$('#tabEditorTable').html(buildTabEditorItem(response.data));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}
function buildCategoryEditor(){
organizrAPI('GET','api/?v1/tab/list').success(function(data) {
var response = JSON.parse(data);
$('#categoryEditorTable').html(buildCategoryEditorItem(response.data));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}
function settingsAPI(post, callbacks=null){
organizrAPI('POST',post.api,post).success(function(data) {
var response = JSON.parse(data);
console.log(response);
message(post.messageTitle,post.messageBody,activeInfo.settings.notifications.position,"#FFF","success","5000");
if(callbacks){ callbacks.fire(); }
}).fail(function(xhr) {
console.error(post.error);
});
}
/* END ORGANIZR API FUNCTIONS */
function buildLanguage(replace=false,newLang=null){
var languages = languageList();
var languageItems = '';
var currentLanguage = (getCookie('organizrLanguage')) ? getCookie('organizrLanguage') : window.lang.currentLang;
$.each(languages, function(i,v) {
var active = (i == currentLanguage) ? '' : '';
languageItems += `
`;
}else{
items += `
`;
}
}
});
return items;
}
function buildRequestAdminMenuItem(value,category,id,type){
var action = '';
var text = '';
var extra = '';
switch (category) {
case 'approved':
if(value){
//nada
}else{
action = 'approve';
text = 'Approve';
extra = `
` : '';
}
function pagination(c, m) {
var current = c,
last = m,
delta = 2,
left = current - delta,
right = current + delta + 1,
range = [],
rangeWithDots = [],
l;
for (let i = 1; i <= last; i++) {
if (i == 1 || i == last || i >= left && i < right) {
range.push(i);
}
}
for (let i of range) {
if (l) {
if (i - l === 2) {
rangeWithDots.push(l + 1);
} else if (i - l !== 1) {
rangeWithDots.push('...');
}
}
rangeWithDots.push(i);
l = i;
}
return rangeWithDots;
}
function buildRequestResult(array,media_type=null,list=null,page=null,search=false){
var comments = (typeof array.comments !== 'undefined') ? true : false;
var comment = '';
var results = ``;
var buttons = ``;
var next = ``;
var tv = 0;
var movie = 0;
var total = 0;
var totalPages = array.total_pages;
var currentPage = (page * 1);
var pagePrevious = ((page * 1) - 1);
var pageNext = ((page * 1) + 1);
var pageFirst = 1;
var pageLast = totalPages;
var previousHidden = (currentPage == 1) ? 'disabled' : '';
var nextHidden = (currentPage == totalPages) ? 'disabled' : '';
var pageList = '';
if(array.results.length == 0){
return '
No Results
';
}
$.each(array.results, function(i,v) {
media_type = (v.media_type) ? v.media_type : media_type;
if(media_type == 'tv' || media_type == 'movie'){
total = total + 1;
tv = (media_type == 'tv') ? tv + 1 : tv;
movie = (media_type == 'movie') ? movie + 1 : movie;
var bg = (v.poster_path !== null) ? `https://image.tmdb.org/t/p/w300/`+v.poster_path : 'plugins/images/cache/no-list.png';
var top = (v.title) ? v.title : (v.original_title) ? v.original_title : (v.original_name) ? v.original_name : '';
var bottom = (v.release_date) ? v.release_date : (v.first_air_date) ? v.first_air_date : '';
if(comments){
if(array.comments[media_type+':'+v.id] !== null){
comment = array.comments[media_type+':'+v.id];
}
}
results += `
`;
});
break;
default:
}
break;
case 'transmission':
switch (type) {
case 'queue':
if(array.arguments.torrents == 0){
return '
Nothing in queue
';
}
$.each(array.arguments.torrents, function(i,v) {
switch (v.status) {
case 7:
case '7':
var status = 'No Peers';
break;
case 6:
case '6':
var status = 'Seeding';
break;
case 5:
case '5':
var status = 'Seeding Queued';
break;
case 4:
case '4':
var status = 'Downloading';
break;
case 3:
case '3':
var status = 'Queued';
break;
case 2:
case '2':
var status = 'Checking Files';
break;
case 1:
case '1':
var status = 'File Check Queued';
break;
case 0:
case '0':
var status = 'Complete';
break;
default:
var status = 'Complete';
}
var percent = Math.floor(v.percentDone * 100);
v.Category = (v.Category !== '') ? v.Category : 'Not Set';
items += `
`+v.name+`
`+status+`
`+v.downloadDir+`
`+humanFileSize(v.totalSize,true)+`
`+percent+`%
`;
});
break;
default:
}
break;
case 'qBittorrent':
switch (type) {
case 'queue':
if(array.arguments.torrents == 0){
return '
Nothing in queue
';
}
$.each(array.arguments.torrents, function(i,v) {
switch (v.state) {
case 'stalledDL':
var status = 'No Peers';
break;
case 'metaDL':
var status = 'Getting Metadata';
break;
case 'uploading':
var status = 'Seeding';
break;
case 'queuedUP':
var status = 'Seeding Queued';
break;
case 'downloading':
var status = 'Downloading';
break;
case 'queuedDL':
var status = 'Queued';
break;
case 'checkingDL':
case 'checkingUP':
var status = 'Checking Files';
break;
case 'pausedDL':
var status = 'Paused';
break;
case 'pausedUP':
var status = 'Complete';
break;
default:
var status = 'Complete';
}
var percent = Math.floor(v.progress * 100);
var size = v.total_size != -1 ? humanFileSize(v.total_size,true) : "?";
items += `
`+v.name+`
`+status+`
`+v.save_path+`
`+size+`
`+percent+`%
`;
});
break;
default:
}
break;
case 'deluge':
switch (type) {
case 'queue':
if(array.length == 0){
return '
`;
}
var seconds = v.metadata.duration / 1000 ; // or "2000"
seconds = parseInt(seconds); //because moment js dont know to handle number in string format
var format = Math.floor(moment.duration(seconds,'seconds').asHours()) + ':' + moment.duration(seconds,'seconds').minutes() + ':' + moment.duration(seconds,'seconds').seconds();
metadata = `
`;
});
return metadata;
}
function buildYoutubeLink(title){
if(title){
var str = createRandomString(10);
return `
`;
}
}
function buildCalendarMetadata(array){
var metadata = '';
var genres = '';
var actors = '';
var rating = '';
var hasGenre = (typeof array.genres !== 'string') ? true : false;
if(hasGenre){
$.each(array.genres, function(i,v) {
genres += ''+v+'';
});
}
if(array.ratings){
var ratingRound = Math.ceil(array.ratings)*10;
rating = `
`;
}
var seconds = array.runtime / 1000 ; // or "2000"
seconds = parseInt(seconds); //because moment js dont know to handle number in string format
var format = Math.floor(moment.duration(seconds,'seconds').asHours()) + ':' + moment.duration(seconds,'seconds').minutes() + ':' + moment.duration(seconds,'seconds').seconds();
metadata = `
`;
return metadata;
}
function homepageDownloader(type, timeout){
var timeout = (typeof timeout !== 'undefined') ? timeout : activeInfo.settings.homepage.refresh.homepageDownloadRefresh;
//if(isHidden()){ return; }
switch (type) {
case 'sabnzbd':
var action = 'getSabnzbd';
break;
case 'nzbget':
var action = 'getNzbget';
break;
case 'transmission':
var action = 'getTransmission';
break;
case 'qBittorrent':
var action = 'getqBittorrent';
break;
case 'deluge':
var action = 'getDeluge';
break;
default:
}
organizrAPI('POST','api/?v1/homepage/connect',{action:action}).success(function(data) {
var response = JSON.parse(data);
document.getElementById('homepageOrder'+type).innerHTML = '';
if(response.data !== null){
$('#homepageOrder'+type).html(buildDownloader(response.data, type));
}
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
var timeoutTitle = type+'-Downloader';
if(typeof timeouts[timeoutTitle] !== 'undefined'){ clearTimeout(timeouts[timeoutTitle]); }
timeouts[timeoutTitle] = setTimeout(function(){ homepageDownloader(type,timeout); }, timeout);
}
function homepageStream(type, timeout){
var timeout = (typeof timeout !== 'undefined') ? timeout : activeInfo.settings.homepage.refresh.homepageStreamRefresh;
switch (type) {
case 'plex':
var action = 'getPlexStreams';
break;
case 'emby':
var action = 'getEmbyStreams';
break;
default:
}
organizrAPI('POST','api/?v1/homepage/connect',{action:action}).success(function(data) {
var response = JSON.parse(data);
document.getElementById('homepageOrder'+type+'nowplaying').innerHTML = '';
$('#homepageOrder'+type+'nowplaying').html(buildStream(response.data, type));
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
var timeoutTitle = type+'-Stream';
if(typeof timeouts[timeoutTitle] !== 'undefined'){ clearTimeout(timeouts[timeoutTitle]); }
timeouts[timeoutTitle] = setTimeout(function(){ homepageStream(type,timeout); }, timeout);
}
function homepageRecent(type, timeout){
var timeout = (typeof timeout !== 'undefined') ? timeout : activeInfo.settings.homepage.refresh.homepageRecentRefresh;
//if(isHidden()){ return; }
switch (type) {
case 'plex':
var action = 'getPlexRecent';
break;
case 'emby':
var action = 'getEmbyRecent';
break;
default:
}
organizrAPI('POST','api/?v1/homepage/connect',{action:action}).success(function(data) {
var response = JSON.parse(data);
document.getElementById('homepageOrder'+type+'recent').innerHTML = '';
$('#homepageOrder'+type+'recent').html(buildRecent(response.data, type));
$('.recent-items').owlCarousel({
nav:false,
autoplay:false,
dots:false,
margin:10,
autoWidth:true,
items:4
})
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
var timeoutTitle = type+'-Recent';
if(typeof timeouts[timeoutTitle] !== 'undefined'){ clearTimeout(timeouts[timeoutTitle]); }
timeouts[timeoutTitle] = setTimeout(function(){ homepageRecent(type,timeout); }, timeout);
}
function homepagePlaylist(type, timeout=30000){
//if(isHidden()){ return; }
switch (type) {
case 'plex':
var action = 'getPlexPlaylists';
break;
default:
}
organizrAPI('POST','api/?v1/homepage/connect',{action:action}).success(function(data) {
var response = JSON.parse(data);
document.getElementById('homepageOrder'+type+'playlist').innerHTML = '';
$('#homepageOrder'+type+'playlist').html(buildPlaylist(response.data, type));
$('.playlist-items').owlCarousel({
nav:false,
autoplay:false,
dots:false,
margin:10,
autoWidth:true,
items:4
})
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
}
function homepageRequests(timeout){
var timeout = (typeof timeout !== 'undefined') ? timeout : activeInfo.settings.homepage.refresh.ombiRefresh;
organizrAPI('POST','api/?v1/homepage/connect',{action:'getRequests'}).success(function(data) {
var response = JSON.parse(data);
document.getElementById('homepageOrderombi').innerHTML = '';
if(response.data.content !== false){
$('#homepageOrderombi').html(buildRequest(response.data));
}
$('.request-items').owlCarousel({
nav:false,
autoplay:false,
dots:false,
margin:10,
autoWidth:true,
items:4
})
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
if(typeof timeouts['ombi'] !== 'undefined'){ clearTimeout(timeouts['ombi']); }
timeouts['ombi'] = setTimeout(function(){ homepageRequests(timeout); }, timeout);
}
function testAPIConnection(service){
messageSingle('',' Testing now...',activeInfo.settings.notifications.position,'#FFF','info','10000');
organizrAPI('POST','api/?v1/test/api/connection',{action:service}).success(function(data) {
var response = JSON.parse(data);
if(response.data == true){
messageSingle('',' API Connection Success',activeInfo.settings.notifications.position,'#FFF','success','10000');
}else{
messageSingle('API Connection Failed',response.data,activeInfo.settings.notifications.position,'#FFF','error','10000');
}
console.log(response);
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
message('',' Organizr Error',activeInfo.settings.notifications.position,'#FFF','error','10000');
});
}
function homepageCalendar(timeout){
var timeout = (typeof timeout !== 'undefined') ? timeout : activeInfo.settings.homepage.refresh.calendarRefresh;
if(activeInfo.settings.homepage.options.alternateHomepageHeaders){
$('.fc-toolbar').addClass('fc-alternate');
}
organizrAPI('POST','api/?v1/homepage/connect',{action:'getCalendar'}).success(function(data) {
var response = JSON.parse(data);
$('#calendar').fullCalendar('removeEvents');
$('#calendar').fullCalendar('addEventSource', response.data.events);
$('#calendar').fullCalendar('addEventSource', response.data.ical);
response = '';
}).fail(function(xhr) {
console.error("Organizr Function: API Connection Failed");
});
if(typeof timeouts['calendar'] !== 'undefined'){ clearTimeout(timeouts['calendar']); }
timeouts['calendar'] = setTimeout(function(){ homepageCalendar(timeout); }, timeout);
}
function clearAJAX(id='all'){
if(id == 'all'){
$.each(timeouts, function(i,v) {
clearTimeout(timeouts[i]);
});
}else{
clearTimeout(timeouts[id]);
}
}
//Generate API
function generateCode() {
var code = "";
var possible = "abcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < 20; i++)
code += possible.charAt(Math.floor(Math.random() * possible.length));
return code;
}
// uppercase word
function toUpper(str) {
return str
.toLowerCase()
.split(' ')
.map(function(word) {
return word[0].toUpperCase() + word.substr(1);
})
.join(' ');
}
// human filesize
function humanFileSize(bytes, si) {
var thresh = si ? 1000 : 1024;
if(Math.abs(bytes) < thresh) {
return bytes + ' B';
}
var units = si
? ['kB','MB','GB','TB','PB','EB','ZB','YB']
: ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];
var u = -1;
do {
bytes /= thresh;
++u;
} while(Math.abs(bytes) >= thresh && u < units.length - 1);
return bytes.toFixed(1)+' '+units[u];
}
//youtube search
function youtubeSearch(searchQuery) {
return $.ajax({
url: "https://www.googleapis.com/youtube/v3/search?part=snippet&q="+searchQuery+"+official+trailer&part=snippet&maxResults=1&type=video&videoDuration=short&key=AIzaSyD-8SHutB60GCcSM8q_Fle38rJUV7ujd8k",
});
}
function youtubeCheck(title,link){
youtubeSearch(title).success(function(data) {
inlineLoad();
var id = data.items["0"].id.videoId;
var div = `
`;
$('.youtube-div').html(div);
$('.'+link).trigger('click');
player = new Plyr('#player-'+link);
}).fail(function(xhr) {
console.error("Organizr Function: YouTube Connection Failed");
});
}
//request search
function requestSearch(title,page=1) {
return $.ajax({
url: "https://api.themoviedb.org/3/search/multi?api_key=83cf4ee97bb728eeaf9d4a54e64356a1&language="+activeInfo.language+"&query="+title+"&page="+page+"&include_adult=false",
});
}
function requestSearchList(list,page=1) {
var url = '';
switch (list) {
case 'top-movie':
url = 'https://api.themoviedb.org/3/movie/top_rated?api_key=83cf4ee97bb728eeaf9d4a54e64356a1&language='+activeInfo.language+'®ion=US&page='+page;
break;
case 'pop-movie':
url = 'https://api.themoviedb.org/3/movie/popular?api_key=83cf4ee97bb728eeaf9d4a54e64356a1&language='+activeInfo.language+'®ion=US&page='+page;
break;
case 'up-movie':
url = 'https://api.themoviedb.org/3/movie/upcoming?api_key=83cf4ee97bb728eeaf9d4a54e64356a1&language='+activeInfo.language+'®ion=US&page='+page;
break;
case 'theatre-movie':
url = 'https://api.themoviedb.org/3/movie/now_playing?api_key=83cf4ee97bb728eeaf9d4a54e64356a1&language='+activeInfo.language+'®ion=US&page='+page;
break;
case 'top-tv':
url = 'https://api.themoviedb.org/3/tv/top_rated?api_key=83cf4ee97bb728eeaf9d4a54e64356a1&language='+activeInfo.language+'®ion=US&page='+page;
break;
case 'pop-tv':
url = 'https://api.themoviedb.org/3/tv/popular?api_key=83cf4ee97bb728eeaf9d4a54e64356a1&language='+activeInfo.language+'®ion=US&page='+page;
break;
case 'today-tv':
url = 'https://api.themoviedb.org/3/tv/airing_today?api_key=83cf4ee97bb728eeaf9d4a54e64356a1&language='+activeInfo.language+'®ion=US&page='+page;
break;
case 'org-mod':
url = 'https://api.themoviedb.org/4/list/64438?api_key=83cf4ee97bb728eeaf9d4a54e64356a1&language='+activeInfo.language+'®ion=US&page='+page;
break;
default:
}
return $.ajax({
url: url,
});
}
function requestNewID(id) {
return $.ajax({
url: "https://api.themoviedb.org/3/tv/"+id+"/external_ids?api_key=83cf4ee97bb728eeaf9d4a54e64356a1&language=en-US",
});
}
function inlineLoad(){
$('.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 = '#request-input';
},
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.
});
}
//Settings change auth
function changeAuth(){
var type = $('#authSelect').val();
var service = $('#authBackendSelect').val();
switch (service) {
case 'plex':
$('.switchAuth').parent().parent().parent().hide();
$('.backendAuth').parent().parent().parent().show();
$('.plexAuth').parent().parent().parent().show();
break;
case 'emby_local':
case 'emby_connect':
case 'emby_all':
$('.switchAuth').parent().parent().parent().hide();
$('.backendAuth').parent().parent().parent().show();
$('.embyAuth').parent().parent().parent().show();
break;
case 'ftp':
$('.switchAuth').parent().parent().parent().hide();
$('.backendAuth').parent().parent().parent().show();
$('.ftpAuth').parent().parent().parent().show();
break;
case 'ldap':
$('.switchAuth').parent().parent().parent().hide();
$('.backendAuth').parent().parent().parent().show();
$('.ldapAuth').parent().parent().parent().show();
break;
default:
$('.switchAuth').parent().parent().parent().hide();
$('.backendAuth').parent().parent().parent().show();
}
if(type == 'internal') { $('.switchAuth').parent().parent().parent().hide(); }
}
function organizrSpecialSettings(array){
//media search
if(array.settings.homepage.search.enabled == true && typeof array.settings.homepage.search.type !== 'undefined'){
var htmlDOM = `
`;
var searchBoxResults = `
`;
$(htmlDOM).prependTo('.navbar-right');
$(searchBoxResults).appendTo($('.organizr-area'));
}
}
function forceSearch(term){
$.magnificPopup.close();
var tabName = $("li[data-url^='api/?v1/homepage/page']").find('span').html();
if($("li[data-url^='api/?v1/homepage/page']").find('i').hasClass('tabLoaded')){
console.log('yup');
if($("li[data-url^='api/?v1/homepage/page']").find('a').hasClass('active')){
setTimeout(
function(){
$('#newRequestButton').trigger('click');
$('#request-input').val(term);
doneTyping();
},
1000);
}else{
tabActions('click',tabName,0);
setTimeout(
function(){
$('#newRequestButton').trigger('click');
$('#request-input').val(term);
doneTyping();
},
1000);
}
}else{
tabActions('click',tabName,0);
setTimeout(
function(){
$('#newRequestButton').trigger('click');
$('#request-input').val(term);
doneTyping();
},
3000);
}
}
function splitPoster(str){
var words = str.split(' ');
var newWord = '';
$.each(words, function(i,v) {
newWord += v+' ';
});
return newWord;
}
function buildMediaResults(array,source,term){
if(array.content.length == 0){
var none = '
No Results for:
'+term+'
';
none += (activeInfo.settings.homepage.ombi.enabled == true) ? `` : '';
return none;
}
var results = '';
var tv = 0;
var movie = 0;
var music = 0;
var total = 0;
$.each(array.content, function(i,v) {
total = total + 1;
tv = (v.type == 'tv') ? tv + 1 : tv;
movie = (v.type == 'movie') ? movie + 1 : movie;
music = (v.type == 'music') ? music + 1 : music;
var bg = v.imageURL;
var top = v.title;
var bottom = v.metadata.originallyAvailableAt;
results += `