diff --git a/feeds/ucentral/luci/luci-mod-ucentral/Makefile b/feeds/ucentral/luci/luci-mod-ucentral/Makefile deleted file mode 100644 index a2a71fc94..000000000 --- a/feeds/ucentral/luci/luci-mod-ucentral/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -# -# Copyright (C) 2021 Jo-Philipp Wich -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI uCentral Configuration -LUCI_DEPENDS:=+luci-base - -PKG_LICENSE:=Apache-2.0 - -include ../luci.mk - -# call BuildPackage - OpenWrt buildroot signature - diff --git a/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js b/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js deleted file mode 100644 index f712a414b..000000000 --- a/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js +++ /dev/null @@ -1,102 +0,0 @@ -'use strict'; -'require fs'; -'require ui'; -'require dom'; -'require rpc'; -'require session'; -'require baseclass'; - -var callReboot = rpc.declare({ - object: 'system', - method: 'reboot', - expect: { result: 0 } -}); - -callReboot = function() { - return Promise.resolve(0); -} - -function handleReboot(ev) { - return callReboot().then(function(res) { - if (res != 0) { - showError(_('The reboot command failed with code %d').format(res)); - L.raise('Error', 'Reboot failed'); - } - - showProgress(_('The system is rebooting in order to attempt applying the remote configuration profile now. If not successful, the device will revert back into the initial provisioning state.')); - - ui.awaitReconnect(); - }).catch(function(e) { showError(e.message) }); -} - -function setDirty(isDirty) { - if (isDirty) { - session.setLocalData('ucentral-dirty', true); - ui.showIndicator('ucentral-dirty', _('Reboot required'), showApplySettings); - } - else { - session.setLocalData('ucentral-dirty', null); - ui.hideIndicator('ucentral-dirty'); - } -} - -function handleContinue(ev) { - setDirty(true); - ui.hideModal(); -} - -function showApplySettings() { - ui.showModal(_('Apply Settings'), [ - E('p', _('The device must be rebooted in order to apply the changed settings. Once the uCentral agent successfully connects to the controller, the remote configuration profile will be applied and the initial provisioning web interface is disabled.')), - E('div', { 'class': 'right' }, [ - E('button', { 'click': handleReboot, 'class': 'btn primary' }, [ _('Apply settings and reboot device now') ]), - '\xa0', - E('button', { 'click': handleContinue, 'class': 'btn' }, [ _('Continue configuration') ]) - ]) - ]); -} - -function showProgress(text, timeout) { - var dlg = ui.showModal(null, [ - E('p', { 'class': (timeout > 0) ? null : 'spinning' }, text) - ]); - - dlg.removeChild(dlg.firstElementChild); - - if (timeout > 0) - window.setTimeout(ui.hideModal, timeout); - - return dlg; -} - -function showError(text) { - ui.showModal(_('Error'), [ - E('p', [ text ]), - E('div', { 'class': 'right' }, [ - E('button', { 'class': 'btn', 'click': ui.hideModal }, _('OK')) - ]) - ]); -} - -if (session.getLocalData('ucentral-dirty')) - setDirty(true); - -return baseclass.extend({ - save: function(serializeFn, ev) { - var m = dom.findClassInstance(document.querySelector('.cbi-map')); - - return m.save().then(function() { - return fs.write('/etc/ucentral/profile.json', serializeFn(m.data.data)); - }).then(function() { - return fs.exec('/sbin/profileupdate'); - }).then(function() { - showApplySettings(); - }).catch(function(err) { - showError(_('Unable to save settings: %s').format(err)); - }); - }, - - setDirty: setDirty, - showError: showError, - showProgress: showProgress, -}); diff --git a/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js b/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js deleted file mode 100644 index 08fe88237..000000000 --- a/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js +++ /dev/null @@ -1,70 +0,0 @@ -'use strict'; -'require view'; -'require form'; -'require fs'; -'require ui'; -'require tools.ucentral as uctool'; - -var profile = null; - -function serialize(data) { - if (!L.isObject(profile.unit)) - profile.unit = {}; - - profile.redirector = data.local.redirector; - profile.unit.location = data.local.location; - - return JSON.stringify(profile, null, '\t'); -} - -return view.extend({ - load: function() { - return L.resolveDefault(fs.read('/etc/ucentral/profile.json'), '').then(function(data) { - try { profile = JSON.parse(data); } - catch(e) { profile = {}; }; - }); - }, - - render: function() { - var m, s, o, data = { local: { - redirector: profile.redirector, - location: L.isObject(profile.unit) ? profile.unit.location : '' - } }; - - m = new form.JSONMap(data); - m.readonly = !L.hasViewPermission(); - - s = m.section(form.NamedSection, 'local', 'local', _('Local settings'), - _('The settings on this page specify how the local uCentral client connects to the controller server.')); - - s.option(form.Value, 'redirector', _('Redirector URL')); - s.option(form.Value, 'location', _('Unit location')); - - o = s.option(form.Button, '_certs', _('Certificates')); - o.inputtitle = _('Upload certificate bundle…'); - o.onclick = function(ev) { - return ui.uploadFile('/tmp/certs.tar').then(function(res) { - uctool.showProgress(_('Verifying certificates…')); - - return fs.exec('/sbin/certupdate').then(function(res) { - if (res.code) { - uctool.showError(_('Certificate validation failed: %s').format(res.stderr || res.stdout)); - } - else { - uctool.showProgress(_('Certificates updated.'), 1500); - uctool.setDirty(true); - } - }, function(err) { - uctool.showError(_('Unable to verify certificates: %s').format(err)); - }); - }); - }; - - return m.render(); - }, - - handleSave: uctool.save.bind(uctool, serialize), - - handleSaveApply: null, - handleReset: null -}); diff --git a/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js b/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js deleted file mode 100644 index 24e1bfad3..000000000 --- a/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js +++ /dev/null @@ -1,121 +0,0 @@ -'use strict'; -'require rpc'; -'require view'; -'require tools.ucentral as uctool'; - -var callSystemBoard = rpc.declare({ - object: 'system', - method: 'board' -}); - -var callSystemInfo = rpc.declare({ - object: 'system', - method: 'info' -}); - -function progressbar(value, max, byte) { - var vn = parseInt(value) || 0, - mn = parseInt(max) || 100, - fv = byte ? String.format('%1024.2mB', value) : value, - fm = byte ? String.format('%1024.2mB', max) : max, - pc = Math.floor((100 / mn) * vn); - - return E('div', { - 'class': 'cbi-progressbar', - 'title': '%s / %s (%d%%)'.format(fv, fm, pc) - }, E('div', { 'style': 'width:%.2f%%'.format(pc) })); -} - -return view.extend({ - load: function() { - return Promise.all([ - L.resolveDefault(callSystemBoard(), {}), - L.resolveDefault(callSystemInfo(), {}) - ]); - }, - - render: function(data) { - var boardinfo = data[0], - systeminfo = data[1], - mem = L.isObject(systeminfo.memory) ? systeminfo.memory : {}, - swap = L.isObject(systeminfo.swap) ? systeminfo.swap : {}, - datestr = null; - - if (systeminfo.localtime) { - var date = new Date(systeminfo.localtime * 1000); - - datestr = '%04d-%02d-%02d %02d:%02d:%02d'.format( - date.getUTCFullYear(), - date.getUTCMonth() + 1, - date.getUTCDate(), - date.getUTCHours(), - date.getUTCMinutes(), - date.getUTCSeconds() - ); - } - - var sysfields = [ - _('Hostname'), boardinfo.hostname, - _('Model'), boardinfo.model, - _('Architecture'), boardinfo.system, - _('Firmware Version'), (L.isObject(boardinfo.release) ? boardinfo.release.description : '?'), - _('Kernel Version'), boardinfo.kernel, - _('Local Time'), datestr, - _('Uptime'), systeminfo.uptime ? '%t'.format(systeminfo.uptime) : null, - _('Load Average'), Array.isArray(systeminfo.load) ? '%.2f, %.2f, %.2f'.format( - systeminfo.load[0] / 65535.0, - systeminfo.load[1] / 65535.0, - systeminfo.load[2] / 65535.0 - ) : null - ]; - - var systable = E('table', { 'class': 'table' }); - - for (var i = 0; i < sysfields.length; i += 2) { - systable.appendChild(E('tr', { 'class': 'tr' }, [ - E('td', { 'class': 'td left', 'width': '33%' }, [ sysfields[i] ]), - E('td', { 'class': 'td left' }, [ (sysfields[i + 1] != null) ? sysfields[i + 1] : '?' ]) - ])); - } - - - var memfields = [ - _('Total Available'), (mem.available) ? mem.available : (mem.total && mem.free && mem.buffered) ? mem.free + mem.buffered : null, mem.total, - _('Used'), (mem.total && mem.free) ? (mem.total - mem.free) : null, mem.total, - _('Buffered'), (mem.total && mem.buffered) ? mem.buffered : null, mem.total - ]; - - if (mem.cached) - memfields.push(_('Cached'), mem.cached, mem.total); - - if (swap.total > 0) - memfields.push(_('Swap free'), swap.free, swap.total); - - var memtable = E('table', { 'class': 'table' }); - - for (var i = 0; i < memfields.length; i += 3) { - memtable.appendChild(E('tr', { 'class': 'tr' }, [ - E('td', { 'class': 'td left', 'width': '33%' }, [ memfields[i] ]), - E('td', { 'class': 'td left' }, [ - (memfields[i + 1] != null) ? progressbar(memfields[i + 1], memfields[i + 2], true) : '?' - ]) - ])); - } - - - return E([], [ - E('div', { 'class': 'cbi-section' }, [ - E('h3', _('System')), - systable - ]), - E('div', { 'class': 'cbi-section' }, [ - E('h3', _('Memory')), - memtable - ]), - ]); - }, - - handleSaveApply: null, - handleSave: null, - handleReset: null -}); diff --git a/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js b/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js deleted file mode 100644 index 67ac9f40a..000000000 --- a/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js +++ /dev/null @@ -1,180 +0,0 @@ -'use strict'; -'require view'; -'require dom'; -'require form'; -'require rpc'; -'require fs'; -'require ui'; -'require tools.ucentral as uctool'; - -var callSystemValidateFirmwareImage = rpc.declare({ - object: 'system', - method: 'validate_firmware_image', - params: [ 'path' ], - expect: { '': { valid: false, forcable: true } } -}); - -var callReboot = rpc.declare({ - object: 'system', - method: 'reboot', - expect: { result: 0 } -}); - - -var mapdata = { actions: {}, config: {} }; - -return view.extend({ - load: function() { - var tasks = [ - fs.trimmed('/proc/mtd'), - fs.trimmed('/proc/mounts') - ]; - - return Promise.all(tasks); - }, - - handleFirstboot: function(ev) { - if (!confirm(_('Do you really want to erase all settings?'))) - return; - - uctool.showProgress(_('The system is erasing the configuration partition now and will reboot itself when finished.')); - - /* Currently the sysupgrade rpc call will not return, hence no promise handling */ - fs.exec('/sbin/firstboot', [ '-r', '-y' ]); - - ui.awaitReconnect('192.168.1.1', 'openwrt.lan'); - }, - - handleSysupgrade: function(ev) { - return ui.uploadFile('/tmp/firmware.bin', ev.target.firstChild) - .then(L.bind(function(btn, reply) { - btn.firstChild.data = _('Checking image…'); - uctool.showProgress(_('Verifying the uploaded image file.')); - - return callSystemValidateFirmwareImage('/tmp/firmware.bin') - .then(function(res) { return [ reply, res ]; }); - }, this, ev.target)) - .then(L.bind(function(btn, reply) { - return fs.exec('/sbin/sysupgrade', [ '--test', '/tmp/firmware.bin' ]) - .then(function(res) { reply.push(res); return reply; }); - }, this, ev.target)) - .then(L.bind(function(btn, res) { - var is_valid = res[1].valid, - body = []; - - if (is_valid) { - body.push(E('p', _("The firmware image was uploaded. Compare the checksum and file size listed below with the original file to ensure data integrity.
Click 'Continue' below to start the flash procedure."))); - body.push(E('ul', {}, [ - res[0].size ? E('li', {}, '%s: %1024.2mB'.format(_('Size'), res[0].size)) : '', - res[0].checksum ? E('li', {}, '%s: %s'.format(_('MD5'), res[0].checksum)) : '', - res[0].sha256sum ? E('li', {}, '%s: %s'.format(_('SHA256'), res[0].sha256sum)) : '' - ])); - } - else { - body.push(E('p', _("The firmware image is invalid and cannot be flashed. Check the diagnostics below for further details."))); - - if (res[2].stderr) - body.push(E('pre', { 'class': 'alert-message' }, [ res[2].stderr ])); - } - - var cntbtn = E('button', { - 'class': 'btn cbi-button-action important', - 'click': ui.createHandlerFn(this, 'handleSysupgradeConfirm', btn), - 'disabled': !is_valid - }, [ _('Continue') ]); - - body.push(E('div', { 'class': 'right' }, [ - E('button', { - 'class': 'btn', - 'click': ui.createHandlerFn(this, function(ev) { - return fs.remove('/tmp/firmware.bin').finally(ui.hideModal); - }) - }, [ _('Cancel') ]), ' ', cntbtn - ])); - - ui.showModal(is_valid ? _('Flash image?') : _('Invalid image'), body); - }, this, ev.target)) - .catch(function(e) { uctool.showError(e.message) }) - .finally(L.bind(function(btn) { - btn.firstChild.data = _('Flash image…'); - }, this, ev.target)); - }, - - handleSysupgradeConfirm: function(btn, ev) { - btn.firstChild.data = _('Flashing…'); - - uctool.showProgress(_('The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings.')); - - /* Currently the sysupgrade rpc call will not return, hence no promise handling */ - fs.exec('/sbin/sysupgrade', [ '-n', '/tmp/firmware.bin' ]); - - ui.awaitReconnect('192.168.1.1', 'openwrt.lan'); - }, - - handleReboot: function(ev) { - return callReboot().then(function(res) { - if (res != 0) { - uctool.showError(_('The reboot command failed with code %d').format(res)); - L.raise('Error', 'Reboot failed'); - } - - uctool.showProgress(_('The device is rebooting now. This page will try to reconnect automatically once the device is fully booted.')); - - ui.awaitReconnect(); - }) - .catch(function(e) { uctool.showError(e.message) }); - }, - - render: function(rpc_replies) { - var procmtd = rpc_replies[0], - procmounts = rpc_replies[1], - has_rootfs_data = (procmtd.match(/"rootfs_data"/) != null) || (procmounts.match("overlayfs:\/overlay \/ ") != null), - m, s, o, ss; - - m = new form.JSONMap(mapdata); - m.readonly = !L.hasViewPermission(); - - s = m.section(form.NamedSection, 'actions'); - - - o = s.option(form.SectionValue, 'actions', form.NamedSection, 'actions', 'actions', _('Reboot device'), - _('Issue a reboot and restart the operating system on this device.')); - - ss = o.subsection; - - o = ss.option(form.Button, 'reboot'); - o.inputstyle = 'action important'; - o.inputtitle = _('Reboot'); - o.onclick = L.bind(this.handleReboot, this); - - - o = s.option(form.SectionValue, 'actions', form.NamedSection, 'actions', 'actions', _('Reset to defaults'), - _('Reset the system to its initial state and discard any configuration changes.')); - ss = o.subsection; - - if (has_rootfs_data) { - o = ss.option(form.Button, 'reset'); - o.inputstyle = 'negative important'; - o.inputtitle = _('Perform reset'); - o.onclick = this.handleFirstboot; - } - - - o = s.option(form.SectionValue, 'actions', form.NamedSection, 'actions', 'actions', _('Firmware upgrade'), - _('Upload a compatible firmware image here to upgrade the running system.')); - - ss = o.subsection; - - o = ss.option(form.Button, 'sysupgrade'); - o.inputstyle = 'action important'; - o.inputtitle = _('Flash image…'); - o.onclick = L.bind(this.handleSysupgrade, this); - - - return m.render(); - }, - - handleSaveApply: null, - handleSave: null, - handleReset: null -}); diff --git a/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js b/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js deleted file mode 100644 index e60e15a99..000000000 --- a/feeds/ucentral/luci/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js +++ /dev/null @@ -1,118 +0,0 @@ -'use strict'; -'require view'; -'require form'; -'require fs'; -'require tools.ucentral as uctool'; - -var profile = null; - -function serialize(data) { - if (data.broadband.protocol != 'default') - profile.broadband = Object.assign({}, data.broadband); - else - delete profile.broadband; - - return JSON.stringify(profile, function(key, val) { - return (key.charAt(0) != '.') ? val : undefined; - }, '\t'); -} - -return view.extend({ - load: function() { - return L.resolveDefault(fs.read('/etc/ucentral/profile.json'), '').then(function(data) { - try { profile = JSON.parse(data); } - catch(e) { profile = {}; }; - - if (!L.isObject(profile.broadband)) - profile.broadband = { protocol: 'default' }; - }); - }, - - render: function() { - var m, s, o, data = { broadband: {} }; - - m = new form.JSONMap(data); - m.readonly = !L.hasViewPermission(); - - s = m.section(form.NamedSection, 'broadband', 'broadband', _('Uplink configuration'), - _('The uplink settings allow overriding the WAN connection properties of the local device.')); - - o = s.option(form.ListValue, 'protocol', _('Connection')); - o.value('default', _('Use default cloud settings')); - o.value('static', _('Static address configuration')); - o.value('dhcp', _('Address configuration via DHCP')); - o.value('pppoe', _('Address configuration via PPPoE')); - o.value('wwan', _('Cellular network connection')); - - o = s.option(form.ListValue, 'modem-type', _('Modem type')); - o.depends('protocol', 'wwan'); - o.value('wwan', _('Automatic', 'Automatic modem type selection')); - o.value('mbim', 'MBIM'); - o.value('qmi', 'QMI'); - - o = s.option(form.Value, 'access-point-name', _('APN', 'Cellular access point name')); - o.depends('protocol', 'wwan'); - o.validate = function(section_id, value) { - if (!/^[a-zA-Z0-9\-.]*[a-zA-Z0-9]$/.test(value)) - return _('Invalid APN provided'); - - return true; - }; - - o = s.option(form.Value, 'pin-code', _('PIN')); - o.depends('protocol', 'wwan'); - o.datatype = 'and(uinteger,minlength(4),maxlength(8))'; - - o = s.option(form.ListValue, 'authentication-type', _('Authentication')); - o.depends('protocol', 'wwan'); - o.value('', _('No authentication')); - o.value('pap-chap', 'PAP/CHAP'); - o.value('chap', 'CHAP'); - o.value('pap', 'PAP'); - - o = s.option(form.Value, 'user-name', _('Username')); - o.depends('authentication-type', 'pap-chap'); - o.depends('authentication-type', 'chap'); - o.depends('authentication-type', 'pap'); - o.depends('protocol', 'pppoe'); - - o = s.option(form.Value, 'password', _('Password')); - o.depends('authentication-type', 'pap-chap'); - o.depends('authentication-type', 'chap'); - o.depends('authentication-type', 'pap'); - o.depends('protocol', 'pppoe'); - o.password = true; - - o = s.option(form.Value, 'ipv4-address', _('IPv4 Address'), _('Address and mask in CIDR notation.')); - o.depends('protocol', 'static'); - o.datatype = 'or(cidr4,ipnet4)'; - o.rmempty = false; - - o = s.option(form.Value, 'ipv4-gateway', _('IPv4 Gateway')); - o.depends('protocol', 'static'); - o.datatype = 'ip4addr("nomask")'; - o.rmempty = false; - - o = s.option(form.Value, 'ipv6-address', _('IPv6 Address'), _('Address and mask in CIDR notation.')); - o.depends('protocol', 'static'); - o.datatype = 'or(cidr6,ipnet6)'; - - o = s.option(form.Value, 'ipv6-gateway', _('IPv6 Gateway')); - o.depends('protocol', 'static'); - o.datatype = 'ip6addr("nomask")'; - - o = s.option(form.DynamicList, 'use-dns', _('DNS Servers')); - o.depends('protocol', 'static'); - o.datatype = 'ipaddr("nomask")'; - - for (var i = 0; i < s.children.length; i++) - data.broadband[s.children[i].option] = profile.broadband[s.children[i].option]; - - return m.render(); - }, - - handleSave: uctool.save.bind(uctool, serialize), - - handleSaveApply: null, - handleReset: null -}); diff --git a/feeds/ucentral/luci/luci-mod-ucentral/po/de/ucentral.po b/feeds/ucentral/luci/luci-mod-ucentral/po/de/ucentral.po deleted file mode 100644 index e78cbb9ec..000000000 --- a/feeds/ucentral/luci/luci-mod-ucentral/po/de/ucentral.po +++ /dev/null @@ -1,426 +0,0 @@ -msgid "" -msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" -"Project-Id-Version: \n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"X-Generator: Poedit 2.4.2\n" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:53 -msgctxt "Cellular access point name" -msgid "APN" -msgstr "APN" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:86 -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:96 -msgid "Address and mask in CIDR notation." -msgstr "Adresse und Netzmaske in CIDR-Notation." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:43 -msgid "Address configuration via DHCP" -msgstr "Adresskonfiguration mittels DHCP" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:44 -msgid "Address configuration via PPPoE" -msgstr "Adresskonfiguration mittels PPPoE" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:49 -msgid "Apply Settings" -msgstr "Einstellungen anwenden" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:52 -msgid "Apply settings and reboot device now" -msgstr "Anwenden und Gerät jetzt neu starten" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:60 -msgid "Architecture" -msgstr "Architektur" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:66 -msgid "Authentication" -msgstr "Authentifizierung" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:49 -msgctxt "Automatic modem type selection" -msgid "Automatic" -msgstr "automatisch" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:85 -msgid "Buffered" -msgstr "Gepuffert" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:89 -msgid "Cached" -msgstr "Gecached" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:92 -msgid "Cancel" -msgstr "Abbrechen" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:45 -msgid "Cellular network connection" -msgstr "Mobilfunkverbindung" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:51 -msgid "Certificate validation failed: %s" -msgstr "Validierung der Zertifikate fehlgeschlagen: %s" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:43 -msgid "Certificates" -msgstr "Zertifikate" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:54 -msgid "Certificates updated." -msgstr "Zertifikate aktualisiert." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:51 -msgid "Checking image…" -msgstr "Prüfe Imagedatei…" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:40 -msgid "Connection" -msgstr "Verbindung" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:84 -msgid "Continue" -msgstr "Fortfahren" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:54 -msgid "Continue configuration" -msgstr "Konfiguration fortsetzen" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:104 -msgid "DNS Servers" -msgstr "DNS-Server" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:37 -msgid "Do you really want to erase all settings?" -msgstr "Sollen wirklich alle Systemeinstellungen zurückgesetzt werden?" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:73 -msgid "Error" -msgstr "Fehler" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:61 -msgid "Firmware Version" -msgstr "Firmware-Version" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:163 -msgid "Firmware upgrade" -msgstr "Firmware Update" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:95 -msgid "Flash image?" -msgstr "Image flashen?" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:99 -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:170 -msgid "Flash image…" -msgstr "Image flashen…" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:104 -msgid "Flashing…" -msgstr "Schreibt…" - -#: modules/luci-mod-ucentral/root/usr/share/rpcd/acl.d/luci-mod-ucentral.json:3 -msgid "Grant access to ucentral configuration" -msgstr "Zugriff auf uCentral-Konfigurationseinstellungen ermöglichen" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:58 -msgid "Hostname" -msgstr "Hostname" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:86 -msgid "IPv4 Address" -msgstr "IPv4-Adresse" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:91 -msgid "IPv4 Gateway" -msgstr "IPv4-Gateway" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:96 -msgid "IPv6 Address" -msgstr "IPv6-Adresse" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:100 -msgid "IPv6 Gateway" -msgstr "IPv6-Gateway" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:57 -msgid "Invalid APN provided" -msgstr "Ungültige APN angegeben" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:95 -msgid "Invalid image" -msgstr "Ungültige Image-Datei" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:141 -msgid "Issue a reboot and restart the operating system on this device." -msgstr "Einen Reboot auslösen und das Betriebssystem des Gerätes neu starten." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:62 -msgid "Kernel Version" -msgstr "Kernel-Version" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:65 -msgid "Load Average" -msgstr "Systemlast" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:63 -msgid "Local Time" -msgstr "Lokalzeit" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:37 -msgid "Local settings" -msgstr "Lokale Einstellungen" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:69 -msgid "MD5" -msgstr "MD5" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:112 -msgid "Memory" -msgstr "Arbeitsspeicher" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:59 -msgid "Model" -msgstr "Modell" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:47 -msgid "Modem type" -msgstr "Modemtyp" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:68 -msgid "No authentication" -msgstr "keine Authentifizierung" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:76 -msgid "OK" -msgstr "OK" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:62 -msgid "PIN" -msgstr "OIN" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:79 -msgid "Password" -msgstr "Passwort" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:158 -msgid "Perform reset" -msgstr "System zurücksetzen" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:147 -msgid "Reboot" -msgstr "Reboot" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:140 -msgid "Reboot device" -msgstr "Gerät neu starten" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:35 -msgid "Reboot required" -msgstr "Neustart erforderlich" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:40 -msgid "Redirector URL" -msgstr "Redirector-URL" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:152 -msgid "" -"Reset the system to its initial state and discard any configuration changes." -msgstr "" -"Das System auf Grundeinstellungen zurücksetzen und sämtliche " -"Konfigurationsänderungen verwerfen." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:151 -msgid "Reset to defaults" -msgstr "Grundeinstellungen wiederherstellen" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:70 -msgid "SHA256" -msgstr "SHA256" - -#: modules/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json:40 -msgid "Settings" -msgstr "Einstellungen" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:68 -msgid "Size" -msgstr "Größe" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:42 -msgid "Static address configuration" -msgstr "Statische Adresskonfiguration" - -#: modules/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json:16 -msgid "Status" -msgstr "Status" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:92 -msgid "Swap free" -msgstr "Freier Auslagerungsspeicher" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:108 -#: modules/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json:52 -msgid "System" -msgstr "System" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:121 -msgid "" -"The device is rebooting now. This page will try to reconnect automatically " -"once the device is fully booted." -msgstr "" -"Das Gerät startet jetzt neu. Diese Seite wird versuchen sich automatisch neu " -"zu verbinden sobald das Gerät wieder voll hochgefahren ist." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:50 -msgid "" -"The device must be rebooted in order to apply the changed settings. Once the " -"uCentral agent successfully connects to the controller, the remote " -"configuration profile will be applied and the initial provisioning web " -"interface is disabled." -msgstr "" -"Das Gerät muss neu gestartet werden um die geänderten Einstellungen " -"anzuwenden. Sobald sich der uCentral-Client nach dem Neustart erfolgreich " -"mit dem Controller verbindet, wird das entfernte Konfigurationsprofil für " -"dieses Gerät angewendet und das initiale Provisionierungs-Webinterface " -"deaktiviert." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:74 -msgid "" -"The firmware image is invalid and cannot be flashed. Check the diagnostics " -"below for further details." -msgstr "" -"Die Firmware-Datei ist ungültig und kann nicht geflasht werden. Die " -"nachfolgenden Diagnosemeldungen enthalten weitere Details." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:66 -msgid "" -"The firmware image was uploaded. Compare the checksum and file size listed " -"below with the original file to ensure data integrity.
Click " -"'Continue' below to start the flash procedure." -msgstr "" -"Die Firmware-Datei wurde hochgeladen. Die Prüfsummen und Dateigröße mit der " -"Originaldatei vergleichen um die Integrität des Images sicherzustellen.
\"Fortfahren\" anklicken um die Upgrade-Prozedur zu starten." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:22 -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:117 -msgid "The reboot command failed with code %d" -msgstr "Das Reboot-Kommando wurde mit Fehlercode %d abgebrochen" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:38 -msgid "" -"The settings on this page specify how the local uCentral client connects to " -"the controller server." -msgstr "" -"Die Einstellungen auf dieser Seite beeinflussen die Verbindung des uCentral " -"Clients zum Controller-Server." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:40 -msgid "" -"The system is erasing the configuration partition now and will reboot itself " -"when finished." -msgstr "" -"Das System löscht nun die Konfigurationspartition und startet das Gerät neu " -"sobald die Prozedur abgeschlossen ist." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:106 -msgid "" -"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " -"few minutes before you try to reconnect. It might be necessary to renew the " -"address of your computer to reach the device again, depending on your " -"settings." -msgstr "" -"Das System-Upgrade läuft jetzt.
DAS GERÄT NICHT AUSSCHALTEN!
Einige Minuten warten, bevor ein Verbindungsversuch unternommen wird. Ja " -"nach Netzwerktopologie kann es nötig sein, die lokalen Adresseinstellungen " -"des Computers zu verändern bevor wieder eine Verbindung zum Gerät möglich " -"ist." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:26 -msgid "" -"The system is rebooting in order to attempt applying the remote " -"configuration profile now. If not successful, the device will revert back " -"into the initial provisioning state." -msgstr "" -"Das System startet jetzt neu um zu versuchen das entfernte " -"Konfigurationsprofil anzuwenden. Im Fehlerfall wird das Gerät in den " -"initialen Provisionierungs-Zustand zurückversetzt." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:38 -msgid "" -"The uplink settings allow overriding the WAN connection properties of the " -"local device." -msgstr "" -"Die Uplink-Einstellungen ermöglichen es die WAN-Verbindungseigenschaften des " -"lokalen Gerätes zu überschreiben." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:83 -msgid "Total Available" -msgstr "Gesamt verfügbar" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:95 -msgid "Unable to save settings: %s" -msgstr "Einstellungen konnten nicht gespeichert werden: %s" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:58 -msgid "Unable to verify certificates: %s" -msgstr "Zertifikate konnten nicht verifiziert werden: %s" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:41 -msgid "Unit location" -msgstr "Gerätestandort" - -#: modules/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json:28 -msgid "Uplink" -msgstr "Uplink" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:37 -msgid "Uplink configuration" -msgstr "Uplink-Einstellungen" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:164 -msgid "Upload a compatible firmware image here to upgrade the running system." -msgstr "" -"Kompatible Firmware-Datei hier hochladen um das laufende System zu " -"aktualisieren." - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:44 -msgid "Upload certificate bundle…" -msgstr "Zertifikatsarchiv hochladen…" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:64 -msgid "Uptime" -msgstr "Laufzeit" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:41 -msgid "Use default cloud settings" -msgstr "Cloud-Einstellungen nutzen" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:84 -msgid "Used" -msgstr "In Benutzung" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:73 -msgid "Username" -msgstr "Benutzername" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:47 -msgid "Verifying certificates…" -msgstr "Überprüfe Zertifikate…" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:52 -msgid "Verifying the uploaded image file." -msgstr "Überprüfe die hochgeladene Image-Datei." - -#: modules/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json:3 -msgid "uCentral" -msgstr "uCentral" diff --git a/feeds/ucentral/luci/luci-mod-ucentral/po/templates/ucentral.pot b/feeds/ucentral/luci/luci-mod-ucentral/po/templates/ucentral.pot deleted file mode 100644 index 60fea9bfc..000000000 --- a/feeds/ucentral/luci/luci-mod-ucentral/po/templates/ucentral.pot +++ /dev/null @@ -1,385 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:53 -msgctxt "Cellular access point name" -msgid "APN" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:86 -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:96 -msgid "Address and mask in CIDR notation." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:43 -msgid "Address configuration via DHCP" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:44 -msgid "Address configuration via PPPoE" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:49 -msgid "Apply Settings" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:52 -msgid "Apply settings and reboot device now" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:60 -msgid "Architecture" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:66 -msgid "Authentication" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:49 -msgctxt "Automatic modem type selection" -msgid "Automatic" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:85 -msgid "Buffered" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:89 -msgid "Cached" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:92 -msgid "Cancel" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:45 -msgid "Cellular network connection" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:51 -msgid "Certificate validation failed: %s" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:43 -msgid "Certificates" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:54 -msgid "Certificates updated." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:51 -msgid "Checking image…" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:40 -msgid "Connection" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:84 -msgid "Continue" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:54 -msgid "Continue configuration" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:104 -msgid "DNS Servers" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:37 -msgid "Do you really want to erase all settings?" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:73 -msgid "Error" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:61 -msgid "Firmware Version" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:163 -msgid "Firmware upgrade" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:95 -msgid "Flash image?" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:99 -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:170 -msgid "Flash image…" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:104 -msgid "Flashing…" -msgstr "" - -#: modules/luci-mod-ucentral/root/usr/share/rpcd/acl.d/luci-mod-ucentral.json:3 -msgid "Grant access to ucentral configuration" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:58 -msgid "Hostname" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:86 -msgid "IPv4 Address" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:91 -msgid "IPv4 Gateway" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:96 -msgid "IPv6 Address" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:100 -msgid "IPv6 Gateway" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:57 -msgid "Invalid APN provided" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:95 -msgid "Invalid image" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:141 -msgid "Issue a reboot and restart the operating system on this device." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:62 -msgid "Kernel Version" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:65 -msgid "Load Average" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:63 -msgid "Local Time" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:37 -msgid "Local settings" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:69 -msgid "MD5" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:112 -msgid "Memory" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:59 -msgid "Model" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:47 -msgid "Modem type" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:68 -msgid "No authentication" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:76 -msgid "OK" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:62 -msgid "PIN" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:79 -msgid "Password" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:158 -msgid "Perform reset" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:147 -msgid "Reboot" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:140 -msgid "Reboot device" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:35 -msgid "Reboot required" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:40 -msgid "Redirector URL" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:152 -msgid "" -"Reset the system to its initial state and discard any configuration changes." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:151 -msgid "Reset to defaults" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:70 -msgid "SHA256" -msgstr "" - -#: modules/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json:40 -msgid "Settings" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:68 -msgid "Size" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:42 -msgid "Static address configuration" -msgstr "" - -#: modules/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json:16 -msgid "Status" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:92 -msgid "Swap free" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:108 -#: modules/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json:52 -msgid "System" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:121 -msgid "" -"The device is rebooting now. This page will try to reconnect automatically " -"once the device is fully booted." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:50 -msgid "" -"The device must be rebooted in order to apply the changed settings. Once the " -"uCentral agent successfully connects to the controller, the remote " -"configuration profile will be applied and the initial provisioning web " -"interface is disabled." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:74 -msgid "" -"The firmware image is invalid and cannot be flashed. Check the diagnostics " -"below for further details." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:66 -msgid "" -"The firmware image was uploaded. Compare the checksum and file size listed " -"below with the original file to ensure data integrity.
Click " -"'Continue' below to start the flash procedure." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:22 -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:117 -msgid "The reboot command failed with code %d" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:38 -msgid "" -"The settings on this page specify how the local uCentral client connects to " -"the controller server." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:40 -msgid "" -"The system is erasing the configuration partition now and will reboot itself " -"when finished." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:106 -msgid "" -"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " -"few minutes before you try to reconnect. It might be necessary to renew the " -"address of your computer to reach the device again, depending on your " -"settings." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:26 -msgid "" -"The system is rebooting in order to attempt applying the remote " -"configuration profile now. If not successful, the device will revert back " -"into the initial provisioning state." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:38 -msgid "" -"The uplink settings allow overriding the WAN connection properties of the " -"local device." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:83 -msgid "Total Available" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/tools/ucentral.js:95 -msgid "Unable to save settings: %s" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:58 -msgid "Unable to verify certificates: %s" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:41 -msgid "Unit location" -msgstr "" - -#: modules/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json:28 -msgid "Uplink" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:37 -msgid "Uplink configuration" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:164 -msgid "Upload a compatible firmware image here to upgrade the running system." -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:44 -msgid "Upload certificate bundle…" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:64 -msgid "Uptime" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:41 -msgid "Use default cloud settings" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/status.js:84 -msgid "Used" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/uplink.js:73 -msgid "Username" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/settings.js:47 -msgid "Verifying certificates…" -msgstr "" - -#: modules/luci-mod-ucentral/htdocs/luci-static/resources/view/ucentral/system.js:52 -msgid "Verifying the uploaded image file." -msgstr "" - -#: modules/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json:3 -msgid "uCentral" -msgstr "" diff --git a/feeds/ucentral/luci/luci-mod-ucentral/root/sbin/certupdate b/feeds/ucentral/luci/luci-mod-ucentral/root/sbin/certupdate deleted file mode 100755 index e3a82dc4a..000000000 --- a/feeds/ucentral/luci/luci-mod-ucentral/root/sbin/certupdate +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -if [ -f /tmp/certs.tar ]; then - if [ -f /etc/ucentral/key.pem ]; then - cd /etc/ucentral/ - else - cd /certificates/ - fi - tar xf /tmp/certs.tar -fi - -exit 0 diff --git a/feeds/ucentral/luci/luci-mod-ucentral/root/sbin/profileupdate b/feeds/ucentral/luci/luci-mod-ucentral/root/sbin/profileupdate deleted file mode 100755 index 2b4e916aa..000000000 --- a/feeds/ucentral/luci/luci-mod-ucentral/root/sbin/profileupdate +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -REDIRECTOR=$(cat /etc/ucentral/profile.json | jsonfilter -e '@.redirector') -if [ -n "$REDIRECTOR" ]; then - uci -c /etc/config-shadow/ set ucentral.config.server="$REDIRECTOR" - uci -c /etc/config-shadow/ commit ucentral - /etc/init.d/firstcontact disable - /etc/init.d/ucentral enable -else - rm /etc/ucentral/redirector.json - /etc/init.d/firstcontact enable - /etc/init.d/ucentral disable -fi - -exit 0 diff --git a/feeds/ucentral/luci/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json b/feeds/ucentral/luci/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json deleted file mode 100644 index b37150dd3..000000000 --- a/feeds/ucentral/luci/luci-mod-ucentral/root/usr/share/luci/menu.d/luci-mod-ucentral.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "ucentral": { - "title": "uCentral", - "order": 20, - "action": { - "type": "firstchild", - "recurse": true - }, - "auth": { - "methods": [ "cookie:sysauth" ], - "login": true - } - }, - - "ucentral/status": { - "title": "Status", - "order": 1, - "action": { - "type": "view", - "path": "ucentral/status" - }, - "depends": { - "acl": [ "luci-mod-ucentral" ] - } - }, - - "ucentral/uplink": { - "title": "Uplink", - "order": 2, - "action": { - "type": "view", - "path": "ucentral/uplink" - }, - "depends": { - "acl": [ "luci-mod-ucentral" ] - } - }, - - "ucentral/settings": { - "title": "Settings", - "order": 3, - "action": { - "type": "view", - "path": "ucentral/settings" - }, - "depends": { - "acl": [ "luci-mod-ucentral" ] - } - }, - - "ucentral/system": { - "title": "System", - "order": 4, - "action": { - "type": "view", - "path": "ucentral/system" - }, - "depends": { - "acl": [ "luci-mod-ucentral" ] - } - } -} diff --git a/feeds/ucentral/luci/luci-mod-ucentral/root/usr/share/rpcd/acl.d/luci-mod-ucentral.json b/feeds/ucentral/luci/luci-mod-ucentral/root/usr/share/rpcd/acl.d/luci-mod-ucentral.json deleted file mode 100644 index 1b6c45757..000000000 --- a/feeds/ucentral/luci/luci-mod-ucentral/root/usr/share/rpcd/acl.d/luci-mod-ucentral.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "luci-mod-ucentral": { - "description": "Grant access to ucentral configuration", - "read": { - "file": { - "/etc/ucentral/profile.json": [ "read" ], - "/proc/mounts": [ "read" ], - "/proc/mtd": [ "read" ] - }, - "ubus": { - "file": [ "read" ], - "system": [ "board", "info" ] - } - }, - "write": { - "cgi-io": [ "upload" ], - "file": { - "/etc/ucentral/profile.json": [ "write" ], - "/sbin/certupdate": [ "exec" ], - "/sbin/firstboot -r -y": [ "exec" ], - "/sbin/profileupdate": [ "exec" ], - "/sbin/sysupgrade -n /tmp/firmware.bin": [ "exec" ], - "/sbin/sysupgrade --test /tmp/firmware.bin": [ "exec" ], - "/tmp/certs.tar": [ "write" ], - "/tmp/firmware.bin": [ "write" ] - }, - "ubus": { - "file": [ "exec", "remove", "write" ], - "system": [ "reboot", "validate_firmware_image" ] - } - } - } -} diff --git a/feeds/ucentral/luci/luci-theme-ucentral/Makefile b/feeds/ucentral/luci/luci-theme-ucentral/Makefile deleted file mode 100644 index 5609b5d34..000000000 --- a/feeds/ucentral/luci/luci-theme-ucentral/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -# -# Copyright (C) 2021 Jo-Philipp Wich -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI theme for uCentral -LUCI_DEPENDS:= - -include ../luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/ucentral/luci/luci-theme-ucentral/htdocs/luci-static/resources/menu-ucentral.js b/feeds/ucentral/luci/luci-theme-ucentral/htdocs/luci-static/resources/menu-ucentral.js deleted file mode 100644 index 01ed58f4c..000000000 --- a/feeds/ucentral/luci/luci-theme-ucentral/htdocs/luci-static/resources/menu-ucentral.js +++ /dev/null @@ -1,152 +0,0 @@ -'use strict'; -'require baseclass'; -'require ui'; - -return baseclass.extend({ - __init__: function() { - ui.menu.load().then(L.bind(this.render, this)); - }, - - render: function(tree) { - var menu = document.querySelector('#mainmenu'), - nav = document.querySelector('#menubar > .navigation'), - node = tree, - url = ''; - - this.renderModeMenu(node); - - if (L.env.dispatchpath.length >= 3) { - for (var i = 0; i < 3 && node; i++) { - node = node.children[L.env.dispatchpath[i]]; - url = url + (url ? '/' : '') + L.env.dispatchpath[i]; - } - - if (node) - this.renderTabMenu(node, url); - } - - if (menu.firstElementChild) { - nav.addEventListener('click', ui.createHandlerFn(this, 'handleSidebarToggle')); - nav.style.visibility = 'visible'; - } - }, - - handleMenuExpand: function(ev) { - var a = ev.target, ul1 = a.parentNode.parentNode, ul2 = a.nextElementSibling; - - document.querySelectorAll('ul.mainmenu.l1 > li.active').forEach(function(li) { - if (li !== a.parentNode) - li.classList.remove('active'); - }); - - if (!ul2) - return; - - if (ul2.parentNode.offsetLeft + ul2.offsetWidth <= ul1.offsetLeft + ul1.offsetWidth) - ul2.classList.add('align-left'); - - ul1.classList.add('active'); - a.parentNode.classList.add('active'); - a.blur(); - - ev.preventDefault(); - ev.stopPropagation(); - }, - - renderMainMenu: function(tree, url, level) { - var l = (level || 0) + 1, - ul = E('ul', { 'class': 'mainmenu l%d'.format(l) }), - children = ui.menu.getChildren(tree); - - if (children.length == 0 || l > 2) - return E([]); - - for (var i = 0; i < children.length; i++) { - var isActive = (L.env.dispatchpath[l] == children[i].name), - isReadonly = children[i].readonly, - activeClass = 'mainmenu-item-%s%s'.format(children[i].name, isActive ? ' selected' : ''); - - ul.appendChild(E('li', { 'class': activeClass }, [ - E('a', { - 'href': L.url(url, children[i].name), - 'click': (l == 1) ? ui.createHandlerFn(this, 'handleMenuExpand') : null - }, [ _(children[i].title) ]), - this.renderMainMenu(children[i], url + '/' + children[i].name, l) - ])); - } - - if (l == 1) - document.querySelector('#mainmenu').appendChild(E('div', [ ul ])); - - return ul; - }, - - renderModeMenu: function(tree, root) { - var menu = document.querySelector('#modemenu'), - children = ui.menu.getChildren(tree); - - for (var i = 0; i < children.length; i++) { - var isActive = (L.env.requestpath.length ? children[i].name == L.env.requestpath[+!!root] : i == 0), - isUcentral = (!root && children[i].name == 'ucentral'); - - if (root || children.length > 1) - menu.appendChild(E('div', { 'class': isActive ? 'active' : null }, [ - E('a', { 'href': root ? L.url(root, children[i].name) : L.url(children[i].name) }, [ _(children[i].title) ]) - ])); - - if (isUcentral && isActive) - this.renderModeMenu(children[i], children[i].name); - else if (isActive) - this.renderMainMenu(children[i], children[i].name); - } - - if (menu.children.length > 1) - menu.style.display = ''; - }, - - renderTabMenu: function(tree, url, level) { - var container = document.querySelector('#tabmenu'), - l = (level || 0) + 1, - ul = E('ul', { 'class': 'cbi-tabmenu' }), - children = ui.menu.getChildren(tree), - activeNode = null; - - if (children.length == 0) - return E([]); - - for (var i = 0; i < children.length; i++) { - var isActive = (L.env.dispatchpath[l + 2] == children[i].name), - activeClass = isActive ? ' cbi-tab' : '', - className = 'tabmenu-item-%s %s'.format(children[i].name, activeClass); - - ul.appendChild(E('li', { 'class': className }, [ - E('a', { 'href': L.url(url, children[i].name) }, [ _(children[i].title) ] ) - ])); - - if (isActive) - activeNode = children[i]; - } - - container.appendChild(ul); - container.style.display = ''; - - if (activeNode) - container.appendChild(this.renderTabMenu(activeNode, url + '/' + activeNode.name, l)); - - return ul; - }, - - handleSidebarToggle: function(ev) { - var btn = ev.currentTarget, - bar = document.querySelector('#mainmenu'); - - if (btn.classList.contains('active')) { - btn.classList.remove('active'); - bar.classList.remove('active'); - } - else { - btn.classList.add('active'); - bar.classList.add('active'); - } - } -}); diff --git a/feeds/ucentral/luci/luci-theme-ucentral/htdocs/luci-static/ucentral/cascade.css b/feeds/ucentral/luci/luci-theme-ucentral/htdocs/luci-static/ucentral/cascade.css deleted file mode 100644 index 3d64a332e..000000000 --- a/feeds/ucentral/luci/luci-theme-ucentral/htdocs/luci-static/ucentral/cascade.css +++ /dev/null @@ -1,1974 +0,0 @@ -:root { - --primary-bright-color: #fff; - --secondary-bright-color: #f8f8f8; - --primary-dark-color: #444; - --secondary-dark-color: #000; - --danger-color: #CC1111; - --warning-color: #CC8800; - --success-color: #5CB85C; - --border-primary-color: #d8dbe0; - --highlight-primary-background: #39f; - --highlight-primary-text: #fff; - --highlight-secondary-background: #17d; - --highlight-secondary-text: #fff; - --button-primary-background: #2a1ab9; - --button-primary-border: #2819ae; - --button-primary-text: #fff; - --button-secondary-background: #ebedef; - --button-secondary-border: #d8dbe0; - --button-secondary-text: #444; - --button-positive-background: #5CB85C; - --button-positive-border: #3C983C; - --button-positive-text: #fff; - --button-negative-background: #e55353; - --button-negative-border: #a55353; - --button-negative-text: #fff; - --regular-font: "GalanoGrotesqueW00-Regular"; - --base-font-size: 16px; -} - -@font-face { - font-family: "GalanoGrotesqueW00-Regular"; - src: url("GalanoGrotesqueW00-Regular.woff2") format("woff2"); -} - -/* - * resets and base style - */ - -* { - margin: 0; - padding: 0; - box-sizing: border-box; - text-decoration: none; - list-style: none; - color: inherit; - font-family: var(--regular-font), "sans-serif"; - border: none; - font-size: 100%; - background: none; - outline: none; - -webkit-appearance: none; - -webkit-text-size-adjust: none; -} - -html { - height: 100%; - width: 100%; - max-width: 1366px; - margin: 0 auto; - background: var(--primary-bright-color); -} - -body { - background: #ebedef; - color: var(--secondary-dark-color); - font-size: var(--base-font-size); - cursor: default; - display: inline-flex; - flex-direction: column; - min-height: 100%; - min-width: 100%; -} - -/* - * scaffholding - */ - -#page { - min-width: 900px; - max-width: 1200px; - margin: auto; - padding: 1em; -} - -#menubar { - text-align: center; - position: relative; -} - -#menubar > img { - width: 65%; -} - -#indicators { - position: absolute; - right: 0; - bottom: 0; - text-align: right; - padding: .5em 0; -} - -#indicators > * { - background: var(--button-primary-background); - color: var(--primary-bright-color); - display: inline-block; - font-size: .85em; - line-height: 1.5em; - padding: 0 .5em; - margin: .125em; - border-radius: 1em; - cursor: pointer; - white-space: nowrap; -} - -#indicators > [data-style="inactive"] { - background: var(--primary-bright-color); - color: var(--secondary-bright-color); - border: 2px solid var(--secondary-bright-color); - line-height: calc(1.5em - 4px); - padding: 0 calc(.5em - 2px); -} - -#menubar h2, -.skiplink { - display: none; -} - -#modemenu { - background: var(--primary-bright-color); - padding: .5rem 1rem; - display: flex; - align-items: center; - color: var(--secondary-dark-color); - border: 1px solid var(--border-primary-color); - border-radius: .25rem .25rem 0 0; - font-size: 1rem; - flex-wrap: wrap; -} - -#modemenu > * { - margin: .25rem; - padding-right: .5rem; - border-right: 1px solid var(--secondary-dark-color); -} - -#modemenu > .active { - font-weight: bold; -} - -#modemenu > :last-child { - border-right: none; - padding-right: 0; -} - -#maincontainer { - flex-direction: row; - display: flex; - flex: 1 0 auto; - background: var(--primary-bright-color); - border: 1px solid var(--border-primary-color); - border-top-width: 0; - border-radius: 0 0 .25rem .25rem; -} - -#modemenu:empty + #maincontainer { - border-top-width: 1px; - border-radius: .25rem; -} - -#mainmenu { - flex: 1 1 200px; - color: var(--primary-dark-color); - padding: 1em; -} - -#mainmenu:empty { - max-width: 0; - padding: 1em 0; - transition: all .2s ease-in-out; -} - -#mainmenu > div { - position: sticky; - top: 1em; -} - -#mainmenu ul { - padding: 0; - margin: 0 0 0 .5em; - line-height: 1.5em; -} - -#mainmenu ul > li { - list-style: none; -} - -#mainmenu li > ul { - max-height: 0; - overflow: hidden; - transition: max-height .1s ease-in-out; -} - -#mainmenu li.selected > a { - color: var(--primary-dark-color); -} - -#mainmenu ul:not(.active) > li.selected > ul, -#mainmenu li.active > ul { - max-height: 3000px; - transition: max-height 1s ease-in-out; - margin: 0 0 .5em .5em; -} - -#mainmenu .l1 > li > a { - font-weight: bold; - font-size: 1.05em; -} - -#maincontent { - flex: 10; - padding: 1em 1em 0 1em; -} - -body > .luci { - flex: 0; - font-size: .7em; - padding: .25em; - text-align: right; - background: var(--primary-bright-color); - color: var(--secondary-bright-color); - margin: 0; -} - -/* - * modal - */ - -body.modal-overlay-active { - overflow: hidden; -} - -body.modal-overlay-active #modal_overlay { - left: 0; - right: 0; - opacity: 1; -} - -#modal_overlay { - position: fixed; - top: 0; - bottom: 0; - left: -10000px; - right: 10000px; - background: rgba(0, 0, 0, 0.7); - z-index: 10000; - overflow-y: scroll; - -webkit-overflow-scrolling: touch; - transition: opacity .125s ease-in; - opacity: 0; -} - -#modal_overlay > .modal { - max-width: 1300px; - width: 80%; - margin: 10% auto 5rem auto; - background: var(--primary-bright-color); - box-shadow: 0 0 3px 1px #000; - padding: .5em; - border-radius: .25em; - display: flex; - flex-direction: column; -} - -.modal > h4:first-child { - padding: .5rem; - margin: -.5rem -.5rem .5rem -.5rem; - color: var(--primary-dark-color); - border-bottom: 1px solid var(--border-primary-color); -} - -.modal > *:first-child:last-child { - margin: .5em 0 !important; -} - -.modal .cbi-section > legend:first-child { font-size: 120%; } - - -/* - * table layout - */ - -table { - width: 100%; - margin: 0 0 1rem 0; - position: relative; - border-collapse: collapse; -} - -tr.cbi-section-table-titles[data-title]::before { - font-weight: bold; - border-top: none; -} - -tr[data-title]::before { - content: attr(data-title); - display: table-cell; - border-top: 1px solid var(--border-primary-color); - padding: .5em; -} - -th { - text-align: left; - font-weight: bold; - padding: .5em; - /* word-break: break-word; */ -} - -.cbi-section-table-descr th { - opacity: .8; - font-size: 90%; - font-weight: normal; -} - -td { - border-top: 1px solid var(--border-primary-color); - padding: .5em; - vertical-align: middle; -} - -td input:not([type]), -td input[type="text"], -td input[type="password"], -td select, -td .cbi-dropdown:not(.btn):not(.cbi-button), -td .cbi-dynlist, -td .control-group { - min-width: auto; - width: 100%; -} - -tr.drag-over-above { - box-shadow: 0 -6px 6px var(--primary-bright-color); -} - -tr.drag-over-below { - box-shadow: 0 6px 6px var(--primary-bright-color); -} - -tr.placeholder { - height: 4em; - position: relative; -} - -tr.placeholder > td { - position: absolute; - left: 0; - right: 0; - bottom: 0; - text-align: center; - line-height: 3em; - font-size: 90%; - opacity: .8; -} - -/* - * view specific table invariants - */ - - #cbi-wireless-wifi-device .ifacebadge { - flex-direction: column; - justify-content: space-around; - } - -.assoclist td, -[data-page="admin-status-overview"] td { - font-size: .9rem; - vertical-align: middle; -} - -.assoclist td:nth-of-type(3) > span { - display: block; - max-width: 270px; - font-size: .8rem; -} - -.assoclist td:nth-of-type(5) > span { - font-size: .8rem; -} - -.assoclist td > .ifacebadge { - flex-wrap: wrap; - justify-content: space-around; - max-width: 120px; - padding: .2em; -} - -.assoclist td > .ifacebadge::after { - overflow: hidden; - text-overflow: ellipsis; -} - -.assoclist td > .ifacebadge > img { - margin: 0 25px; -} - -.assoclist td > .ifacebadge[data-ssid][data-ifname] > span { - display: none; -} - -.assoclist td > .ifacebadge[data-ssid][data-ifname]::after { - content: attr(data-ssid) " (" attr(data-ifname) ")"; -} - -[data-page="admin-status-overview"] td:nth-of-type(3) { - min-width: 100px; -} - -[data-page="admin-network-firewall"] table > tr > *:nth-child(1) { - flex: 1 1 30%; -} - -[data-page="admin-network-wireless"] .cbi-section-actions > div { - display: flex; -} - -[data-page="admin-network-wireless"] .cbi-section-actions > div > * { - flex: 1; -} - -[data-page="admin-status-processes"] table td:nth-of-type(3), -[data-tab="leases"] table td[data-name="duid"] { - word-break: break-word; -} - -/* - * uci changelog - */ - -.uci-change-list { - font-size: 90%; - white-space: pre; - overflow: hidden; -} - -.uci-change-list del, -.uci-change-list ins, -.uci-change-list var, -.uci-change-legend-label del, -.uci-change-legend-label ins, -.uci-change-legend-label var { - text-decoration: none; - font-family: monospace; - font-style: normal; - border: 1px solid #ccc; - background: #eee; - padding: 2px; - display: block; - line-height: 15px; - margin-bottom: 1px; -} - -.uci-change-list h5 { - margin: .5em 0 .25em 0; -} - -.uci-change-list ins, -.uci-change-legend-label ins { - border-color: #0f0; - background: #cfc; -} - -.uci-change-list del, -.uci-change-legend-label del { - border-color: #f00; - background: #fcc; -} - -.uci-change-list var, -.uci-change-legend-label var { - border-color: #ccc; - background: #eee; -} - -.uci-change-list var ins, -.uci-change-list var del { - display: inline-block; - border: none; - width: 100%; - padding: 0; -} - -.uci-change-legend { - margin: .5em 0 0 0; - display: flex; - flex-wrap: wrap; -} - -.uci-change-legend-label { - flex: 1 1 10em; - white-space: nowrap; -} - -.uci-change-legend-label > ins, -.uci-change-legend-label > del, -.uci-change-legend-label > var { - float: left; - margin-right: 4px; - width: 16px; - height: 16px; - display: block; - position: relative; -} - -.uci-change-legend-label var ins, -.uci-change-legend-label var del { - border: none; - position: absolute; - top: 2px; - left: 2px; - right: 2px; - bottom: 2px; -} - -/* - * alignment helpers - */ - -.left { - text-align: left !important; -} - -.right { - text-align: right !important; -} - -.center { - text-align: center !important; -} - -.top { - vertical-align: top !important; -} - -.bottom { - vertical-align: bottom !important; -} - -.middle { - vertical-align: middle !important; -} - -.nowrap { - white-space: nowrap !important; -} - -.hidden { - display: none !important; -} - -/* - * legacy hacks - */ - -[width="33%"] { - width: 33%; - max-width: 33%; -} - -[width="50%"] { - width: 50%; - max-width: 50%; -} - -[data-name="_freq"] select { - min-width: auto; -} - -.cbi-value-field > div:first-child + br { - display: none; -} - -/* - * typography - */ - -h1, h2, h3, h4, h5, h6, -.cbi-section > legend:first-child { - font-weight: bold; - margin: 0 0 1rem 0; -} - -strong, b { - font-weight: bold; -} - -h1 { font-size: 160%; } -h2 { font-size: 150%; } -h3 { font-size: 140%; } -h4 { font-size: 130%; } -h5 { font-size: 120%; } -h6 { font-size: 110%; } - -.cbi-section > legend:first-child { font-size: 140%; } - -p, ul, textarea { - margin: 0 0 1em 0; -} - -p > textarea:last-child { - margin: 0; -} - -var { - color: var(--primary-dark-color); - font-weight: bold; -} - -code { - font-family: monospace; - color: var(--primary-dark-color); -} - -pre { - font-family: monospace; - margin: 0 0 1em 0; - font-size: .9rem; - box-shadow: inset 0 0 2px var(--primary-dark-color); - padding: .25rem; - overflow: auto; -} - -big { - font-size: 110%; -} - -small { - font-size: 95%; -} - -ul { - padding: 0 0 0 1.5em; -} - -ul > li { - list-style: disc; -} - -/* - * widgets - */ - -.ifacebox, .ifacebadge, .zonebadge { - display: inline-flex; - line-height: 1.8em; - padding: 0 .25em; - margin: .25em; - box-shadow: 0px 0px 2px var(--primary-dark-color); - font-size: .9em; - border-radius: .5em; - overflow: hidden; - font-size: .8rem; - vertical-align: text-top; - background: var(--secondary-bright-color); - align-items: center; - color: var(--secondary-dark-color); - vertical-align: middle; -} - -.zonebadge > .ifacebadge { - margin: .125em -.125em .125em .35em; -} - -.zonebadge > .ifacebadge > img -{ - margin: .125em 0 .125em .25em; -} - -.ifacebox { - display: inline-flex; - flex-direction: column; - padding: 0; - text-align: center; - width: 100%; - max-width: 100px; -} - -.ifacebox-head { - background: var(--highlight-primary-background); - width: 100%; -} - -.ifacebox-body { - text-align: center; - padding: .3em .25em .25em .25em; - white-space: nowrap; -} - -.ifacebadge { - display: inline-flex; - align-items: center; -} - -.ifacebadge.large { - line-height: 1.3em; -} - -.ifacebadge > img { - vertical-align: text-bottom; - margin: .25em; - height: 16px; -} - -.ifacebadge > * { - margin-left: .25em; -} - -.network-status-table { - display: inline-flex; - flex-wrap: wrap; - width: 100%; - margin: 0 -.2em 1em -.2em; -} - -.network-status-table > .ifacebox { - max-width: none; - flex: 1 1 45%; - margin: .25em; - min-width: 250px; -} - -.network-status-table > .ifacebox .ifacebadge { - font-size: 100%; - max-width: none; - flex: 1 1 45%; - margin: .2em; -} - -.network-status-table .ifacebox-body > div { - display: flex; - flex-wrap: wrap; - margin: .3em -.1em -.1em -.1em; -} - -.cbi-tooltip-container { - cursor: help; -} - -.cbi-tooltip { - position: absolute; - z-index: 10000; - left: -10000px; - box-shadow: 0 0 2px rgba(0, 0, 0, .7); - border-radius: 3px; - background: var(--secondary-bright-color); - white-space: pre; - padding: 2px 5px; - opacity: 0; - transition: opacity .25s ease-in; - font-size: .8rem; -} - -.cbi-tooltip.error { - color: var(--danger-color); -} - -.cbi-tooltip-container:hover .cbi-tooltip:not(:empty) { - left: auto; - opacity: 1; - transition: opacity .25s ease-in; -} - -.zone-forwards { - display: flex; - align-items: center; -} - -.cbi-progressbar { - border-radius: .25em; - position: relative; - min-width: 20rem; - height: 1.5em; - border: 1px solid var(--border-primary-color); - overflow: hidden; - margin: .125rem 0; -} - -.cbi-progressbar > div { - background: var(--highlight-primary-background); - height: 100%; - transition: width .25s ease-in; - width: 0%; -} - -.cbi-progressbar::after { - position: absolute; - bottom: 0; - top: 0; - right: 0; - left: 0; - text-align: center; - text-shadow: 0 0 2px var(--secondary-bright-color); - content: attr(title); - white-space: nowrap; - line-height: 1.5em; -} - -.cbi-tabmenu { - padding: 0; - margin: 0 -.5em 1em -.5em; - font-weight: bold; - color: var(--primary-dark-color); -} - -.cbi-tabmenu > li { - display: inline-flex; - white-space: nowrap; - opacity: 1; - height: 1.8em; - max-height: none; - overflow: visible; -} - -.cbi-tabmenu > li > a { - flex: 1; - margin: .1em .5em; -} - -.cbi-tabmenu > .cbi-tab > a { - border-bottom: 2px solid var(--primary-dark-color); -} - -[data-tab] { - opacity: 0; - max-height: 0; - transition: opacity .25s ease-in-out; - overflow: hidden; -} - -[data-tab-active="true"] { - opacity: 1; - height: auto; - max-height: none; - overflow: visible; -} - -.alert-message:not(.modal) { - box-shadow: 0 0 3px var(--secondary-dark-color); - padding: .5em; - margin: 0 0 1em 0; - background: var(--warning-color); - color: var(--secondary-bright-color); - transition: opacity .4s ease; -} - -.alert-message + .alert-message { - margin: -.5em 0 1em 0; -} - -.alert-message.info { - background: var(--primary-bright-color); -} - -.alert-message.warning { - background: var(--warning-color); -} - -.alert-message.danger { - background: var(--danger-color); -} - -.alert-message.success { - background: var(--success-color); -} - -.alert-message .btn { - background: inherit; - box-shadow: 0 0 2px var(--secondary-bright-color); -} - -.alert-message .btn:hover { - box-shadow: 0 0 4px 1px var(--secondary-bright-color); -} - -@keyframes fade-in { - 0% { opacity: 0; } - 100% { opacity: 1; } -} - -@keyframes fade-out { - 0% { opacity: 1; } - 100% { opacity: 0; } -} - -.fade-in { - animation: fade-in .4s ease; -} - -.fade-out { - animation: fade-out .4s ease; - opacity: 0; -} - -/* - * forms - */ - -button, .btn { - background: var(--button-secondary-background); - border: 1px solid var(--button-secondary-border); - color: var(--button-secondary-text); - line-height: 1.5em; - border-radius: .25em; - cursor: pointer; - padding: 0 .5em; - display: inline-block; -} - -button:hover, .btn:hover { - box-shadow: 0 0 6px var(--primary-bright-color); -} - -button + button, .btn + .btn, button + .btn, .btn + button, select + button { - margin-left: .25em; -} - -button.important, button.primary { - background: var(--button-primary-background); - border-color: var(--button-primary-border); - color: var(--button-primary-text); -} - -button[disabled], button.disabled, .btn[disabled], .btn.disabled { - pointer-events: none; - opacity: .6; -} - -.cbi-button-apply, .cbi-button-positive { - background: var(--button-positive-background) !important; - border-color: var(--button-positive-border) !important; - color: var(--button-positive-text) !important; -} - -.cbi-button-negative, .cbi-button-remove { - background: var(--button-negative-background) !important; - border-color: var(--button-negative-border) !important; - color: var(--button-negative-text) !important; -} - -.cbi-checkbox { - position: relative; -} - -.cbi-checkbox input[type="checkbox"] { - position: absolute; - z-index: 10; - -webkit-appearence: button; - height: 1.3em; - width: 1.3em; - opacity: 0; - cursor: pointer; -} - -.cbi-checkbox input[type="checkbox"] + label { - position: relative; - display: inline-block; - width: 1.3em; - height: 1.3em; - vertical-align: text-top; -} - -.cbi-checkbox input[type="checkbox"] + label::before { - content: "\0a"; - height: 1em; - width: 1em; - border: 1px solid var(--button-secondary-border); - display: inline-block; - border-radius: .25em; - margin: .15em 0; - position: absolute; - left: 0; - top: 0; -} - -.cbi-checkbox input[type="checkbox"]:checked + label::after { - content: "\0a"; - position: absolute; - display: inline-block; - background: var(--secondary-dark-color); - top: calc(.35em + 1px); - left: calc(.2em + 1px); - width: .6em; - height: .6em; - border-radius: .15em; - cursor: pointer; -} - -.cbi-checkbox input.cbi-input-invalid[type="checkbox"] + label::before { - box-shadow: 0 0 2px var(--danger-color); -} - -.cbi-checkbox input.cbi-input-invalid[type="checkbox"]:checked + label::after { - background: var(--danger-color); -} - -.cbi-checkbox input[type="checkbox"][disabled] + label::before, -.cbi-checkbox input[type="checkbox"][disabled] + label::after { - pointer-events: none; - opacity: .6; -} - -.cbi-checkbox input[type="checkbox"][disabled] { - pointer-events: none; -} - -input:not([type]), -input[type="text"], -input[type="password"], -select, -.cbi-dropdown:not(.btn):not(.cbi-button) { - border: 1px solid var(--button-secondary-border); - color: var(--secondary-dark-color); - padding: 0 .2rem; - line-height: 1.5rem; - border-radius: .25em; -} - -input:not([type]):focus, -input[type="text"]:focus, -input[type="password"]:focus, -select:focus, -.cbi-dropdown:not(.btn):not(.cbi-button):focus, -.cbi-dropdown[open]:not(.btn):not(.cbi-button) { - border-color: var(--secondary-dark-color); -} - -input[disabled]:not([type]), -input[disabled][type="text"], -input[disabled][type="password"], -select[disabled], -.cbi-dynlist[disabled] { - opacity: .6; - pointer-events: none; -} - -input:not([type]) + .btn, input:not([type]) + button, -input[type="text"] + .btn, input[type="text"] + button, -input[type="password"] + .btn, input[type="password"] + button { - margin: 0 0 2px -1px; - background: var(--button-secondary-background); - border: 1px solid var(--button-secondary-border); - border-radius: 0 .25em .25em 0; - color: var(--button-secondary-text); -} - -.control-group > select + .btn, .control-group > select + button { - margin-left: .25em; -} - -.control-group > input:not([type]) + .btn, .control-group > input:not([type]) + button, -.control-group > input[type="text"] + .btn, .control-group > input[type="text"] + button, -.control-group > input[type="password"] + .btn, .control-group > input[type="password"] + button { - margin: .125em .125em .125em calc(-.125em - .25em) !important; -} - -input[type="checkbox"] { - height: 1em; - vertical-align: middle; - -webkit-appearance: checkbox; -} - -select { - padding: .1rem 0; - -webkit-appearance: menulist; -} - -textarea { - width: 100%; - box-shadow: inset 0 0 2px var(--primary-dark-color); - font-family: monospace; - font-size: .9rem; - padding: .2rem; -} - -.cbi-input-invalid, -.cbi-input-invalid:focus { - color: var(--danger-color); - border-color: var(--danger-color) !important; - box-shadow: inset 0 0 2px var(--danger-color); -} - -.control-group { - display: inline-flex; - margin: 0 -.125rem; - min-width: 20.25em; -} - -.control-group > *, -.control-group > .cbi-dropdown > ul > li { - justify-content: space-around; -} - -.control-group > * { - margin: .125rem !important; - min-width: auto !important; -} - -.control-group > select, -.control-group > input:not([type]), -.control-group > input[type="text"], -.control-group > input[type="password"] { - flex: 10; -} - -.cbi-value { - display: flex; - flex-wrap: wrap; - margin: 0 0 1em 0; -} - -.cbi-value > label:first-child { - flex: 1 1 40%; - padding: 0 .5em 0 0; -} - -.cbi-value > .cbi-value-field { - flex: 2 2 55%; -} - -.cbi-value > .cbi-section { - flex: 1 1 100%; -} - -.cbi-map-descr, -.cbi-tab-descr, -.cbi-section-descr, -.cbi-value-description, -.cbi-value[data-widget="CBI.DummyValue"] > div:first-child { - opacity: .8; - font-size: .9rem; - padding: .2em 0; -} - -.cbi-map-descr, -.cbi-tab-descr, -.cbi-section-descr, -.cbi-section-table, -.cbi-section-create { - margin: 0 0 1em 0; -} - -.cbi-dynlist { - display: inline-block; - font-size: 90%; - min-height: calc(1.5em + 2px); - line-height: 1.5em; - min-width: 20rem; - flex-wrap: wrap; -} - -.cbi-dynlist > .item { - border: 1px solid var(--button-secondary-border); - margin: .3em 0; - padding: .15em 2em .15em .2em; - border-radius: .25em; - position: relative; - overflow: hidden; - transition: box-shadow .25s ease-in-out; - pointer-events: none; - flex: 1 1 100%; - word-break: break-all; -} - -.cbi-dynlist > .item::after { - content: "-"; - top: 0; - right: 0; - bottom: 0; - width: 1.6rem; - background: var(--button-secondary-background); - color: var(--button-secondary-text); - display: flex; - align-items: center; - justify-content: space-around; - position: absolute; - border-left: 1px solid var(--button-secondary-border); - text-align: center; - cursor: pointer; - pointer-events: all; -} - -.cbi-dynlist[disabled] > .item::after { - pointer-events: none; -} - -.cbi-dynlist > .item:hover { - box-shadow: 0 0 2px var(--primary-bright-color); -} - -.cbi-dynlist > .add-item { - flex: 1; - display: flex; -} - -.cbi-dynlist > .add-item > input { - flex: 1; - min-width: 18.5rem; - border-radius: .25rem 0 0 .25rem; -} - -.cbi-dynlist > .add-item > .btn { - flex: 0 0 1.6rem; - margin: 0 0 0 -1px; - width: 1.6rem; - text-align: center; -} - -.cbi-dropdown { - display: inline-flex !important; - cursor: pointer; - height: auto; - position: relative; - padding: 0 !important; -} - -.cbi-dropdown > ul { - margin: 0 !important; - padding: 0; - list-style: none; - overflow-x: hidden; - overflow-y: auto; - display: flex; - width: 100%; -} - -.cbi-dropdown.btn > ul:not(.dropdown) { - padding-left: .5em; -} - -.cbi-dropdown.btn.spinning > ul:not(.dropdown) { - padding-left: 0; -} - -.cbi-dropdown.btn > ul.dropdown > li { - color: var(--primary-dark-color); -} - -.cbi-dropdown > ul.preview { - display: none; -} - -.cbi-dropdown > .open, -.cbi-dropdown > .more { - flex-grow: 0; - flex-shrink: 0; - display: flex; - flex-direction: column; - justify-content: center; - text-align: center; - padding: 0 .25em; -} - -.cbi-dropdown.btn > .open, -.cbi-dropdown.cbi-button > .open { - padding: 0 .5em; - margin-left: .5em; - border-left: 1px solid; -} - -.cbi-dropdown > .more, -.cbi-dropdown:not(.btn):not(.cbi-button) > ul > li[placeholder] { - display: none; - justify-content: center; - color: rgba(0, 0, 0, .5); -} - -.cbi-dropdown > ul > li { - display: none; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - flex-shrink: 1; - flex-grow: 1; - align-items: center; - align-self: center; - color: inherit; -} - -.cbi-dropdown > ul.dropdown > li, -.cbi-dropdown:not(.btn):not(.cbi-button) > ul > li { - padding: 0 .25em; -} - -.cbi-dropdown > ul > li .hide-open { display: block; display: initial; } -.cbi-dropdown > ul > li .hide-close { display: none; } - -.cbi-dropdown > ul > li[display]:not([display="0"]) { - border-left: 1px solid #ccc; -} - -.cbi-dropdown[empty] > ul { - max-width: 1px; - max-height: 1.5em; -} - -.cbi-dropdown > ul > li > form { - display: none; - margin: 0; - padding: 0; - pointer-events: none; -} - -.cbi-dropdown > ul > li img { - align-self: center; - margin-right: .25em; -} - -.cbi-dropdown > ul > li input[type="text"] { - margin: .25em 0; - border: none; - background: var(--secondary-bright-color); -} - -.cbi-dropdown[open] { - position: relative; -} - -.cbi-dropdown[open] > ul.dropdown { - display: block; - background: var(--secondary-bright-color); - box-shadow: 0 0 1px var(--primary-dark-color), 0 0 4px rgba(0, 0, 0, .7); - position: absolute; - z-index: 1100; - max-width: none; - min-width: 100%; - width: auto; - transition: max-height .125s ease-in; -} - -.cbi-dropdown > ul > li[display], -.cbi-dropdown[open] > ul.preview, -.cbi-dropdown[open] > ul.dropdown > li, -.cbi-dropdown[multiple] > ul > li > label, -.cbi-dropdown[multiple][open] > ul.dropdown > li, -.cbi-dropdown[multiple][more] > .more, -.cbi-dropdown[multiple][empty] > .more { - flex-grow: 1; - display: flex !important; -} - -.cbi-dropdown[empty] > ul > li, -.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder], -.cbi-dropdown[multiple][open] > ul.dropdown > li > form { - display: block !important; -} - -.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; } -.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: block; display: initial; } - -.cbi-dropdown[open] > ul.dropdown > li { - border-bottom: 1px solid #ccc; -} - -.cbi-dropdown[open] > ul.dropdown > li[selected] { - background: var(--highlight-primary-background); - color: var(--highlight-primary-text); -} - -.cbi-dropdown[open] > ul.dropdown > li.focus { - background: var(--highlight-secondary-background); - color: var(--highlight-secondary-text); -} - -.cbi-dropdown[open] > ul.dropdown > li:last-child { - margin-bottom: 0; - border-bottom: none; -} - -.cbi-dropdown[open] > ul.dropdown > li[unselectable] { - opacity: 0.7; -} - -.cbi-dropdown[open] > ul.dropdown > li > input.create-item-input:first-child:last-child { - width: 100%; -} - -.cbi-dropdown[disabled] { - pointer-events: none; - opacity: .6; -} - -.cbi-filebrowser { - max-width: 100%; - width: 1px; - box-shadow: 0 0 2px var(--primary-dark-color); - border-radius: .25rem; - display: flex; - flex-direction: column; - opacity: 0; - height: 0; - overflow: hidden; -} - -.cbi-filebrowser.open { - min-width: 20rem; - width: auto; - opacity: 1; - height: auto; - overflow: visible; - transition: opacity .25s ease-in; -} - -.cbi-filebrowser > * { - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - padding: 0 0 .25em 0; - margin: .25em .25em 0px .25em; - white-space: nowrap; - border-bottom: 1px solid var(--primary-dark-color); -} - -.cbi-filebrowser .cbi-button-positive { - margin-right: .25em; -} - -.cbi-filebrowser > div { - border-bottom: none; -} - -.cbi-filebrowser > ul > li { - display: flex; - flex-direction: row; - align-items: center; -} - -.cbi-filebrowser > ul > li a:hover { - font-weight: bold; - text-decoration: underline; -} - -.cbi-filebrowser > ul > li > div:first-child { - flex: 10; - overflow: hidden; - text-overflow: ellipsis; -} - -.cbi-filebrowser > ul > li > div:last-child { - flex: 3 3 10em; - text-align: right; -} - -.cbi-filebrowser > ul > li > div:last-child > button { - padding: .125em .25em; - margin: 1px 0 1px .25em; -} - -.cbi-filebrowser .upload { - display: flex; - flex-direction: row; - flex-wrap: wrap; - margin: 0 -.125em .25em -.125em; - padding: 0 0 .125em 0px; - border-bottom: 1px solid var(--primary-dark-color); -} - -.cbi-filebrowser .upload > * { - margin: .125em; - flex: 1; -} - -.cbi-filebrowser .upload > div > input { - width: 100%; -} - -.cbi-section-actions { - text-align: right; -} - -.cbi-page-actions { - flex-wrap: wrap; - width: 100%; - justify-content: flex-end; - margin-bottom: 1em; - margin-top: 1em; - border-top: 1px solid var(--secondary-bright-color); - padding-top: 1em; - text-align: right; -} - -div[id$=".ipaddr"] > input, -.cbi-value-field > div > input[type="password"] { - min-width: 18.5rem; - border-radius: .25rem 0 0 .25rem; -} - -div[id$=".txpower"] { - flex-wrap: wrap; - align-items: center; -} - -div[id$=".txpower"] > span { - white-space: nowrap; - margin-left: .25em; -} - -div[id$=".editlist"] { - flex: 1; -} - -[data-errors]::after { - content: attr(data-errors); - background: var(--danger-color); - color: var(--secondary-bright-color); - border-radius: .6rem; - height: 1.1rem; - padding: 0 .25rem; - font-size: .9rem; - display: inline-block; - font-weight: bold; - min-width: .6rem; - line-height: 1rem; - margin: -.1rem 0 0 -.2rem; - text-align: center; -} - -@keyframes spin { - 100% { transform: rotate(360deg); } -} - -.spinning { - position: relative; - padding-left: 2.1em !important; -} - -.spinning::before { - position: absolute; - display: block; - align-items: center; - top: 0; - bottom: 0; - left: .4em; - width: 1.4em; - height: 1.4em; - animation: spin 1s linear infinite; - content: url("spinner.svg"); - margin: auto; - line-height: 0; -} - -button.spinning, .btn.spinning { - padding-left: 1.6em !important; -} - -button.spinning::before, .btn.spinning::before { - filter: invert(1); - left: .2em; - width: 1.2em; - height: 1.2em; -} - -#view > div.spinning:first-child { - padding: .5em 0; -} - -#view > *:last-child { - margin: 0 0 1em 0; -} - -.label { - background: var(--primary-bright-color); - color: var(--secondary-bright-color); - font-size: .8rem; - padding: 0 .4rem; - border-radius: .5rem; -} - -.label.warning { - background: var(--danger-color); -} - -ul.deps { - margin: 0; - padding: 0; - font-size: .9rem; -} - -ul.errors { - margin: 0 0 1em 0; - padding: 0; -} - -@media only screen and (max-width: 800px) { - body { - padding-top: 70px; - background: var(--primary-bright-color); - } - - #page { - padding: 0; - margin: 0 auto; - width: 100vw; - min-width: 0; - } - - #maincontainer { - width: 100vw; - border: none; - } - - #maincontent { - padding: .25em; - max-width: 100vw; - } - - #menubar { - background: var(--primary-bright-color) url(logo.svg) no-repeat 50% 0; - padding: 1em .5em; - position: fixed; - top: 0; - width: 100vw; - z-index: 1000; - display: flex; - } - - #menubar > h2 { - flex: 0 0 2em; - display: block; - border: 1px solid var(--primary-dark-color); - color: var(--secondary-dark-color); - border-radius: .5em; - cursor: pointer; - font-size: 100%; - margin: 0 1em 0 0; - width: 37px; - height: 37px; - } - - #menubar > h2:hover { - border-color: var(--highlight-primary-background); - color: var(--highlight-primary-background); - } - - #menubar > h2 > * { - display: none; - } - - #menubar > h2::before { - content: "☰"; - width: 35px; - line-height: 35px; - text-align: center; - display: inline-block; - color: inherit; - font-weight: bold; - } - - #menubar > h2.active::before { - content: "×"; - font-size: 200%; - } - - #menubar > img { - display: none; - } - - #menubar .hostname { - font-size: 1.6em; - } - - .distversion { - display: none; - } - - #modemenu { - padding: .125em .25em; - width: 100vw; - border-width: 1px 0; - margin-top: 1px; - } - - #mainmenu { - overflow-x: hidden; - overflow-y: auto; - max-width: 0; - padding: 1em 0; - transition: max-width .25s ease-in-out, padding .25s ease-in-out; - position: fixed; - z-index: 900; - height: 100%; - background: var(--primary-bright-color); - } - - #mainmenu.active { - max-width: 200px; - padding: 1em 1em calc(1em + 70px) 1em; - overflow-x: visible; - border-right: 1px solid var(--border-primary-color); - } - - #mainmenu > div { - position: static; - } - - #mainmenu ul > li { - padding: .25em 0; - } - - .hide-xs { - display: none !important; - } - - table { - display: flex; - flex-direction: column; - } - - tr { - display: block; - border-bottom: 1px solid var(--border-primary-color); - margin-bottom: .5em; - padding-bottom: .5em; - } - - tr.cbi-section-table-titles[data-title]::before, - tr.cbi-section-table-titles, - tr.cbi-section-table-descr { - display: none; - } - - tr[data-title]::before { - display: block; - font-weight: bold; - border-top: none; - padding: .4em 0; - font-size: 110%; - } - - td { - display: block; - border-top: none; - text-align: left !important; - padding: .2em 0; - } - - th, table-titles { - display: none; - } - - td[data-title] { - position: relative; - padding: .2em 0 .2em 40%; - } - - td[data-title]::before { - content: attr(data-title) ": "; - white-space: nowrap; - font-weight: bold; - width: 40%; - overflow: hidden; - text-overflow: ellipsis; - position: absolute; - left: 0; - top: 0; - bottom: 0; - padding: .2em 0; - text-align: left; - display: inline-flex; - align-items: center; - } - - td[data-title]::after { - content: ""; - width: 2em; - position: absolute; - left: calc(40% - 2em); - top: 0; - bottom: 0; - display: block; - background: linear-gradient(90deg, rgba(255, 255, 255, 0), var(--primary-bright-color) 90%); - } - - [data-page="admin-status-overview"] .cbi-section:nth-of-type(1) td:first-of-type, - [data-page="admin-status-overview"] .cbi-section:nth-of-type(2) td:first-of-type { - font-weight: bold; - max-width: none; - width: 100%; - } - - [data-page="admin-status-overview"] td > span > span { font-size: .9rem; } - - [data-page="admin-status-routes"] table:nth-of-type(3) td:nth-of-type(1) { word-break: break-all; } - - [data-page="admin-network-firewall-zones"] td[data-name="_info"] { - padding: .2em 0; - line-height: 2.2rem; - } - - [data-page="admin-network-firewall-zones"] td[data-name="_info"]::before, - [data-page="admin-network-firewall-zones"] td[data-name="_info"]::after { - display: none; - } - - [data-page="admin-network-firewall-zones"] td[data-name="_info"] label { - font-size: 1rem; - } - - #cbi-wireless-wifi-device tr { display: flex; flex-wrap: wrap; } - #cbi-wireless-wifi-device tr > *:nth-child(1) { flex: 1 1 20%; align-self: center; } - #cbi-wireless-wifi-device tr > *:nth-child(2) { flex: 2 2 75%; } - #cbi-wireless-wifi-device tr > *:nth-child(3) { flex: 3 3 100%; } - - #cbi-network-interface tr { display: flex; flex-wrap: wrap; } - #cbi-network-interface tr > *:nth-child(1) { flex: 1 1 33%; align-self: center; } - #cbi-network-interface tr > *:nth-child(2) { flex: 2 2 60%; align-self: center; font-size: .9rem; overflow: hidden; } - #cbi-network-interface tr > *:nth-child(3) { flex: 3 3 100%; } - #cbi-network-interface tr > *:nth-child(2) > div { overflow: hidden; text-overflow: ellipsis; } - - .assoclist tr { - display: flex; - flex-wrap: wrap; - } - - .assoclist td > .ifacebadge { - max-width: 90px; - } - - .assoclist td > .ifacebadge > img { - margin: 0 35px; - } - - .assoclist td > .ifacebadge > span { - display: none; - } - - .assoclist td > .ifacebadge[data-ifname]::after { - content: attr(data-ifname); - } - - .assoclist td > .ifacebadge[data-signal]::after { - content: attr(data-signal) " dBm"; - } - - .assoclist td:nth-of-type(3) { - font-weight: bold; - font-size: 1rem; - } - - .assoclist td:nth-of-type(1), .assoclist td:nth-of-type(4) { - flex: 1 1 100px; - margin-right: .5em; - } - - .assoclist td:nth-of-type(3), .assoclist td:nth-of-type(5) { - flex: 2 2 calc(100% - 110px); - overflow: hidden; - text-overflow: ellipsis; - align-self: center; - } - - .assoclist td:nth-of-type(6) { flex: 1; text-align: right !important; } - .assoclist td[data-title] { padding: .2em 0; } - .assoclist td[data-title]::before, - .assoclist td[data-title]::after { display: none; } - - .leases6 td:nth-of-type(3) { word-wrap: break-word; } - - td.cbi-section-actions > div { display: flex; } - td.cbi-section-actions > div > * { flex: 1; } - - body.modal-overlay-active #modal_overlay > .modal { - width: 95%; - margin: 5% auto; - } - - input:not([type]), - input[type="text"], - input[type="password"], - select, - .cbi-dropdown:not(.btn):not(.cbi-button), - .cbi-dynlist { - min-height: calc(2.2rem + 2px); - line-height: 2.2rem; - font-size: 1.2rem; - min-width: 10rem; - } - - button, .btn { - line-height: 1.8rem; - font-size: 1.2rem; - } - - select { - padding: .4em 0; - } - - .cbi-value > .cbi-value-field { - flex: 1 0 100%; - display: flex; - flex-direction: column; - max-width: 100%; - } - - .cbi-value > .cbi-value-field > div[id] { - display: flex; - flex-direction: row; - } - - .cbi-value > .cbi-value-field > div[id] > input, - .cbi-value > .cbi-value-field > div[id] > select, - .cbi-value > .cbi-value-field > div[id] > .cbi-filebrowser.open { - flex: 1; - width: 100%; - } - - .cbi-dynlist .item::after, - .cbi-dynlist .add-item > .btn { - line-height: 2em; - flex-basis: 2rem; - width: 2rem; - } - - .ifacebadge.large { - font-size: .9rem; - } - - .control-group > *, - .control-group > .cbi-dropdown > ul > li { - flex: 1; - white-space: normal; - word-wrap: break-word; - } - - .cbi-page-actions .cbi-dropdown, - .cbi-page-actions .cbi-button-apply:first-child { - flex-basis: 100%; - } - - .cbi-checkbox { - margin: .25rem; - } - - .cbi-tabmenu { - margin: 0 -.25em 1em -.25em; - } - - .cbi-tooltip { - font-size: 1rem; - box-shadow: 0 0 4px rgba(0, 0, 0, .7); - } - - .cbi-value > label:first-child { - padding: 0 0 .5em 0; - } - - [data-page="admin-system-admin-sshkeys"] .cbi-dynlist > .item { - font-size: .9rem; - line-height: 1rem; - } - - [data-page="admin-system-opkg"] .control-group { - flex-wrap: wrap; - } - - [data-page="admin-status-iptables"] h2 + div.right { - margin: 0 0 1em 0 !important; - display: flex; - } -} - -@media only screen and (min-width: 800px) and (max-width: 1200px) { - .assoclist tr > *:nth-of-type(2) { - display: none; - } -} diff --git a/feeds/ucentral/luci/luci-theme-ucentral/htdocs/luci-static/ucentral/logo.svg b/feeds/ucentral/luci/luci-theme-ucentral/htdocs/luci-static/ucentral/logo.svg deleted file mode 100644 index c27f34600..000000000 --- a/feeds/ucentral/luci/luci-theme-ucentral/htdocs/luci-static/ucentral/logo.svg +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/feeds/ucentral/luci/luci-theme-ucentral/htdocs/luci-static/ucentral/spinner.svg b/feeds/ucentral/luci/luci-theme-ucentral/htdocs/luci-static/ucentral/spinner.svg deleted file mode 100644 index f3b52efac..000000000 --- a/feeds/ucentral/luci/luci-theme-ucentral/htdocs/luci-static/ucentral/spinner.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/feeds/ucentral/luci/luci-theme-ucentral/luasrc/view/themes/ucentral/footer.htm b/feeds/ucentral/luci/luci-theme-ucentral/luasrc/view/themes/ucentral/footer.htm deleted file mode 100644 index 83e4d4617..000000000 --- a/feeds/ucentral/luci/luci-theme-ucentral/luasrc/view/themes/ucentral/footer.htm +++ /dev/null @@ -1,13 +0,0 @@ -<%# - Copyright 2021 Jo-Philipp Wich - Licensed to the public under the Apache License 2.0. --%> - - - - - - - - - diff --git a/feeds/ucentral/luci/luci-theme-ucentral/luasrc/view/themes/ucentral/header.htm b/feeds/ucentral/luci/luci-theme-ucentral/luasrc/view/themes/ucentral/header.htm deleted file mode 100644 index 6aa8a50c5..000000000 --- a/feeds/ucentral/luci/luci-theme-ucentral/luasrc/view/themes/ucentral/header.htm +++ /dev/null @@ -1,67 +0,0 @@ -<%# - Copyright 2021 Jo-Philipp Wich - Licensed to the public under the Apache License 2.0. --%> - -<% - local sys = require "luci.sys" - local util = require "luci.util" - local http = require "luci.http" - local disp = require "luci.dispatcher" - local ver = require "luci.version" - - local boardinfo = util.ubus("system", "board") or { } - - local node = disp.context.dispatched - local path = table.concat(disp.context.path, "-") - - http.prepare_content("text/html; charset=UTF-8") --%> - - - - - - - - - - -<%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI -<% if css then %> -<% end -%> - - - - - - -
- - - - -
- - -
- <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") and path ~= "admin-system-admin-password" then -%> -
-

<%:No password set!%>

-

<%:There is no password set on this router. Please configure a root password to protect the web interface.%>

- <% if disp.lookup("admin/system/admin") then %> - - <% end %> -
- <%- end -%> - - diff --git a/feeds/ucentral/luci/luci-theme-ucentral/root/etc/uci-defaults/30_luci-theme-ucentral b/feeds/ucentral/luci/luci-theme-ucentral/root/etc/uci-defaults/30_luci-theme-ucentral deleted file mode 100755 index 90aeb48e9..000000000 --- a/feeds/ucentral/luci/luci-theme-ucentral/root/etc/uci-defaults/30_luci-theme-ucentral +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -if [ "$PKG_UPGRADE" != 1 ]; then - uci get luci.themes.uCentral >/dev/null 2>&1 || \ - uci batch <<-EOF - set luci.themes.uCentral=/luci-static/ucentral - set luci.main.mediaurlbase=/luci-static/ucentral - commit luci - EOF -fi - -exit 0 diff --git a/feeds/ucentral/luci/luci.mk b/feeds/ucentral/luci/luci.mk deleted file mode 100644 index 452fc0899..000000000 --- a/feeds/ucentral/luci/luci.mk +++ /dev/null @@ -1,294 +0,0 @@ -# -# Copyright (C) 2008-2015 The LuCI Team -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -LUCI_NAME?=$(notdir ${CURDIR}) -LUCI_TYPE?=$(word 2,$(subst -, ,$(LUCI_NAME))) -LUCI_BASENAME?=$(patsubst luci-$(LUCI_TYPE)-%,%,$(LUCI_NAME)) -LUCI_LANGUAGES:=$(sort $(filter-out templates,$(notdir $(wildcard ${CURDIR}/po/*)))) -LUCI_DEFAULTS:=$(notdir $(wildcard ${CURDIR}/root/etc/uci-defaults/*)) -LUCI_PKGARCH?=$(if $(realpath src/Makefile),,all) - -# Language code titles -LUCI_LANG.bg=български (Bulgarian) -LUCI_LANG.bn_BD=বাংলা (Bengali) -LUCI_LANG.ca=Català (Catalan) -LUCI_LANG.cs=Čeština (Czech) -LUCI_LANG.de=Deutsch (German) -LUCI_LANG.el=Ελληνικά (Greek) -LUCI_LANG.en=English -LUCI_LANG.es=Español (Spanish) -LUCI_LANG.fr=Français (French) -LUCI_LANG.he=עִבְרִית (Hebrew) -LUCI_LANG.hi=हिंदी (Hindi) -LUCI_LANG.hu=Magyar (Hungarian) -LUCI_LANG.it=Italiano (Italian) -LUCI_LANG.ja=日本語 (Japanese) -LUCI_LANG.ko=한국어 (Korean) -LUCI_LANG.mr=Marāṭhī (Marathi) -LUCI_LANG.ms=Bahasa Melayu (Malay) -LUCI_LANG.nb_NO=Norsk (Norwegian) -LUCI_LANG.pl=Polski (Polish) -LUCI_LANG.pt_BR=Português do Brasil (Brazilian Portuguese) -LUCI_LANG.pt=Português (Portuguese) -LUCI_LANG.ro=Română (Romanian) -LUCI_LANG.ru=Русский (Russian) -LUCI_LANG.sk=Slovenčina (Slovak) -LUCI_LANG.sv=Svenska (Swedish) -LUCI_LANG.tr=Türkçe (Turkish) -LUCI_LANG.uk=Українська (Ukrainian) -LUCI_LANG.vi=Tiếng Việt (Vietnamese) -LUCI_LANG.zh_Hans=简体中文 (Chinese Simplified) -LUCI_LANG.zh_Hant=繁體中文 (Chinese Traditional) - -# Submenu titles -LUCI_MENU.col=1. Collections -LUCI_MENU.mod=2. Modules -LUCI_MENU.app=3. Applications -LUCI_MENU.theme=4. Themes -LUCI_MENU.proto=5. Protocols -LUCI_MENU.lib=6. Libraries - -# Language aliases -LUCI_LC_ALIAS.bn_BD=bn -LUCI_LC_ALIAS.nb_NO=no -LUCI_LC_ALIAS.pt_BR=pt-br -LUCI_LC_ALIAS.zh_Hans=zh-cn -LUCI_LC_ALIAS.zh_Hant=zh-tw - - -PKG_NAME?=$(LUCI_NAME) - - -# 1: everything expect po subdir or only po subdir -define findrev - $(shell \ - if git log -1 >/dev/null 2>/dev/null; then \ - set -- $$(git log -1 --format="%ct %h" --abbrev=7 -- $(if $(1),. ':(exclude)po',po)); \ - if [ -n "$$1" ]; then - secs="$$(($$1 % 86400))"; \ - yday="$$(date --utc --date="@$$1" "+%y.%j")"; \ - printf 'git-%s.%05d-%s' "$$yday" "$$secs" "$$2"; \ - else \ - echo "unknown"; \ - fi; \ - else \ - ts=$$(find . -type f $(if $(1),-not) -path './po/*' -printf '%T@\n' 2>/dev/null | sort -rn | head -n1 | cut -d. -f1); \ - if [ -n "$$ts" ]; then \ - secs="$$(($$ts % 86400))"; \ - date="$$(date --utc --date="@$$ts" "+%y%m%d")"; \ - printf '%s.%05d' "$$date" "$$secs"; \ - else \ - echo "unknown"; \ - fi; \ - fi \ - ) -endef - -PKG_PO_VERSION?=$(if $(DUMP),x,$(strip $(call findrev))) -PKG_SRC_VERSION?=$(if $(DUMP),x,$(strip $(call findrev,1))) - -PKG_GITBRANCH?=$(if $(DUMP),x,$(strip $(shell \ - variant="LuCI"; \ - if git log -1 >/dev/null 2>/dev/null; then \ - branch="$$(git branch --remote --verbose --no-abbrev --contains 2>/dev/null | \ - sed -rne 's|^[^/]+/([^ ]+) [a-f0-9]{40} .+$$|\1|p' | head -n1)"; \ - if [ "$$branch" != "master" ]; then \ - variant="LuCI $$branch branch"; \ - else \ - variant="LuCI Master"; \ - fi; \ - fi; \ - echo "$$variant" \ -))) - -PKG_RELEASE?=1 -PKG_INSTALL:=$(if $(realpath src/Makefile),1) -PKG_BUILD_DEPENDS += lua/host luci-base/host LUCI_CSSTIDY:csstidy/host LUCI_SRCDIET:luasrcdiet/host $(LUCI_BUILD_DEPENDS) -PKG_CONFIG_DEPENDS += CONFIG_LUCI_SRCDIET CONFIG_LUCI_JSMIN CONFIG_LUCI_CSSTIDY - -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME) - SECTION:=luci - CATEGORY:=LuCI - SUBMENU:=$(if $(LUCI_MENU.$(LUCI_TYPE)),$(LUCI_MENU.$(LUCI_TYPE)),$(LUCI_MENU.app)) - TITLE:=$(if $(LUCI_TITLE),$(LUCI_TITLE),LuCI $(LUCI_NAME) $(LUCI_TYPE)) - DEPENDS:=$(LUCI_DEPENDS) - VERSION:=$(if $(PKG_VERSION),$(PKG_VERSION),$(PKG_SRC_VERSION)) - $(if $(LUCI_EXTRA_DEPENDS),EXTRA_DEPENDS:=$(LUCI_EXTRA_DEPENDS)) - $(if $(LUCI_PKGARCH),PKGARCH:=$(LUCI_PKGARCH)) -endef - -ifneq ($(LUCI_DESCRIPTION),) - define Package/$(PKG_NAME)/description - $(strip $(LUCI_DESCRIPTION)) - endef -endif - -# Language selection for luci-base -ifeq ($(PKG_NAME),luci-base) - define Package/luci-base/config - config LUCI_SRCDIET - bool "Minify Lua sources" - default n - - config LUCI_JSMIN - bool "Minify JavaScript sources" - default y - - config LUCI_CSSTIDY - bool "Minify CSS files" - default y - - menu "Translations"$(foreach lang,$(LUCI_LANGUAGES), - - config LUCI_LANG_$(lang) - tristate "$(shell echo '$(LUCI_LANG.$(lang))' | sed -e 's/^.* (\(.*\))$$/\1/') ($(lang))") - - endmenu - endef -endif - -define Build/Prepare - for d in luasrc htdocs root src; do \ - if [ -d ./$$$$d ]; then \ - mkdir -p $(PKG_BUILD_DIR)/$$$$d; \ - $(CP) ./$$$$d/* $(PKG_BUILD_DIR)/$$$$d/; \ - fi; \ - done - $(call Build/Prepare/Default) -endef - -define Build/Configure -endef - -ifneq ($(wildcard ${CURDIR}/src/Makefile),) - MAKE_PATH := src/ - MAKE_VARS += FPIC="$(FPIC)" LUCI_VERSION="$(PKG_SRC_VERSION)" LUCI_GITBRANCH="$(PKG_GITBRANCH)" - - define Build/Compile - $(call Build/Compile/Default,clean compile) - endef -else - define Build/Compile - endef -endif - -HTDOCS = /www -LUA_LIBRARYDIR = /usr/lib/lua -LUCI_LIBRARYDIR = $(LUA_LIBRARYDIR)/luci - -define SrcDiet - $(FIND) $(1) -type f -name '*.lua' | while read src; do \ - if LUA_PATH="$(STAGING_DIR_HOSTPKG)/lib/lua/5.1/?.lua" luasrcdiet --noopt-binequiv -o "$$$$src.o" "$$$$src"; \ - then mv "$$$$src.o" "$$$$src"; fi; \ - done -endef - -define JsMin - $(FIND) $(1) -type f -name '*.js' | while read src; do \ - if jsmin < "$$$$src" > "$$$$src.o"; \ - then mv "$$$$src.o" "$$$$src"; fi; \ - done -endef - -define CssTidy - $(FIND) $(1) -type f -name '*.css' | while read src; do \ - if csstidy "$$$$src" --template=highest --remove_last_semicolon=true "$$$$src.o"; \ - then mv "$$$$src.o" "$$$$src"; fi; \ - done -endef - -define SubstituteVersion - $(FIND) $(1) -type f -name '*.htm' | while read src; do \ - $(SED) 's/<%# *\([^ ]*\)PKG_VERSION *%>/\1$(if $(PKG_VERSION),$(PKG_VERSION),$(PKG_SRC_VERSION))/g' \ - -e 's/"\(<%= *\(media\|resource\) *%>[^"]*\.\(js\|css\)\)"/"\1?v=$(if $(PKG_VERSION),$(PKG_VERSION),$(PKG_SRC_VERSION))"/g' \ - "$$$$src"; \ - done -endef - -define Package/$(PKG_NAME)/install - if [ -d $(PKG_BUILD_DIR)/luasrc ]; then \ - $(INSTALL_DIR) $(1)$(LUCI_LIBRARYDIR); \ - cp -pR $(PKG_BUILD_DIR)/luasrc/* $(1)$(LUCI_LIBRARYDIR)/; \ - $(FIND) $(1)$(LUCI_LIBRARYDIR)/ -type f -name '*.luadoc' | $(XARGS) rm; \ - $(if $(CONFIG_LUCI_SRCDIET),$(call SrcDiet,$(1)$(LUCI_LIBRARYDIR)/),true); \ - $(call SubstituteVersion,$(1)$(LUCI_LIBRARYDIR)/); \ - else true; fi - if [ -d $(PKG_BUILD_DIR)/htdocs ]; then \ - $(INSTALL_DIR) $(1)$(HTDOCS); \ - cp -pR $(PKG_BUILD_DIR)/htdocs/* $(1)$(HTDOCS)/; \ - $(if $(CONFIG_LUCI_JSMIN),$(call JsMin,$(1)$(HTDOCS)/),true); \ - $(if $(CONFIG_LUCI_CSSTIDY),$(call CssTidy,$(1)$(HTDOCS)/),true); \ - else true; fi - if [ -d $(PKG_BUILD_DIR)/root ]; then \ - $(INSTALL_DIR) $(1)/; \ - cp -pR $(PKG_BUILD_DIR)/root/* $(1)/; \ - else true; fi - if [ -d $(PKG_BUILD_DIR)/src ]; then \ - $(call Build/Install/Default) \ - $(CP) $(PKG_INSTALL_DIR)/* $(1)/; \ - else true; fi -endef - -ifndef Package/$(PKG_NAME)/postinst -define Package/$(PKG_NAME)/postinst -[ -n "$${IPKG_INSTROOT}" ] || {$(foreach script,$(LUCI_DEFAULTS), - (. /etc/uci-defaults/$(script)) && rm -f /etc/uci-defaults/$(script)) - rm -f /tmp/luci-indexcache - rm -rf /tmp/luci-modulecache/ - killall -HUP rpcd 2>/dev/null - exit 0 -} -endef -endif - - -LUCI_BUILD_PACKAGES := $(PKG_NAME) - -# 1: LuCI language code -# 2: BCP 47 language tag -define LuciTranslation - define Package/luci-i18n-$(LUCI_BASENAME)-$(1) - SECTION:=luci - CATEGORY:=LuCI - TITLE:=$(PKG_NAME) - $(1) translation - HIDDEN:=1 - DEFAULT:=LUCI_LANG_$(2)||(ALL&&m) - DEPENDS:=$(PKG_NAME) - VERSION:=$(PKG_PO_VERSION) - PKGARCH:=all - endef - - define Package/luci-i18n-$(LUCI_BASENAME)-$(1)/description - Translation for $(PKG_NAME) - $(LUCI_LANG.$(2)) - endef - - define Package/luci-i18n-$(LUCI_BASENAME)-$(1)/install - $$(INSTALL_DIR) $$(1)/etc/uci-defaults - echo "uci set luci.languages.$(subst -,_,$(1))='$(LUCI_LANG.$(2))'; uci commit luci" \ - > $$(1)/etc/uci-defaults/luci-i18n-$(LUCI_BASENAME)-$(1) - $$(INSTALL_DIR) $$(1)$(LUCI_LIBRARYDIR)/i18n - $(foreach po,$(wildcard ${CURDIR}/po/$(2)/*.po), \ - po2lmo $(po) \ - $$(1)$(LUCI_LIBRARYDIR)/i18n/$(basename $(notdir $(po))).$(1).lmo;) - endef - - define Package/luci-i18n-$(LUCI_BASENAME)-$(1)/postinst - [ -n "$$$${IPKG_INSTROOT}" ] || { - (. /etc/uci-defaults/luci-i18n-$(LUCI_BASENAME)-$(1)) && rm -f /etc/uci-defaults/luci-i18n-$(LUCI_BASENAME)-$(1) - exit 0 - } - endef - - LUCI_BUILD_PACKAGES += luci-i18n-$(LUCI_BASENAME)-$(1) - -endef - -$(foreach lang,$(LUCI_LANGUAGES),$(eval $(call LuciTranslation,$(firstword $(LUCI_LC_ALIAS.$(lang)) $(lang)),$(lang)))) -$(foreach pkg,$(LUCI_BUILD_PACKAGES),$(eval $(call BuildPackage,$(pkg)))) diff --git a/profiles/webui.yml b/profiles/webui.yml index 16d8ebd9c..9ab20cefc 100644 --- a/profiles/webui.yml +++ b/profiles/webui.yml @@ -2,8 +2,8 @@ description: Add the webui dependencies feeds: - name: luci - uri: https://git.openwrt.org/project/luci.git - tag: openwrt-21.02 + uri: https://github.com/blogic/luci.git + branch: luci-mod-ucentral packages: - cgi-io - liblucihttp