function initConfigCheckbox(elem) { var config = $(elem).closest('div').next(); config.css('overflow', 'hidden'); if ($(elem).is(":checked")) { config.show(); } else { config.hide(); } $(elem).click(function () { var config = $(this).closest('div').next(); if ($(this).is(":checked")) { config.slideDown(); } else { config.slideUp(); } }); } function refreshTab() { var url = $(location).attr('href'); var tabId = $('.ui-tabs-panel:visible').attr("id"); $('.ui-tabs-panel:visible').load(url + " #" + tabId, function () { initThisPage(); }); } function showMsg(msg, loader, timeout, ms, error) { var feedback = $("#ajaxMsg"); update = $("#updatebar"); if (update.is(":visible")) { var height = update.height() + 35; feedback.css("bottom", height + "px"); } else { feedback.removeAttr("style"); } var message = $("
days
' + 'hrs
' + 'mins
'; return text; } else if (seconds >= 3600) { text = 'hrs
' + 'mins
'; return text; } else if (seconds >= 60) { text = 'mins
'; return text; } else { text = 'mins
'; return text; } } function humanTimeClean(seconds) { if (seconds >= 86400) { text = Math.floor(moment.duration(seconds, 'seconds').asDays()) + ' days ' + Math.floor(moment.duration(( seconds % 86400), 'seconds').asHours()) + ' hrs ' + Math.floor(moment.duration( ((seconds % 86400) % 3600), 'seconds').asMinutes()) + ' mins'; return text; } else if (seconds >= 3600) { text = Math.floor(moment.duration((seconds % 86400), 'seconds').asHours()) + ' hrs ' + Math.floor(moment.duration( ((seconds % 86400) % 3600), 'seconds').asMinutes()) + ' mins'; return text; } else if (seconds >= 60) { text = Math.floor(moment.duration(((seconds % 86400) % 3600), 'seconds').asMinutes()) + ' mins'; return text; } else { text = '0'; return text; } } String.prototype.toProperCase = function () { return this.replace(/\w\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }); }; function millisecondsToMinutes(ms, roundToMinute) { if (ms > 0) { seconds = ms / 1000; minutes = seconds / 60; if (roundToMinute) { output = Math.round(minutes, 0) } else { minutesFloor = Math.floor(minutes); secondsReal = Math.round((seconds - (minutesFloor * 60)), 0); if (secondsReal < 10) { secondsReal = '0' + secondsReal; } output = minutesFloor + ':' + secondsReal; } return output; } else { if (roundToMinute) { return '0'; } else { return '0:00'; } } } // Our countdown plugin takes a callback, a duration, and an optional message $.fn.countdown = function (callback, duration, message) { // If no message is provided, we use an empty string message = message || ""; // Get reference to container, and set initial content var container = $(this[0]).html(duration + message); // Get reference to the interval doing the countdown var countdown = setInterval(function () { // If seconds remain if (--duration) { // Update our container's message container.html(duration + message); // Otherwise } else { // Clear the countdown interval clearInterval(countdown); // And fire the callback passing our container as `this` callback.call(container); } // Run interval every 1000ms (1 second) }, 1000); }; function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); var expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + "; " + expires; } function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') c = c.substring(1); if (c.indexOf(name) == 0) return c.substring(name.length, c.length); } return ""; } var Accordion = function (el, multiple) { this.el = el || {}; this.multiple = multiple || false; // Variables privadas var links = this.el.find('.link'); // Evento links.on('click', { el: this.el, multiple: this.multiple }, this.dropdown) } Accordion.prototype.dropdown = function (e) { var $el = e.data.el; $this = $(this), $next = $this.next(); $next.slideToggle(); $this.parent().toggleClass('open'); if (!e.data.multiple) { $el.find('.submenu').not($next).slideUp().parent().removeClass('open'); }; } function clearSearchButton(tableName, table) { $('#' + tableName + '_filter').find('input[type=search]').wrap( '').after( '') $('#clear-search-' + tableName).click(function () { table.search('').draw(); }); } // Taken from https://github.com/Hellowlol/HTPC-Manager window.onerror = function (message, file, line) { var e = { 'page': window.location.href, 'message': message, 'file': file, 'line': line }; $.post("log_js_errors", e, function (data) { }); }; $('*').on('click', '.refresh_pms_image', function (e) { e.preventDefault(); e.stopPropagation(); var background_div = $(this).parent().siblings(['style*=pms_image_proxy']).first(); var pms_proxy_url = background_div.css('background-image'); pms_proxy_url = /^url\((['"]?)(.*)\1\)$/.exec(pms_proxy_url); pms_proxy_url = pms_proxy_url ? pms_proxy_url[2] : ""; // If matched, retrieve url, otherwise "" if (pms_proxy_url.indexOf('pms_image_proxy') == -1) { console.log('PMS image proxy url not found.'); } else { if (pms_proxy_url.indexOf('refresh=true') > -1) { pms_proxy_url = pms_proxy_url.replace("&refresh=true", ""); console.log(pms_proxy_url) background_div.css('background-image', 'url(' + pms_proxy_url + ')'); background_div.css('background-image', 'url(' + pms_proxy_url + '&refresh=true)'); } else { background_div.css('background-image', 'url(' + pms_proxy_url + '&refresh=true)'); } } }); // Taken from http://stackoverflow.com/questions/10420352/converting-file-size-in-bytes-to-human-readable#answer-14919494 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]; } // Force max/min in number inputs function forceMinMax(elem) { var min = parseInt(elem.attr('min')); var max = parseInt(elem.attr('max')); var val = parseInt(elem.val()); var default_val = parseInt(elem.data('default')); if (isNaN(val)) { elem.val(default_val); } else if (min != undefined && val < min) { elem.val(min); } else if (max != undefined && val > max) { elem.val(max); } else { elem.val(val); } } function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); }