mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-29 22:25:13 +08:00
🍉 Sync 2026-10-05 00:22:14
This commit is contained in:
1 parent
6d2e4f3868
commit
48e9eb5630
18 files changed
+3077
-3028
No files matched your search
@@ -238,10 +238,10 @@ const outbound_type = [
|
||||
['shadowquic', _('ShadowQUIC') + ' - ' + _('UDP')],
|
||||
['trusttunnel', _('TrustTunnel') + ' - ' + _('TCP/UDP')],
|
||||
['zerotier', _('ZeroTier') + ' - ' + _('UDP') + ' - ' + _('L2')], // Endpoint
|
||||
['wireguard', _('WireGuard') + ' - ' + _('UDP')], // Endpoint
|
||||
['tailscale', _('Tailscale') + ' - ' + _('UDP')], // Endpoint
|
||||
['masque', _('Masque') + ' - ' + _('UDP')], // Endpoint // https://blog.cloudflare.com/post-quantum-warp/
|
||||
['easytier', _('EasyTier') + ' - ' + _('TCP/UDP')], // Endpoint
|
||||
['wireguard', _('WireGuard') + ' - ' + _('UDP') + ' - ' + _('L3')], // Endpoint
|
||||
['tailscale', _('Tailscale') + ' - ' + _('UDP') + ' - ' + _('L3')], // Endpoint
|
||||
['masque', _('Masque') + ' - ' + _('UDP') + ' - ' + _('L3')], // Endpoint // https://blog.cloudflare.com/post-quantum-warp/
|
||||
['easytier', _('EasyTier') + ' - ' + _('TCP/UDP') + ' - ' + _('L3')], // Endpoint
|
||||
['ssh', _('SSH') + ' - ' + _('TCP')]
|
||||
];
|
||||
|
||||
@@ -295,47 +295,79 @@ const routing_port_type = [
|
||||
];
|
||||
|
||||
const rules_type = [
|
||||
['DOMAIN'],
|
||||
['DOMAIN-SUFFIX'],
|
||||
['DOMAIN-KEYWORD'],
|
||||
['DOMAIN-WILDCARD'],
|
||||
['DOMAIN-REGEX'],
|
||||
['GEOSITE'],
|
||||
|
||||
['IP-CIDR'],
|
||||
['IP-CIDR6'],
|
||||
['IP-SUFFIX'],
|
||||
['IP-ASN'],
|
||||
['GEOIP'],
|
||||
|
||||
['SRC-GEOIP'],
|
||||
['SRC-IP-ASN'],
|
||||
['SRC-IP-CIDR'],
|
||||
['SRC-IP-SUFFIX'],
|
||||
|
||||
['DST-PORT'],
|
||||
['SRC-PORT'],
|
||||
|
||||
//['IN-PORT'],
|
||||
//['IN-TYPE'],
|
||||
//['IN-USER'],
|
||||
//['IN-NAME'],
|
||||
['REMATCH-NAME'],
|
||||
|
||||
['PROCESS-PATH'],
|
||||
['PROCESS-PATH-REGEX'],
|
||||
['PROCESS-PATH-WILDCARD'],
|
||||
['PROCESS-NAME'],
|
||||
['PROCESS-NAME-REGEX'],
|
||||
['PROCESS-NAME-WILDCARD'],
|
||||
['UID'],
|
||||
|
||||
['NETWORK'],
|
||||
['DSCP'],
|
||||
|
||||
['RULE-SET'],
|
||||
|
||||
['MATCH']
|
||||
{
|
||||
label: _('Domain'),
|
||||
types: [
|
||||
['DOMAIN'],
|
||||
['DOMAIN-SUFFIX'],
|
||||
['DOMAIN-KEYWORD'],
|
||||
['DOMAIN-WILDCARD'],
|
||||
['DOMAIN-REGEX'],
|
||||
['GEOSITE']
|
||||
]
|
||||
},
|
||||
{
|
||||
label: _('Dst-IP'),
|
||||
types: [
|
||||
['IP-CIDR'],
|
||||
['IP-CIDR6'],
|
||||
['IP-SUFFIX'],
|
||||
['IP-ASN'],
|
||||
['GEOIP']
|
||||
]
|
||||
},
|
||||
{
|
||||
label: _('Src-IP'),
|
||||
types: [
|
||||
['SRC-GEOIP'],
|
||||
['SRC-IP-ASN'],
|
||||
['SRC-IP-CIDR'],
|
||||
['SRC-IP-SUFFIX']
|
||||
]
|
||||
},
|
||||
{
|
||||
label: _('Port'),
|
||||
types: [
|
||||
['DST-PORT'],
|
||||
['SRC-PORT']
|
||||
]
|
||||
},
|
||||
{
|
||||
label: _('Inbound'),
|
||||
types: [
|
||||
//['IN-PORT'],
|
||||
//['IN-TYPE'],
|
||||
//['IN-USER'],
|
||||
//['IN-NAME'],
|
||||
['REMATCH-NAME']
|
||||
]
|
||||
},
|
||||
{
|
||||
label: _('Process'),
|
||||
types: [
|
||||
['PROCESS-PATH'],
|
||||
['PROCESS-PATH-REGEX'],
|
||||
['PROCESS-PATH-WILDCARD'],
|
||||
['PROCESS-NAME'],
|
||||
['PROCESS-NAME-REGEX'],
|
||||
['PROCESS-NAME-WILDCARD'],
|
||||
['UID']
|
||||
]
|
||||
},
|
||||
{
|
||||
label: _('Network'),
|
||||
types: [
|
||||
['NETWORK'],
|
||||
['DSCP']
|
||||
]
|
||||
},
|
||||
{
|
||||
label: _('Other'),
|
||||
types: [
|
||||
['RULE-SET'],
|
||||
['MATCH']
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
const rules_type_allowparms = [
|
||||
@@ -349,12 +381,15 @@ const rules_type_allowparms = [
|
||||
'RULE-SET',
|
||||
];
|
||||
|
||||
const rules_logical_type = [
|
||||
['AND'],
|
||||
['OR'],
|
||||
['NOT'],
|
||||
//['SUB-RULE'],
|
||||
];
|
||||
const rules_logical_type = {
|
||||
label: _('Logical'),
|
||||
types: [
|
||||
['AND'],
|
||||
['OR'],
|
||||
['NOT'],
|
||||
//['SUB-RULE']
|
||||
]
|
||||
};
|
||||
|
||||
const rules_logical_payload_count = {
|
||||
'AND': { low: 2, high: undefined },
|
||||
@@ -510,6 +545,16 @@ const CBIGridSection = form.GridSection.extend({
|
||||
}
|
||||
});
|
||||
|
||||
const CBIListValue = form.ListValue.extend({
|
||||
renderWidget(/* ... */) {
|
||||
let frameEl = form.ListValue.prototype.renderWidget.apply(this, arguments);
|
||||
|
||||
frameEl.querySelector('select').style["min-width"] = '10em';
|
||||
|
||||
return frameEl;
|
||||
}
|
||||
});
|
||||
|
||||
const CBIDynamicList = form.DynamicList.extend({ // @less_25_12
|
||||
__name__: 'CBI.DynamicList',
|
||||
|
||||
@@ -533,6 +578,18 @@ const CBIDynamicList = form.DynamicList.extend({ // @less_25_12
|
||||
}
|
||||
});
|
||||
|
||||
const CBIStaticList = form.DynamicList.extend({
|
||||
__name__: 'CBI.StaticList',
|
||||
|
||||
renderWidget(/* ... */) {
|
||||
let El = (less_25_12 ? CBIDynamicList : form.DynamicList).prototype.renderWidget.apply(this, arguments); // @less_25_12
|
||||
|
||||
El.querySelector('.add-item ul > li[data-value="-"]')?.remove();
|
||||
|
||||
return El;
|
||||
}
|
||||
});
|
||||
|
||||
const CBIMultiValue = form.MultiValue.extend({ // @pr8758_merged
|
||||
__name__: 'CBI.MultiValue',
|
||||
|
||||
@@ -550,11 +607,73 @@ const CBIMultiValue = form.MultiValue.extend({ // @pr8758_merged
|
||||
}
|
||||
});
|
||||
|
||||
const CBIStaticList = form.DynamicList.extend({
|
||||
__name__: 'CBI.StaticList',
|
||||
const CBIGroupListValue = CBIListValue.extend({
|
||||
__name__: 'CBI.GroupListValue',
|
||||
|
||||
renderWidget(section_id, option_index, cfgvalue) {
|
||||
const frameEl = CBIListValue.prototype.renderWidget.apply(this, arguments);
|
||||
const select = frameEl.querySelector('select');
|
||||
const options = Array.from(select.options);
|
||||
|
||||
Object.keys(this.grplist).forEach((label) => {
|
||||
const groupEl = E('optgroup', {label: label}, []);
|
||||
for (const option of options)
|
||||
if (this.grplist[label].includes(option.value))
|
||||
groupEl.appendChild(option);
|
||||
select.appendChild(groupEl);
|
||||
});
|
||||
|
||||
select.value = (cfgvalue != null) ? cfgvalue : this.default;
|
||||
return frameEl;
|
||||
},
|
||||
|
||||
value(key, val) {
|
||||
this.keylist ??= [];
|
||||
this.vallist ??= [];
|
||||
this.grplist ??= {};
|
||||
|
||||
if (Array.isArray(key)) {
|
||||
this.grplist[val] ??= [];
|
||||
this.grplist[val].push(key[0]);
|
||||
this.super('value', ...key);
|
||||
} else
|
||||
this.super('value', key, val);
|
||||
}
|
||||
});
|
||||
|
||||
const CBIGroupDynamicList = (less_25_12 ? CBIDynamicList : form.DynamicList).extend({ // @less_25_12
|
||||
__name__: 'CBI.GroupDynamicList',
|
||||
|
||||
renderWidget(section_id, option_index, cfgvalue) {
|
||||
const frameEl = (less_25_12 ? CBIDynamicList : form.DynamicList).prototype.renderWidget.apply(this, arguments); // @less_25_12
|
||||
const select = frameEl.querySelector('ul');
|
||||
const optLis = Array.from(select.querySelectorAll('li'));
|
||||
|
||||
Object.keys(this.grplist).forEach((label) => {
|
||||
const groupLi = E('li', {
|
||||
class: "group-title",
|
||||
style: "font-weight: bold; pointer-events: none;"
|
||||
}, [label]);
|
||||
for (const optLi of optLis)
|
||||
if (this.grplist[label].includes(optLi.getAttribute('data-value'))) {
|
||||
optLi.classList.add('group-item');
|
||||
optLi.style.paddingLeft = '20px';
|
||||
}
|
||||
const firstLi = select.querySelector(`li[data-value="${this.grplist[label][0]}"]`);
|
||||
select.insertBefore(groupLi, firstLi);
|
||||
});
|
||||
|
||||
return frameEl;
|
||||
},
|
||||
|
||||
value: CBIGroupListValue.prototype.value
|
||||
});
|
||||
|
||||
const CBIGroupStaticList = CBIGroupDynamicList.extend({
|
||||
__name__: 'CBI.GroupStaticList',
|
||||
|
||||
renderWidget(/* ... */) {
|
||||
let El = (less_25_12 ? CBIDynamicList : form.DynamicList).prototype.renderWidget.apply(this, arguments); // @less_25_12
|
||||
let El = CBIGroupDynamicList.prototype.renderWidget.apply(this, arguments);
|
||||
|
||||
El.querySelector('.add-item ul > li[data-value="-"]')?.remove();
|
||||
|
||||
@@ -562,16 +681,6 @@ const CBIStaticList = form.DynamicList.extend({
|
||||
}
|
||||
});
|
||||
|
||||
const CBIListValue = form.ListValue.extend({
|
||||
renderWidget(/* ... */) {
|
||||
let frameEl = form.ListValue.prototype.renderWidget.apply(this, arguments);
|
||||
|
||||
frameEl.querySelector('select').style["min-width"] = '10em';
|
||||
|
||||
return frameEl;
|
||||
}
|
||||
});
|
||||
|
||||
const CBIRichValue = form.Value.extend({
|
||||
__name__: 'CBI.RichValue',
|
||||
|
||||
@@ -1938,10 +2047,13 @@ return baseclass.extend({
|
||||
|
||||
/* Prototype */
|
||||
GridSection: CBIGridSection,
|
||||
DynamicList: CBIDynamicList,
|
||||
MultiValue: CBIMultiValue,
|
||||
StaticList: CBIStaticList,
|
||||
ListValue: CBIListValue,
|
||||
DynamicList: CBIDynamicList, // @less_25_12
|
||||
StaticList: CBIStaticList,
|
||||
MultiValue: CBIMultiValue,
|
||||
GroupListValue: CBIGroupListValue,
|
||||
GroupDynamicList: CBIGroupDynamicList,
|
||||
GroupStaticList: CBIGroupStaticList,
|
||||
RichValue: CBIRichValue,
|
||||
RichMultiValue: CBIRichMultiValue,
|
||||
TextValue: CBITextValue,
|
||||
|
||||
@@ -137,9 +137,9 @@ class RulesEntry {
|
||||
Object.keys(content).forEach(key => this[key] = content[key]);
|
||||
} catch {}
|
||||
|
||||
this.type ||= hm.rules_type[0][0];
|
||||
this.type ||= hm.rules_type[0].types[0][0];
|
||||
this.payload ||= [
|
||||
{type: hm.rules_type[0][0], factor: '', /* deny: false */},
|
||||
{type: hm.rules_type[0].types[0][0], factor: '', /* deny: false */},
|
||||
//{type: 'DOMAIN-SUFFIX', factor: '.google.com', deny: true}
|
||||
];
|
||||
this.detour ||= hm.preset_outbound.full[0][0];
|
||||
@@ -215,7 +215,7 @@ class RulesEntry {
|
||||
|
||||
toString(format) {
|
||||
format ||= 'json';
|
||||
let logical = hm.rules_logical_type.map(e => e[0] || e).includes(this.type);
|
||||
let logical = hm.rules_logical_type.types.map(e => e[0] || e).includes(this.type);
|
||||
let rule, factor, detour, params;
|
||||
|
||||
if (logical) {
|
||||
@@ -380,7 +380,7 @@ const parseRulesYaml = hm.parseYaml.extend({
|
||||
return null;
|
||||
}
|
||||
|
||||
if (hm.rules_logical_type.map(e => e[0] || e).includes(tp)) {
|
||||
if (hm.rules_logical_type.types.map(e => e[0] || e).includes(tp)) {
|
||||
logical_payload = payload.match(/^\(\((.*)\)\)$/); // LOGIC_TYPE,((payload1),(payload2),(payload3)),DIRECT
|
||||
if (logical_payload)
|
||||
logical_payload = logical_payload[1].split('),(');
|
||||
@@ -530,11 +530,11 @@ function renderPayload(s, total, uciconfig) {
|
||||
for (let n=0; n<total; n++) {
|
||||
prefix = `payload${n}_`;
|
||||
|
||||
o = s.option(form.ListValue, prefix + 'type', _('Type') + ` ${n+1}`);
|
||||
o.default = hm.rules_type[0][0];
|
||||
hm.rules_type.forEach((res) => {
|
||||
o.value.apply(o, res);
|
||||
})
|
||||
o = s.option(hm.GroupListValue, prefix + 'type', _('Type') + ` ${n+1}`);
|
||||
o.default = hm.rules_type[0].types[0][0];
|
||||
for (const {label, types} of hm.rules_type) {
|
||||
types.forEach((res) => o.value.call(o, res, label));
|
||||
}
|
||||
Object.keys(hm.rules_logical_payload_count).forEach((key) => {
|
||||
if (n < hm.rules_logical_payload_count[key].low)
|
||||
o.depends('type', key);
|
||||
@@ -669,11 +669,10 @@ function renderPayload(s, total, uciconfig) {
|
||||
Object.keys(extenbox).forEach((n) => {
|
||||
prefix = `payload${n}_`;
|
||||
|
||||
o = s.option(hm.StaticList, prefix + 'type', _('Type') + ' ++');
|
||||
o.default = hm.rules_type[0][0];
|
||||
hm.rules_type.forEach((res) => {
|
||||
o.value.apply(o, res);
|
||||
})
|
||||
o = s.option(hm.GroupStaticList, prefix + 'type', _('Type') + ' ++');
|
||||
for (const {label, types} of hm.rules_type) {
|
||||
types.forEach((res) => o.value.call(o, res, label));
|
||||
}
|
||||
extenbox[n].forEach((type) => {
|
||||
o.depends('type', type);
|
||||
})
|
||||
@@ -695,7 +694,7 @@ function renderPayload(s, total, uciconfig) {
|
||||
return true;
|
||||
}
|
||||
|
||||
o = s.option(hm.less_25_12 ? hm.DynamicList : form.DynamicList, prefix + 'fused', _('Factor') + ' ++', // @less_25_12
|
||||
o = s.option(hm.GroupDynamicList, prefix + 'fused', _('Factor') + ' ++',
|
||||
_('Content will not be verified, Please make sure you enter it correctly.'));
|
||||
extenbox[n].forEach((type) => {
|
||||
o.depends(Object.fromEntries([['type', type], [prefix + 'type', /.+/]]));
|
||||
@@ -703,13 +702,10 @@ function renderPayload(s, total, uciconfig) {
|
||||
initDynamicPayload(o, n, 'factor', uciconfig);
|
||||
o.load = L.bind(function(n, key, uciconfig, section_id) {
|
||||
hm.loadLabel.call(this, [
|
||||
['REMATCHNAME', _('-- REMATCH-NAME --')],
|
||||
...hm.loadLabelValues(this.config, 'rematch-name'),
|
||||
['NETWORK', _('-- NETWORK --')],
|
||||
['udp', _('UDP')],
|
||||
['tcp', _('TCP')],
|
||||
['RULESET', _('-- RULE-SET --')],
|
||||
...hm.loadLabelValues(this.config, 'ruleset')
|
||||
...hm.loadLabelValues(this.config, 'rematch-name').map(e => [e, _('REMATCH-NAME')]),
|
||||
[['udp', _('UDP')], _('NETWORK')],
|
||||
[['tcp', _('TCP')], _('NETWORK')],
|
||||
...hm.loadLabelValues(this.config, 'ruleset').map(e => [e, _('RULE-SET')])
|
||||
], section_id);
|
||||
|
||||
return new RulesEntry(uci.get(uciconfig, section_id, 'entry')).getPayloads().slice(n).map(e => e[key] ?? '');
|
||||
@@ -764,11 +760,11 @@ function renderRules(s, uciconfig) {
|
||||
o.remove = form.AbstractValue.prototype.remove;
|
||||
o.editable = true;
|
||||
|
||||
o = s.option(form.ListValue, 'type', _('Type'));
|
||||
o.default = hm.rules_type[0][0];
|
||||
[...hm.rules_type, ...hm.rules_logical_type].forEach((res) => {
|
||||
o.value.apply(o, res);
|
||||
})
|
||||
o = s.option(hm.GroupListValue, 'type', _('Type'));
|
||||
o.default = hm.rules_type[0].types[0][0];
|
||||
for (const {label, types} of hm.rules_type.concat(hm.rules_logical_type)) {
|
||||
types.forEach((res) => o.value.call(o, res, label));
|
||||
}
|
||||
o.load = function(section_id) {
|
||||
return new RulesEntry(uci.get(uciconfig, section_id, 'entry')).type;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -16,7 +16,7 @@ function wGET(url, header, filepath) {
|
||||
if (!url || type(url) !== 'string')
|
||||
return null;
|
||||
|
||||
let ua = 'Wget/1.21 (FullCombo Shark!)';
|
||||
let ua = 'Wget/1.24 (FullCombo Shark!)';
|
||||
|
||||
if (header) {
|
||||
header = json(trim(header) || '{}');
|
||||
|
||||
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-netstat
|
||||
PKG_VERSION:=1.1.5
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_MAINTAINER:=NoobLK <liyanagelsofficial@gmail.com>
|
||||
PKG_LICENSE:=GPL-3.0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"admin/tools/netstat": {
|
||||
"admin/status/netstat": {
|
||||
"title": "Netstat",
|
||||
"order": 20,
|
||||
"action": {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-open-box
|
||||
PKG_VERSION:=0.1.280
|
||||
PKG_RELEASE:=6
|
||||
PKG_VERSION:=0.1.281
|
||||
PKG_RELEASE:=7
|
||||
|
||||
PKG_MAINTAINER:=liandu2024
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
|
||||
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-passwall
|
||||
PKG_VERSION:=26.10.4
|
||||
PKG_RELEASE:=313
|
||||
PKG_RELEASE:=314
|
||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
|
||||
@@ -79,14 +79,14 @@ local com = self.com
|
||||
}
|
||||
}
|
||||
|
||||
function onRequestError(btn, errorMessage) {
|
||||
function onRequestError(btn, errorMessage, checking) {
|
||||
setButtonDisabled(btn, false);
|
||||
btn.value = retryText;
|
||||
|
||||
var app = btn.getAttribute('data-update-app');
|
||||
var detailId = app === appname ? appname + '-check_btn' : '_' + app + '-check_btn';
|
||||
var ckeckDetailElm = document.getElementById(detailId + '-detail');
|
||||
if (app === appname) errorMessage = errorMessage ? updateFailedText : unknownErrorText;
|
||||
if (app === appname && !checking) errorMessage = errorMessage ? updateFailedText : unknownErrorText;
|
||||
if (errorMessage && ckeckDetailElm) {
|
||||
ckeckDetailElm.textContent = errorMessage
|
||||
}
|
||||
@@ -117,7 +117,7 @@ local com = self.com
|
||||
removePageNotice();
|
||||
if (!json || json.code) {
|
||||
appInfoList[app] = undefined;
|
||||
onRequestError(btn, json && (json.error || updateFailedText));
|
||||
onRequestError(btn, json && json.error, true);
|
||||
} else {
|
||||
appInfoList[app] = json;
|
||||
if (json.has_update) {
|
||||
|
||||
@@ -6,14 +6,10 @@ manager="$3"
|
||||
force="$4"
|
||||
|
||||
if [ "$manager" = apk ]; then
|
||||
apk add --allow-untrusted "$dir/luci-app-${CONFIG}.apk" "$dir/luci-i18n-${CONFIG}-zh-cn.apk"
|
||||
extra=""
|
||||
[ "$force" = 1 ] && extra="--force-reinstall --force-overwrite"
|
||||
apk add --allow-untrusted $extra "$dir/luci-app-${CONFIG}.apk" "$dir/luci-i18n-${CONFIG}-zh-cn.apk"
|
||||
result=$?
|
||||
if [ "$result" = 0 ] && [ "$force" = 1 ]; then
|
||||
apk mkndx --allow-untrusted --pkgname-spec '${name}.apk' -o "$dir/Packages.adb" \
|
||||
"$dir/luci-app-${CONFIG}.apk" "$dir/luci-i18n-${CONFIG}-zh-cn.apk" &&
|
||||
apk --allow-untrusted --repository "$dir/Packages.adb" fix --reinstall "luci-app-${CONFIG}" "luci-i18n-${CONFIG}-zh-cn"
|
||||
result=$?
|
||||
fi
|
||||
else
|
||||
extra=""
|
||||
[ "$force" = 1 ] && extra="--force-reinstall"
|
||||
|
||||
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||
LUCI_TITLE:=LuCI Status Pages
|
||||
LUCI_DEPENDS:=+luci-base +luci-app-oui +luci-mod-dashboard +libiwinfo +rpcd-mod-iwinfo +rpcd-mod-rrdns +ucode +ucode-mod-fs +ucode-mod-ubus +ucode-mod-socket
|
||||
|
||||
PKG_RELEASE:=26
|
||||
PKG_RELEASE:=27
|
||||
PKG_BUILD_DEPENDS:=iwinfo
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
|
||||
|
||||
@@ -102,6 +102,7 @@ return baseclass.extend({
|
||||
fields.splice(6, 0, _('Temperature'));
|
||||
fields.splice(7, 0, cpuusage.tempinfo);
|
||||
}
|
||||
|
||||
if (boardinfo.model != "Default string Default string") {
|
||||
fields.splice(2, 0, _('Model'));
|
||||
fields.splice(3, 0, boardinfo.model);
|
||||
@@ -116,6 +117,19 @@ return baseclass.extend({
|
||||
]));
|
||||
}
|
||||
|
||||
if (uci.get('system', '@system[0]', 'links') !== '0') {
|
||||
table.appendChild(E('tr', { 'class': 'tr' }, [
|
||||
E('td', { 'class': 'td', 'colspan': 2, 'style': 'padding: 10px 12px;' }, [
|
||||
E('div', { 'style': 'display: flex; justify-content: space-around; align-items: center; text-align: center;' }, [
|
||||
E('a', { 'href': '[https://openwrt.ai/](https://openwrt.ai/)', 'target': '_blank' }, [ '固件下载与定制' ]),
|
||||
E('a', { 'href': '[https://openwrt.ai/fadian/](https://openwrt.ai/fadian/)', 'target': '_blank', 'style': 'color: orangered;' }, [ '赞助' ]),
|
||||
E('a', { 'href': '[https://github.com/kiddin9/Kwrt](https://github.com/kiddin9/Kwrt)', 'target': '_blank' }, [ '源码与反馈' ]),
|
||||
E('a', { 'href': '[https://t.me/opkwrt](https://t.me/opkwrt)', 'target': '_blank' }, [ 'TG交流' ])
|
||||
])
|
||||
])
|
||||
]));
|
||||
}
|
||||
|
||||
return table;
|
||||
}
|
||||
});
|
||||
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||
LUCI_TITLE:=Noobwrt Theme
|
||||
LUCI_DEPENDS:=+wget +jsonfilter
|
||||
PKG_VERSION:=1.1.7
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
CONFIG_LUCI_CSSTIDY:=1
|
||||
|
||||
|
||||
@@ -961,3 +961,5 @@ input,
|
||||
background-color: #707070;
|
||||
color: #fff;
|
||||
}
|
||||
.main .main-right{background-color: transparent}
|
||||
input[placeholder]::placeholder {color: #888888;opacity: 1}
|
||||
@@ -10,7 +10,7 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=my-default-settings
|
||||
PKG_VERSION:=2
|
||||
PKG_RELEASE:=28
|
||||
PKG_RELEASE:=29
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
<% if luci.sys.exec("echo -n `uci -q get base_config.@status[0].links`") ~= "0" then %>
|
||||
<script>
|
||||
var links = document.createElement('div');
|
||||
links.innerHTML ='<table class="table"><tr class="tr"><td class="td left"><a href="https://openwrt.ai/" target="_blank">固件下载与定制</a></td><td class="td left" width="25%"><a href="https://openwrt.ai/fadian/" target="_blank" style="color:orangered">赞助</a></td><td class="td left" width="25%"><a href="https://github.com/kiddin9/Kwrt" target="_blank">源码与反馈</a></td><td class="td left" width="25%"><a href="https://t.me/opkwrt" target="_blank">TG交流</a></td></tr></table>';
|
||||
setTimeout(function(){
|
||||
var telegram = document.querySelectorAll(".cbi-section")[0];
|
||||
telegram.appendChild(links);
|
||||
}, 1500);
|
||||
setTimeout(function(){
|
||||
var telegram = document.querySelectorAll(".cbi-section")[0];
|
||||
telegram.appendChild(links);
|
||||
}, 2400);
|
||||
</script>
|
||||
<%end%>
|
||||
Reference in new issue
Block a user