Merge pull request #10 from freifunk-gluon/luci-theme
add new luci-theme
This commit is contained in:
commit
528d04cb67
@ -15,7 +15,7 @@ define Package/gluon-config-mode
|
||||
SECTION:=gluon
|
||||
CATEGORY:=Gluon
|
||||
TITLE:=Luci based config mode for user friendly setup of new meshnodes
|
||||
DEPENDS:=+gluon-core +gluon-lock-password +gluon-location +gluon-simple-tc +uhttpd +dnsmasq +luci-mod-admin-core +ip +luci-theme-openwrt
|
||||
DEPENDS:=+gluon-core +gluon-lock-password +gluon-location +gluon-simple-tc +gluon-luci-theme +uhttpd +dnsmasq +luci-mod-admin-core +ip
|
||||
endef
|
||||
|
||||
define Package/gluon-config-mode/description
|
||||
|
@ -9,7 +9,7 @@ configmode.setup_fastd_secret(meshvpn_name)
|
||||
f = SimpleForm("wizard", "Willkommen!", "Willkommen zum Einrichtungsassistenten für deinen neuen Lübecker Freifunk-Knoten. Fülle das folgende Formular deinen Vorstellungen entsprechend aus und klicke anschließend auf den „Senden“-Button.")
|
||||
f.reset = false
|
||||
|
||||
s = f:section(SimpleSection, "Grundeinstellungen", nil)
|
||||
s = f:section(SimpleSection, nil, nil)
|
||||
|
||||
o = s:option(Value, "_hostname", "Knotenname")
|
||||
o.value = uci:get_first("system", "system", "hostname")
|
||||
@ -22,7 +22,7 @@ o.default = uci:get_bool("autoupdater", "settings", "enabled") and o.enabled or
|
||||
o.rmempty = false
|
||||
o.description = "Aktiviert automatische Updates der Firmware (empfohlen)"
|
||||
|
||||
s = f:section(SimpleSection, "Mesh-VPN", "Nutzt die Internet-Verbindung, um diesem Knoten auch dann Zugang zum Freifunknetz zu geben, wenn er außerhalb der Funkreichweite anderer Freifunk-Knoten ist.")
|
||||
s = f:section(SimpleSection, nil, "Nutzt die Internet-Verbindung, um diesem Knoten auch dann Zugang zum Freifunknetz zu geben, wenn er außerhalb der Funkreichweite anderer Freifunk-Knoten ist.")
|
||||
|
||||
o = s:option(Flag, "_meshvpn", "Mesh-VPN aktivieren?")
|
||||
o.default = uci:get_bool("fastd", meshvpn_name, "enabled") and o.enabled or o.disabled
|
||||
@ -46,7 +46,7 @@ o.value = uci:get("gluon-simple-tc", meshvpn_name, "limit_egress")
|
||||
o.rmempty = false
|
||||
o.datatype = "integer"
|
||||
|
||||
s = f:section(SimpleSection, "GPS Koordinaten", "Hier kannst du die GPS-Koordinaten deines Knotens eintragen, um ihn in der Knotenkarte anzeigen zu lassen.")
|
||||
s = f:section(SimpleSection, nil, "Hier kannst du die GPS-Koordinaten deines Knotens eintragen, um ihn in der Knotenkarte anzeigen zu lassen.")
|
||||
|
||||
o = s:option(Flag, "_location", "Koordinaten veröffentlichen?")
|
||||
o.default = uci:get_first("gluon-locaton", "location", "share_location", o.disabled)
|
||||
|
@ -27,7 +27,7 @@ $Id$
|
||||
<p>
|
||||
@config_mode.msg_pubkey@
|
||||
</p>
|
||||
<div style="text-align: left;font-size: 2em;line-height: 1em; background: #f5f5f5; border: 1px solid #ececec; margin-bottom: 0.5em; padding: 0.5em">
|
||||
<div class="the-key">
|
||||
# <%=luci.sys.hostname()%>
|
||||
<br/>
|
||||
<%=pubkey%>
|
||||
|
@ -15,7 +15,7 @@ define Package/gluon-luci-admin
|
||||
SECTION:=gluon
|
||||
CATEGORY:=Gluon
|
||||
TITLE:=Luci based simple administration interface for mesh nodes
|
||||
DEPENDS:=+gluon-core +luci-mod-admin-core +luci-theme-openwrt
|
||||
DEPENDS:=+gluon-core +gluon-luci-theme +luci-mod-admin-core
|
||||
endef
|
||||
|
||||
define Package/gluon-luci-admin/description
|
||||
|
39
package/gluon-luci-theme/Makefile
Normal file
39
package/gluon-luci-theme/Makefile
Normal file
@ -0,0 +1,39 @@
|
||||
# Copyright (C) 2013 Nils Schneider <nils at nilsschneider.net>
|
||||
# This is free software, licensed under the Apache 2.0 license.
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=gluon-luci-theme
|
||||
PKG_VERSION:=0.1
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/gluon-luci-theme
|
||||
SECTION:=gluon
|
||||
CATEGORY:=Gluon
|
||||
TITLE:=Luci theme for Gluon
|
||||
DEPENDS:=
|
||||
endef
|
||||
|
||||
define Package/gluon-luci-theme/description
|
||||
Luci based config mode
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/gluon-luci-theme/install
|
||||
$(CP) ./files/* $(1)/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,gluon-luci-theme))
|
6
package/gluon-luci-theme/files/etc/uci-defaults/luci-theme-gluon
Executable file
6
package/gluon-luci-theme/files/etc/uci-defaults/luci-theme-gluon
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
uci batch <<-EOF
|
||||
set luci.themes.Gluon=/luci-static/gluon
|
||||
commit luci
|
||||
EOF
|
||||
|
@ -0,0 +1,19 @@
|
||||
<%#
|
||||
LuCI - Lua Configuration Interface
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
|
||||
-%>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,164 @@
|
||||
<%#
|
||||
LuCI - Lua Configuration Interface
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008-2010 Jo-Philipp Wich <xm@subsignal.org>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
|
||||
-%>
|
||||
<%
|
||||
local sys = require "luci.sys"
|
||||
local http = require "luci.http"
|
||||
local disp = require "luci.dispatcher"
|
||||
|
||||
local hostname = sys.hostname()
|
||||
local load1, load5, load15 = sys.loadavg()
|
||||
|
||||
local request = disp.context.path
|
||||
local request2 = disp.context.request
|
||||
|
||||
local category = request[1]
|
||||
local cattree = category and disp.node(category)
|
||||
|
||||
local leaf = request2[#request2]
|
||||
|
||||
local tree = disp.node()
|
||||
local node = disp.context.dispatched
|
||||
|
||||
local categories = disp.node_childs(tree)
|
||||
|
||||
local c = tree
|
||||
local i, r
|
||||
|
||||
-- tag all nodes leading to this page
|
||||
for i, r in ipairs(request) do
|
||||
if c.nodes and c.nodes[r] then
|
||||
c = c.nodes[r]
|
||||
c._menu_selected = true
|
||||
end
|
||||
end
|
||||
|
||||
http.prepare_content("application/xhtml+xml")
|
||||
|
||||
local function nodeurl(prefix, name, query)
|
||||
local url = controller .. prefix .. name .. "/"
|
||||
if query then
|
||||
url = url .. http.build_querystring(query)
|
||||
end
|
||||
return pcdata(url)
|
||||
end
|
||||
|
||||
local function subtree(prefix, node, level)
|
||||
if not level then
|
||||
level = 1
|
||||
end
|
||||
|
||||
local childs = disp.node_childs(node)
|
||||
if #childs > 0 then
|
||||
%>
|
||||
<div class="tabmenu<%=level%>">
|
||||
<ul class="tabmenu l<%=level%>">
|
||||
<%
|
||||
local selected_node
|
||||
local selected_name
|
||||
local i, v
|
||||
|
||||
for i, v in ipairs(childs) do
|
||||
local nnode = node.nodes[v]
|
||||
if nnode._menu_selected then
|
||||
selected_node = nnode
|
||||
selected_name = v
|
||||
end
|
||||
%>
|
||||
<li class="tabmenu-item-<%=v%><% if nnode._menu_selected or (node.leaf and v == leaf) then %> active<% end %>">
|
||||
<a href="<%=nodeurl(prefix, v, nnode.query)%>"><%=striptags(translate(nnode.title))%></a>
|
||||
</li>
|
||||
<%
|
||||
end
|
||||
%>
|
||||
</ul>
|
||||
<br style="clear:both" />
|
||||
<%
|
||||
if selected_node then
|
||||
subtree(prefix .. selected_name .. "/", selected_node, level + 1)
|
||||
end
|
||||
%>
|
||||
</div>
|
||||
<%
|
||||
end
|
||||
end
|
||||
-%>
|
||||
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%=luci.i18n.context.lang%>" lang="<%=luci.i18n.context.lang%>">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
||||
<link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css" />
|
||||
<% if node and node.css then %><link rel="stylesheet" type="text/css" media="screen" href="<%=resource%>/<%=node.css%>" />
|
||||
<% end -%>
|
||||
<% if css then %><style title="text/css">
|
||||
<%= css %>
|
||||
</style>
|
||||
<% end -%>
|
||||
<script type="text/javascript" src="<%=resource%>/xhr.js"></script>
|
||||
<title><%=striptags( hostname .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title>
|
||||
</head>
|
||||
<body class="lang_<%=luci.i18n.context.lang%>">
|
||||
|
||||
<div id="menubar">
|
||||
<div class="hostinfo">
|
||||
<%=hostname%>
|
||||
<span id="xhr_poll_status" style="display:none" onclick="XHR.running() ? XHR.halt() : XHR.run()">
|
||||
| <%:Auto Refresh%>:
|
||||
<span id="xhr_poll_status_on"><%:on%></span>
|
||||
<span id="xhr_poll_status_off" style="display:none"><%:off%></span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<% if #categories > 1 then %>
|
||||
<ul id="modemenu">
|
||||
<% for i, r in ipairs(categories) do %>
|
||||
<li><a<% if request[1] == r then %> class="active"<%end%> href="<%=controller%>/<%=r%>/"><%=striptags(translate(tree.nodes[r].title))%></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
||||
<%
|
||||
if tree.nodes[category] and tree.nodes[category].ucidata then
|
||||
local ucic = 0
|
||||
for i, j in pairs(require("luci.model.uci").cursor():changes()) do
|
||||
for k, l in pairs(j) do
|
||||
for m, n in pairs(l) do
|
||||
ucic = ucic + 1;
|
||||
end
|
||||
end
|
||||
end
|
||||
-%>
|
||||
<div id="savemenu">
|
||||
<% if ucic > 0 then %>
|
||||
<a class="warning" href="<%=controller%>/<%=category%>/uci/changes/?redir=<%=luci.http.urlencode(luci.http.formvalue("redir") or REQUEST_URI)%>"><%:Unsaved Changes%>: <%=ucic%></a>
|
||||
<%- else -%>
|
||||
<a href="#"><%:Changes%>: 0</a>
|
||||
<% end -%>
|
||||
</div><% end %>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="maincontainer">
|
||||
<% if category then subtree("/" .. category .. "/", cattree) end %>
|
||||
|
||||
<div id="maincontent">
|
||||
<noscript>
|
||||
<div class="errorbox">
|
||||
<strong><%:Java Script required!%></strong><br />
|
||||
<%:You must enable Java Script in your browser or LuCI will not work properly.%>
|
||||
</div>
|
||||
</noscript>
|
804
package/gluon-luci-theme/files/www/luci-static/gluon/cascade.css
Normal file
804
package/gluon-luci-theme/files/www/luci-static/gluon/cascade.css
Normal file
@ -0,0 +1,804 @@
|
||||
@charset "UTF-8";
|
||||
.lang_he {
|
||||
direction: RTL;
|
||||
unicode-bidi: embed; }
|
||||
|
||||
.hidden {
|
||||
display: none; }
|
||||
|
||||
html {
|
||||
min-height: 100%;
|
||||
height: auto;
|
||||
position: relative; }
|
||||
|
||||
body {
|
||||
font-family: 'Open Sans', Arial, sans-serif;
|
||||
font-size: 12pt;
|
||||
color: #4d4e53;
|
||||
line-height: 1.5em;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
background-color: #f3f3f3; }
|
||||
|
||||
a img {
|
||||
border: none;
|
||||
text-decoration: none; }
|
||||
|
||||
.tabmenu1 {
|
||||
text-align: center; }
|
||||
|
||||
ul.tabmenu {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 2em 0;
|
||||
display: inline-flex; }
|
||||
|
||||
ul.tabmenu li {
|
||||
white-space: nowrap;
|
||||
margin: 0 0.5em;
|
||||
padding: 0;
|
||||
text-align: center; }
|
||||
ul.tabmenu li a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
padding: 1em;
|
||||
margin: 0;
|
||||
color: #333;
|
||||
border-radius: 2em; }
|
||||
ul.tabmenu li a:hover {
|
||||
background: #ffe9b3; }
|
||||
ul.tabmenu li.active a {
|
||||
font-weight: bold;
|
||||
background: white;
|
||||
color: #333; }
|
||||
|
||||
abbr,
|
||||
acronym {
|
||||
font-style: normal;
|
||||
font-variant: normal; }
|
||||
|
||||
abbr[title],
|
||||
acronym[title] {
|
||||
border-bottom: 1px dotted;
|
||||
cursor: help; }
|
||||
|
||||
a:link abbr[title],
|
||||
a:visited abbr[title],
|
||||
a:link acronym[title],
|
||||
a:visited acronym[title] {
|
||||
cursor: pointer; }
|
||||
|
||||
code {
|
||||
font-family: monospace;
|
||||
white-space: pre; }
|
||||
|
||||
#maincontent ul {
|
||||
margin-left: 2em; }
|
||||
|
||||
.warning {
|
||||
color: red;
|
||||
background-color: white;
|
||||
font-weight: bold; }
|
||||
|
||||
.clear {
|
||||
clear: both; }
|
||||
|
||||
.error {
|
||||
color: #ff0000;
|
||||
background-color: white; }
|
||||
|
||||
div.hostinfo {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 80%;
|
||||
padding: 0.5em;
|
||||
flex: 1;
|
||||
font-weight: bold; }
|
||||
|
||||
#xhr_poll_status {
|
||||
cursor: pointer; }
|
||||
|
||||
#xhr_poll_status #xhr_poll_status_off {
|
||||
font-weight: bold;
|
||||
color: #FF0000; }
|
||||
|
||||
#xhr_poll_status #xhr_poll_status_on {
|
||||
font-weight: bold;
|
||||
color: #00FF00; }
|
||||
|
||||
#menubar {
|
||||
display: flex;
|
||||
background: #dc0067;
|
||||
color: #ffffff; }
|
||||
|
||||
#menubar .warning {
|
||||
color: red;
|
||||
background-color: #557788; }
|
||||
|
||||
#menubar a:link,
|
||||
#menubar a:visited {
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 0.5em;
|
||||
text-decoration: none;
|
||||
font-size: 80%;
|
||||
font-weight: normal;
|
||||
color: white; }
|
||||
|
||||
#menubar a:link:hover,
|
||||
#menubar a:visited:hover,
|
||||
#menubar a:link:focus,
|
||||
#menubar a:visited:focus {
|
||||
background: #ffb400;
|
||||
color: black; }
|
||||
|
||||
#menubar a:link.active,
|
||||
#menubar a:visited.active {
|
||||
background: #ffb400;
|
||||
color: black;
|
||||
font-weight: bold; }
|
||||
|
||||
#menubar a:link.warning,
|
||||
#menubar a:visited.warning {
|
||||
background: #000000;
|
||||
color: red;
|
||||
font-weight: bold; }
|
||||
|
||||
#modemenu {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0; }
|
||||
|
||||
#modemenu li {
|
||||
display: inline-block; }
|
||||
|
||||
.lang_de #submenu_admin_uci {
|
||||
width: 12em; }
|
||||
|
||||
.lang_ru #submenu_admin_uci {
|
||||
width: 11.5em; }
|
||||
|
||||
textarea#syslog {
|
||||
width: 98%;
|
||||
min-height: 500px;
|
||||
border: 3px solid #cccccc;
|
||||
padding: 5px;
|
||||
font-family: monospace; }
|
||||
|
||||
#maincontent {
|
||||
padding: 0 1em 2em;
|
||||
max-width: 60em;
|
||||
min-width: 40em;
|
||||
margin: 1em auto; }
|
||||
|
||||
.lang_he #maincontent {
|
||||
direction: rtl; }
|
||||
|
||||
#maincontent p {
|
||||
margin-bottom: 1em; }
|
||||
|
||||
.cbi-section {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: none; }
|
||||
|
||||
.cbi-section legend {
|
||||
font-size: 1.4em;
|
||||
font-weight: bold;
|
||||
color: #dc0067;
|
||||
position: relative;
|
||||
padding: 0;
|
||||
margin-bottom: 0.5em; }
|
||||
|
||||
.cbi-section h2 {
|
||||
margin: 0em 0 0.5em -0.5em !important; }
|
||||
|
||||
.cbi-section h3 {
|
||||
text-decoration: none !important;
|
||||
font-weight: bold !important;
|
||||
color: #555555 !important;
|
||||
margin: 0.25em !important;
|
||||
font-size: 100% !important; }
|
||||
|
||||
.cbi-section-descr {
|
||||
margin-bottom: 2em; }
|
||||
|
||||
.cbi-title-ref {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
padding-right: 18px;
|
||||
background: url("../resources/cbi/link.gif") no-repeat scroll right center;
|
||||
background-color: inherit; }
|
||||
|
||||
ul.cbi-apply {
|
||||
font-size: 90%; }
|
||||
|
||||
input:-webkit-input-placeholder {
|
||||
color: #AAAAAA; }
|
||||
|
||||
input:-moz-placeholder {
|
||||
color: #AAAAAA; }
|
||||
|
||||
input:-ms-input-placeholder {
|
||||
color: #AAAAAA; }
|
||||
|
||||
input[type=checkbox] {
|
||||
-moz-appearance: none;
|
||||
-webkit-appearance: none;
|
||||
-o-appearance: none;
|
||||
appearance: none;
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
margin: 0; }
|
||||
input[type=checkbox]:checked {
|
||||
position: relative; }
|
||||
input[type=checkbox]:checked::after {
|
||||
content: '✔';
|
||||
color: #dc0067;
|
||||
vertical-align: middle;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 0;
|
||||
margin-top: -0.5em;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
font-size: 1.7em; }
|
||||
|
||||
input[type=submit],
|
||||
input[type=reset],
|
||||
input[type=image],
|
||||
input[type=button] {
|
||||
cursor: pointer; }
|
||||
|
||||
select,
|
||||
input,
|
||||
textarea {
|
||||
color: #003247;
|
||||
border: none;
|
||||
background: #ffe199;
|
||||
border-radius: 3pt;
|
||||
padding: 0.5em; }
|
||||
|
||||
input[type=image] {
|
||||
border: none; }
|
||||
|
||||
select,
|
||||
input[type=text],
|
||||
input[type=password] {
|
||||
width: 20em; }
|
||||
|
||||
td select,
|
||||
td input[type=text],
|
||||
td input[type=password] {
|
||||
width: 99%; }
|
||||
|
||||
img.cbi-image-button {
|
||||
cursor: pointer;
|
||||
margin: 0 2px;
|
||||
vertical-align: middle; }
|
||||
|
||||
input.cbi-button {
|
||||
display: inline-block;
|
||||
zoom: 1;
|
||||
line-height: normal;
|
||||
white-space: nowrap;
|
||||
vertical-align: baseline;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
-webkit-user-drag: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
font-size: 100%;
|
||||
padding: 0.5em 1em;
|
||||
color: rgba(0, 0, 0, 0.8);
|
||||
border: none rgba(0, 0, 0, 0);
|
||||
background-color: #E6E6E6;
|
||||
text-decoration: none;
|
||||
border-radius: 2px;
|
||||
/* Transitions */
|
||||
-webkit-transition: 0.1s linear -webkit-box-shadow;
|
||||
-moz-transition: 0.1s linear -moz-box-shadow;
|
||||
-ms-transition: 0.1s linear box-shadow;
|
||||
-o-transition: 0.1s linear box-shadow;
|
||||
transition: 0.1s linear box-shadow;
|
||||
background-repeat: no-repeat; }
|
||||
input.cbi-button::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border: 0; }
|
||||
input.cbi-button:active {
|
||||
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15) inset, 0 0 6px rgba(0, 0, 0, 0.2) inset; }
|
||||
input.cbi-button:focus {
|
||||
outline: 0; }
|
||||
input.cbi-button:hover, input.cbi-button:focus {
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(transparent), color-stop(40%, rgba(0, 0, 0, 0.05)), to(rgba(0, 0, 0, 0.1)));
|
||||
background-image: -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05) 40%, rgba(0, 0, 0, 0.1));
|
||||
background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.05) 0%, rgba(0, 0, 0, 0.1));
|
||||
background-image: -o-linear-gradient(transparent, rgba(0, 0, 0, 0.05) 40%, rgba(0, 0, 0, 0.1));
|
||||
background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.05) 40%, rgba(0, 0, 0, 0.1)); }
|
||||
input.cbi-button[disabled] {
|
||||
border: none;
|
||||
background-image: none;
|
||||
opacity: 0.40;
|
||||
cursor: not-allowed;
|
||||
box-shadow: none; }
|
||||
|
||||
input.cbi-input-user {
|
||||
background-image: url("../resources/cbi/user.gif");
|
||||
background-repeat: no-repeat;
|
||||
background-position: 1px center;
|
||||
color: #000000;
|
||||
text-indent: 17px; }
|
||||
|
||||
input.cbi-input-find,
|
||||
input.cbi-button-find {
|
||||
background-image: url("../resources/cbi/find.gif");
|
||||
color: #000000;
|
||||
padding-left: 17px; }
|
||||
|
||||
input.cbi-input-reload {
|
||||
background-image: url("../resources/cbi/reload.gif");
|
||||
color: #000000;
|
||||
padding-left: 17px; }
|
||||
|
||||
input.cbi-input-add,
|
||||
input.cbi-button-add {
|
||||
background-image: url("../resources/cbi/add.gif");
|
||||
color: #000000;
|
||||
padding-left: 17px;
|
||||
padding-right: 1px; }
|
||||
|
||||
input.cbi-input-fieldadd,
|
||||
input.cbi-button-fieldadd {
|
||||
background-image: url(../resources/cbi/fieldadd.gif);
|
||||
color: #000000;
|
||||
padding-left: 17px;
|
||||
padding-right: 1px; }
|
||||
|
||||
input.cbi-input-reset,
|
||||
input.cbi-button-reset {
|
||||
background-color: #ee3300;
|
||||
color: #fff; }
|
||||
|
||||
input.cbi-input-save,
|
||||
input.cbi-button-save {
|
||||
background-color: #009ee0;
|
||||
color: #fff; }
|
||||
|
||||
input.cbi-input-apply,
|
||||
input.cbi-button-apply {
|
||||
background-color: #009ee0;
|
||||
color: #fff; }
|
||||
|
||||
input.cbi-input-link,
|
||||
input.cbi-button-link {
|
||||
background-image: url("../resources/cbi/link.gif");
|
||||
color: #000000;
|
||||
padding-left: 17px;
|
||||
padding-right: 1px; }
|
||||
|
||||
input.cbi-input-download,
|
||||
input.cbi-button-download {
|
||||
background-image: url("../resources/cbi/download.gif");
|
||||
color: #000000;
|
||||
padding-left: 17px;
|
||||
padding-right: 1px; }
|
||||
|
||||
input.cbi-input-remove,
|
||||
div.cbi-section-remove input {
|
||||
background-image: url("../resources/cbi/remove.gif");
|
||||
color: #000000;
|
||||
padding-left: 17px;
|
||||
padding-right: 1px; }
|
||||
|
||||
input.cbi-button-up {
|
||||
background-image: url("../resources/cbi/up.gif");
|
||||
padding-left: 11px;
|
||||
padding-right: 1px; }
|
||||
|
||||
input.cbi-button-down {
|
||||
background-image: url("../resources/cbi/down.gif");
|
||||
padding-left: 11px;
|
||||
padding-right: 1px; }
|
||||
|
||||
input.cbi-button-edit {
|
||||
background-image: url("../resources/cbi/edit.gif");
|
||||
color: #000000;
|
||||
padding-left: 17px;
|
||||
padding-right: 1px; }
|
||||
|
||||
input.cbi-button-reload {
|
||||
background-image: url("../resources/cbi/reload.gif");
|
||||
color: #000000;
|
||||
padding-left: 17px;
|
||||
padding-right: 1px; }
|
||||
|
||||
input.cbi-button-remove {
|
||||
background-image: url("../resources/cbi/remove.gif");
|
||||
color: #000000;
|
||||
padding-left: 17px;
|
||||
padding-right: 1px; }
|
||||
|
||||
.cbi-input-invalid {
|
||||
background: #ee3300 !important;
|
||||
color: white; }
|
||||
|
||||
div.cbi-section-remove input {
|
||||
border-bottom: none; }
|
||||
|
||||
textarea {
|
||||
margin-left: -1px;
|
||||
margin-bottom: 0.5em; }
|
||||
|
||||
form > div > input[type=submit],
|
||||
form > div > input[type=reset] {
|
||||
margin-left: 0.5em; }
|
||||
|
||||
table td,
|
||||
table th {
|
||||
color: #000000; }
|
||||
|
||||
table.smalltext {
|
||||
background: #f5f5f5;
|
||||
color: #000000;
|
||||
border-top: 1px solid #666666;
|
||||
border-right: 1px solid #666666;
|
||||
border-bottom: 1px solid #666666;
|
||||
font-size: 90%;
|
||||
width: 80%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
border-collapse: collapse; }
|
||||
|
||||
table.smalltext tr:hover td {
|
||||
background-color: #bbddee;
|
||||
color: #000000; }
|
||||
|
||||
table.smalltext tr th {
|
||||
padding: 0 0.25em;
|
||||
border-left: 1px solid #666666;
|
||||
text-align: left; }
|
||||
|
||||
table.smalltext tr td {
|
||||
padding: 0 0.25em;
|
||||
border-top: 1px solid #666666;
|
||||
border-left: 1px solid #666666; }
|
||||
|
||||
table.cbi-section-table .cbi-rowstyle-1 {
|
||||
background-color: #eeeeff;
|
||||
color: #000000; }
|
||||
|
||||
table.cbi-section-table .cbi-rowstyle-1:hover,
|
||||
table.cbi-section-table .cbi-rowstyle-2:hover {
|
||||
background-color: #b2c8d4;
|
||||
color: #000000; }
|
||||
|
||||
table.cbi-section-table .cbi-section-table-cell {
|
||||
padding: 3px;
|
||||
white-space: nowrap; }
|
||||
|
||||
.cbi-section .cbi-rowstyle-1 h3 {
|
||||
background-color: #eeeeff;
|
||||
color: #555555; }
|
||||
|
||||
.cbi-rowstyle-2 {
|
||||
color: #000000; }
|
||||
|
||||
div.cbi-value {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin-bottom: 0.5em; }
|
||||
|
||||
.cbi-value-title {
|
||||
flex: 2;
|
||||
text-align: right;
|
||||
padding-top: 0.39em;
|
||||
padding-right: 1em;
|
||||
font-weight: bold; }
|
||||
|
||||
div.cbi-value-field {
|
||||
flex: 3; }
|
||||
|
||||
div.cbi-value-description {
|
||||
font-size: 8pt; }
|
||||
|
||||
div.cbi-section-create {
|
||||
clear: left;
|
||||
white-space: nowrap;
|
||||
vertical-align: top; }
|
||||
|
||||
div.cbi-section-create .cbi-button {
|
||||
margin: 0.25em; }
|
||||
|
||||
input.cbi-section-create-name {
|
||||
margin-right: -0.25em; }
|
||||
|
||||
div.cbi-map-descr {
|
||||
margin-bottom: 1em; }
|
||||
|
||||
.cbi-map-descr:empty, .cbi-section-descr:empty {
|
||||
display: none; }
|
||||
|
||||
.cbi-map-descr, .cbi-section-descr, .cbi-page-actions {
|
||||
padding: 1em;
|
||||
background: #ececec; }
|
||||
|
||||
.cbi-page-actions {
|
||||
text-align: right;
|
||||
display: flex;
|
||||
display: -moz-flex;
|
||||
-moz-flex-flow: row-reverse;
|
||||
flex-flow: row-reverse; }
|
||||
|
||||
div.cbi-optionals {
|
||||
padding: 0.25em;
|
||||
border-bottom: 1px dotted #bbbbbb; }
|
||||
|
||||
div.cbi-section-remove {
|
||||
float: right; }
|
||||
|
||||
.cbi-section-node {
|
||||
clear: both;
|
||||
position: relative;
|
||||
border: none; }
|
||||
|
||||
.cbi-section-node-tabbed {
|
||||
border-top-left-radius: 0; }
|
||||
|
||||
.cbi-section-node .cbi-value-last {
|
||||
border-bottom: none; }
|
||||
|
||||
.cbi-section-node table div {
|
||||
padding-bottom: 0;
|
||||
border-bottom: none; }
|
||||
|
||||
.cbi-section-node div.cbi-section-table-row {
|
||||
margin: 0.25em; }
|
||||
|
||||
table.cbi-section-table {
|
||||
width: 100%;
|
||||
font-size: 95%; }
|
||||
|
||||
table.cbi-section-table th,
|
||||
table.cbi-section-table td {
|
||||
text-align: center; }
|
||||
|
||||
tr.cbi-section-table-descr th {
|
||||
font-weight: normal;
|
||||
font-size: 90%;
|
||||
vertical-align: top; }
|
||||
|
||||
td.cbi-section-table-optionals {
|
||||
text-align: left !important;
|
||||
padding-top: 1em; }
|
||||
|
||||
.cbi-value-helpicon img {
|
||||
display: none; }
|
||||
|
||||
div.cbi-error {
|
||||
font-size: 95%;
|
||||
font-weight: bold;
|
||||
color: #ff0000;
|
||||
background-color: #ffffff; }
|
||||
|
||||
td.cbi-value-error {
|
||||
border-color: red; }
|
||||
|
||||
.cbi-value-error input,
|
||||
.cbi-value-error select {
|
||||
color: red;
|
||||
background-color: #ffcccc; }
|
||||
|
||||
.cbi-section-error {
|
||||
color: red;
|
||||
background-color: white;
|
||||
font-size: 95%;
|
||||
border: 1px dotted red;
|
||||
margin: 3px;
|
||||
padding: 3px; }
|
||||
|
||||
.cbi-value-field var {
|
||||
color: #2222FF; }
|
||||
|
||||
ul.cbi-tabmenu {
|
||||
padding: 3px 0;
|
||||
margin-left: 0 !important;
|
||||
list-style-type: none;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
top: 4px;
|
||||
line-height: 20px; }
|
||||
|
||||
ul.cbi-tabmenu li.cbi-tab,
|
||||
ul.cbi-tabmenu li.cbi-tab-disabled {
|
||||
display: inline;
|
||||
margin: 0; }
|
||||
|
||||
ul.cbi-tabmenu li.cbi-tab a,
|
||||
ul.cbi-tabmenu li.cbi-tab-disabled a {
|
||||
text-decoration: none;
|
||||
padding: 3px 7px;
|
||||
margin-right: 3px;
|
||||
border: 1px solid #BBBBBB;
|
||||
border-bottom: none;
|
||||
border-radius: 3px 3px 0 0;
|
||||
background-color: #EEEEEE;
|
||||
color: #BBBBBB; }
|
||||
|
||||
ul.cbi-tabmenu li.cbi-tab-highlighted a {
|
||||
color: #000000;
|
||||
background-color: #FFEEAA; }
|
||||
|
||||
ul.cbi-tabmenu li a:hover {
|
||||
color: #000000; }
|
||||
|
||||
ul.cbi-tabmenu li.cbi-tab a {
|
||||
padding-top: 4px;
|
||||
color: #000000;
|
||||
background-color: #FFFFFF; }
|
||||
|
||||
div.cbi-tab-descr {
|
||||
background-image: url(/luci-static/resources/cbi/help.gif);
|
||||
background-position: 0.25em 50%;
|
||||
background-repeat: no-repeat;
|
||||
border-bottom: 1px solid #CCCCCC;
|
||||
margin: 0.25em 0.25em 2em;
|
||||
padding: 0.5em 0.5em 0.5em 2em; }
|
||||
|
||||
.left {
|
||||
text-align: left !important; }
|
||||
|
||||
.right {
|
||||
text-align: right !important; }
|
||||
|
||||
.luci {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 1em;
|
||||
height: 1.5em;
|
||||
font-size: 80%; }
|
||||
|
||||
.luci a:link,
|
||||
.luci a:visited {
|
||||
background-color: transparent;
|
||||
color: #666666;
|
||||
text-decoration: none;
|
||||
font-size: 70%; }
|
||||
|
||||
.inline {
|
||||
display: inline; }
|
||||
|
||||
.error500 {
|
||||
white-space: normal;
|
||||
border: 1px dotted #ff0000;
|
||||
background-color: #ffffff;
|
||||
color: #000000;
|
||||
padding: 0.5em; }
|
||||
|
||||
.errorbox {
|
||||
border: 1px solid #FF0000;
|
||||
background-color: #FFCCCC;
|
||||
padding: 5px;
|
||||
margin-bottom: 5px; }
|
||||
|
||||
.errorbox a {
|
||||
color: #000000 !important; }
|
||||
|
||||
.ifacebox {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #CCCCCC;
|
||||
margin: 0 10px;
|
||||
text-align: center;
|
||||
white-space: nowrap; }
|
||||
|
||||
.ifacebox .ifacebox-head {
|
||||
border-bottom: 1px solid #CCCCCC;
|
||||
padding: 2px; }
|
||||
|
||||
.ifacebox .ifacebox-body {
|
||||
padding: 2px; }
|
||||
|
||||
.ifacebadge {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #CCCCCC;
|
||||
padding: 2px;
|
||||
margin-left: 2px;
|
||||
display: inline-block; }
|
||||
|
||||
.ifacebadge-active {
|
||||
border-color: #000000;
|
||||
font-weight: bold; }
|
||||
|
||||
.zonebadge {
|
||||
padding: 2px;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
cursor: pointer; }
|
||||
|
||||
.zonebadge em,
|
||||
.zonebadge strong {
|
||||
margin: 3px;
|
||||
display: inline-block; }
|
||||
|
||||
.zonebadge input {
|
||||
width: 6em;
|
||||
height: 1.5em; }
|
||||
|
||||
.zonebadge-empty {
|
||||
border: 1px dashed #AAAAAA;
|
||||
color: #AAAAAA;
|
||||
font-style: italic;
|
||||
font-size: smaller; }
|
||||
|
||||
.uci-change-list {
|
||||
font-family: monospace; }
|
||||
|
||||
.uci-change-list ins,
|
||||
.uci-change-legend-label ins {
|
||||
text-decoration: none;
|
||||
border: 1px solid #00FF00;
|
||||
background-color: #CCFFCC;
|
||||
display: block;
|
||||
padding: 2px; }
|
||||
|
||||
.uci-change-list del,
|
||||
.uci-change-legend-label del {
|
||||
text-decoration: none;
|
||||
border: 1px solid #FF0000;
|
||||
background-color: #FFCCCC;
|
||||
display: block;
|
||||
font-style: normal;
|
||||
padding: 2px; }
|
||||
|
||||
.uci-change-list var,
|
||||
.uci-change-legend-label var {
|
||||
text-decoration: none;
|
||||
border: 1px solid #CCCCCC;
|
||||
background-color: #EEEEEE;
|
||||
display: block;
|
||||
font-style: normal;
|
||||
padding: 2px; }
|
||||
|
||||
.uci-change-list var ins,
|
||||
.uci-change-list var del {
|
||||
/*display: inline;*/
|
||||
border: none;
|
||||
white-space: pre;
|
||||
font-style: normal;
|
||||
padding: 0px; }
|
||||
|
||||
.uci-change-legend {
|
||||
padding: 5px; }
|
||||
|
||||
.uci-change-legend-label {
|
||||
width: 150px;
|
||||
float: left;
|
||||
font-size: 80%; }
|
||||
|
||||
.uci-change-legend-label > ins,
|
||||
.uci-change-legend-label > del,
|
||||
.uci-change-legend-label > var {
|
||||
float: left;
|
||||
margin-right: 4px;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
display: block; }
|
||||
|
||||
.uci-change-legend-label var ins,
|
||||
.uci-change-legend-label var del {
|
||||
line-height: 6px;
|
||||
border: none; }
|
||||
|
||||
.cbi-input-password + img {
|
||||
display: none; }
|
||||
|
||||
.the-key {
|
||||
text-align: left;
|
||||
font-size: 1.4em;
|
||||
background: #ffe9b3;
|
||||
border: 3pt dashed #dc0067;
|
||||
margin-bottom: 0.5em;
|
||||
padding: 0.5em; }
|
1014
package/gluon-luci-theme/sass/cascade.scss
Normal file
1014
package/gluon-luci-theme/sass/cascade.scss
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user