Available operating systems








Pre-installed software & direct license management











You can manage and update all licenses and add-ons of your server directly through Colonelserver
(function () { 'use strict'; if (typeof CSCurrencyViewer === 'undefined') return; const config = CSCurrencyViewer; const rate = Number(config.rate || 1); const decimals = Number(config.decimals || 2); const storageKey = config.storageKey || 'cs_currency_viewer_currency'; const excludeSelectors = config.excludeSelectors || 'script,style,noscript,textarea,input,select,option,code,pre,svg,canvas'; const originalTextMap = new WeakMap(); const originalElementMap = new WeakMap(); let currentCurrency = getStoredCurrency(); let observerTimer = null; let isApplying = false; function getStoredCurrency() { try { return window.localStorage.getItem(storageKey) === 'USD' ? 'USD' : 'EUR'; } catch (e) { return 'EUR'; } } function setStoredCurrency(currency) { try { window.localStorage.setItem(storageKey, currency); } catch (e) {} } function parseNumber(value) { if (!value) return null; let raw = String(value).replace(/\s+/g, '').trim(); const hasComma = raw.includes(','); const hasDot = raw.includes('.'); if (hasComma && hasDot) { if (raw.lastIndexOf(',') > raw.lastIndexOf('.')) { raw = raw.replace(/\./g, '').replace(',', '.'); } else { raw = raw.replace(/,/g, ''); } } else if (hasComma) { const parts = raw.split(','); raw = parts[parts.length - 1].length === 2 ? raw.replace(',', '.') : raw.replace(/,/g, ''); } const number = Number(raw); return Number.isFinite(number) ? number : null; } function formatUsd(amount) { const usd = amount * rate; try { return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: decimals, maximumFractionDigits: decimals }).format(usd); } catch (e) { return '$' + usd.toFixed(decimals); } } function convertText(text) { if (!text || (text.indexOf('€') === -1 && !/\bEUR\b/i.test(text))) return text; const regex = /€\s*([0-9](?:[0-9\s.,]*[0-9])?)|([0-9](?:[0-9\s.,]*[0-9])?)\s*(?:€|\bEUR\b)/gi; return text.replace(regex, function (match, num1, num2) { const amount = parseNumber(num1 || num2); return amount === null ? match : formatUsd(amount); }); } function shouldSkipNode(node) { if (!node || !node.parentElement) return true; const parent = node.parentElement; if (parent.closest(excludeSelectors)) return true; if (parent.closest('.cs-currency-switcher')) return true; if (parent.closest('[data-cs-price-processed]')) return true; if (parent.isContentEditable) return true; return false; } function processTextNode(node) { if (shouldSkipNode(node)) return; if (!originalTextMap.has(node)) { originalTextMap.set(node, node.nodeValue); } const original = originalTextMap.get(node); node.nodeValue = currentCurrency === 'USD' ? convertText(original) : original; } function processSplitPriceElements(root) { const candidates = root.querySelectorAll( '.elementor-price-table__price, .elementor-widget-price-table, .price, .pricing, [class*="price"], [class*="pricing"]' ); candidates.forEach(function (el) { if (!el || el.closest(excludeSelectors) || el.closest('.cs-currency-switcher')) return; if (!originalElementMap.has(el)) { originalElementMap.set(el, el.innerHTML); } const originalHtml = originalElementMap.get(el); if (currentCurrency === 'EUR') { if (el.innerHTML !== originalHtml) el.innerHTML = originalHtml; return; } const text = el.textContent.replace(/\s+/g, '').trim(); if (!text.includes('€') && !/EUR/i.test(text)) return; const numberText = text.replace(/EUR/ig, '').replace('€', ''); const amount = parseNumber(numberText); if (amount === null) return; el.innerHTML = '' + formatUsd(amount) + ''; el.setAttribute('data-cs-price-processed', '1'); }); } function walk(root) { if (!root) return; processSplitPriceElements(document.body); const walker = document.createTreeWalker( root, NodeFilter.SHOW_TEXT, { acceptNode: function (node) { if (shouldSkipNode(node)) return NodeFilter.FILTER_REJECT; const value = node.nodeValue || ''; if (value.indexOf('€') === -1 && !/\bEUR\b/i.test(value)) { return NodeFilter.FILTER_REJECT; } return NodeFilter.FILTER_ACCEPT; } } ); const nodes = []; let current; while ((current = walker.nextNode())) { nodes.push(current); } nodes.forEach(processTextNode); } function applyCurrency(currency) { currentCurrency = currency === 'USD' ? 'USD' : 'EUR'; setStoredCurrency(currentCurrency); isApplying = true; walk(document.body); isApplying = false; updateButtons(); } function updateButtons() { document.querySelectorAll('.cs-currency-btn[data-cs-currency]').forEach(function (btn) { const active = btn.getAttribute('data-cs-currency') === currentCurrency; btn.classList.toggle('is-active', active); btn.setAttribute('aria-pressed', active ? 'true' : 'false'); }); } function bindButtons() { document.addEventListener('click', function (event) { const btn = event.target.closest('.cs-currency-btn[data-cs-currency]'); if (!btn) return; event.preventDefault(); applyCurrency(btn.getAttribute('data-cs-currency')); }); } function observeChanges() { if (!window.MutationObserver || !document.body) return; const observer = new MutationObserver(function () { if (isApplying) return; clearTimeout(observerTimer); observerTimer = setTimeout(function () { walk(document.body); }, 150); }); observer.observe(document.body, { childList: true, subtree: true, characterData: true }); } function init() { bindButtons(); applyCurrency(currentCurrency); observeChanges(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();