HEX
Server: Apache
System: Linux webm010.cluster103.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: iestorre (46869)
PHP: 8.0.30
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/iestorre/www/media/nonumbermanager/js/script.js
/**
 * Main JavaScript file
 *
 * @package         NoNumber Extension Manager
 * @version         4.8.7
 *
 * @author          Peter van Westen <peter@nonumber.nl>
 * @link            http://www.nonumber.nl
 * @copyright       Copyright © 2015 NoNumber All Rights Reserved
 * @license         http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
 */

(function($) {
	if (typeof( window['nnManager'] ) != "undefined") {
		return;
	}

	nnem_has_pro_installed = false;
	nnem_show_key_invalid = true;

	nnManager = {
		refreshData: function(external) {
			nnManager.hide('loaded, data');
			nnManager.show('progress');

			$('div#nnem').find('tr').removeClass();
			$('div#nnem').find('td.ext_new').removeClass('disabled');

			var url = 'index.php?option=com_nonumbermanager&task=update&' + new Date().getTime();

			$.getJSON(url, function(data) {
				$.each(data, function(key, val) {
					nnManager.setDataByExtension(key, val);
				});

				if (external) {
					nnManager.hide('progress', $('.ext_types'));
					nnManager.show('loaded, no_external', $('.ext_types'));
					nnManager.refreshExternalData();

					return;
				}

				nnManager.hide('progress');
				nnManager.show('loaded, no_external');
			}).fail(function() {
				alert('Could not retrieve data.');

				nnManager.hide('progress');
				nnManager.show('loaded, no_external');
			});
		},

		refreshExternalData: function() {
			var url = 'download.nonumber.nl/extensions.php?format=json&j=3&' + new Date().getTime();
			if (NNEM_KEY) {
				url += '&k=' + NNEM_KEY;
			}

			nnScripts.loadajax(url, 'nnManager.setExternalData(data)', 'nnManager.setExternalData(0)', '', NNEM_TIMEOUT, 'json');
		},

		setExternalData: function(data) {
			if (!(data)) {
				alert(NNEM_FAIL);

				nnManager.hide('progress');
				nnManager.show('loaded, no_external');

				return;
			}

			var toolbar = $('div#toolbar');

			// reset stuff
			toolbar.removeClass('has_install').removeClass('has_reinstall').removeClass('has_update');

			$.each(data, function(key, val) {
				nnManager.setExternalDataByExtension(key, val);
			});

			if (nnem_has_pro_installed && nnem_show_key_invalid) {
				$('#nnkey_text_empty').hide();
				$('#nnkey_text_invalid').show();
				$('#nnkey .well').addClass('well-danger');
				$('#nnkey').show();
			}

			nnManager.hide('progress');
			nnManager.show('loaded');

			nnManager.updateCheckboxes();
		},

		setDataByExtension: function(extension, data) {
			if (!NNEM_IDS.indexOf(extension) < 0) {
				return;
			}

			var tr = $('tr#row_' + extension);

			if (!tr) {
				return;
			}

			nnManager.show('pro_not_installed', tr);

			if (!data || typeof(data['version']) == 'undefined' || !data['version']) {
				tr.find('span.current_version').text('');
				nnManager.hide('installed', tr);
				nnManager.show('not_installed', tr);

				return;
			}

			tr.find('span.current_version').text(data['version']);

			if (data['pro'] == 1) {
				nnManager.hide('pro_not_installed', tr)
				nnManager.show('pro_installed', tr);
				nnManager.show('uptodate', tr);
			} else if (data['old'] == 1) {
				nnManager.show('old_installed', tr);
			} else {
				nnManager.show('free_installed', tr);
				nnManager.show('uptodate', tr);
			}

			if (data['missing'].length) {
				tr.find('.missing span').attr('data-content', data['missing']);
				nnManager.show('has_missing', tr);
			}

			nnManager.hide('not_installed', tr);
			nnManager.show('installed', tr);
		},

		setExternalDataByExtension: function(extension, data) {
			if (!NNEM_IDS.indexOf(extension) < 0) {
				return;
			}

			var div = $('div#nnem');
			var toolbar = $('div#toolbar');
			var tr = div.find('tr#row_' + extension);

			if (!tr) {
				return;
			}

			// reset stuff
			tr.find('td.ext_new').removeClass('disabled');
			tr.find('.changelog, .changelog > span').removeClass('disabled');

			if (!data) {
				return;
			}

			// Changelog
			if (typeof(data['changelog']) !== 'undefined' && data['changelog'] != '') {
				changelog = data['changelog'].replace('font-size:1.2em;', '');
				tr.find('.changelog a').attr('data-content', changelog);
				nnManager.show('changelog', tr);
			}

			// Install buttons
			if (typeof(data['version']) == 'undefined' || data['version'] == '') {
				return;
			}

			var v_new = String(data['version']).trim();

			if (!v_new || v_new == '0') {
				// no new version fond: show refresh button
				nnManager.show('no_external', tr);

				return;
			}

			var version_current = String(tr.find('.current_version').first().text()).trim();
			var is_old = ( tr.id == 'row_nonumberextensionmanager' ) ? 0 : tr.hasClass('old_installed');

			var pro_installed = tr.hasClass('pro_installed');
			if (pro_installed) {
				nnem_has_pro_installed = true;
			}

			var pro_access = (data['pro'] == 1);
			if (pro_access) {
				nnManager.show('pro_access', tr);
				$('#url_' + extension).val(data['downloadurl_pro']);
				nnem_show_key_invalid = false;
			} else {
				nnManager.show('pro_no_access', tr);
				$('#url_' + extension).val(data['downloadurl']);
			}

			var pro_available = (data['has_pro'] == 1);
			if (pro_available) {
				nnManager.show('pro_available', tr);
			} else {
				nnManager.show('pro_not_available', tr);
			}

			tr.find('.new_version').text(v_new);
			nnManager.show('changelog', tr);
			nnManager.hide('uptodate', tr);

			// No current version found
			if (!version_current || version_current == '0') {
				toolbar.addClass('has_install');
				nnManager.show('selectable', tr);
				nnManager.show('install', tr);

				return;
			}

			// Version is old and no pro access
			if (is_old && pro_available && !pro_access) {
				nnManager.show('old', tr);

				return;
			}

			compare = nnScripts.compareVersions(version_current, v_new);

			// Current version is newer (dev version)
			if (compare == '>') {
				nnManager.show('downgrade', tr);
				tr.find('.changelog, .changelog > span').addClass('disabled');

				return;
			}


			// Pro installed, but no access (Download Key invalid)
			if (pro_available && pro_installed && !pro_access) {
				if ($('#key_hidden').val()) {
					nnManager.show('pro_key_invalid', tr);
				}

				return;
			}

			// Current version is older or free installed and access to pro
			if (compare == '<' || (!pro_installed && pro_access)) {
				toolbar.addClass('has_update');
				nnManager.show('selectable', tr);
				nnManager.show('update', tr);

				return;
			}

			// Extension has missing parts
			if (tr.hasClass('has_missing')) {
				toolbar.addClass('has_install');
				nnManager.show('selectable', tr);

				return;
			}

			// All is uptodate
			tr.find('.changelog, .changelog > span').addClass('disabled');
			nnManager.show('uptodate', tr);
			nnManager.show('reinstall', tr);
			toolbar.addClass('has_reinstall');
		},

		updateCheckboxes: function() {
			var div = $('div#nnem');

			// hide select boxes
			nnManager.hide('select');

			// reset hidden checkboxes
			div.find('table tr.not_installed').each(function(i, tr) {
				if (tr.hasClass('xselectable')) {
					tr.addClass('selectable').removeClass('xselectable');
				}
			});

			// make hidden rows unselectable
			div.find('table.hide_not_installed tr.not_installed').each(function(i, tr) {
				if (tr.hasClass('selectable')) {
					tr.addClass('xselectable').removeClass('selectable');
				}
			});

			// show select boxes of selectable rows
			nnManager.show('selectable .select');
		},

		install: function(task, id) {
			var url = $('#url_' + id).val();
			nnManager.openModal(task, [id], [url]);
		},

		installMultiple: function(task) {
			var ids = [];
			var urls = [];

			switch (task) {
				case 'reinstallall':
					type = 'reinstall';
					msg = NNEM_NOUPDATE;
					clss = 'reinstall';
					break;
				case 'updateall':
					type = 'update';
					msg = NNEM_NOUPDATE;
					clss = 'selectable.update';
					break;
				default:
					type = 'install';
					msg = NNEM_NONESELECTED;
					clss = 'selectable';
					break;
			}

			$('div#nnem tr.' + clss).each(function() {
				var tr = $(this);
				var el = tr.find('td.ext_checkbox input');
				var id = el.val();
				if (id) {
					var pass = 0;
					switch (task) {
						case 'reinstallall':
						case 'updateall':
							pass = true;
							break;
						default:
							pass = el.is(':checked');
							break;
					}

					if (pass) {
						var url = $('#url_' + id).val();
						ids.push(id);
						urls.push(url);
					}
				}
			});

			if (!ids.length) {
				alert(msg);
			} else {
				nnManager.openModal(type, ids, urls);
			}
		},

		openModal: function(task, ids, urls, refresh_on_close) {
			var url_ids = [];
			for (var i = 0; i < ids.length; i++) {
				url_ids.push('ids[]=' + escape(ids[i]))
			}

			var width = 480;
			var height = 58 + (url_ids.length * 37);
			var min = 140;
			var max = window.getSize().y - 60;
			if (height > max) {
				height = max;
				width += 16;
			}
			if (height < min) {
				height = min;
			}

			url_ids = url_ids.join('&');

			var url_urls = [];
			for (var j = 0; j < urls.length; j++) {
				url = urls[j].replace('http://', '');
				url_urls.push('urls[]=' + escape(url));
			}
			url_urls = url_urls.join('&');

			var url = 'index.php?option=com_nonumbermanager&view=process&tmpl=component&task=' + task + '&' + url_ids + '&' + url_urls;

			if (refresh_on_close) {
				url += '&refresh_on_close=1';
			}

			SqueezeBox.open(url, {handler: 'iframe', size: {x: width, y: height}, classWindow: 'nnem_modal'});
		},

		show: function(classes, parent) {
			this.toggle(classes, parent, 1);
		},

		hide: function(classes, parent) {
			this.toggle(classes, parent, 0);
		},

		toggle: function(classes, parent, show) {
			var classes = classes.split(',');
			$(classes).each(function(i, el) {
				c = classes[i].trim();
				if (!parent) {
					parent = $('div#nnem');
				} else {
					if (c != 'progress' && c != 'loaded') {
						if (show) {
							parent.addClass(c);
						} else {
							parent.removeClass(c);
						}
					}
				}
				if (show) {
					parent.find('.' + c).removeClass('hide');
				} else {
					parent.find('.' + c).addClass('hide');
				}
			});
		}
	}
})(jQuery);

function nnem_function(task, id) {
	if (!task) {
		return;
	}

	switch (task) {
		case 'refresh':
			nnManager.refreshData(1);
			break;
		case 'reinstallall':
		case 'updateall':
		case 'installselected':
			nnManager.installMultiple(task);
			break;
		case 'install':
		case 'update':
		case 'reinstall':
		case 'downgrade':
		case 'uninstall':
			nnManager.install(task, id);
			break;
	}
}