├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── adminer
├── LICENSE
├── README.md
├── adminer-4.7.9.php
├── plugins
│ ├── login-password-less.php
│ └── plugin.php
└── themes
│ ├── arcs-.css
│ ├── arcs-material.css
│ ├── brade.css
│ ├── bueltge.css
│ ├── cvicebni-ubor.css
│ ├── esterka.css
│ ├── flat.css
│ ├── galkaev.css
│ ├── haeckel.css
│ ├── hever.css
│ ├── hydra.css
│ ├── jukin.css
│ ├── kahi.css
│ ├── konya.css
│ ├── lucas-sandery.css
│ ├── mancave.css
│ ├── mvt.css
│ ├── nette.css
│ ├── ng9.css
│ ├── nicu.css
│ ├── pappu687.css
│ ├── paranoiq.css
│ ├── pepa-linha-dark.css
│ ├── pepa-linha.css
│ ├── pilot.css
│ ├── pokorny.css
│ ├── price.css
│ ├── rmsoft.css
│ └── rmsoft_blue.css
├── elm.json
├── package-lock.json
├── package.json
├── resource
├── bulma
│ ├── LICENSE
│ └── css
│ │ └── bulma.min.css
├── fontawesome
│ ├── LICENSE.txt
│ ├── css
│ │ └── all.min.css
│ └── webfonts
│ │ ├── fa-brands-400.eot
│ │ ├── fa-brands-400.svg
│ │ ├── fa-brands-400.ttf
│ │ ├── fa-brands-400.woff
│ │ ├── fa-brands-400.woff2
│ │ ├── fa-regular-400.eot
│ │ ├── fa-regular-400.svg
│ │ ├── fa-regular-400.ttf
│ │ ├── fa-regular-400.woff
│ │ ├── fa-regular-400.woff2
│ │ ├── fa-solid-900.eot
│ │ ├── fa-solid-900.svg
│ │ ├── fa-solid-900.ttf
│ │ ├── fa-solid-900.woff
│ │ └── fa-solid-900.woff2
└── images
│ ├── connections.png
│ ├── image.gif
│ └── sqlite.png
├── src
├── adminer.js
├── const.js
├── elm
│ ├── Connection.elm
│ ├── Home.elm
│ ├── Menu.elm
│ └── Settings.elm
├── index.php
├── main.js
├── php.js
├── preload.js
├── store.js
└── view
│ ├── home.css
│ ├── home.html
│ ├── home.js
│ ├── menu.css
│ ├── menu.html
│ ├── menu.js
│ ├── settings.css
│ ├── settings.html
│ └── settings.js
└── tests
└── ConnectionTest.elm
/.gitattributes:
--------------------------------------------------------------------------------
1 | adminer/* linguist-vendored
2 | resource/* linguist-vendored
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 | # Snowpack dependency directory (https://snowpack.dev/)
45 | web_modules/
46 |
47 | # TypeScript cache
48 | *.tsbuildinfo
49 |
50 | # Optional npm cache directory
51 | .npm
52 |
53 | # Optional eslint cache
54 | .eslintcache
55 |
56 | # Microbundle cache
57 | .rpt2_cache/
58 | .rts2_cache_cjs/
59 | .rts2_cache_es/
60 | .rts2_cache_umd/
61 |
62 | # Optional REPL history
63 | .node_repl_history
64 |
65 | # Output of 'npm pack'
66 | *.tgz
67 |
68 | # Yarn Integrity file
69 | .yarn-integrity
70 |
71 | # dotenv environment variables file
72 | .env
73 | .env.test
74 |
75 | # parcel-bundler cache (https://parceljs.org/)
76 | .cache
77 | .parcel-cache
78 |
79 | # Next.js build output
80 | .next
81 | out
82 |
83 | # Nuxt.js build / generate output
84 | .nuxt
85 | dist
86 |
87 | # Gatsby files
88 | .cache/
89 | # Comment in the public line in if your project uses Gatsby and not Next.js
90 | # https://nextjs.org/blog/next-9-1#public-directory-support
91 | # public
92 |
93 | # vuepress build output
94 | .vuepress/dist
95 |
96 | # Serverless directories
97 | .serverless/
98 |
99 | # FuseBox cache
100 | .fusebox/
101 |
102 | # DynamoDB Local files
103 | .dynamodb/
104 |
105 | # TernJS port file
106 | .tern-port
107 |
108 | # Stores VSCode versions used for testing VSCode extensions
109 | .vscode-test
110 |
111 | # yarn v2
112 | .yarn/cache
113 | .yarn/unplugged
114 | .yarn/build-state.yml
115 | .yarn/install-state.gz
116 | .pnp.*
117 |
118 | # build
119 | eledminer-darwin-x64
120 |
121 | # elm
122 | elm-stuff
123 | elm.js
124 | dst
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 lusingander
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | eledminer
2 | ====
3 |
4 | Desktop application for database management with [Electron](https://www.electronjs.org/) and [Adminer](https://www.adminer.org/)
5 |
6 |
7 |
8 | ## About
9 |
10 | > This app is under development...
11 |
12 | Eledminer is the Electron application to manage and connect to the Adminer launched locally.
13 |
14 | The application starts the php server as local background process and runs Adminer on it, and manage databases using Electron's BrowserView.
15 |
16 | ### Supported
17 |
18 | - MySQL
19 | - TCP/IP connection
20 | - SQLite
21 |
22 | ### Not supported yet
23 |
24 | - MySQL
25 | - using SSL
26 | - socket/pipe
27 | - over SSH
28 | - other databases
29 | - might work, but not tested
30 |
31 | ## Features / Screenshot
32 |
33 | ### Connections management
34 |
35 | Eledminer makes it easy to save and manage connections.
36 |
37 |
38 |
39 | ### SQLite
40 |
41 | You can open SQLite database by simply specifying the file path.
42 |
43 |
44 |
45 | ## Installation / Development
46 |
47 | ```
48 | $ npm install
49 | $ npx elm install
50 | $ npm run build
51 | $ npm start
52 | ```
53 |
54 | ## Requirements
55 |
56 | PHP 7+
57 |
--------------------------------------------------------------------------------
/adminer/LICENSE:
--------------------------------------------------------------------------------
1 |
2 | Apache License
3 | Version 2.0, January 2004
4 | http://www.apache.org/licenses/
5 |
6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7 |
8 | 1. Definitions.
9 |
10 | "License" shall mean the terms and conditions for use, reproduction,
11 | and distribution as defined by Sections 1 through 9 of this document.
12 |
13 | "Licensor" shall mean the copyright owner or entity authorized by
14 | the copyright owner that is granting the License.
15 |
16 | "Legal Entity" shall mean the union of the acting entity and all
17 | other entities that control, are controlled by, or are under common
18 | control with that entity. For the purposes of this definition,
19 | "control" means (i) the power, direct or indirect, to cause the
20 | direction or management of such entity, whether by contract or
21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
22 | outstanding shares, or (iii) beneficial ownership of such entity.
23 |
24 | "You" (or "Your") shall mean an individual or Legal Entity
25 | exercising permissions granted by this License.
26 |
27 | "Source" form shall mean the preferred form for making modifications,
28 | including but not limited to software source code, documentation
29 | source, and configuration files.
30 |
31 | "Object" form shall mean any form resulting from mechanical
32 | transformation or translation of a Source form, including but
33 | not limited to compiled object code, generated documentation,
34 | and conversions to other media types.
35 |
36 | "Work" shall mean the work of authorship, whether in Source or
37 | Object form, made available under the License, as indicated by a
38 | copyright notice that is included in or attached to the work
39 | (an example is provided in the Appendix below).
40 |
41 | "Derivative Works" shall mean any work, whether in Source or Object
42 | form, that is based on (or derived from) the Work and for which the
43 | editorial revisions, annotations, elaborations, or other modifications
44 | represent, as a whole, an original work of authorship. For the purposes
45 | of this License, Derivative Works shall not include works that remain
46 | separable from, or merely link (or bind by name) to the interfaces of,
47 | the Work and Derivative Works thereof.
48 |
49 | "Contribution" shall mean any work of authorship, including
50 | the original version of the Work and any modifications or additions
51 | to that Work or Derivative Works thereof, that is intentionally
52 | submitted to Licensor for inclusion in the Work by the copyright owner
53 | or by an individual or Legal Entity authorized to submit on behalf of
54 | the copyright owner. For the purposes of this definition, "submitted"
55 | means any form of electronic, verbal, or written communication sent
56 | to the Licensor or its representatives, including but not limited to
57 | communication on electronic mailing lists, source code control systems,
58 | and issue tracking systems that are managed by, or on behalf of, the
59 | Licensor for the purpose of discussing and improving the Work, but
60 | excluding communication that is conspicuously marked or otherwise
61 | designated in writing by the copyright owner as "Not a Contribution."
62 |
63 | "Contributor" shall mean Licensor and any individual or Legal Entity
64 | on behalf of whom a Contribution has been received by Licensor and
65 | subsequently incorporated within the Work.
66 |
67 | 2. Grant of Copyright License. Subject to the terms and conditions of
68 | this License, each Contributor hereby grants to You a perpetual,
69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70 | copyright license to reproduce, prepare Derivative Works of,
71 | publicly display, publicly perform, sublicense, and distribute the
72 | Work and such Derivative Works in Source or Object form.
73 |
74 | 3. Grant of Patent License. Subject to the terms and conditions of
75 | this License, each Contributor hereby grants to You a perpetual,
76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77 | (except as stated in this section) patent license to make, have made,
78 | use, offer to sell, sell, import, and otherwise transfer the Work,
79 | where such license applies only to those patent claims licensable
80 | by such Contributor that are necessarily infringed by their
81 | Contribution(s) alone or by combination of their Contribution(s)
82 | with the Work to which such Contribution(s) was submitted. If You
83 | institute patent litigation against any entity (including a
84 | cross-claim or counterclaim in a lawsuit) alleging that the Work
85 | or a Contribution incorporated within the Work constitutes direct
86 | or contributory patent infringement, then any patent licenses
87 | granted to You under this License for that Work shall terminate
88 | as of the date such litigation is filed.
89 |
90 | 4. Redistribution. You may reproduce and distribute copies of the
91 | Work or Derivative Works thereof in any medium, with or without
92 | modifications, and in Source or Object form, provided that You
93 | meet the following conditions:
94 |
95 | (a) You must give any other recipients of the Work or
96 | Derivative Works a copy of this License; and
97 |
98 | (b) You must cause any modified files to carry prominent notices
99 | stating that You changed the files; and
100 |
101 | (c) You must retain, in the Source form of any Derivative Works
102 | that You distribute, all copyright, patent, trademark, and
103 | attribution notices from the Source form of the Work,
104 | excluding those notices that do not pertain to any part of
105 | the Derivative Works; and
106 |
107 | (d) If the Work includes a "NOTICE" text file as part of its
108 | distribution, then any Derivative Works that You distribute must
109 | include a readable copy of the attribution notices contained
110 | within such NOTICE file, excluding those notices that do not
111 | pertain to any part of the Derivative Works, in at least one
112 | of the following places: within a NOTICE text file distributed
113 | as part of the Derivative Works; within the Source form or
114 | documentation, if provided along with the Derivative Works; or,
115 | within a display generated by the Derivative Works, if and
116 | wherever such third-party notices normally appear. The contents
117 | of the NOTICE file are for informational purposes only and
118 | do not modify the License. You may add Your own attribution
119 | notices within Derivative Works that You distribute, alongside
120 | or as an addendum to the NOTICE text from the Work, provided
121 | that such additional attribution notices cannot be construed
122 | as modifying the License.
123 |
124 | You may add Your own copyright statement to Your modifications and
125 | may provide additional or different license terms and conditions
126 | for use, reproduction, or distribution of Your modifications, or
127 | for any such Derivative Works as a whole, provided Your use,
128 | reproduction, and distribution of the Work otherwise complies with
129 | the conditions stated in this License.
130 |
131 | 5. Submission of Contributions. Unless You explicitly state otherwise,
132 | any Contribution intentionally submitted for inclusion in the Work
133 | by You to the Licensor shall be under the terms and conditions of
134 | this License, without any additional terms or conditions.
135 | Notwithstanding the above, nothing herein shall supersede or modify
136 | the terms of any separate license agreement you may have executed
137 | with Licensor regarding such Contributions.
138 |
139 | 6. Trademarks. This License does not grant permission to use the trade
140 | names, trademarks, service marks, or product names of the Licensor,
141 | except as required for reasonable and customary use in describing the
142 | origin of the Work and reproducing the content of the NOTICE file.
143 |
144 | 7. Disclaimer of Warranty. Unless required by applicable law or
145 | agreed to in writing, Licensor provides the Work (and each
146 | Contributor provides its Contributions) on an "AS IS" BASIS,
147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148 | implied, including, without limitation, any warranties or conditions
149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150 | PARTICULAR PURPOSE. You are solely responsible for determining the
151 | appropriateness of using or redistributing the Work and assume any
152 | risks associated with Your exercise of permissions under this License.
153 |
154 | 8. Limitation of Liability. In no event and under no legal theory,
155 | whether in tort (including negligence), contract, or otherwise,
156 | unless required by applicable law (such as deliberate and grossly
157 | negligent acts) or agreed to in writing, shall any Contributor be
158 | liable to You for damages, including any direct, indirect, special,
159 | incidental, or consequential damages of any character arising as a
160 | result of this License or out of the use or inability to use the
161 | Work (including but not limited to damages for loss of goodwill,
162 | work stoppage, computer failure or malfunction, or any and all
163 | other commercial damages or losses), even if such Contributor
164 | has been advised of the possibility of such damages.
165 |
166 | 9. Accepting Warranty or Additional Liability. While redistributing
167 | the Work or Derivative Works thereof, You may choose to offer,
168 | and charge a fee for, acceptance of support, warranty, indemnity,
169 | or other liability obligations and/or rights consistent with this
170 | License. However, in accepting such obligations, You may act only
171 | on Your own behalf and on Your sole responsibility, not on behalf
172 | of any other Contributor, and only if You agree to indemnify,
173 | defend, and hold each Contributor harmless for any liability
174 | incurred by, or claims asserted against, such Contributor by reason
175 | of your accepting any such warranty or additional liability.
176 |
177 | END OF TERMS AND CONDITIONS
178 |
179 | APPENDIX: How to apply the Apache License to your work.
180 |
181 | To apply the Apache License to your work, attach the following
182 | boilerplate notice, with the fields enclosed by brackets "[]"
183 | replaced with your own identifying information. (Don't include
184 | the brackets!) The text should be enclosed in the appropriate
185 | comment syntax for the file format. We also recommend that a
186 | file or class name and description of purpose be included on the
187 | same "printed page" as the copyright notice for easier
188 | identification within third-party archives.
189 |
190 | Copyright [yyyy] [name of copyright owner]
191 |
192 | Licensed under the Apache License, Version 2.0 (the "License");
193 | you may not use this file except in compliance with the License.
194 | You may obtain a copy of the License at
195 |
196 | http://www.apache.org/licenses/LICENSE-2.0
197 |
198 | Unless required by applicable law or agreed to in writing, software
199 | distributed under the License is distributed on an "AS IS" BASIS,
200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201 | See the License for the specific language governing permissions and
202 | limitations under the License.
203 |
--------------------------------------------------------------------------------
/adminer/README.md:
--------------------------------------------------------------------------------
1 | Adminer, official themes and plugins are licensed under Apache license 2.0
2 |
3 | - https://www.adminer.org/
4 | - https://github.com/vrana/adminer/
5 | - https://github.com/vrana/adminer/tree/master/designs
6 | - https://github.com/vrana/adminer/tree/master/plugins
--------------------------------------------------------------------------------
/adminer/adminer-4.7.9.php:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/adminer/adminer-4.7.9.php
--------------------------------------------------------------------------------
/adminer/plugins/login-password-less.php:
--------------------------------------------------------------------------------
1 | password_hash = $password_hash;
18 | }
19 |
20 | function credentials() {
21 | $password = get_password();
22 | return array(SERVER, $_GET["username"], (password_verify($password, $this->password_hash) ? "" : $password));
23 | }
24 |
25 | function login($login, $password) {
26 | if ($password != "") {
27 | return true;
28 | }
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/adminer/plugins/plugin.php:
--------------------------------------------------------------------------------
1 | _findRootClass($class), 'Adminer')) { //! can use interface
28 | $plugins[$class] = new $class;
29 | }
30 | }
31 | }
32 | $this->plugins = $plugins;
33 | //! it is possible to use ReflectionObject to find out which plugins defines which methods at once
34 | }
35 |
36 | function _callParent($function, $args) {
37 | return call_user_func_array(array('parent', $function), $args);
38 | }
39 |
40 | function _applyPlugin($function, $args) {
41 | foreach ($this->plugins as $plugin) {
42 | if (method_exists($plugin, $function)) {
43 | switch (count($args)) { // call_user_func_array() doesn't work well with references
44 | case 0: $return = $plugin->$function(); break;
45 | case 1: $return = $plugin->$function($args[0]); break;
46 | case 2: $return = $plugin->$function($args[0], $args[1]); break;
47 | case 3: $return = $plugin->$function($args[0], $args[1], $args[2]); break;
48 | case 4: $return = $plugin->$function($args[0], $args[1], $args[2], $args[3]); break;
49 | case 5: $return = $plugin->$function($args[0], $args[1], $args[2], $args[3], $args[4]); break;
50 | case 6: $return = $plugin->$function($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]); break;
51 | default: trigger_error('Too many parameters.', E_USER_WARNING);
52 | }
53 | if ($return !== null) {
54 | return $return;
55 | }
56 | }
57 | }
58 | return $this->_callParent($function, $args);
59 | }
60 |
61 | function _appendPlugin($function, $args) {
62 | $return = $this->_callParent($function, $args);
63 | foreach ($this->plugins as $plugin) {
64 | if (method_exists($plugin, $function)) {
65 | $value = call_user_func_array(array($plugin, $function), $args);
66 | if ($value) {
67 | $return += $value;
68 | }
69 | }
70 | }
71 | return $return;
72 | }
73 |
74 | // appendPlugin
75 |
76 | function dumpFormat() {
77 | $args = func_get_args();
78 | return $this->_appendPlugin(__FUNCTION__, $args);
79 | }
80 |
81 | function dumpOutput() {
82 | $args = func_get_args();
83 | return $this->_appendPlugin(__FUNCTION__, $args);
84 | }
85 |
86 | function editFunctions($field) {
87 | $args = func_get_args();
88 | return $this->_appendPlugin(__FUNCTION__, $args);
89 | }
90 |
91 | // applyPlugin
92 |
93 | function name() {
94 | $args = func_get_args();
95 | return $this->_applyPlugin(__FUNCTION__, $args);
96 | }
97 |
98 | function credentials() {
99 | $args = func_get_args();
100 | return $this->_applyPlugin(__FUNCTION__, $args);
101 | }
102 |
103 | function connectSsl() {
104 | $args = func_get_args();
105 | return $this->_applyPlugin(__FUNCTION__, $args);
106 | }
107 |
108 | function permanentLogin($create = false) {
109 | $args = func_get_args();
110 | return $this->_applyPlugin(__FUNCTION__, $args);
111 | }
112 |
113 | function bruteForceKey() {
114 | $args = func_get_args();
115 | return $this->_applyPlugin(__FUNCTION__, $args);
116 | }
117 |
118 | function serverName($server) {
119 | $args = func_get_args();
120 | return $this->_applyPlugin(__FUNCTION__, $args);
121 | }
122 |
123 | function database() {
124 | $args = func_get_args();
125 | return $this->_applyPlugin(__FUNCTION__, $args);
126 | }
127 |
128 | function schemas() {
129 | $args = func_get_args();
130 | return $this->_applyPlugin(__FUNCTION__, $args);
131 | }
132 |
133 | function databases($flush = true) {
134 | $args = func_get_args();
135 | return $this->_applyPlugin(__FUNCTION__, $args);
136 | }
137 |
138 | function queryTimeout() {
139 | $args = func_get_args();
140 | return $this->_applyPlugin(__FUNCTION__, $args);
141 | }
142 |
143 | function headers() {
144 | $args = func_get_args();
145 | return $this->_applyPlugin(__FUNCTION__, $args);
146 | }
147 |
148 | function csp() {
149 | $args = func_get_args();
150 | return $this->_applyPlugin(__FUNCTION__, $args);
151 | }
152 |
153 | function head() {
154 | $args = func_get_args();
155 | return $this->_applyPlugin(__FUNCTION__, $args);
156 | }
157 |
158 | function css() {
159 | $args = func_get_args();
160 | return $this->_applyPlugin(__FUNCTION__, $args);
161 | }
162 |
163 | function loginForm() {
164 | $args = func_get_args();
165 | return $this->_applyPlugin(__FUNCTION__, $args);
166 | }
167 |
168 | function loginFormField($name, $heading, $value) {
169 | $args = func_get_args();
170 | return $this->_applyPlugin(__FUNCTION__, $args);
171 | }
172 |
173 | function login($login, $password) {
174 | $args = func_get_args();
175 | return $this->_applyPlugin(__FUNCTION__, $args);
176 | }
177 |
178 | function tableName($tableStatus) {
179 | $args = func_get_args();
180 | return $this->_applyPlugin(__FUNCTION__, $args);
181 | }
182 |
183 | function fieldName($field, $order = 0) {
184 | $args = func_get_args();
185 | return $this->_applyPlugin(__FUNCTION__, $args);
186 | }
187 |
188 | function selectLinks($tableStatus, $set = "") {
189 | $args = func_get_args();
190 | return $this->_applyPlugin(__FUNCTION__, $args);
191 | }
192 |
193 | function foreignKeys($table) {
194 | $args = func_get_args();
195 | return $this->_applyPlugin(__FUNCTION__, $args);
196 | }
197 |
198 | function backwardKeys($table, $tableName) {
199 | $args = func_get_args();
200 | return $this->_applyPlugin(__FUNCTION__, $args);
201 | }
202 |
203 | function backwardKeysPrint($backwardKeys, $row) {
204 | $args = func_get_args();
205 | return $this->_applyPlugin(__FUNCTION__, $args);
206 | }
207 |
208 | function selectQuery($query, $start, $failed = false) {
209 | $args = func_get_args();
210 | return $this->_applyPlugin(__FUNCTION__, $args);
211 | }
212 |
213 | function sqlCommandQuery($query) {
214 | $args = func_get_args();
215 | return $this->_applyPlugin(__FUNCTION__, $args);
216 | }
217 |
218 | function rowDescription($table) {
219 | $args = func_get_args();
220 | return $this->_applyPlugin(__FUNCTION__, $args);
221 | }
222 |
223 | function rowDescriptions($rows, $foreignKeys) {
224 | $args = func_get_args();
225 | return $this->_applyPlugin(__FUNCTION__, $args);
226 | }
227 |
228 | function selectLink($val, $field) {
229 | $args = func_get_args();
230 | return $this->_applyPlugin(__FUNCTION__, $args);
231 | }
232 |
233 | function selectVal($val, $link, $field, $original) {
234 | $args = func_get_args();
235 | return $this->_applyPlugin(__FUNCTION__, $args);
236 | }
237 |
238 | function editVal($val, $field) {
239 | $args = func_get_args();
240 | return $this->_applyPlugin(__FUNCTION__, $args);
241 | }
242 |
243 | function tableStructurePrint($fields) {
244 | $args = func_get_args();
245 | return $this->_applyPlugin(__FUNCTION__, $args);
246 | }
247 |
248 | function tableIndexesPrint($indexes) {
249 | $args = func_get_args();
250 | return $this->_applyPlugin(__FUNCTION__, $args);
251 | }
252 |
253 | function selectColumnsPrint($select, $columns) {
254 | $args = func_get_args();
255 | return $this->_applyPlugin(__FUNCTION__, $args);
256 | }
257 |
258 | function selectSearchPrint($where, $columns, $indexes) {
259 | $args = func_get_args();
260 | return $this->_applyPlugin(__FUNCTION__, $args);
261 | }
262 |
263 | function selectOrderPrint($order, $columns, $indexes) {
264 | $args = func_get_args();
265 | return $this->_applyPlugin(__FUNCTION__, $args);
266 | }
267 |
268 | function selectLimitPrint($limit) {
269 | $args = func_get_args();
270 | return $this->_applyPlugin(__FUNCTION__, $args);
271 | }
272 |
273 | function selectLengthPrint($text_length) {
274 | $args = func_get_args();
275 | return $this->_applyPlugin(__FUNCTION__, $args);
276 | }
277 |
278 | function selectActionPrint($indexes) {
279 | $args = func_get_args();
280 | return $this->_applyPlugin(__FUNCTION__, $args);
281 | }
282 |
283 | function selectCommandPrint() {
284 | $args = func_get_args();
285 | return $this->_applyPlugin(__FUNCTION__, $args);
286 | }
287 |
288 | function selectImportPrint() {
289 | $args = func_get_args();
290 | return $this->_applyPlugin(__FUNCTION__, $args);
291 | }
292 |
293 | function selectEmailPrint($emailFields, $columns) {
294 | $args = func_get_args();
295 | return $this->_applyPlugin(__FUNCTION__, $args);
296 | }
297 |
298 | function selectColumnsProcess($columns, $indexes) {
299 | $args = func_get_args();
300 | return $this->_applyPlugin(__FUNCTION__, $args);
301 | }
302 |
303 | function selectSearchProcess($fields, $indexes) {
304 | $args = func_get_args();
305 | return $this->_applyPlugin(__FUNCTION__, $args);
306 | }
307 |
308 | function selectOrderProcess($fields, $indexes) {
309 | $args = func_get_args();
310 | return $this->_applyPlugin(__FUNCTION__, $args);
311 | }
312 |
313 | function selectLimitProcess() {
314 | $args = func_get_args();
315 | return $this->_applyPlugin(__FUNCTION__, $args);
316 | }
317 |
318 | function selectLengthProcess() {
319 | $args = func_get_args();
320 | return $this->_applyPlugin(__FUNCTION__, $args);
321 | }
322 |
323 | function selectEmailProcess($where, $foreignKeys) {
324 | $args = func_get_args();
325 | return $this->_applyPlugin(__FUNCTION__, $args);
326 | }
327 |
328 | function selectQueryBuild($select, $where, $group, $order, $limit, $page) {
329 | $args = func_get_args();
330 | return $this->_applyPlugin(__FUNCTION__, $args);
331 | }
332 |
333 | function messageQuery($query, $time, $failed = false) {
334 | $args = func_get_args();
335 | return $this->_applyPlugin(__FUNCTION__, $args);
336 | }
337 |
338 | function editInput($table, $field, $attrs, $value) {
339 | $args = func_get_args();
340 | return $this->_applyPlugin(__FUNCTION__, $args);
341 | }
342 |
343 | function editHint($table, $field, $value) {
344 | $args = func_get_args();
345 | return $this->_applyPlugin(__FUNCTION__, $args);
346 | }
347 |
348 | function processInput($field, $value, $function = "") {
349 | $args = func_get_args();
350 | return $this->_applyPlugin(__FUNCTION__, $args);
351 | }
352 |
353 | function dumpDatabase($db) {
354 | $args = func_get_args();
355 | return $this->_applyPlugin(__FUNCTION__, $args);
356 | }
357 |
358 | function dumpTable($table, $style, $is_view = 0) {
359 | $args = func_get_args();
360 | return $this->_applyPlugin(__FUNCTION__, $args);
361 | }
362 |
363 | function dumpData($table, $style, $query) {
364 | $args = func_get_args();
365 | return $this->_applyPlugin(__FUNCTION__, $args);
366 | }
367 |
368 | function dumpFilename($identifier) {
369 | $args = func_get_args();
370 | return $this->_applyPlugin(__FUNCTION__, $args);
371 | }
372 |
373 | function dumpHeaders($identifier, $multi_table = false) {
374 | $args = func_get_args();
375 | return $this->_applyPlugin(__FUNCTION__, $args);
376 | }
377 |
378 | function importServerPath() {
379 | $args = func_get_args();
380 | return $this->_applyPlugin(__FUNCTION__, $args);
381 | }
382 |
383 | function homepage() {
384 | $args = func_get_args();
385 | return $this->_applyPlugin(__FUNCTION__, $args);
386 | }
387 |
388 | function navigation($missing) {
389 | $args = func_get_args();
390 | return $this->_applyPlugin(__FUNCTION__, $args);
391 | }
392 |
393 | function databasesPrint($missing) {
394 | $args = func_get_args();
395 | return $this->_applyPlugin(__FUNCTION__, $args);
396 | }
397 |
398 | function tablesPrint($tables) {
399 | $args = func_get_args();
400 | return $this->_applyPlugin(__FUNCTION__, $args);
401 | }
402 |
403 | }
404 |
--------------------------------------------------------------------------------
/adminer/themes/arcs-.css:
--------------------------------------------------------------------------------
1 | /*
2 | * ARCS - Clean and Modern
3 | * By P.Stillhart [https://stillhart.biz/]
4 | */
5 | @import url(http://fonts.googleapis.com/css?family=Roboto);body,html{height:100%}body{font-family:Roboto,sans-serif}::selection{background:#e74c3c}::-moz-selection{background:#ffb7b7}::-webkit-scrollbar{width:1em;background-color:#bdc3c7}#tables::-webkit-scrollbar{width:.5em;background-color:#bdc3c7}::-webkit-scrollbar-thumb{background-color:#34495e}select::-ms-expand{display:none}#menu #logins{padding:10px 14px 0;font-size:18px;height:100%}#menu #logins a{background:#fff;width:92%;display:inline-block;padding:14px 9px;margin:4px 0;text-decoration:none}#menu #logins a:hover{background:#F8F8F8}#menu #logins a:active{background:#E6E6E6}.select{background-color:#fff;position:absolute;right:0;border-right:1px solid #fff}.select .active{background-color:#bdc3c7}h1{margin:0;padding:0;background:0 0;border:0}h2{margin:10px 0 15px;padding:0 0 6px;background:0 0;border:0;font-family:"Segoe UI Light","Segoe UI",Arial,sans-serif;font-size:32px;font-weight:400;color:#34567c;border-bottom:1px solid #ebebeb}.rtl h2{margin:0 0 40px}h3{font-size:22px;border-bottom:1px solid #ebebeb;padding:0 0 6px;width:576px -webkit-margin-after:-10px;-webkit-box-ordinal-group:3;-moz-box-ordinal-group:3;box-ordinal-group:3}p{margin:0 0 15px}a{color:#2e84e4;text-decoration:none}a:visited{color:#2e84e4}a:link:hover,a:visited:hover{color:#2e84e4;text-decoration:underline}form{-webkit-box-ordinal-group:3;-moz-box-ordinal-group:3;box-ordinal-group:3;width:100%;max-width:1200px}fieldset:first-of-type{position:absolute;margin-top:-44px;background:0 0;max-width:734px;width:calc(100% - 923px);left:855px}fieldset:first-of-type div{float:right}fieldset:first-of-type legend{display:none}input[name=drop]:not([onmouseover]){margin-top:40px}div input[name=delete],div input[name=drop],div input[name=truncate],div input[type=button]{background:#e74c3c;border:1px solid #e74c3c;color:#fff}input[value=Save]{margin-top:40px}#tables-views,a[href*=charsets]{display:none}table{border:0;margin:15px 0 0;font-size:14px;z-index:1;width:100%}td,th{border:0;padding:6px}th{background:0 0;color:#34567c;font-weight:400}tbody tr:hover td,tbody tr:hover th{background:0 0}table:not(.checkable) th{min-width:117px}#content table:nth-of-type(2){width:500px}input[type=checkbox]{-webkit-appearance:none;padding-left:25px;height:20px;display:inline-block;line-height:20px;background-repeat:no-repeat;background-position:0 0;font-size:20px;vertical-align:middle;cursor:pointer;background-size:20px;background-image:url(https://stillhart.biz/project/adminerM/check.svg);-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}input[type=checkbox]:checked{background-position:0 -20px}input[type=radio]{-webkit-appearance:none;padding-left:25px;height:20px;display:inline-block;line-height:20px;background-repeat:no-repeat;background-position:0 0;font-size:20px;vertical-align:middle;cursor:pointer;background-size:20px;background-image:url(https://stillhart.biz/project/adminerM/radio.svg);-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}input[type=radio]:checked{background-position:0 -20px}thead td{background:#747a7c;text-align:right}thead td:nth-of-type(1),thead td:nth-of-type(2),thead td:nth-of-type(3),thead th{background:#747a7c;text-align:left}thead td,thead td a,thead td a:link:hover,thead td a:visited,thead td a:visited:hover,thead th,thead th a,thead th a:link:hover,thead th a:visited,thead th a:visited:hover{color:#fff;text-decoration:none}#edit-fields,h3+table,p+table,p.links+table,pre+table,table.checkable{border:1px solid #747a7c;margin-bottom:15px}table.checkable tbody tr:hover td,table.checkable tbody tr:hover th{background:#D7E6ED}thead a{text-decoration:underline}.js .checkable .checked td,.js .checkable .checked th{background:#D7E6ED}.js .checkable thead .checked td,.js .checkable thead .checked th{background:#93cf2b}.odd td,.odd th{background:#f5f5f5}fieldset{display:inline-block;padding:8px 12px 12px;margin:3px 2px 0 0;border:none;vertical-align:baseline;font-family:"Segoe UI",Arial,sans-serif}form[method=post] fieldset:nth-of-type(2){background:#E2E2E2;max-width:610px}form[method=post] fieldset:nth-of-type(2) legend{display:none}form[method=post] fieldset:nth-of-type(2) p{margin-left:4px}fieldset select{margin-right:32px}fieldset input[type=button],fieldset input[type=submit],fieldset p{margin-bottom:0}fieldset div p{margin-top:10px}legend{display:inline-block;padding:0 14px;background:#03a9f4;color:#fff;border:1px solid #03a9f4;line-height:34px}legend a{text-decoration:none!important}legend:hover{background:#fff;color:#000;text-decoration:none}fieldset input[name=limit]{position:absolute;margin-top:-36px;margin-left:61px;padding:7px 7px 8px;width:58px;outline:0;color:#000;border:3px solid #03a9f4;text-align:right}#fieldset-export,#fieldset-import,#fieldset-search,#fieldset-sort{background:#03a9f4;padding:10px 15px}.time,fieldset:nth-of-type(5),fieldset:nth-of-type(6){display:none}#form fieldset:nth-of-type(2),#form fieldset:nth-of-type(3),#form fieldset:nth-of-type(4){-webkit-padding-start:0;padding:0 1px}legend a,legend a:link:hover{color:#fff;text-decoration:underline}legend a:hover{color:#000!important}code{background:0 0}#help{display:none}p code,pre code,pre[contenteditable=true]{background-color:#DDD;padding:18px 30px;display:block;font-size:17px;margin-bottom:15px}p code+a,p code+a:link:hover,p code+a:visited:hover{margin-left:15px;position:relative;top:-20px;color:#000;font-size:12px;text-decoration:underline;text-transform:lowercase}#content{margin:0 54px 0 400px;padding:50px 0 0;max-width:1200px;display:-webkit-box;display:-moz-box;display:box;-webkit-box-orient:vertical;-moz-box-orient:vertical;box-orient:vertical}#content>p{margin-bottom:15px}.rtl #content{margin:0 400px 0 54px;padding:50px 0 0}#menu{width:320px;box-shadow:inset -1px 0 0 #fff;margin:0;padding:0;top:0;background:#03a9f4;bottom:0;position:fixed;box-sizing:border-box}#h1{color:#fff!important}#menu h1{margin:13px 0 10px 16px}#menu h1 a{font-style:normal}#menu h1 .version{color:#fff}#menu a{color:#34567c}#menu p{border:0;padding:0}#menu #dbs{background:#fff;padding:0 30px 0 20px;border-bottom:0;box-sizing:border-box;color:#fff}#menu #dbs select{outline:0;border-color:rgba(0,0,0,.1);width:100%}#menu #tables a{text-decoration:none;color:#000;padding-right:18px;font-size:14px;line-height:30px}#menu #tables a.active{background:#bdc3c7;font-weight:400}#menu #tables a:hover:not([title]){background:#aeaeae;color:#000;cursor:pointer}#menu p.links{margin:0 0 15px;background-color:#fff;border-top:0;text-align:center;display:table;width:100%;box-sizing:border-box;padding:0 30px 0 20px}#menu p.links a{padding:8px 13px;margin:0;display:inline-table;font-size:12px}#menu p.links a:hover{text-decoration:none;background:#03a9f4}#menu p.links a:nth-of-type(4){display:none}#menu p.links a:hover{color:#2e84e4}#menu p.links a.active{font-weight:400;background:#fff;color:#000}#content p.links{margin-top:25px;margin-bottom:5px;-webkit-box-ordinal-group:3;-moz-box-ordinal-group:3;box-ordinal-group:3}#content p.links a,#content p.links a:visited{padding:8px 14px;background:#03a9f4;color:#fff;border:1px solid #03a9f4;line-height:34px;margin-right:3px;transition:background .1s linear}#content p.links a:hover{background:#fff;text-decoration:none}#content p.links:hover a:hover{color:#000}#content p.links a.active:hover{background:#aeaeae!important;color:#e9e9e9;cursor:default;border:1px solid #aeaeae}#content p.links a.active{background:#aeaeae!important;color:#e9e9e9;cursor:default;border:1px solid #aeaeae;font-weight:400}#menu a:hover{color:#fff!important;background:#34495e!important}#tables{margin:0 -15px!important;position:absolute;left:15px;right:15px;bottom:0;top:190px;overflow:hidden!important;overflow-y:auto!important}.rtl #tables{overflow:hidden!important;overflow-y:auto!important}#tables a{float:right;padding:6px 15px}.rtl #tables a{float:none}#tables a[title]{float:none;display:block}.rtl #tables a:first-child,.rtl #tables br+a{float:left;display:block;margin-left:15px}#tables a.active,#tables a.active+a,#tables a:hover,#tables a:hover+a{background:#fff;color:#2e84e4}#tables br{display:none}.js .column{background:#fff;border:1px solid #000;margin-left:4px;cursor:pointer;padding:0}.js .column:hover{color:transparent;background:#bdc3c7}.js .column a{text-decoration:none!important;font-size:16px;display:block;color:transparent}.js .column a:before{content:' sort ';line-height:25px;color:#000}.js .column .text{color:#000}.js .column a:nth-of-type(2){display:none}.js .checked .column{background:#7b7105}.pages{left:400px;background:#34567c;color:#fff;font-weight:700;border:0;display:inline-block;position:static}.pages a,.pages a:link,.pages a:link:hover,.pages a:visited,.pages a:visited:hover{color:#fff;font-weight:400}#breadcrumb{margin:0;left:400px;background:0 0;padding:25px 0 0;font-size:14px}#breadcrumb a{color:#aeaeae;text-decoration:underline}#breadcrumb,#breadcrumb a:hover{color:#666}.rtl #breadcrumb{margin:0;padding:25px 0 0;right:400px}.logout,.rtl .logout{top:50px;width:calc(100% - 1054px);max-width:602px;left:1000px}.rtl .logout{right:auto;left:54px}input:not([type]),input[type=color],input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url]{border:1px solid #bbb;padding:6px;margin:0;box-sizing:border-box}table:not(#table) input:not([type]),table:not(#table) input[type=color],table:not(#table) input[type=email],table:not(#table) input[type=number],table:not(#table) input[type=password],table:not(#table) input[type=search],table:not(#table) input[type=tel],table:not(#table) input[type=text],table:not(#table) input[type=url]{min-width:280px}input[type=button],input[type=submit]{padding:0 16px;background:#03a9f4;color:#fff;border:1px solid #03a9f4;line-height:27px;outline:0;box-shadow:none;cursor:pointer;transition:background .2s linear}input[type=button][disabled],input[type=submit][disabled]{background:#aeaeae!important;color:#e9e9e9;cursor:default;border:1px solid #aeaeae}input[type=button]:focus,input[type=button]:hover,input[type=submit]:focus,input[type=submit]:hover{background:#fff;color:#000;text-decoration:none}input[value=Login]{margin-left:372px;margin-top:25px;cursor:pointer}.logout input[type=submit]{background:#e74c3c;border:1px solid #e74c3c;color:#fff;float:right;outline:0}.logout input[type=submit]:hover{background:#fff;color:#000;text-decoration:none;cursor:pointer}select{box-sizing:border-box;margin:0;padding:6px 0;border:1px solid #bbb}label{cursor:pointer;margin-right:6px}.error,.message{margin:0 0 15px}#form>p{margin-bottom:15px}#schema .table{padding:6px}#schema .table a{display:block;margin:-6px -6px 6px;padding:6px;color:#fff;background:#34567c}#schema .table br{display:none}#schema .table span{display:block;margin-bottom:1px solid #f5f5f5}#lang{position:fixed;z-index:10;font-size:0;left:255px;top:23px}#lang select{font-size:12px;padding:0;text-align:right;border:0;background:0 0;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;outline:0}#lang select option{text-align:right}.rtl #lang{margin-right:0;left:100%;margin-left:-261px;right:auto}.jush{color:#000}.jush a{color:#3939f2}.jush-mssql a,.jush-oracle a,.jush-pgsql a,.jush-simpledb a,.jush-sql a,.jush-sql_code a,.jush-sqlite a{font-weight:400}.jush-bac,.jush-bra,.jush-mssql_bra,.jush-php_bac,.jush-sqlite_quo{color:#090}.jush-apo,.jush-php_eot,.jush-php_quo,.jush-quo,.jush-quo_one,.jush-sql_apo,.jush-sql_eot,.jush-sql_quo,.jush-sqlite_apo{color:#ce7b00}.jush-clr,.jush-num{color:#000}
6 |
--------------------------------------------------------------------------------
/adminer/themes/arcs-material.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Material Design for Adminer, version 1.1.4
3 | * https://github.com/arcs-/Adminer-Material-Theme
4 | */@import url(https://fonts.googleapis.com/css?family=Noto+Sans:400,700);body{display:flex;overflow:hidden;height:100vh;background:#FAFAFA;font-family:"Noto Sans",sans-serif;text-rendering:optimizeLegibility !important}*{outline-color:#1E88E5}::selection{background:#4ca0ea;color:#fff}::-moz-selection{background:#4ca0ea;color:#fff}::-webkit-scrollbar{width:9px;height:12px;background-color:#CCC}::-webkit-scrollbar-corner{background-color:#CCC}::-webkit-scrollbar-thumb{background-color:#263238}::-webkit-scrollbar-corner{background-color:#263238;width:8px;height:8px}.scrollable{overflow-x:visible}#lang{position:fixed;top:auto;bottom:0;z-index:3;padding:.8em 1em;width:245px;border-top:1px solid #ccc;background:#fff}#lang select{width:66%}#menu{position:fixed;top:0;z-index:2;display:flex;margin:0;padding:0;height:100%;background:#fff;box-shadow:0 85px 5px 0 rgba(0,0,0,0.14),0 85px 10px 0 rgba(0,0,0,0.12),0 85px 4px -1px rgba(0,0,0,0.2);flex-flow:column}#menu h1{position:fixed;right:54px;border-bottom:none;font-size:12px;background:transparent;padding:4px 0}#menu select{width:86%}#menu #logins{padding:10px 14px 0;height:100%}#menu #logins:before{content:'Saved Logins';display:block;font-size:1.2em;margin:40px 0 10px}#menu #logins a{display:inline-block;margin:4px 0;padding:6px 12px;height:36px;width:86%;border-radius:2px;color:#fff;background:#1E88E5;box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.2),0 1px 5px 0 rgba(0,0,0,0.12);text-decoration:none;transition:all .2s;border-radius:2px;text-align:center;font-weight:bold;font-size:13px;line-height:30px}#menu #logins a:hover{background:#10538d}#menu.active{background:#1E88E5 !important;color:#fff !important;font-weight:auto}#menu .links a{display:inline-block;margin:4px 2px;padding:5px;width:42%;border-radius:2px;background:#fff;color:#1E88E5;text-align:center;text-transform:uppercase;font-weight:bold;font-size:13px;line-height:24px;transition:all .2s}#menu .links a:hover{background:#1E88E5;color:#fff;text-decoration:none;font-weight:auto}a #h1{color:#AFB3B5}.version{color:#AFB3B5}#tables{overflow-x:hidden !important;margin-bottom:47px;padding:9px 12px 0 6px;flex:1}#tables .select:hover{background:#1E88E5;color:#fff;text-decoration:none;font-weight:auto}#tables a{display:inline-block;overflow:hidden;padding:6px 0 6px 8px;width:175px;border-radius:2px;text-overflow:ellipsis;transition:all .2s;color:#000}#tables a:hover{background:#e4e5e6;color:#000;text-decoration:none}#tables a.select{position:relative;float:right;padding:5px;width:auto;border-radius:2px;background:#fff;color:#1E88E5;text-align:center;text-transform:uppercase;font-weight:bold;font-size:13px;line-height:18px}#content{display:flex;flex-direction:column;overflow-x:auto;margin:83px 0 0 19em;padding:17px 27px 100px;min-width:600px;width:100%}#content h2{position:fixed;top:0;z-index:1;margin-left:-28px;padding-top:0;padding-left:30px;width:100%;height:65px;background:#263238;color:#AFB3B5;line-height:104px}#breadcrumb{position:fixed;z-index:2;padding-top:10px;padding-left:20px;background:#263238;color:#263238}#breadcrumb a{color:#1E88E5;font-size:13px;line-height:18px;transition:all .2s}#breadcrumb a:hover{color:#10538d;text-decoration:none}#logout{position:fixed;top:21px;right:50px;z-index:2;margin:4px 2px;padding:5px;min-width:88px;outline:none;border:none;border-radius:2px;background:#1E88E5;box-shadow:0 1px 4px rgba(48,48,48,0.41),0 2px 3px rgba(0,0,0,0.26);color:#fff;text-align:center;text-transform:uppercase;font-weight:bold;font-size:13px;line-height:24px;transition:all .2s}#logout:hover{background:#10538d}select{margin:0;padding:3px;border:none;border:1px solid rgba(0,0,0,0.12);border-radius:2px;color:#666;background:#fff;cursor:pointer}a,a:link{color:#1E88E5;transition:all .2s}a:hover,a:link:hover{color:#10538d;text-decoration:none}input:not([type]),input[type=number],input[type=password],input[type=search],input[type=text]{padding:8px;border:1px solid rgba(0,0,0,0.12);border-radius:2px;font-size:15px}input[type=search]:first-child{box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.2),0 1px 5px 0 rgba(0,0,0,0.12)}input[type=submit]{padding:0 16px;min-width:64px;height:36px;border:none;border-radius:2px;background:#1E88E5;box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.2),0 1px 5px 0 rgba(0,0,0,0.12);color:#fff;text-transform:uppercase;font-size:14px;cursor:pointer;transition:all .2s}input[type=submit]:hover{background:#10538d}input[type=button][disabled],input[type=submit][disabled]{background:#AFB3B5 !important;color:#504c4a;cursor:no-drop}div input[name=delete],div input[name=drop],div input[name=truncate],input[value=Kill]{background:repeating-linear-gradient(-55deg, #1E88E5, #1E88E5 5px, #4ca0ea 5px, #4ca0ea 10px);transition:all .2s}div input[name=delete]:hover,div input[name=drop]:hover,div input[name=truncate]:hover,input[value=Kill]:hover{background:repeating-linear-gradient(-55deg, #10538d, #10538d 5px, #1E88E5 5px, #1E88E5 10px)}input[type=checkbox]{display:inline-block;padding-left:25px;height:20px;outline:0;background-image:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjIwcHQiCiAgIGhlaWdodD0iNDBwdCIKICAgdmlld0JveD0iMCAwIDIwIDQwIgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmcyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ4LjUgcjEwMDQwIgogICBzb2RpcG9kaTpkb2NuYW1lPSJjaGVjay5zdmciPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTE5Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzMTciIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaWQ9Im5hbWVkdmlldzE1IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIxNiIKICAgICBpbmtzY2FwZTpjeD0iNDMuNzAyNjQ2IgogICAgIGlua3NjYXBlOmN5PSIzMS45NTE3ODMiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjE5MTIiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMiIgLz4KICA8ZwogICAgIHN0eWxlPSJmaWxsOiMwMDAwMDAiCiAgICAgaWQ9ImczMDY4IgogICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44LDAuOCkiPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoMzA1OCIKICAgICAgIGQ9Ik0gMTksNSBWIDE5IEggNSBWIDUgSCAxOSBNIDE5LDMgSCA1IEMgMy45LDMgMywzLjkgMyw1IHYgMTQgYyAwLDEuMSAwLjksMiAyLDIgaCAxNCBjIDEuMSwwIDIsLTAuOSAyLC0yIFYgNSBDIDIxLDMuOSAyMC4xLDMgMTksMyB6IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBpZD0icGF0aDMwNjAiCiAgICAgICBkPSJNIDAsMCBIIDI0IFYgMjQgSCAwIHoiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc3R5bGU9ImZpbGw6bm9uZSIgLz4KICA8L2c+CiAgPGcKICAgICBzdHlsZT0iZmlsbDojMDAwMDAwIgogICAgIGlkPSJnMzA4NCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjgsMCwwLDAuOCwwLDIwKSI+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGgzMDc0IgogICAgICAgZD0iTSAwLDAgSCAyNCBWIDI0IEggMCB6IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmUiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGgzMDc2IgogICAgICAgZD0iTSAxOSwzIEggNSBDIDMuODksMyAzLDMuOSAzLDUgdiAxNCBjIDAsMS4xIDAuODksMiAyLDIgaCAxNCBjIDEuMTEsMCAyLC0wLjkgMiwtMiBWIDUgQyAyMSwzLjkgMjAuMTEsMyAxOSwzIHogTSAxMCwxNyA1LDEyIDYuNDEsMTAuNTkgMTAsMTQuMTcgMTcuNTksNi41OCAxOSw4IDEwLDE3IHoiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogIDwvZz4KPC9zdmc+Cg==");background-position:0 0;background-size:20px;background-repeat:no-repeat;vertical-align:middle;font-size:20px;line-height:20px;cursor:pointer;-webkit-appearance:none;-webkit-user-select:none;user-select:none}input[type=checkbox]:checked{background-position:0 -20px}input[type=radio]{display:inline-block;padding-left:25px;height:20px;outline:0;background-image:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjIwcHQiCiAgIGhlaWdodD0iNDBwdCIKICAgdmlld0JveD0iMCAwIDIwIDQwIgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmcyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ4LjUgcjEwMDQwIgogICBzb2RpcG9kaTpkb2NuYW1lPSJjaGVjay5zdmciPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTE5Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzMTciIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMTciCiAgICAgaWQ9Im5hbWVkdmlldzE1IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIyMi42Mjc0MTciCiAgICAgaW5rc2NhcGU6Y3g9IjguNzkxODMzNyIKICAgICBpbmtzY2FwZTpjeT0iMTEuODUxMjkzIgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmcyIiAvPgogIDxnCiAgICAgaWQ9ImczMDE1IgogICAgIHRyYW5zZm9ybT0ic2NhbGUoMC44LDAuOCkiPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoMzAwNSIKICAgICAgIGQ9Ik0gMTIsMiBDIDYuNDgsMiAyLDYuNDggMiwxMiAyLDE3LjUyIDYuNDgsMjIgMTIsMjIgMTcuNTIsMjIgMjIsMTcuNTIgMjIsMTIgMjIsNi40OCAxNy41MiwyIDEyLDIgeiBtIDAsMTggQyA3LjU4LDIwIDQsMTYuNDIgNCwxMiA0LDcuNTggNy41OCw0IDEyLDQgYyA0LjQyLDAgOCwzLjU4IDgsOCAwLDQuNDIgLTMuNTgsOCAtOCw4IHoiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoMzAwNyIKICAgICAgIGQ9Ik0gMCwwIEggMjQgViAyNCBIIDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzdHlsZT0iZmlsbDpub25lIiAvPgogIDwvZz4KICA8ZwogICAgIGlkPSJnMzA0MiIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjgsMCwwLDAuOCwwLDIwLjgpIj4KICAgIDxwYXRoCiAgICAgICBpZD0icGF0aDMwMzIiCiAgICAgICBkPSJtIDEyLDcgYyAtMi43NiwwIC01LDIuMjQgLTUsNSAwLDIuNzYgMi4yNCw1IDUsNSAyLjc2LDAgNSwtMi4yNCA1LC01IEMgMTcsOS4yNCAxNC43Niw3IDEyLDcgeiBNIDEyLDIgQyA2LjQ4LDIgMiw2LjQ4IDIsMTIgMiwxNy41MiA2LjQ4LDIyIDEyLDIyIDE3LjUyLDIyIDIyLDE3LjUyIDIyLDEyIDIyLDYuNDggMTcuNTIsMiAxMiwyIHogbSAwLDE4IEMgNy41OCwyMCA0LDE2LjQyIDQsMTIgNCw3LjU4IDcuNTgsNCAxMiw0IGMgNC40MiwwIDgsMy41OCA4LDggMCw0LjQyIC0zLjU4LDggLTgsOCB6IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBpZD0icGF0aDMwMzQiCiAgICAgICBkPSJNIDAsMCBIIDI0IFYgMjQgSCAwIHoiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc3R5bGU9ImZpbGw6bm9uZSIgLz4KICA8L2c+Cjwvc3ZnPg==");background-position:0 0;background-size:20px;background-repeat:no-repeat;vertical-align:middle;font-size:20px;line-height:20px;cursor:pointer;-webkit-appearance:none;-webkit-user-select:none;user-select:none}input[type=radio]:checked{background-position:0 -21px}input[type=number]{padding:8px}#help{display:none}.sqlarea.jush-sql.jush{border:1px solid rgba(0,0,0,0.12) !important;background:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.2),0 1px 5px 0 rgba(0,0,0,0.12)}.js .column{left:-50px;margin:-6px 0 0;padding:5px 0 7px 3px;border:1px solid rgba(0,0,0,0.12);border-radius:3px;background:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.2),0 1px 5px 0 rgba(0,0,0,0.12)}.js .column a{padding:1px 8px 3px 5px;margin-right:3px;border-radius:2px;color:#1E88E5;transition:all .2s}.js .column a:hover{color:#fff;background:#1E88E5}table{margin-top:20px;min-width:800px;border-collapse:collapse;box-shadow:0 1px 4px rgba(88,88,88,0.01),0 2px 3px rgba(88,88,88,0.26);white-space:nowrap;font-size:13px;order:4}form table{width:100%}thead td,thead th{background:#ececec;position:sticky;top:0;z-index:2}thead td:before,thead th:before{content:'';position:absolute;background:#fafafa;top:-20px;left:-10px;width:120%;height:20px}thead td:after,thead th:after{content:'';position:absolute;left:0;bottom:0;width:100%;border-bottom:1px solid #cecece}thead th{padding:0 18px;text-align:left}th{box-sizing:border-box;padding:5px 18px !important;width:20%;border:1px solid #ececec;background:#fff;font-weight:normal;font-size:14px}td{box-sizing:border-box;padding:2px 10px 0;height:45px;border:1px solid #ececec;background:#fff;color:#000}.odd td,.odd th{background:#fafafa}td a,td a:visited,th a,th a:visited{color:#1E88E5;font-weight:700}.js .checkable .checked td,.js .checkable .checked th{background:#e0e0e0}#noindex,sup{display:none}.pages{position:absolute;padding:10px 20px 0;height:35px;border:1px solid rgba(0,0,0,0.12);background-color:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.2),0 1px 5px 0 rgba(0,0,0,0.12);font-size:15px}.pages a:not(:first-child){margin-top:5px;padding:5px;border:1px solid #1E88E5;border-radius:2px;color:#263238;text-align:center}.pages a:not(:first-child):hover{background:#1E88E5;color:#fff;text-decoration:none}.icon{width:24px;height:24px;border-radius:2px;background:#000;opacity:.8;-webkit-filter:contrast(125%) invert(1);filter:contrast(125%) invert(1);transition:all .2s}.icon:hover{background:#e1771a}.footer{background:none;border:none;border-color:transparent;position:relative}.footer>div{background:transparent}#content form{display:table;order:1}#content table:nth-of-type(1){order:1;margin:38px 0}#content .links,#content h3,#content h3+.error{margin:15px 0 0;order:4}#content .links:nth-of-type(2){margin-top:30px;order:1}#content .links a{display:inline-block;margin:4px;padding:6px 12px;min-width:88px;border-radius:2px;background:#fff;box-shadow:0 1px 4px rgba(88,88,88,0.41),0 2px 3px rgba(88,88,88,0.26);color:#1E88E5;text-align:center;text-transform:uppercase;font-weight:bold;font-size:13px;line-height:24px;transition:all .2s}#content .links a:hover{background:#1E88E5;color:#fff;text-decoration:none}#content .links .active{background:#1E88E5;color:#fff;cursor:default}#content form>fieldset:first-child{background-color:transparent;border:none;box-shadow:none;float:right;margin:0;padding:0;margin-bottom:4px;margin-top:-40px}#content form>fieldset:first-child legend{display:none}#content #form fieldset:nth-of-type(1){margin-bottom:10px;margin-top:0;padding-bottom:11px;min-height:57px;border:1px solid rgba(0,0,0,0.12);background-color:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.2),0 1px 5px 0 rgba(0,0,0,0.12);padding:.5em .8em;margin:.8em .5em 0 0;float:initial}#content #form fieldset:nth-of-type(1) legend{display:block}#content fieldset:nth-of-type(2).jsonly{float:right;margin-top:-30px;margin-right:8px;border:none}#content fieldset:nth-of-type(2).jsonly legend{display:none}#content fieldset:first-child #fieldset-import,#content fieldset:nth-of-type(1),#content fieldset:nth-of-type(2):not(.jsonly),#content fieldset:nth-of-type(3),#content fieldset:nth-of-type(4),#content fieldset:nth-of-type(5){margin-bottom:10px;padding-bottom:11px;min-height:57px;border:1px solid rgba(0,0,0,0.12);background-color:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.2),0 1px 5px 0 rgba(0,0,0,0.12)}#content fieldset:nth-of-type(6){border:none}#content fieldset:nth-of-type(6) legend{visibility:hidden}#content legend a{padding:5px;color:#1E88E5;font-weight:bold;font-size:13px;line-height:18px;transition:all .2s}#content legend a:hover{color:#10538d;text-decoration:none}#content fieldset:first-child #fieldset-import{margin-top:36px;padding:13px 10px 0 9px;margin-left:-12px}#content fieldset:first-child #fieldset-import:before{content:'Import';position:absolute;top:8px;left:20px;background:#fff;padding:0 7px}#content input[name=copy],#content input[name=move]{float:right;margin-right:-20px;margin-left:25px}#content input[name=copy],#content input[name=move]{float:right;margin-right:-20px;margin-left:25px}#content select{margin-bottom:2px;padding:8px}
5 |
--------------------------------------------------------------------------------
/adminer/themes/brade.css:
--------------------------------------------------------------------------------
1 | /* CSS by Brade - www.bradezone.com */
2 | *{margin:0;padding:0}
3 | body{font:13px/18px Helvetica,Arial,sans-serif;background:#fff;color:#333}
4 | /* generic */
5 | a,a:visited{color:#06c;text-decoration:none;border-bottom:1px dotted}
6 | a:hover{border-bottom:1px solid #06c;background:#06c;color:#fff}
7 | p{padding-bottom:4px;margin-bottom:4px}
8 | h1{font-size:18px;font-weight:bold;padding-bottom:0px;height:40px;padding:0 0 8px 0;color:#666;border:0}
9 | h2{font:32px Georgia,serif;padding:10px 0 8px;margin:0;background:transparent;border:0;color:#333}
10 | h3{font-size:18px;font-weight:bold;padding:4px 0;margin:0}
11 | form#form{overflow:hidden}
12 | fieldset{float:left;min-height:48px;padding:0 4px 4px 4px;border:1px solid #ccc;margin-bottom:8px;margin-right:4px}
13 | fieldset div{margin-top:4px}
14 | input,select,textarea{font:13px Helvetica,Arial,sans-serif;color:#555;border:1px solid #999;padding:3px}
15 | input[type=submit]{background:#ccc;padding:2px;cursor:pointer;color:#333}
16 | input[type=submit]:hover{background:#bbb}
17 | input[type=image],input[type=checkbox]{border:0;padding:0}
18 | label input[type=checkbox],td input[type=radio],td span select{margin-right:4px}
19 | select{border:1px solid #999;padding:2px}
20 | fieldset select{margin-right:4px}
21 | option{padding:0 5px}
22 | optgroup{font-size:11px}
23 | code{background:#eee;padding:2px 4px;font:16px/20px Courier,monospace}
24 | code a:hover{background:transparent}
25 | table{margin:4px 0 8px;border:1px solid #ccc;font-size:inherit}
26 | tbody tr:hover td,tbody tr:hover th{background:#eee}
27 | thead tr:hover td,thead tr:hover th{background:#ddd}
28 | th,td{text-align:left;padding:2px 4px;vertical-align:top;font-weight:normal;border:1px dotted #ccc;border-width:0 0 0 1px;
29 | margin:0;background:inherit}
30 | thead th,thead td{white-space:nowrap;font-weight:bold;background:#ddd;border-color:#ddd}
31 | th:first-child,td:first-child{border-color:transparent;white-space:nowrap}
32 | td[align=right]{text-align:right}
33 | table code{font-size:13px;line-height:18px}
34 | .hidden{display:none}
35 | .error,.message{padding:0;background:transparent;font-weight:bold}
36 | .error{color:#c00}
37 | .message{color:#090}
38 | /* specific */
39 | #content{margin:0 0 0 320px;padding:50px 20px 40px 0;height:100%}
40 | #content:after{content:'.';clear:both;height:0;overflow:hidden;display:block}
41 | #lang{background:#333;color:#fff;position:fixed;top:0;left:0;width:100%;padding:0 20px 0 40px;line-height:40px;height:40px}
42 | #lang select{border-color:#333}
43 | #menu{background:#eee;position:fixed;top:60px;bottom:20px;overflow:auto;left:20px;width:240px;padding:10px 15px;
44 | border:5px solid #ccc;margin:0}
45 | #menu a{color:#333;margin-right:4px}
46 | #menu a:hover{background:#333;color:#fff;border-color:#333}
47 | #menu a.h1,#menu a.h1:hover{display:block;height:0;width:175px;padding:40px 0 0 0;overflow:hidden;float:left;border:0;margin:0;
48 | outline:0;background:url(//www.bradezone.com/random/adminer_logo.gif) no-repeat;line-height:32px}
49 | #menu p,#logins,#tables{white-space:nowrap;border:0;padding:0 0 4px 0;margin:0 0 4px 0}
50 | #breadcrumb{background:#333;color:#fff;position:fixed;top:0;left:320px;line-height:40px;padding:0;z-index:1;margin:0}
51 | #breadcrumb a{color:#ff9}
52 | #breadcrumb a:hover{background:transparent;color:#ff9;border-color:#ff9}
53 | #schema .table{padding:4px 8px;background:#f3f3f3}
54 | /* IE hacks */
55 | *+html th:first-child,*+html td:first-child{border-color:inherit;white-space:inherit}
56 | * html #lang,* html #menu,* html #breadcrumb{position:absolute}
57 | * html #lang{padding-top:10px;height:30px}
58 | * html form#form{height:100%}
59 | #logins a,#tables a{background: none}
60 | #logout{color:#333;text-decoration:none;border-bottom:1px dotted}
61 | #logout:hover{border-color:#333;background:#333;color:#fff}
62 | .js .column{background:#ddd}
63 |
--------------------------------------------------------------------------------
/adminer/themes/bueltge.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Alternative style for Adminer by Frank Bültge
3 | *
4 | * @link http://bueltge.de/
5 | * @version 02/18/2014
6 | */
7 |
8 | body {
9 | margin: 0;
10 | font-size: 12px;
11 | line-height: 1.4em;
12 | background: #F9F9F9;
13 | color: #333;
14 | }
15 | body, select, option, optgroup, button {
16 | font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
17 | } /* IE6 */
18 | input[type='submit'], input[type='reset'], input[type='button'], input[type='file'] {
19 | font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
20 | }
21 | input, textarea, pre, code, samp, kbd, var {
22 | font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
23 | font-size: 12px;
24 | }
25 |
26 | pre {
27 | white-space: pre-wrap;
28 | }
29 |
30 | p {
31 | margin: 0.8em 20px 0 5px
32 | }
33 |
34 | a {
35 | color: #21759B;
36 | background: none !important;
37 | }
38 | a:visited {
39 | color: #21759B;
40 | }
41 | a:hover, a:hover {
42 | text-decoration: none;
43 | color: #d54e21;
44 | }
45 | a:focus {
46 | background: #c7e7fd;
47 | color: #124964;
48 | }
49 | a:active {
50 | background: none;
51 | outline: thin dotted;
52 | }
53 |
54 | a.active, a.active + a {
55 | text-decoration: none;
56 | font-weight: 700;
57 | }
58 |
59 | form {
60 | margin: 0;
61 | padding: 0 0 0 5px;
62 | }
63 | table {
64 | width: 100%;
65 | clear: both;
66 | margin: 0;
67 | border-spacing: 0;
68 | border-collapse: separate;
69 | border-color: gray;
70 | }
71 | table, thead, tbody {
72 | margin: 10px 12px 0 0;
73 | border: 1px #BBB solid;
74 | font-size: 90%;
75 | }
76 | thead th, thead td {
77 | text-align: center;
78 | }
79 | td {
80 | white-space: normal;
81 | overflow: hidden;
82 | padding: 0 4px;
83 | }
84 | th {
85 | text-align: left;
86 | font-weight: 400;
87 | }
88 | td, th {
89 | background-color: #fff;
90 | padding: 1px 2px;
91 | border: 1px #DfDfDf solid;
92 | border-width: 1px 0 0 1px;
93 | }
94 | tr:first-child td, tr:first-child th {
95 | border-top-width: 0;
96 | }
97 | td:first-child, th:first-child {
98 | border-left-width: 0;
99 | }
100 | thead {
101 | display: table-header-group;
102 | vertical-align: middle;
103 | border-color: inherit;
104 | }
105 | thead td, thead th {
106 | background-color: #DFDFDF;
107 | border: none;
108 | border-bottom: 1px #BBB solid;
109 | }
110 | thead tr:hover td, thead tr:hover th {
111 | background-color: #DDD !important;
112 | }
113 | tr:nth-child(2n) td, tr:nth-child(2n) th, .odd td, .odd th, tr.odd {
114 | background-color: #F1F1F1;
115 | }
116 | tr:hover td, tr:hover th {
117 | background-color: #BCD;
118 | }
119 |
120 |
121 | fieldset {
122 | display: inline;
123 | vertical-align: top;
124 | padding: 2px 12px;
125 | margin: 25px 12px 12px 0;
126 | border: none;
127 | background-color: #F1F1F1;
128 | border: 1px solid #E3E3E3;
129 | position: relative;
130 | padding-top: 14px;
131 | }
132 | fieldset, x:-moz-any-link {
133 | padding-top: 4px;
134 | }
135 | fieldset {
136 | padding-top: 14px;
137 | }
138 | legend {
139 | font-weight: 900;
140 | color: #000;
141 | top: -1.666em;
142 | left: -1em;
143 | padding: 0 4px;
144 | }
145 | input {
146 | padding: 2px 5px 1px 5px;
147 | }
148 | input[name='limit'], input[name='length'] {
149 | width: 3em;
150 | text-align: right;
151 | }
152 | input[name='text_length'] {
153 | width: 5em;
154 | }
155 | select + input, select + select {
156 | margin-left: 2px;
157 | }
158 | textarea, input, select {
159 | border-width: 1px;
160 | border-style: solid;
161 | -moz-border-radius: 3px;
162 | -khtml-border-radius: 3px;
163 | -webkit-border-radius: 3px;
164 | border-radius: 3px;
165 | border-color: #DFDFDF;
166 | }
167 | select {
168 | margin: 0 0 1px 0;
169 | }
170 | input[type="checkbox"], input[type="radio"], input[type="image"] {
171 | border: 0 none;
172 | }
173 | input[type=button], input[type=submit] {
174 | display: inline-block;
175 | text-decoration: none;
176 | font-size: 12px;
177 | line-height: 15px;
178 | padding: 1px 0 0 0;
179 | cursor: pointer;
180 | border-width: 1px;
181 | border-style: solid;
182 | -webkit-border-radius: 3px;
183 | border-radius: 3px;
184 | -webkit-box-sizing: content-box;
185 | -moz-box-sizing: content-box;
186 | box-sizing: content-box;
187 | white-space: nowrap;
188 | border-color: #dfdfdf;
189 | background-color: #fff;
190 | color: #333;
191 | }
192 | input[type="button"]:focus, input[type=submit] {
193 | border-color: #a1a1a1;
194 | -webkit-box-shadow: 1px 1px 2px rgba(0,0,0,0.1);
195 | box-shadow: 1px 1px 2px rgba(0,0,0,0.1);
196 | }
197 | input[type=button], input[type=submit] {
198 | padding: 2px 5px 1px 5px;
199 | background: #ececec;
200 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee));
201 | background-image: -webkit-linear-gradient(top, #fff, #eee);
202 | background-image: -moz-linear-gradient(top, #fff, #eee);
203 | background-image: -o-linear-gradient(top, #fff, #eee);
204 | background-image: linear-gradient(to bottom, #fff, #eee);
205 | border-color: #ccc;
206 | -webkit-box-shadow: inset 0 0 1px 1px rgba(255,255,255, 0.9);
207 | box-shadow: inset 0 0 1px 1px rgba(255,255,255, 0.9);
208 | color: #464646;
209 | text-shadow: 1px 1px 0 #fff;
210 | }
211 | input[type=button]:hover, input[type=submit]:hover,
212 | input[type=button]:focus, input[type=submit]:focus {
213 | background: #ececec;
214 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee));
215 | background-image: -webkit-linear-gradient(top, #fff, #eee);
216 | background-image: -moz-linear-gradient(top, #fff, #eee);
217 | background-image: -o-linear-gradient(top, #fff, #eee);
218 | background-image: linear-gradient(to bottom, #fff, #eee);
219 | border-color: #bbb;
220 | -webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
221 | box-shadow: 0px 1px 1px rgba(0,0,0,.1);
222 | color: #000;
223 | }
224 | input[type=button]:active, input[type=submit]:active {
225 | background: #eee;
226 | background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#f9f9f9));
227 | background-image: -webkit-linear-gradient(top, #eee, #f9f9f9);
228 | background-image: -moz-linear-gradient(top, #eee, #f9f9f9);
229 | background-image: -o-linear-gradient(top, #eee, #f9f9f9);
230 | background-image: linear-gradient(to bottom, #eee, #f9f9f9);
231 | border-color: #999 #ddd #ddd #999;
232 | color: #555;
233 | -webkit-box-shadow: inset 1px 1px 0 rgba(50,50,50,0.1);
234 | box-shadow: inset 1px 1px 0 rgba(50,50,50,0.1);
235 | }
236 | input[type=button]:focus, input[type=submit]:focus {
237 | border-color: #aaa;
238 | }
239 | input + label input, select + label input {
240 | margin-left: 4px;
241 | }
242 | td input[type='checkbox']:first-child, td input[type='radio']:first-child {
243 | margin-left: 2px;
244 | }
245 | label:hover {
246 | text-decoration: underline;
247 | }
248 | fieldset div {
249 | margin-bottom: 2px;
250 | }
251 | input[name='Comment'] { /* !!! */
252 | width: 24em;
253 | }
254 | input[name='Auto_increment'] { /* !!! */
255 | width: 6em;
256 | }
257 |
258 | img {
259 | vertical-align: middle;
260 | margin: 0;
261 | padding: 0;
262 | }
263 | .js .column {
264 | position: relative;
265 | background: none;
266 | padding: 0;
267 | }
268 | .error {
269 | padding: 8px;
270 | color: red;
271 | background-color: #FEE;
272 | }
273 | .message {
274 | padding: 8px;
275 | background-color: #DDD;
276 | }
277 | .char {
278 | color: #070;
279 | }
280 | .date {
281 | color: #707;
282 | }
283 | .enum {
284 | color: #077;
285 | }
286 | .binary {
287 | color: red;
288 | }
289 | .jush-sql {
290 | padding: 2px 4px;
291 | margin-right: 4px;
292 | font-size: 11px;
293 | }
294 | .time {
295 | color: #333;
296 | }
297 |
298 | #content {
299 | margin: 2px 0 0 270px;
300 | padding: 10px 20px 20px 0;
301 | }
302 | #lang {
303 | font-size:10px;
304 | height: 23px;
305 | width: 255px;
306 | display: block;
307 | padding: 1px 0;
308 | position: absolute;
309 | top: 0;
310 | left: 0;
311 | text-align: center;
312 | background-color: #f1f1f1;
313 | border: 1px solid #E3E3E3;
314 | line-height: 1.25em;
315 | }
316 | #lang select {
317 | font-size: 10px;
318 | }
319 | #breadcrumb {
320 | margin: 0;
321 | height: 21px;
322 | display: block;
323 | position: absolute;
324 | top: 0;
325 | left: 270px;
326 | background-color: #f1f1f1;
327 | border: 1px solid #E3E3E3;
328 | padding: 2px 12px;
329 | line-height: 1.25em }
330 | #menu {
331 | position: absolute;
332 | margin: 0;
333 | top: 28px;
334 | left: 0;
335 | width: 255px;
336 | background-color: #f1f1f1;
337 | border: 1px solid #E3E3E3;
338 | }
339 | #menu form {
340 | margin: 0;
341 | }
342 | #menu p, #logins, #tables {
343 | padding-left: 8px;
344 | border-bottom: none;
345 | }
346 | #dbs {
347 | padding: 0 !important;
348 | }
349 | #menu form p {
350 | padding-left: 0;
351 | text-align: left;
352 | }
353 | h1 .h1:hover {
354 | text-decoration: underline;
355 | }
356 | h1, h2 {
357 | font: italic normal normal 24px/29px Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
358 | margin: 0;
359 | padding: 14px 15px 3px 10px;
360 | line-height: 35px;
361 | text-shadow: rgba(255,255,255,1) 0 1px 0px;
362 | background: none;
363 | }
364 | h1 .h1 {
365 | font-size: 12px;
366 | }
367 | h2 {
368 | padding: 22px 0 0 10px;
369 | }
370 | h3 {
371 | font: normal normal normal 18px/22px Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
372 | margin: 20px 0 0 5px;
373 | }
374 | #schema {
375 | margin: 1.5em 0 0 220px;
376 | position: relative;
377 | }
378 | #schema .table {
379 | border: 1px solid #E3E3E3;
380 | background-color: #F1F1F1;
381 | padding: 0 2px;
382 | cursor: move;
383 | position: absolute;
384 | }
385 | #schema .references {
386 | position: absolute;
387 | }
388 | .js .hidden {
389 | display: hidden;
390 | }
391 | .js td.hidden, .js input.hidden {
392 | display: none;
393 | }
394 | legend a {
395 | color: #333;
396 | text-decoration: none;
397 | cursor: default;
398 | }
399 | legend a:hover {
400 | color: #333;
401 | }
402 | code {
403 | background: transparent;
404 | }
405 | fieldset, legend, table, thead, tbody, .error, .message {
406 | -moz-border-radius: 3px;
407 | -khtml-border-radius: 3px;
408 | -webkit-border-radius: 3px;
409 | border-radius: 3px;
410 | }
411 | #breadcrumb, #lang, #menu {
412 | -moz-border-radius-bottomright: 3px;
413 | -khtml-border-bottom-right-radius: 3px;
414 | -webkit-border-bottom-right-radius: 3px;
415 | border-bottom-right-radius: 3px;
416 | }
417 | #breadcrumb {
418 | -moz-border-radius-bottomleft: 3px;
419 | -khtml-border-bottom-left-radius: 3px;
420 | -webkit-border-bottom-left-radius: 3px;
421 | border-bottom-left-radius: 3px;
422 | }
423 | #menu {
424 | -moz-border-radius-topright: 5px;
425 | -khtml-border-top-right-radius: 3px;
426 | -webkit-border-top-right-radius: 3px;
427 | border-top-right-radius: 3px;
428 | }
--------------------------------------------------------------------------------
/adminer/themes/esterka.css:
--------------------------------------------------------------------------------
1 | * {
2 | font: 11px/1.25 Verdana, 'Geneva CE', lucida, sans-serif;
3 | color:#333333;
4 | margin:0px;
5 | padding:0px;
6 | }
7 |
8 | a,a:visited {
9 | color:#0033ff;
10 | text-decoration:none;
11 | padding:3px 1px;
12 | }
13 |
14 | #content table thead span, #content table thead a {
15 | font-weight:bold;
16 | color:black;
17 | }
18 |
19 | #content table thead a:hover {
20 | background:none;
21 | text-decoration:underline;
22 | color:black;
23 | }
24 |
25 | a:hover {
26 | color:white;
27 | background:#0033ff;
28 | }
29 |
30 | h1 {
31 | font-size:1.5em;
32 | line-height: 2em;
33 | font-weight:bold;
34 | background:white;
35 | color:#1e5eb6;
36 | border-bottom:1px solid #f4f4f4;
37 |
38 | padding:20px;
39 | margin:0px;
40 | }
41 |
42 | #menu h1 {
43 | padding:0px 0px 5px 20px;
44 | background:none;
45 | }
46 |
47 | h2,h3 {
48 | font-size:1.5em;
49 | font-weight:normal;
50 | background:white;
51 | color:#A0522D;
52 | border-bottom:1px solid #f4f4f4;
53 | padding:5px 0px;
54 | margin:0px;
55 | }
56 |
57 | fieldset {
58 | padding:5px;
59 | border:1px solid #d0cdc4;
60 | background:#fcfaf5;
61 | }
62 |
63 | input,select,textarea {
64 | border:1px solid #e5e5e5;
65 | margin:1px;
66 | padding:3px;
67 | }
68 |
69 | input[type=submit] {
70 | color:white;
71 | background:#A0522D;
72 | padding:3px 10px;
73 | cursor:pointer;
74 | border:0px solid;
75 | }
76 |
77 | input[type=submit]:hover{
78 | background:blue;
79 | }
80 |
81 | input[type=checkbox]{
82 | margin-right:5px;
83 | }
84 |
85 | input[type=image] {
86 | border:1px solid #d0cdc4;
87 | }
88 |
89 | input[type=checkbox],input[type=radio]{
90 | border:1px solid #e5e5e5;
91 | padding:2px 5px;
92 | }
93 |
94 | code{
95 | background:#f0ffe1;
96 | border:1px dashed #d5f1b9;
97 | padding:2px 4px;
98 | font-family:"Courier New";
99 | }
100 | code a:hover{background:transparent}
101 |
102 | table{
103 | margin:10px 0px;
104 | border:1px solid #d0cdc4;
105 | border-collapse:collapse;
106 | }
107 |
108 | tbody tr:hover td,tbody tr:hover th{
109 | background:#edf4ff
110 | }
111 |
112 | thead th, thead td {
113 | text-align:center;
114 | vertical-align:middle;
115 | font-weight:bold;
116 | white-space:nowrap;
117 | background:#f2eee1;
118 | color:#808080;
119 | }
120 |
121 | th,td{
122 | border:1px solid #d0cdc4;
123 | padding:1px 4px;
124 | vertical-align:middle;
125 | }
126 |
127 | th a {
128 | font-weight:bold;
129 | padding-bottom:0px;
130 | }
131 |
132 | th {
133 | background:white;
134 | }
135 |
136 | tr.odd td {
137 | background:#fcfaf5;
138 | }
139 |
140 | #content tbody tr.checked td, tr.checked.odd td {
141 | background:#fbe2e2;
142 | color:red;
143 | }
144 |
145 | .hidden{
146 | display:none
147 | }
148 |
149 | .error,.message{
150 | padding:0px;
151 | background:transparent;
152 | font-weight:bold
153 | }
154 |
155 | .error{
156 | color:#c00
157 | }
158 |
159 | .message{
160 | color:#090
161 | }
162 |
163 | #content{
164 | margin:0px 0px 0px 255px;
165 | padding:50px 20px 40px 0px;
166 | height:100%;
167 | }
168 |
169 | #lang {
170 | background:#f2eee1;
171 | color:#808080;
172 | position:fixed;
173 | top:0px;
174 | left:0px;
175 | width:100%;
176 | padding:10px 20px;
177 | z-index:1;
178 | }
179 |
180 | #breadcrumb {
181 | position:fixed;
182 | top:0px;
183 | left:260px;
184 | background:#f2eee1;
185 | z-index:2;
186 | width:100%;
187 | padding:10px;
188 | }
189 |
190 | #menu {
191 | background:#fcfaf5;
192 | position:fixed;
193 | top:-10px;
194 | padding:0px;
195 | padding-top:10px;
196 | bottom:0px;
197 | overflow:auto;
198 | left:0px;
199 | width:240px;
200 | border-right:5px solid #f2eee1;
201 | }
202 |
203 | #schema .table {
204 | padding:5px;
205 | background:#fcfaf5;
206 | border:1px solid #d0cdc4;
207 | }
208 |
209 | #schema .table b {
210 | color:#0033ff;
211 | font-weight:bold;
212 | text-decoration:underline;
213 | }
214 |
215 | #schema .table b:hover {
216 | color:white;
217 | }
218 |
219 | input[name=logout] {
220 | color:#fce2e2;
221 | background:#d73e3e;
222 | }
223 |
224 | input[name=logout]:hover {
225 | background:#ea0202;
226 | }
227 |
228 | #logins a, #tables a {
229 | background:none;
230 | }
231 |
232 | #logins a:hover, #tables a:hover {
233 | background:#A0522D;
234 | color:white;
235 | }
236 |
237 | #logout {
238 | color:#0033ff;
239 | text-decoration:none;
240 | }
241 |
242 | #logout:hover {
243 | color:white;
244 | background:#0033ff;
245 | }
246 |
247 | .js .column {
248 | background:#f2eee1;
249 | }
250 |
251 | #content table thead a.text:hover {
252 | text-decoration:none;
253 | }
254 |
255 | #version, .version {
256 | font-size:50%;
257 | }
258 |
259 | #h1:hover {
260 | color:white;
261 | }
262 |
--------------------------------------------------------------------------------
/adminer/themes/flat.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Adminer "flat" theme by Israel Viana
3 | *
4 | * Color palette from https://kuler.adobe.com/Copy-of-Flat-UI-color-theme-3785174/
5 | * Navy: 2c3e50
6 | * Red: e74c3c
7 | * Gray: ecf0f1
8 | * Light blue: 3498db
9 | * Blue: 2980b9
10 | */
11 |
12 | /*
13 | * Basic tags
14 | */
15 |
16 | a {
17 | color: #2980b9;
18 | }
19 |
20 | a:visited {
21 | color: #3498db
22 | }
23 |
24 | a:link:hover, a:visited:hover {
25 | color: #e74c3c;
26 | }
27 |
28 | h1 {
29 | border-bottom: 1px solid #e74c3c;
30 | background: #ecf0f1;
31 | }
32 |
33 | h2 {
34 | border-bottom: 1px solid #e74c3c;
35 | background: #ecf0f1;
36 | }
37 |
38 | /*
39 | * Tables
40 | */
41 |
42 | table {
43 | border-top: 0;
44 | border-left: 1px solid silver;
45 | }
46 |
47 | td, th {
48 | border-right: 1px solid silver;
49 | border-bottom: 1px solid silver;
50 | padding: .3em .5em;
51 | }
52 |
53 | thead th, thead td {
54 | background: #3498db;
55 | color: white;
56 | border-right: 1px solid white;
57 | border-bottom: 1px solid white;
58 | padding: .3em .5em;
59 | }
60 |
61 | thead th a, thead td a {
62 | color: #eee;
63 | }
64 |
65 | .js span.column {
66 | background: white;
67 | }
68 | th span.column a.text {
69 | color: #2980b9;
70 | }
71 |
72 | .js .checkable .checked td, .js .checkable .checked th {
73 | background: rgba(52, 152, 219, .3);
74 | }
75 |
76 | .pages {
77 | border: none;
78 | box-shadow: -1px -1px 4px silver;
79 | }
80 |
81 | /*
82 | * Common sections
83 | */
84 |
85 | #breadcrumb a {
86 | color: #e74c3c;
87 | }
88 |
89 | #logout {
90 | font-weight: bold;
91 | }
92 |
93 | /*
94 | * Elements
95 | */
96 |
97 | sup {
98 | padding: 3px 7px;
99 | background: #3498db;
100 | color: white;
101 | border-radius: 2em;
102 | }
103 |
104 | code.jush-sql {
105 | display: block;
106 | padding: .4em .7em;
107 | line-height: 1.5em;
108 | }
109 |
--------------------------------------------------------------------------------
/adminer/themes/galkaev.css:
--------------------------------------------------------------------------------
1 | /** theme "easy on the eyes" for Adminer by p.galkaev@miraidenshi-tech.jp */
2 |
3 | @import url(//fonts.googleapis.com/css?family=Source+Sans+Pro:400,900);
4 |
5 | /* reset
6 | ----------------------------------------------------------------------- */
7 |
8 | *,
9 | *:after,
10 | *:before {
11 | margin: 0;
12 | padding: 0;
13 | outline: none;
14 | cursor: default;
15 | -webkit-appearance: none;
16 | -moz-box-sizing: border-box;
17 | -webkit-box-sizing: border-box;
18 | box-sizing: border-box;
19 | -webkit-print-color-adjust: exact;
20 | }
21 |
22 | /* for font awesome */
23 | *:not(.fa) {
24 | font-family: 'Source Sans Pro', sans-serif;
25 | }
26 |
27 | #logins a, #tables a, #tables span {
28 | background: none;
29 | }
30 |
31 | p,
32 | form
33 | {
34 | margin: 0;
35 | margin-bottom: 20px;
36 | font-size: 14px;
37 | }
38 |
39 | p:last-child,
40 | form:last-child
41 | {
42 | margin-bottom: 0;
43 | }
44 |
45 | .type,
46 | .options select
47 | {
48 | width: 100%;
49 | }
50 |
51 | sup{
52 | display: none;
53 | }
54 |
55 | /* js tooltip
56 | ----------------------------------------------------------------------- */
57 |
58 | .js .column {
59 | position: absolute;
60 | padding: 0;
61 | margin-top: 0;
62 | top: 50px;
63 | z-index: 9;
64 | left: 0px;
65 | width: 100%;
66 | }
67 |
68 | .js .column:not(.hidden){
69 | display: flex;
70 | }
71 |
72 | .js .column a{
73 | text-align: center;
74 | color: black;
75 | font-weight: bold;
76 | flex-grow: 1;
77 | background: #fb4;
78 | height: 40px;
79 | line-height: 40px;
80 | font-size: 15px;
81 | font-weight: normal;
82 | }
83 |
84 | .js .column a:hover{
85 | background-color: gold;
86 | color: black;
87 | }
88 |
89 | #help {
90 | position: absolute;
91 | border: none;
92 | background: #fb4;
93 | font-family: monospace;
94 | z-index: 1;
95 | font-size: 14px;
96 | line-height: 30px;
97 | padding: 0;
98 | }
99 |
100 | #help a{
101 | color: black;
102 | height: 100%;
103 | display: block;
104 | padding: 0 10px;
105 | }
106 |
107 | #help a:hover{
108 | background-color: gold;
109 | }
110 |
111 | #help, .js .column{
112 | display: none;
113 | }
114 |
115 | /* error and message
116 | ----------------------------------------------------------------------- */
117 |
118 | .error, .message {
119 | padding: 5px 15px 7px;
120 | margin: 10px 0;
121 | font-size: 14px;
122 | display: table;
123 | border-radius: 3px;
124 | color: white;
125 | }
126 |
127 | .error{
128 | background-color: crimson;
129 | }
130 |
131 | .message{
132 | background-color: seagreen;
133 | }
134 |
135 | /* scroll bar
136 | ----------------------------------------------------------------------- */
137 |
138 | ::selection {
139 | background-color: #2a65ae;
140 | }
141 | /*
142 | ::-moz-selection {
143 | background-color: #333;
144 | }*/
145 |
146 | /* scroll bar
147 | ----------------------------------------------------------------------- */
148 |
149 | ::-webkit-scrollbar {
150 | background-color: black;
151 | cursor: pointer;
152 | }
153 |
154 | ::-webkit-scrollbar-thumb {
155 | background-color: #555;
156 | cursor: pointer;
157 | }
158 |
159 | ::-webkit-scrollbar:vertical{
160 | width: 6px;
161 | }
162 |
163 | ::-webkit-scrollbar-thumb:vertical{
164 | border-left: 0px solid black;
165 | width: 6px;
166 | }
167 |
168 | ::-webkit-scrollbar:horizontal{
169 | height: 6px;
170 | }
171 |
172 | ::-webkit-scrollbar-thumb:horizontal{
173 | border-top: 0px solid black;
174 | height: 6px;
175 | }
176 |
177 | ::-webkit-scrollbar-corner{
178 | color: black;
179 | background-color: black;
180 | border-color: black;
181 | }
182 |
183 | ::-webkit-resizer{
184 | background-color: #555;
185 | border-radius: 100%;
186 | }
187 |
188 | /* html and body
189 | ----------------------------------------------------------------------- */
190 |
191 | html,
192 | body {
193 | width: 100%;
194 | height: 100%;
195 | max-height: 100%;
196 | overflow: hidden;
197 |
198 | }
199 |
200 | body{
201 | min-height: 100%;
202 | font-size: 14px;
203 | position: relative;
204 | color: #ccc;
205 | background-color: black;
206 | overflow: hidden;
207 | display: flex;
208 | flex-wrap: nowrap;
209 | font: inherit;
210 | }
211 |
212 | /* headings
213 | ----------------------------------------------------------------------- */
214 |
215 | h1{
216 | font-size: 24px;
217 | margin: 0;
218 | padding: 0 18px;
219 | border-bottom: 1px solid #444;
220 | font-weight: bold;
221 | height: 70px;
222 | line-height: 70px;
223 | color: #555;
224 | background: none;
225 | }
226 |
227 | h2{
228 | font-size: 24px;
229 | margin: 0;
230 | padding: 0;
231 | padding-left: 50px;
232 | border-bottom: 1px solid #333;
233 | color: #2CC990;
234 | font-weight: bold;
235 | background: none;
236 | height: 70px;
237 | line-height: 70px;
238 | text-transform: uppercase;
239 | }
240 |
241 | h3{
242 | font-weight: bold;
243 | font-size: 24px;
244 | margin: 40px 0 10px;
245 | color: #2CC990;
246 | padding-bottom: 5px;
247 | }
248 |
249 | /* links
250 | ----------------------------------------------------------------------- */
251 |
252 | a{
253 | color: inherit;
254 | cursor: pointer;
255 | }
256 |
257 | a:hover, a:visited{
258 | color: inherit;
259 | }
260 |
261 | a:link:hover, a:visited:hover {
262 | color: inherit;
263 | text-decoration: none;
264 | }
265 |
266 | /* table
267 | ----------------------------------------------------------------------- */
268 |
269 | table{
270 | margin: 0;
271 | margin-bottom: 20px;
272 | border: 0;
273 | border-collapse: collapse;
274 | font-size: 13px;
275 | width: 100%;
276 | /*table-layout: fixed;*/
277 | }
278 |
279 | tr:hover th,
280 | .checked th
281 | {
282 | background: #333 !important;
283 | color: #ddd;
284 | border-color: none;
285 | }
286 |
287 | tr:hover td,
288 | .checked td
289 | {
290 | background: #222 !important;
291 | color: #ddd;
292 | border-color: none;
293 | }
294 |
295 | .links + table tr:hover th{
296 | color: #ddd;
297 | background: #336f5a !important;
298 | }
299 |
300 | .links + table tr:hover td{
301 | background: #2CC990 !important;
302 | color: #333;
303 | }
304 |
305 | p + table{
306 | margin-top: 20px;
307 | }
308 |
309 | tr{
310 | padding-bottom: 1px;
311 | }
312 |
313 | td, th {
314 | border: 0;
315 | border-right: 1px solid #333;
316 | padding: 0 12px;
317 | line-height: 30px;
318 | position: relative;
319 | }
320 |
321 | td:last-child,
322 | th:last-child{
323 | border-right: none;
324 | }
325 |
326 | th{
327 | position: relative;
328 | background: #222;
329 | font-weight: normal;
330 | width: 17%;
331 | border-left: 5px solid #336f5a;
332 | border-bottom: 1px solid rgba(255, 255, 255, .13);
333 | color: #999;
334 | }
335 |
336 | .checkable td:first-child{
337 | background: #222;
338 | border-right-style: solid;
339 | }
340 |
341 | table.checkable th{
342 | border-left: none;
343 | }
344 |
345 | td{
346 | background: #000;
347 | border-bottom: 1px solid rgba(255, 255, 255, .1);
348 | }
349 |
350 | .odd th{
351 | background: #222;
352 | }
353 |
354 | .odd td{
355 | background: #000;
356 | }
357 |
358 | thead td,
359 | thead th
360 | {
361 | background: transparent !important;
362 | color: #ccc;
363 | border-right-style: dashed;
364 | font-weight: bold;
365 | }
366 |
367 | table#edit-fields td,
368 | table#edit-fields th
369 | {
370 | padding: 0;
371 | padding-left: 5px;
372 | }
373 |
374 | table#edit-fields thead th,
375 | table#edit-fields thead td
376 | {
377 | padding-left: 10px;
378 | }
379 |
380 | thead tr:hover th,
381 | thead tr:hover td,
382 | .links + table thead tr:hover th,
383 | .links + table thead tr:hover td,
384 | table#edit-fields thead tr:hover th,
385 | table#edit-fields thead tr:hover td
386 | {
387 | background-color: transparent !important;
388 | color: inherit !important;
389 | border-bottom: 1px solid rgba(255, 255, 255, .1) !important;
390 | }
391 |
392 | thead tr:hover th{
393 | border-bottom: 1px solid rgba(255, 255, 255, .13) !important;
394 | }
395 |
396 | thead th {
397 | border-left-color: transparent;
398 | text-align: left;
399 | padding: 10px;
400 | }
401 |
402 | /* form
403 | ----------------------------------------------------------------------- */
404 |
405 | input,
406 | select,
407 | textarea
408 | {
409 | color: #333;
410 | font-size: 15px;
411 | height: 30px;
412 | background-color: #ddd;
413 | border: none;
414 | border-radius: 3px;
415 | line-height: 28px;
416 | cursor: pointer;
417 | padding: 0;
418 | padding-left: 10px;
419 | -webkit-appearance: none;
420 | outline: none;
421 | }
422 |
423 | input:hover,
424 | select:hover,
425 | input:focus,
426 | select:focus
427 | {
428 | background-color: #bbb;
429 | }
430 |
431 | th input,
432 | td input,
433 | th select,
434 | td select,
435 | td textarea
436 | {
437 | background-color: transparent;
438 | color: pink;
439 | width: 100%;
440 | display: inline;
441 | border-left: 1px dashed #555;
442 | border-radius: 0;
443 | }
444 |
445 | th input:hover,
446 | th select:hover,
447 | td input:hover,
448 | td select:hover,
449 | th input:focus,
450 | th select:focus,
451 | td input:focus,
452 | td select:focus
453 | {
454 | background-color: rgba(255, 255, 255, .15);
455 | }
456 |
457 | th input[type='checkbox'],
458 | th input[type='radio'],
459 | td input[type='checkbox'],
460 | td input[type='radio']{
461 | border-left: none;
462 | background-color: transparent !important;
463 | }
464 |
465 |
466 | td input + a,
467 | td input + a:visited
468 | {
469 | text-transform: uppercase;
470 | margin-left: 5px;
471 | color: dodgerblue;
472 | font-size: 12px;
473 | font-weight: normal;
474 | }
475 |
476 | td input + a:hover{
477 | color: lightskyblue !important;
478 | }
479 |
480 | input.icon{
481 | padding-left: 0;
482 | }
483 |
484 | input.icon::after{
485 | content: '';
486 | }
487 |
488 | th select,
489 | td select
490 | {
491 | color: lightcoral;
492 | }
493 |
494 | input[type='number'] {
495 | min-width: 55px;
496 | }
497 |
498 | /* radio */
499 | input[type='radio']{
500 | -webkit-appearance: radio;
501 | width: 18px;
502 | height: 18px;
503 | vertical-align: middle;
504 | margin-left: 8px;
505 | margin-right: 0;
506 | }
507 |
508 | /* checkbox */
509 | input[type='checkbox']{
510 | width: 30px;
511 | height: 30px;
512 | margin-right: 6px;
513 | position: relative;
514 | border-radius: 2px;
515 | margin-left: 20px;
516 | }
517 |
518 | input[type=checkbox]:hover{
519 | border-color: white;
520 | }
521 |
522 | input[type=checkbox]::after {
523 | cursor: pointer;
524 | position: absolute;
525 | content: '×';
526 | left: 17%;
527 | top: 4.5%;
528 | color: #ccc;
529 | font-size: 35px;
530 | font-family: sans-serif;
531 | font-weight: bold;
532 | }
533 |
534 | input[type=checkbox]:hover::after {
535 | color: #aaa;
536 | }
537 |
538 | input[type=checkbox]:checked::after {
539 | color: #333;
540 | }
541 |
542 | td input[type='checkbox'],
543 | th input[type='checkbox']
544 | {
545 | margin-left: 10px;
546 | margin-right: 26px;
547 | }
548 |
549 | td input[type='checkbox']::after{
550 | left: 10%;
551 | top: -2px;
552 | color: #333;
553 | }
554 |
555 | td input[type='checkbox']:hover::after{
556 | color: #555;
557 | }
558 |
559 | td input[type='checkbox']:checked::after{
560 | color: #ddd;
561 | }
562 |
563 | p input:first-child{
564 | margin-left: 8px;
565 | }
566 |
567 | label{
568 | line-height: 27px;
569 | font-size: 14px;
570 | }
571 |
572 | th label{
573 | line-height: 35px;
574 | }
575 |
576 | label input {
577 | vertical-align: top;
578 | }
579 |
580 | /* submit */
581 | input[type='submit']{
582 | color: white;
583 | background-color: royalblue;
584 | padding: 0 25px;
585 | margin-right: 20px;
586 | border-radius: 2px;
587 | }
588 |
589 | input[type='submit']:hover{
590 | background-color: #214ac5;
591 | }
592 |
593 | /* select */
594 | select{
595 | padding-left: 6px;
596 | }
597 |
598 | /* textarea */
599 | textarea{
600 | min-height: 150px;
601 | width: 100%;
602 | }
603 |
604 | /* fieldset */
605 | fieldset {
606 | display: inline;
607 | vertical-align: top;
608 | padding: 4px 7px 7px;
609 | margin: 0 5px 10px;
610 | border: 1px dashed #555;
611 | border-radius: 2px;
612 | min-height: 60px;
613 | }
614 |
615 | fieldset > div{
616 | display: flex;
617 | }
618 |
619 | fieldset > div * + p{
620 | margin-left: 10px;
621 | }
622 |
623 | fieldset > div > div{
624 | margin-left: 10px;
625 | }
626 |
627 | fieldset > div > div:first-child{
628 | margin-left: 0;
629 | }
630 |
631 | fieldset > div input,
632 | fieldset > div select
633 | {
634 | margin-right: 5px;
635 | }
636 |
637 | fieldset > div input[type='checkbox']{
638 | margin-left: 5px;
639 | }
640 |
641 | fieldset input{
642 | flex-grow: 1;
643 | }
644 |
645 | fieldset input[type='submit']{
646 | margin-right: 10px;
647 | }
648 |
649 | fieldset input[type='submit']:last-of-type{
650 | margin-right: 0;
651 | }
652 |
653 | legend{
654 | font-size: 14px;
655 | background-color: #000;
656 | padding: 0 3px;
657 | color: #999;
658 | }
659 |
660 | /* menu
661 | ----------------------------------------------------------------------- */
662 |
663 | #menu{
664 | height: 100%;
665 | width: 300px;
666 | background-color: #333;
667 | position: relative;
668 | order: 1;
669 | flex-grow: 0;
670 | flex-shrink: 0;
671 | margin: 0;
672 | padding: 0;
673 | top: 0;
674 | overflow-y: overlay;
675 | }
676 |
677 | #menu p {
678 | padding: 18px;
679 | margin: 0;
680 | border-bottom: 1px solid #444;
681 | }
682 |
683 | /* logo */
684 | #h1{
685 | color: #555;
686 | text-decoration: none;
687 | font-style: inherit;
688 | }
689 |
690 | .version {
691 | color: #555;
692 | font-size: inherit;
693 | }
694 |
695 | /* db select */
696 | #dbs select{
697 | width: 228px;
698 | margin-left: 8px;
699 | }
700 |
701 | /* links */
702 | #menu .links{
703 | padding-top: 0;
704 | padding-bottom: 10px;
705 | }
706 |
707 | #menu .links a:nth-child(even){
708 | margin-left: 6px;
709 | }
710 |
711 | #menu .links a{
712 | display: inline-block;
713 | vertical-align: top;
714 | width: 127px;
715 | height: 31px;
716 | margin: 0;
717 | margin-bottom: 10px;
718 | border: 1px solid #555;
719 | line-height: 27px;
720 | text-align: center;
721 | text-transform: uppercase;
722 | font-size: 12px;
723 | border-radius: 3px;
724 | color: #999;
725 | }
726 |
727 | #menu .links a.active,
728 | #menu .links a:hover
729 | {
730 | border: 1px solid #ccc;
731 | font-weight: normal;
732 | color: inherit;
733 | }
734 |
735 | /* tables */
736 | #logins, #tables{
737 | border-bottom: none;
738 | line-height: 20px;
739 | padding: 18px 0;
740 | overflow-y: auto !important;
741 | }
742 |
743 | #tables br{
744 | display: none;
745 | }
746 |
747 | #tables a {
748 | float: right;
749 | padding: 5px 18px 9px;
750 | line-height: 17px;
751 | color: #2CC990;
752 | font-size: 13px;
753 | }
754 |
755 | #tables a[title] {
756 | float: none;
757 | display: block;
758 | color: inherit;
759 | font-size: 14px;
760 | }
761 |
762 | #logins a {
763 | display: block;
764 | padding: 5px 18px 9px;
765 | color: inherit;
766 | font-size: 14px;
767 | }
768 |
769 | #tables a.select.active,
770 | #tables a.select:hover
771 | {
772 | color: #fba;
773 | }
774 |
775 | #logins a:hover,
776 | #tables a[title]:hover,
777 | #tables a.active,
778 | #tables a.select:hover + a,
779 | #tables a.select.active + a
780 | {
781 | background-color: #555;
782 | font-weight: normal;
783 | }
784 |
785 | /* content
786 | ----------------------------------------------------------------------- */
787 |
788 | #content{
789 | height: 100%;
790 | width: 100%;
791 | margin: 0;
792 | padding: 0;
793 | padding-left: 50px;
794 | padding-right: 50px;
795 | padding-bottom: 30px;
796 | overflow-y: auto !important;
797 | order: 2;
798 | flex-grow: 1;
799 | }
800 |
801 | #breadcrumb{
802 | position: relative;
803 | display: none;
804 | }
805 |
806 | #content h2{
807 | margin-left: -50px;
808 | }
809 |
810 | /* links */
811 | #content .links a,
812 | code.jush-sql ~ a,
813 | #fieldset-history > a:first-child
814 | {
815 | display: inline-block;
816 | height: 32px;
817 | line-height: 30px;
818 | padding: 0 10px;
819 | border: 1px solid #666;
820 | border-radius: 3px;
821 | font-size: 12px;
822 | text-transform: uppercase;
823 | }
824 |
825 | #content .links a:hover,
826 | code.jush-sql ~ a:hover,
827 | #fieldset-history > a:first-child:hover
828 | {
829 | color: #eee;
830 | border-color: #eee;
831 | }
832 |
833 | #ajaxstatus + *{
834 | margin-top: 18px;
835 | }
836 |
837 | #ajaxstatus + *.links {
838 | margin-top: 0 !important;
839 | height: 65px;
840 | line-height: 55px;
841 | margin-bottom: 0;
842 | }
843 |
844 | #ajaxstatus + .links a{
845 | white-space: nowrap;
846 | margin-right: 20px;
847 | padding: 0;
848 | padding-bottom: 5px;
849 | border: 0;
850 | border-radius: 0;
851 | font-size: 15px;
852 | font-weight: bold;
853 | }
854 |
855 | #ajaxstatus + .links a.active,
856 | #ajaxstatus + .links a:hover
857 | {
858 | border-bottom: 1px solid;
859 | border-color: inherit;
860 | color: inherit;
861 | }
862 |
863 | /* fieldset search */
864 | #fieldset-search > div > *{
865 | margin-right: 5px;
866 | margin-bottom: 5px;
867 | }
868 |
869 | /* fieldset search */
870 | #fieldset-partition p{
871 | margin-bottom: 0;
872 | }
873 |
874 | /* feldset history */
875 | #fieldset-history{
876 | flex-wrap: wrap;
877 | }
878 |
879 | #fieldset-history i{
880 | display: none;
881 | }
882 |
883 | #fieldset-history input[type='submit']{
884 | flex-grow: 0;
885 | order: 1;
886 | margin-top: 1px;
887 | margin-left: 17px;
888 | }
889 |
890 | #fieldset-history > div a:last-child{
891 | order: 2;
892 | }
893 |
894 | #fieldset-history > a{
895 | flex-grow: 0;
896 | flex-basis: 5%;
897 | min-width: 45px;
898 | text-align: center;
899 | margin-bottom: 10px;
900 | margin-left: 5px;
901 | }
902 |
903 | #fieldset-history > .time{
904 | flex-grow: 0;
905 | flex-basis: 5%;
906 | text-align: center;
907 | line-height: 29px;
908 | }
909 |
910 | #fieldset-history > code{
911 | flex-grow: 1;
912 | flex-basis: 89%;
913 | line-height: 29px;
914 | }
915 |
916 | #fieldset-history > .time{
917 | flex-grow: 0;
918 | flex-basis: 5%;
919 | text-align: center;
920 | }
921 |
922 | /* sql
923 | ----------------------------------------------------------------------- */
924 |
925 | .sqlarea{
926 | border: 1px solid #444 !important;
927 | width: 100% !important;
928 | padding: 12px 15px !important;
929 | font-size: 15px;
930 | margin-bottom: 20px;
931 | }
932 |
933 | .jush-sql_code{
934 | color: #fafafa !important;
935 | font-family: 'Source Sans Pro', sans-serif !important;
936 | }
937 |
938 | .jush a, .jush a:visited{
939 | color: #fba;
940 | font-weight: normal;
941 | }
942 |
943 | .jush a:hover{
944 | color: #fba;
945 | cursor: pointer;
946 | }
947 |
948 | .jush-php_quo, .jush-quo, .jush-quo_one, .jush-php_eot, .jush-apo, .jush-sql_apo, .jush-sqlite_apo, .jush-sql_quo, .jush-sql_eot{
949 | color: aquamarine;
950 | }
951 |
952 | .jush-bac, .jush-php_bac, .jush-bra, .jush-mssql_bra, .jush-sqlite_quo{
953 | color: plum;
954 | }
955 |
956 | .jush-num, .jush-clr{
957 | color: #85E2FF;
958 | }
959 |
960 | code {
961 | background: #000;
962 | font-size: 14px;
963 | }
964 |
965 | code.jush-sql ~ a{
966 | position: relative;
967 | margin-left: 5px;
968 | /*margin-top: 20px;
969 | margin-bottom: 20px; */
970 | }
971 |
972 | code.jush-sql ~ a:first-of-type{
973 | margin-left: 30px;
974 | }
975 |
976 | code.jush-sql ~ a:first-of-type::before{
977 | content: '◀';
978 | color: #555;
979 | position: absolute;
980 | left: -22px;
981 | font-size: 22px;
982 | top: -1px;
983 | }
984 |
985 | /* logout form
986 | ----------------------------------------------------------------------- */
987 |
988 | body > form{
989 | position: absolute;
990 | }
991 |
--------------------------------------------------------------------------------
/adminer/themes/jukin.css:
--------------------------------------------------------------------------------
1 | /* Redesigned by Janamou - September 2008 */
2 |
3 | body { color: #000; background-color: #fff; line-height: 1.25em; font-family: Verdana, Arial, Helvetica, sans-serif; margin: 0; font-size: 90%; }
4 | a { color: black; }
5 | a:visited { color: black; }
6 | a:hover { color: #626262; text-decoration: none; }
7 | h1 { margin: 0; padding: 5px; }
8 | h2 { margin: 0; padding: 7px 0px 7px 10px; border: 1px solid #a3a3a3; font-weight: normal; background: #FCE28E url('data:image/gif;base64,R0lGODlhEAAiAIMAAP/nnf/nn//nof/kk//llP/ab//Zav/aa/7aagAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAEAAiAAMERBDISSsIOOvNu/9gKI5k6VnoJKxs6wpmmsayZQ54jhN8zxfAoHBYMBiPyKTyeGg6m4iodEpFLK/YrHbL7Xq/4LB4LI4AADs=') top left repeat-x; margin-bottom: 20px; }
9 | h3 { font-weight: normal; font-size: 130%; margin: .8em 0; }
10 | table { margin: 0 20px .8em 0; border: 0; border-top: 1px solid #999; border-left: 1px solid #999; font-size: 90%; }
11 | td, th { margin-bottom: 1em; border: 0; border-right: 1px solid #999; border-bottom: 1px solid #999; padding: .2em .3em; }
12 | th { background: black; color: white; }
13 | th a, th a:visited { color: white; text-decoration: none; }
14 | th a:hover { color: #626262; }
15 | fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: 0 .5em .5em 0; border: 1px solid #999; }
16 | img { vertical-align: middle; margin: 0; padding: 0; }
17 | .error { color: red; background: #fee; padding: .5em .8em; border: 1px solid red; }
18 | .message { color: black; background: #dedede; padding: .5em .8em; border: 1px solid black; }
19 | #menu { overflow: scroll; position: absolute; top: 0; left: 0; width: 270px; white-space: nowrap; background: #FFE594 url('data:image/gif;base64,R0lGODlhXgEBAIIAAPzabPzijvzihPzefvzmnPzedPzmlPzadCwAAAAAXgEBAAIDYEi63P5wGTXJvNZew7sJBNiBwWeWaPoFbNq+cCzPs8DaeJDvuGAPOh9wIBgWAwMjMblsOpnQqHRKrRaY1+sguz1sB4esN0wulM+HtNqMZqsBafgBTp/PAfQ8fs/v+/8ACQA7') top left repeat-y; height: 100%; _height: 650px; border: 1px solid #a3a3a3; }
20 | #menu form { margin: 0; }
21 | #menu p, #logins li, #tables li { text-align: center; font-size: 11px; }
22 | #menu p a, #logins li a, #tables li a { color: black; }
23 | #menu p a:hover, #logins li a:hover, #tables li a:hover { color: #626262; text-decoration: none; }
24 | #logins a, #tables a, #tables span { background: #FFE594; }
25 | #content { margin: 1.5em 0 0 293px; padding: 10px 20px 20px 0; }
26 | #lang { margin: 0; padding: 0; text-align: center; font-size: 10px; width: 270px; background-color: #d9dadb; border-bottom: 1px solid black; }
27 | #lang a { color: black; font-weight: bold; }
28 | #breadcrumb { position: absolute; top: 0; left: 293px; background: #d9dadb; font-size: 10px; margin: 0; padding: 2px 5px 2px 5px; }
29 | #breadcrumb a { color: black; }
30 |
--------------------------------------------------------------------------------
/adminer/themes/kahi.css:
--------------------------------------------------------------------------------
1 | /*
2 | Ok, it's a mess. You don't have to read it!
3 | */
4 |
5 | body {
6 | font-family: "Segoe UI", Tahoma, sans-serif;
7 | }
8 |
9 | body a[href^="#"] {
10 | color:#000; text-decoration: none; border-bottom: 1px dotted #999;
11 | }
12 |
13 | h3 {
14 | margin-top: 2em;
15 | }
16 |
17 | .jush-bac {
18 | color:#22c !important;
19 | }
20 |
21 | a:hover {
22 | color:#000; text-decoration: none;
23 | }
24 |
25 | /*
26 | @group Headers (visually)
27 | */
28 |
29 | #menu .logout {
30 | border-bottom:0; height:auto; padding: 0;
31 | }
32 |
33 |
34 | /*
35 | @end
36 | */
37 |
38 | /*
39 | @group Sidebar (visually)
40 | */
41 |
42 | #menu {
43 | margin:0; padding:0;
44 | position:static; float:left; margin-left:-100%;
45 | width:25%; padding-top:80px;
46 | line-height:1.4;
47 | }
48 |
49 | /* header "adminer 2.3.2" */
50 | h1 {
51 | margin:0; padding:0;
52 | position: fixed; left:0; top:0;
53 | width:25%; height:60px;
54 | border-bottom: 1px solid #bbb;
55 | background-color:#efefef; background-color:rgba(240,240,240,0.9);
56 | line-height:60px; text-indent:20px;
57 | }
58 |
59 | #h1 {
60 | font-weight:bold; color:#666; font-style:normal;
61 | }
62 |
63 | #menu a {
64 | padding:1px; margin-right:4px;
65 | color:#000; font-size:small; text-decoration: none;
66 | }
67 |
68 | #menu a:hover {
69 | font-weight:bold;
70 | }
71 |
72 | #menu #tables + p a {
73 | color:green;
74 | }
75 |
76 |
77 |
78 | /*
79 | #menu form+form, #menu #tables {
80 | position: fixed; left:0; top:100px; width:25%;
81 | }
82 |
83 | #menu #tables {
84 | max-height:100%; padding-top:130px; overflow-y:auto;
85 | }
86 | */
87 | /* @todo ev. position fixed for whole sidebar (not simple) */
88 |
89 | /*
90 | @end
91 | */
92 |
93 | /*
94 | @group Sidebar (based on HTML position, not visual)
95 | */
96 |
97 |
98 |
99 | /* languages */
100 | #lang {
101 | position: absolute; left:auto; left:120px; top:0px; z-index:3;
102 | font-size:11px; line-height:60px; text-decoration: underline; text-transform:lowercase;
103 | opacity:0.5;
104 | }
105 |
106 | #lang:hover {
107 | opacity:1;
108 | }
109 |
110 | #lang select {
111 | display:none;
112 | }
113 |
114 | #lang:hover select {
115 | display: inline-block;
116 | }
117 |
118 | /* logout */
119 | input[name="logout"] {
120 | position:fixed; right:15px; top:22px;
121 | }
122 |
123 | /*
124 | @end
125 | */
126 |
127 | /*
128 | @group Content: main
129 | */
130 |
131 |
132 | #content {
133 | margin:0; padding:155px 0 50px 0;
134 | position: static; float:left; margin-left:25%;
135 | width:75%;
136 | }
137 |
138 | #content > * {
139 | margin-left:20px; margin-right:20px;
140 | }
141 |
142 |
143 | #content h2 {
144 | margin:0; padding:0;
145 | position:fixed; left:25%; top:0; margin-left:-1px;
146 | width:75%;
147 | border-bottom: 1px solid #bbb;
148 | background-color:#efefef; background-color:rgba(240,240,240,0.9);
149 | font-weight:bold; line-height:60px; text-indent:20px;
150 | }
151 |
152 | /* breadcrumbs */
153 | #breadcrumb {
154 | margin:0; padding:0;
155 | position:absolute; top:75px; left:25%;
156 | background:url() no-repeat;
157 | text-indent: 20px;
158 | }
159 |
160 | /* Dump link */
161 | #menu .logout a {
162 | margin:0; padding:2px 4px;
163 | position:absolute; left:25%; top:110px;
164 | border-radius:3px;
165 | background-color:#053AC0; color:#fff; margin-left:120px; text-transform: uppercase; font-size:11px; text-decoration: none;
166 | }
167 |
168 | /* SQL command link */
169 | body #menu .logout a[href$="sql="] {
170 | margin-left: 20px;
171 | background-color:green;
172 | }
173 |
174 |
175 | /*
176 | @end
177 | */
178 |
179 | /*
180 | @group Content: details
181 | */
182 |
183 |
184 |
185 | #content p > a {
186 | margin-right:1ex;
187 | color: #333;
188 | }
189 |
190 | #content p > a[href$="&database="],
191 | #content p > a[href*="&edit="] {
192 | color:green !important;
193 |
194 | }
195 |
196 | /*
197 | @group Messages
198 | */
199 |
200 | .message {
201 | background-color:#D0EE76;
202 | color:#000;
203 | }
204 |
205 | .error {
206 | background-color:#fbb;
207 | color: #000;
208 | }
209 |
210 | .message a,
211 | .error a {
212 | margin-left:1em;
213 | color:#000; opacity:0.5; font-size:smaller;
214 | }
215 |
216 | /*
217 | @end
218 | */
219 |
220 |
221 |
222 | #menu p {
223 | padding:20px; /* wtf? */
224 | }
225 |
226 | #menu form + form p:before {
227 | content:'DB:'; font-size:11px;
228 | }
229 |
230 |
231 |
232 |
233 | /*
234 | @group Tables
235 | */
236 |
237 | table {
238 | border:1px solid #ccc;
239 | }
240 |
241 | table thead tr > * {
242 | padding:5px;
243 | border-color:#ccc;
244 | border-bottom:2px solid #ccc;
245 | background-color:#f2f2f2;
246 | text-align: left; font-weight:bold;
247 | }
248 |
249 | thead a {
250 | color:#333; text-decoration: none;
251 | }
252 |
253 | body thead tr:hover > * {
254 | background-color:#f2f2f2;
255 | }
256 |
257 | body tbody tr:hover > * {
258 | background-color:#f2f7ff;
259 | }
260 |
261 | /*
262 | @end
263 | */
264 |
265 | /*
266 | @group Pagination
267 | */
268 |
269 | #content .pages {
270 | margin:1em 0 2em;
271 | }
272 |
273 | #content .pages a {
274 | padding:3px 5px; margin:0 1px;
275 | border:1px solid #eee;
276 | text-decoration:none; color: #000;
277 | }
278 |
279 | #content .pages a:hover {
280 | background-color:#eee;
281 | border-color: #fff;
282 | }
283 |
284 |
285 | /*
286 | @end
287 | */
288 | /*
289 | @end
290 | */
--------------------------------------------------------------------------------
/adminer/themes/ng9.css:
--------------------------------------------------------------------------------
1 | * {
2 | font: 13px/1.5 Verdana, 'Geneva CE', lucida, sans-serif;
3 | color:#333333;
4 | margin:0px;
5 | padding:0px;
6 | }
7 |
8 | a,a:visited {
9 | color:#006aeb;
10 | text-decoration:none;
11 | padding:3px 1px;
12 | }
13 |
14 | #content table thead span, #content table thead a {
15 | font-weight:bold;
16 | color:black;
17 | }
18 |
19 | #content table thead a:hover {
20 | background:none;
21 | text-decoration:underline;
22 | color:black;
23 | }
24 |
25 | a:hover {
26 | color:white;
27 | background:#006aeb;
28 | }
29 |
30 | h1 {
31 | font-size:1.9em;
32 | font-weight:normal;
33 | background:white;
34 | color:#1e5eb6;
35 | border-bottom:1px solid #f4f4f4;
36 |
37 | padding:20px;
38 | margin:0px;
39 | }
40 |
41 | #menu h1 {
42 | padding:0px 0px 5px 20px;
43 | background:none;
44 | }
45 |
46 | h2,h3 {
47 | font-size:1.5em;
48 | font-weight:normal;
49 | background:white;
50 | color:#1e5eb6;
51 | border-bottom:1px solid #f4f4f4;
52 |
53 | padding:20px 0px;
54 | margin:0px;
55 | }
56 |
57 | fieldset {
58 | padding:5px;
59 | border:1px solid #f4f4f4;
60 | }
61 |
62 | input,select,textarea {
63 | border:1px solid #e5e5e5;
64 | margin:1px;
65 | padding:3px;
66 | }
67 |
68 | input[type=submit] {
69 | color:white;
70 | background:#3390e6;
71 | padding:3px 10px;
72 | cursor:pointer;
73 | border:0px solid;
74 | }
75 |
76 | input[type=submit]:hover{
77 | background:blue;
78 | }
79 |
80 | input[type=checkbox]{
81 | margin-right:5px;
82 | }
83 |
84 | input[type=image] {
85 | border:1px solid #d0cdc4;
86 | }
87 |
88 | input[type=checkbox],input[type=radio]{
89 | border:1px solid #e5e5e5;
90 | padding:2px 5px;
91 | }
92 |
93 | code{
94 | background:#f0ffe1;
95 | border:1px dashed #d5f1b9;
96 | padding:2px 4px;
97 | font-family:"Courier New";
98 | }
99 | code a:hover{background:transparent}
100 |
101 | table{
102 | margin:10px 0px;
103 | border:1px solid #d0cdc4;
104 | border-collapse:collapse;
105 | }
106 |
107 | tbody tr:hover td,tbody tr:hover th{
108 | background:#edf4ff
109 | }
110 |
111 | thead th, thead td {
112 | text-align:center;
113 | vertical-align:middle;
114 | font-weight:bold;
115 | white-space:nowrap;
116 | background:#f2eee1;
117 | color:#808080;
118 | }
119 |
120 | th,td{
121 | border:1px solid #d0cdc4;
122 | padding:3px 6px;
123 | vertical-align:top;
124 | }
125 |
126 | th a {
127 | font-weight:bold;
128 | padding-bottom:0px;
129 | }
130 |
131 | th {
132 | background:white;
133 | }
134 |
135 | tr.odd td {
136 | background:#fcfaf5;
137 | }
138 |
139 | #content tbody tr.checked td, tr.checked.odd td {
140 | background:#fbe2e2;
141 | color:red;
142 | }
143 |
144 | .hidden{
145 | display:none
146 | }
147 |
148 | .error,.message{
149 | padding:0px;
150 | background:transparent;
151 | font-weight:bold
152 | }
153 |
154 | .error{
155 | color:#c00
156 | }
157 |
158 | .message{
159 | color:#090
160 | }
161 |
162 | #content{
163 | margin:0px 0px 0px 320px;
164 | padding:50px 20px 40px 0px;
165 | height:100%;
166 | }
167 |
168 | #lang {
169 | background:#f2eee1;
170 | color:#808080;
171 | position:fixed;
172 | top:0px;
173 | left:0px;
174 | width:100%;
175 | padding:10px 20px;
176 | z-index:1;
177 | }
178 |
179 | #breadcrumb {
180 | position:fixed;
181 | top:0px;
182 | left:300px;
183 | background:#f2eee1;
184 | z-index:2;
185 | width:100%;
186 | padding:10px;
187 | }
188 |
189 | #menu {
190 | background:#fcfaf5;
191 | position:fixed;
192 | top:-10px;
193 | padding:20px;
194 | padding-top:40px;
195 | bottom:0px;
196 | overflow:auto;
197 | left:0px;
198 | width:240px;
199 | border-right:5px solid #f2eee1;
200 | }
201 |
202 | #schema .table {
203 | padding:5px;
204 | background:#fcfaf5;
205 | border:1px solid #d0cdc4;
206 | }
207 |
208 | #schema .table b {
209 | color:#006aeb;
210 | font-weight:bold;
211 | text-decoration:underline;
212 | }
213 |
214 | #schema .table b:hover {
215 | color:white;
216 | }
217 |
218 | input[name=logout] {
219 | color:#fce2e2;
220 | background:#d73e3e;
221 | }
222 |
223 | input[name=logout]:hover {
224 | background:#ea0202;
225 | }
226 |
227 | #logins a, #tables a {
228 | background:none;
229 | }
230 |
231 | #logins a:hover, #tables a:hover {
232 | background:#006aeb;
233 | }
234 |
235 | #logout {
236 | color:#006aeb;
237 | text-decoration:none;
238 | }
239 |
240 | #logout:hover {
241 | color:white;
242 | background:#006aeb;
243 | }
244 |
245 | .js .column {
246 | background:#f2eee1;
247 | }
248 |
249 | #content table thead a.text:hover {
250 | text-decoration:none;
251 | }
252 |
253 | #version, .version {
254 | font-size:50%;
255 | }
256 |
257 | #h1:hover {
258 | color:white;
259 | }
260 |
--------------------------------------------------------------------------------
/adminer/themes/nicu.css:
--------------------------------------------------------------------------------
1 | /* CSS by Nicu I. - www.nicu.me */
2 | @import url('//fonts.googleapis.com/css?family=Roboto:400,700,300');
3 | body {
4 | font: 16px/1.25 'Roboto', Verdana, Arial, Helvetica, sans-serif;
5 | margin: 0;
6 | color: #000;
7 | background: #fff;
8 | }
9 | a {
10 | text-decoration: none;
11 | color: #246db3;
12 | }
13 | a:visited {
14 | color: #225584;
15 | }
16 | a:link:hover,
17 | a:visited:hover {
18 | text-decoration: underline;
19 | color: #f44;
20 | }
21 | a.text:hover {
22 | text-decoration: none;
23 | }
24 | a.jush-help:hover {
25 | color: inherit;
26 | }
27 | h1 {
28 | font-size: 150%;
29 | font-weight: normal;
30 | margin: 0;
31 | padding: .8em .7em;
32 | color: #f44;
33 | border-bottom: 0 solid #999;
34 | background: transparent;
35 | }
36 | h2 {
37 | font-size: 29px;
38 | font-weight: 300;
39 | margin: 0 0 20px -18px;
40 | padding: .5em .6em;
41 | color: #000;
42 | border-bottom: 0 solid #000;
43 | background: transparent;
44 | }
45 | h3 {
46 | font-size: 130%;
47 | font-weight: normal;
48 | margin: 1em 0 0;
49 | }
50 | form {
51 | margin: 0;
52 | }
53 | td table {
54 | width: 100%;
55 | margin: 0;
56 | }
57 | table {
58 | font-size: 90%;
59 | margin: 1em 20px 0 0;
60 | border: 0;
61 | border-top: 1px solid #d2d2d2;
62 | border-left: 0 solid #d2d2d2;
63 | }
64 | td {
65 | padding: .2em .3em;
66 | border: 0;
67 | border-right: 0 solid #d2d2d2;
68 | border-bottom: 1px solid #d2d2d2;
69 | }
70 | th {
71 | padding: .2em .3em;
72 | border: 0;
73 | border-right: 1px solid #d2d2d2;
74 | border-bottom: 1px solid #d2d2d2;
75 | }
76 | th {
77 | text-align: left;
78 | background: #eaeaea;
79 | }
80 | thead td {
81 | padding: .2em .5em;
82 | text-align: center;
83 | border-right: 1px solid #d2d2d2;
84 | border-left: 1px solid #d2d2d2;
85 | }
86 | thead td,
87 | thead th {
88 | background: #eaeaea;
89 | }
90 | fieldset {
91 | display: inline;
92 | margin: .8em .5em 0 0;
93 | padding: .5em .8em;
94 | vertical-align: top;
95 | border: 1px solid #999;
96 | }
97 | p {
98 | margin: .8em 20px 0 0;
99 | }
100 | img {
101 | vertical-align: middle;
102 | border: 0;
103 | }
104 | td img {
105 | max-width: 200px;
106 | max-height: 200px;
107 | }
108 | code {
109 | font-size: 14px;
110 | padding: 1px;
111 | background: #eee;
112 | }
113 | tbody tr:hover td,
114 | tbody tr:hover th {
115 | background: #eee;
116 | }
117 | pre {
118 | margin: 1em 0 0;
119 | }
120 | pre,
121 | textarea,
122 | input,
123 | select {
124 | font: 14px/1.25 'Roboto', Verdana, Arial, Helvetica, sans-serif;
125 | }
126 | input[type=image] {
127 | vertical-align: middle;
128 | }
129 | input.default {
130 | box-shadow: 1px 1px 1px #777;
131 | }
132 | input.required {
133 | box-shadow: 1px 1px 1px red;
134 | }
135 | .block {
136 | display: block;
137 | }
138 | .version {
139 | font-size: 67%;
140 | padding: 0 3px;
141 | color: #777;
142 | }
143 | .js .hidden,
144 | .nojs .jsonly {
145 | display: none;
146 | }
147 | .js .column {
148 | position: absolute;
149 | margin-top: -.27em;
150 | padding: .27em 1ex .3em 0;
151 | background: #ddf5ff;
152 | }
153 | .nowrap td,
154 | .nowrap th,
155 | td.nowrap {
156 | white-space: pre;
157 | }
158 | .wrap td {
159 | white-space: normal;
160 | }
161 | .error {
162 | color: red;
163 | background: #fee;
164 | }
165 | .error b {
166 | font-weight: normal;
167 | background: #fff;
168 | }
169 | .message {
170 | color: green;
171 | background: #efe;
172 | }
173 | .error,
174 | .message {
175 | margin: 1em 20px 0 0;
176 | padding: .5em .8em;
177 | }
178 | .char {
179 | color: #007f00;
180 | }
181 | .date {
182 | color: #7f007f;
183 | }
184 | .enum {
185 | color: #007f7f;
186 | }
187 | .binary {
188 | color: red;
189 | }
190 | .odd td {
191 | background: transparent;
192 | }
193 | .js .checkable .checked td,
194 | .js .checkable .checked th {
195 | background: #ddf;
196 | }
197 | .time {
198 | font-size: 70%;
199 | color: silver;
200 | }
201 | .function {
202 | text-align: right;
203 | }
204 | .number {
205 | text-align: right;
206 | }
207 | .datetime {
208 | text-align: right;
209 | }
210 | .type {
211 | width: 15ex;
212 | width: auto\9;
213 | }
214 | .options select {
215 | width: 20ex;
216 | width: auto\9;
217 | }
218 | .view {
219 | font-style: italic;
220 | }
221 | .active {
222 | font-weight: bold;
223 | }
224 | .sqlarea {
225 | width: 98%;
226 | }
227 | .icon {
228 | width: 18px;
229 | height: 18px;
230 | background-color: navy;
231 | }
232 | .icon:hover {
233 | background-color: red;
234 | }
235 | .size {
236 | width: 6ex;
237 | }
238 | .help {
239 | cursor: help;
240 | }
241 | .pages {
242 | position: fixed;
243 | bottom: 0;
244 | left: 21em;
245 | padding: 5px;
246 | border: 1px solid #999;
247 | background: #f1f1f1;
248 | }
249 | .links a {
250 | margin-right: 20px;
251 | white-space: nowrap;
252 | }
253 | .logout {
254 | position: absolute;
255 | top: 0;
256 | right: 0;
257 | margin-top: .5em;
258 | }
259 | .loadmore {
260 | margin-left: 1ex;
261 | }
262 | #menu {
263 | position: absolute;
264 | top: -1em;
265 | left: 0;
266 | width: 19em;
267 | margin: 10px 0 0;
268 | padding: 0 0 30px 0;
269 | background: #f1f1f1;
270 | }
271 | #menu p, #logins, #tables {
272 | margin: 0;
273 | padding: .8em 1em;
274 | border-bottom: 1px solid #c7c7c7;
275 | }
276 | #dbs {
277 | overflow: hidden;
278 | }
279 | #logins,
280 | #tables {
281 | overflow: auto;
282 | white-space: nowrap;
283 | }
284 | #logins a,
285 | #tables a,
286 | #tables span {
287 | background: transparent;
288 | }
289 | #content {
290 | margin: 2em 0 0 21em;
291 | padding: 10px 20px 20px 0;
292 | }
293 | #lang {
294 | line-height: 1.8em;
295 | position: absolute;
296 | top: 0;
297 | left: 0;
298 | padding: .3em 1em;
299 | }
300 | #breadcrumb {
301 | font-size: 12px;
302 | line-height: 1.8em;
303 | position: absolute;
304 | top: 8px;
305 | left: 27em;
306 | height: 2em;
307 | margin: 0 0 0 0;
308 | padding: 0 1em;
309 | white-space: nowrap;
310 | background: transparent;
311 | }
312 | #h1 {
313 | font-style: normal;
314 | text-decoration: none;
315 | color: #f44;
316 | }
317 | #version {
318 | font-size: 67%;
319 | color: red;
320 | }
321 | #schema {
322 | position: relative;
323 | margin-left: 60px;
324 | -webkit-user-select: none;
325 | -moz-user-select: none;
326 | }
327 | #schema .table {
328 | position: absolute;
329 | padding: 0 2px;
330 | cursor: move;
331 | border: 1px solid silver;
332 | }
333 | #schema .references {
334 | position: absolute;
335 | }
336 | #help {
337 | font-family: monospace;
338 | position: absolute;
339 | z-index: 1;
340 | padding: 5px;
341 | border: 1px solid #999;
342 | background: #eee;
343 | }
344 | .rtl h2 {
345 | margin: 0 -18px 20px 0;
346 | }
347 | .rtl p,
348 | .rtl table,
349 | .rtl .error,
350 | .rtl .message {
351 | margin: 1em 0 0 20px;
352 | }
353 | .rtl .logout {
354 | right: auto;
355 | left: 0;
356 | }
357 | .rtl #content {
358 | margin: 2em 21em 0 0;
359 | padding: 10px 0 20px 20px;
360 | }
361 | .rtl #breadcrumb {
362 | right: 21em;
363 | left: auto;
364 | margin: 0 -18px 0 0;
365 | }
366 | .rtl #lang,
367 | .rtl #menu {
368 | right: 0;
369 | left: auto;
370 | }
371 | @media all and (max-device-width:880px) {
372 | .pages {
373 | left: auto;
374 | }
375 | #menu {
376 | position: static;
377 | width: auto;
378 | }
379 | #content {
380 | margin-left: 10px;
381 | }
382 | #lang {
383 | position: static;
384 | border-top: 1px solid #999;
385 | }
386 | #breadcrumb {
387 | left: auto;
388 | }
389 | .rtl #content {
390 | margin-right: 10px;
391 | }
392 | .rtl #breadcrumb {
393 | right: auto;
394 | }
395 | }
396 | @media print {
397 | #lang,
398 | #menu {
399 | display: none;
400 | }
401 | #content {
402 | margin-left: 1em;
403 | }
404 | #breadcrumb {
405 | left: 1em;
406 | }
407 | .nowrap td,
408 | .nowrap th,
409 | td.nowrap {
410 | white-space: normal;
411 | }
412 | }
413 | .jush {
414 | color: black;
415 | }
416 | .jush-htm_com,
417 | .jush-com,
418 | .jush-com_code,
419 | .jush-one,
420 | .jush-php_doc,
421 | .jush-php_com,
422 | .jush-php_one,
423 | .jush-js_one,
424 | .jush-js_doc {
425 | color: gray;
426 | }
427 | .jush-php,
428 | .jush-php_new,
429 | .jush-php_fun {
430 | color: #003;
431 | background-color: #fff0f0;
432 | }
433 | .jush-php_quo,
434 | .jush-quo,
435 | .jush-quo_one,
436 | .jush-php_eot,
437 | .jush-apo,
438 | .jush-sql_apo,
439 | .jush-sqlite_apo,
440 | .jush-sql_quo,
441 | .jush-sql_eot {
442 | color: green;
443 | }
444 | .jush-php_apo {
445 | color: #009f00;
446 | }
447 | .jush-php_quo_var,
448 | .jush-php_var,
449 | .jush-sql_var {
450 | font-style: italic;
451 | }
452 | .jush-php_apo .jush-php_quo_var,
453 | .jush-php_apo .jush-php_var {
454 | font-style: normal;
455 | }
456 | .jush-php_halt2 {
457 | color: black;
458 | background-color: white;
459 | }
460 | .jush-tag_css,
461 | .jush-att_css .jush-att_quo,
462 | .jush-att_css .jush-att_apo,
463 | .jush-att_css .jush-att_val {
464 | color: black;
465 | background-color: #ffffe0;
466 | }
467 | .jush-tag_js,
468 | .jush-att_js .jush-att_quo,
469 | .jush-att_js .jush-att_apo,
470 | .jush-att_js .jush-att_val,
471 | .jush-css_js {
472 | color: black;
473 | background-color: #f0f0ff;
474 | }
475 | .jush-tag,
476 | .jush-xml_tag {
477 | color: navy;
478 | }
479 | .jush-att,
480 | .jush-xml_att,
481 | .jush-att_js,
482 | .jush-att_css,
483 | .jush-att_http {
484 | color: teal;
485 | }
486 | .jush-att_quo,
487 | .jush-att_apo,
488 | .jush-att_val {
489 | color: purple;
490 | }
491 | .jush-ent {
492 | color: purple;
493 | }
494 | .jush-js_key,
495 | .jush-js_key .jush-quo,
496 | .jush-js_key .jush-apo {
497 | color: purple;
498 | }
499 | .jush-js_reg {
500 | color: navy;
501 | }
502 | .jush-php_sql .jush-php_quo,
503 | .jush-php_sql .jush-php_apo,
504 | .jush-php_sqlite .jush-php_quo,
505 | .jush-php_sqlite .jush-php_apo,
506 | .jush-php_pgsql .jush-php_quo,
507 | .jush-php_pgsql .jush-php_apo,
508 | .jush-php_mssql .jush-php_quo,
509 | .jush-php_mssql .jush-php_apo,
510 | .jush-php_oracle .jush-php_quo,
511 | .jush-php_oracle .jush-php_apo {
512 | background-color: #ffbbb0;
513 | }
514 | .jush-bac,
515 | .jush-php_bac,
516 | .jush-bra,
517 | .jush-mssql_bra,
518 | .jush-sqlite_quo {
519 | color: red;
520 | }
521 | .jush-num,
522 | .jush-clr {
523 | color: #007f7f;
524 | }
525 | .jush a {
526 | color: navy;
527 | }
528 | .jush a.jush-help {
529 | cursor: help;
530 | }
531 | .jush-sql a,
532 | .jush-sql_code a,
533 | .jush-sqlite a,
534 | .jush-pgsql a,
535 | .jush-mssql a,
536 | .jush-oracle a,
537 | .jush-simpledb a {
538 | font-weight: bold;
539 | }
540 | .jush-php_sql .jush-php_quo a,
541 | .jush-php_sql .jush-php_apo a {
542 | font-weight: normal;
543 | }
544 | .jush-tag a,
545 | .jush-att a,
546 | .jush-apo a,
547 | .jush-quo a,
548 | .jush-php_apo a,
549 | .jush-php_quo a,
550 | .jush-php_eot2 a {
551 | color: inherit;
552 | color: expression(parentNode.currentStyle.color);
553 | }
554 | a.jush-custom:link,
555 | a.jush-custom:visited {
556 | font-weight: normal;
557 | color: inherit;
558 | color: expression(parentNode.currentStyle.color);
559 | }
560 | .jush p {
561 | margin: 0;
562 | }
563 |
--------------------------------------------------------------------------------
/adminer/themes/paranoiq.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Alternative style for Adminer. Zrobeno 7.4.2011
3 | * @author Vlasta Neubauer [@paranoiq]
4 | */
5 |
6 | /* -- fonts ----------------------------------------------------------------- */
7 | body {
8 | font-size: 11pt; }
9 | body, select, option, optgroup, button {
10 | font-family: Calibri, Arial, Helvetica, sans-serif; } /* IE6 */
11 | input[type='submit'], input[type='reset'], input[type='button'], input[type='file'],
12 | input[name$='[comment]'], input[name='Comment'] {
13 | font-family: Calibri, Arial, Helvetica, sans-serif; }
14 | input, textarea, pre, code, samp, kbd, var {
15 | font-family: Consolas, "Courier New", monospace;
16 | font-size: 10pt; } /* FF3 */
17 |
18 |
19 | /* -- links ----------------------------------------------------------------- */
20 | a {
21 | color: #007; }
22 | a:visited {
23 | color: #707; }
24 | a:hover, input[name='logout']:hover {
25 | color: #700;
26 | text-decoration: none; }
27 | h1 a:visited {
28 | color: #007; }
29 | input[name='logout'] {
30 | position: absolute;
31 | bottom: 10px;
32 | left: 33%; }
33 | input[name='logout'] { /* IEx */
34 | %position: static;
35 | %background: transparent;
36 | %text-decoration: underline;
37 | %font-weight: bold;
38 | %cursor: pointer;
39 | %border: none;
40 | %margin: 0;
41 | %padding: 0;
42 | %color: #007;
43 | }
44 |
45 |
46 | /* -- tables ---------------------------------------------------------------- */
47 | table {
48 | margin: 12px 12px 12px 0;
49 | border: 1px #DDD solid;
50 | border-collapse: collapse; }
51 | td, th {
52 | background-color: #FFF;
53 | padding: 1px 2px;
54 | border-left: 1px #DDD dotted;
55 | border-width: 1px 0px 0px 1px; }
56 | th {
57 | text-align: left !important; }
58 | tr:first-child td, tr:first-child th {
59 | border-top-width: 0; }
60 | td:first-child, th:first-child {
61 | border-left-width: 0; }
62 | thead td, thead th {
63 | background-color: #EEE;
64 | border: none;
65 | border-bottom: 1px #DDD solid; }
66 | .nowrap tr:nth-child(2n) td, .nowrap tr:nth-child(2n) th {
67 | background-color: #DEF; }
68 | .odd td, .odd th {
69 | background-color: #DEF; } /* IEx */
70 | tr.selected td, tr.selected th {
71 | background-color: #ABC !important; }
72 | tr:hover td, tr:hover th {
73 | background-color: #BCD !important; } /* WTF? */
74 | thead tr:hover td, thead tr:hover th {
75 | background-color: #EEE !important; }
76 |
77 |
78 | /* -- forms ----------------------------------------------------------------- */
79 | fieldset {
80 | background-color: #DEF;
81 | border: none;
82 | %padding-left: 8px;
83 | %border: 1px #DDD solid; /* IEx */
84 | %background-repeat: repeat-x; /* IE8 */
85 | %background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAACJJREFUKFNj/P//PwPxAKiaeMBAvFKQK0ZVY4TAaJhgJgoAj5t2py3lrtoAAAAASUVORK5CYII='); }
86 | legend {
87 | color: #000;
88 | background-color: #FFF;
89 | %background-color: transparent; /* IEx */
90 | padding: 0px 4px; }
91 | legend a:visited {
92 | color: #000; } /* IE6+7 */
93 | input[name='limit'], input[name*='length'] {
94 | width: 3em; }
95 | input[name='text_length'] {
96 | width: 5em; } /* ~FF3 */
97 | select + input, select + select {
98 | margin-left: 2px; }
99 | input + label input, select + label input {
100 | margin-left: 4px; }
101 | td input[type='checkbox']:first-child, td input[type='radio']:first-child {
102 | margin-left: 2px; }
103 | label:hover {
104 | text-decoration: underline; }
105 | fieldset div {
106 | margin-bottom: 2px; }
107 | input[name='Comment'] { /* !!! */
108 | width: 24em; }
109 | input[name='Auto_increment'] { /* !!! */
110 | width: 6em; }
111 | textarea[name='definition'] {
112 | height: 480px; }
113 | input[name$='[comment]'] {
114 | width: 24em; }
115 | input[type='text'], textarea {
116 | border: 1px #DDD solid; }
117 | input[type='submit'], input[type='reset'], input[type='submit'], button, input[type='checkbox'], label, select, option {
118 | cursor: pointer; }
119 | .minifieldset {
120 | display: inline-block;
121 | padding: 2px 4px;
122 | background-color: #DEF;
123 | -moz-border-radius: 5px;
124 | -webkit-border-radius: 5px;
125 | border-radius: 5px; }
126 | .minifieldset * {
127 | margin: 0; }
128 |
129 |
130 | /* -- other ----------------------------------------------------------------- */
131 | .error {
132 | padding: 8px; }
133 | .message {
134 | padding: 8px;
135 | color: #000;
136 | background: #DDD; }
137 | .jush-sql {
138 | padding: 2px 4px;
139 | margin-right: 4px;
140 | outline: 1px #BBB dashed;
141 | font-size: 9pt; }
142 | code {
143 | background: transparent; }
144 | .nowrap td i {
145 | color: #AAA; }
146 |
147 | /* -- structure ------------------------------------------------------------- */
148 | #content {
149 | margin: 28px 0 0 192px;
150 | padding: 10px 20px 20px 0; }
151 | h3 {
152 | margin: 20px 0; }
153 |
154 | #lang {
155 | height: 23px;
156 | width: 180px;
157 | display: block;
158 | padding: 1px 0px;
159 | text-align: center;
160 | background-color: #EEE;
161 | line-height: 1.25em; }
162 | #lang select {
163 | font-size: 8pt; }
164 |
165 | #breadcrumb {
166 | margin: 0;
167 | height: 21px;
168 | display: block;
169 | left: 192px;
170 | background-color: #DDD;
171 | padding: 2px 12px;
172 | line-height: 1.25em; }
173 |
174 | #menu {
175 | margin: 0;
176 | padding-bottom: 50px;
177 | top: 38px;
178 | width: 180px;
179 | background-color: #DEF; }
180 | #menu p, #logins, #tables {
181 | padding-left: 8px;
182 | font-size: 10pt;
183 | border-bottom: none; }
184 | #logins a, #tables a, #tables span {
185 | background: #DEF;
186 | }
187 |
188 | h1 {
189 | margin-top: 8px;
190 | color: #000;
191 | padding: 5px;
192 | text-align: center;
193 | font-size: 14pt;
194 | border-bottom: none;
195 | background: transparent;
196 | font-style: italic;
197 | text-shadow: #FFF 2px 2px 0px; }
198 | h1 #h1 {
199 | color: #000;
200 | font-weight: bold; }
201 | h1 #h1:hover {
202 | text-decoration: underline; }
203 | h1 #h1:visited {
204 | color: #000; }
205 |
206 | h2 {
207 | margin: 0;
208 | margin-bottom: 12px;
209 | padding: 6px 18px;
210 | background-color: #CDE;
211 | border-bottom: none;
212 | color: #000;
213 | text-shadow: #FFF 0px 0px 4px; }
214 |
215 | #schema {
216 | margin: 1.5em 0 0 220px; }
217 | #schema .table {
218 | border: 1px solid #DDD;
219 | background-color: #DEF;
220 | padding: 0 2px; }
221 |
222 |
223 | /* -- GUI adjustments ------------------------------------------------------- */
224 | .js .hidden {
225 | display: inline; }
226 | .js td.hidden, .js input.hidden {
227 | display: none; }
228 | legend a {
229 | color: #000;
230 | text-decoration: none;
231 | cursor: default; }
232 | legend a:hover {
233 | color: black; }
234 |
235 | select[name^="columns"] optgroup:last-child option:nth-child(3)::before {
236 | content: "count "; }
237 | select[name$="[collation]"] {
238 | max-width: 120px; }
239 |
240 | .logout a:first-child, p a {
241 | margin-right: 8px; }
242 | #tables a, #breadcrumb a, p.pages a, p code + a {
243 | margin-right: 0; }
244 | .logout a::before, p a::before {
245 | content: '» '; }
246 | #tables a::before, #breadcrumb a::before, p.pages a::before, p code + a::before {
247 | content: ''; }
248 | #form + p a:first-child::before {
249 | content: ''; }
250 |
251 |
252 | /* -- eye candy ------------------------------------------------------------- */
253 | fieldset, legend, h2, .error, .message {
254 | -moz-border-radius: 5px;
255 | border-radius: 5px; }
256 | #breadcrumb, #lang, #menu {
257 | -moz-border-radius-bottomright: 5px;
258 | border-bottom-right-radius: 5px; }
259 | #breadcrumb {
260 | -moz-border-radius-bottomleft: 5px;
261 | border-bottom-left-radius: 5px; }
262 | #menu {
263 | -moz-border-radius-topright: 5px;
264 | border-top-right-radius: 5px; }
265 | fieldset, h2, .error, #breadcrumb, #lang, #menu, #breadcrumb, #menu {
266 | x-moz-box-shadow: 1px 1px 3px #DDD;
267 | xbox-shadow: 1px 1px 3px #DDD; }
268 | fieldset table {
269 | x-moz-box-shadow: none;
270 | xbox-shadow: none; }
271 |
272 |
273 | /* -- printing -------------------------------------------------------------- */
274 | @media print {
275 | #lang, #menu {
276 | display: none; }
277 | #content {
278 | margin-left: 1em; }
279 | #breadcrumb {
280 | left: 1em;
281 | background: none;
282 | border-bottom: 1px silver dashed;
283 | box-shadow: none; }
284 | h2 {
285 | background: none;
286 | box-shadow: none; }
287 | p.tabs {
288 | display: none; }
289 | }
290 |
291 |
--------------------------------------------------------------------------------
/adminer/themes/pepa-linha.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Theme by Pepa Linha [http://webdream.cz]
3 | * JUSH color syntax inspired by NetBeans
4 | * @version 0.2 (February 2014)
5 | */
6 |
7 | html,
8 | body {
9 | height: 100%;
10 | }
11 |
12 | body {
13 | font-family: "Segoe UI", Arial, sans-serif;
14 | }
15 |
16 | h1 {
17 | margin: 0;
18 | padding: 0;
19 | background: none;
20 | border: 0;
21 | }
22 |
23 | h2 {
24 | margin: 0;
25 | padding: 0;
26 | background: none;
27 | border: 0;
28 | font-family: "Segoe UI Light", "Segoe UI", Arial, sans-serif;
29 | font-size: 32px;
30 | font-weight: normal;
31 | color: #34567c;
32 | border-bottom: 1px solid #ebebeb;
33 | padding-bottom: 6px;
34 | margin-bottom: 40px;
35 | }
36 |
37 | .rtl h2 {
38 | margin: 0;
39 | margin-bottom: 40px;
40 | }
41 |
42 | h3 {
43 | font-size: 22px;
44 | margin: 0 0 10px;
45 | border-bottom: 1px solid #ebebeb;
46 | padding: 0;
47 | padding-bottom: 6px;
48 | }
49 |
50 | p {
51 | margin: 0;
52 | margin-bottom: 15px;
53 | }
54 |
55 | a {
56 | color:#2e84e4;
57 | text-decoration:none;
58 | }
59 |
60 | a:visited {
61 | color: #34567c;
62 | }
63 |
64 | a:link:hover,
65 | a:visited:hover {
66 | color: #2e84e4;
67 | text-decoration:underline;
68 | }
69 |
70 | /* otravuje pri prochazeni formulare klavesama */
71 | a[href*=charsets] {
72 | display: none;
73 | }
74 |
75 | table {
76 | border: 0;
77 | margin: 0;
78 | margin-top: 15px;
79 | }
80 |
81 | th, td {
82 | border: 0;
83 | padding: 6px;
84 | }
85 |
86 | th {
87 | background: none;
88 | color: #34567c;
89 | font-weight: normal;
90 | }
91 |
92 | tbody tr:hover td,
93 | tbody tr:hover th {
94 | background: none;
95 | }
96 |
97 | table:not(.checkable) th {
98 | min-width: 120px;
99 | }
100 |
101 | thead td,
102 | thead th {
103 | background: #34567c;
104 | }
105 |
106 | thead td,
107 | thead td a,
108 | thead td a:link:hover,
109 | thead td a:visited,
110 | thead td a:visited:hover,
111 | thead th,
112 | thead th a,
113 | thead th a:link:hover,
114 | thead th a:visited,
115 | thead th a:visited:hover {
116 | color: #fff;
117 | }
118 |
119 | table.checkable,
120 | p.links + table,
121 | pre + table,
122 | #edit-fields,
123 | p + table,
124 | h3 + table {
125 | border: 1px solid #bbb;
126 | margin-bottom: 15px;
127 | }
128 |
129 | table.checkable tbody tr:hover td,
130 | table.checkable tbody tr:hover th {
131 | background: #ffffd9;
132 | }
133 |
134 | .js .checkable .checked td,
135 | .js .checkable .checked th {
136 | background: #fbfabc;
137 | }
138 |
139 | .js .checkable thead .checked td,
140 | .js .checkable thead .checked th {
141 | background: #bfb008;
142 | }
143 |
144 | .odd th,
145 | .odd td {
146 | background: #f5f5f5;
147 | }
148 |
149 | fieldset {
150 | display: inline-block;
151 | padding: 15px;
152 | padding-top: 5px;
153 | margin: 0 0 15px;
154 | border: 0;
155 | background: #f5f5f5;
156 | }
157 |
158 | fieldset select {
159 | margin-right: 5px;
160 | }
161 |
162 | fieldset input[type=button],
163 | fieldset input[type=submit],
164 | fieldset p {
165 | margin-bottom: 0;
166 | }
167 |
168 | fieldset div p {
169 | margin-top: 10px;
170 | }
171 |
172 | legend {
173 | display: inline-block;
174 | padding: 6px 15px;
175 | margin: 0 0 0 -15px;
176 | background: #f5f5f5;
177 | font-family: "Segoe UI Semibold", "Segoe UI", Arial, sans-serif;
178 | }
179 |
180 | legend a,
181 | legend a:link:hover {
182 | color: #000;
183 | text-decoration: underline;
184 | }
185 |
186 | code {
187 | background: none;
188 | }
189 |
190 | p code,
191 | pre code,
192 | pre[contenteditable=true] {
193 | padding: 10px 15px;
194 | display: block;
195 | font-size: 17px;
196 | margin-bottom: 15px;
197 | }
198 |
199 | p code + a,
200 | p code + a:link:hover,
201 | p code + a:visited:hover {
202 | margin-left: 15px;
203 | position: relative;
204 | top: -20px;
205 | color: #000;
206 | font-size: 12px;
207 | text-decoration: underline;
208 | text-transform: lowercase;
209 | }
210 |
211 | #content {
212 | margin: 0;
213 | margin-left: 400px;
214 | margin-right: 54px;
215 | padding: 0;
216 | padding-top: 50px;
217 | }
218 |
219 | #content > p {
220 | margin-bottom: 15px;
221 | }
222 |
223 | .rtl #content {
224 | margin: 0;
225 | margin-left: 54px;
226 | margin-right: 400px;
227 | padding: 0;
228 | padding-top: 50px;
229 | }
230 |
231 | #menu {
232 | width: 347px;
233 | border-right: 1px solid #dae8fa;
234 | box-shadow: inset -1px 0 0 #fff;
235 | margin: 0;
236 | padding: 0;
237 | top: 0;
238 | background: #f4f8fd;
239 | bottom: 0;
240 | position: fixed;
241 | padding: 0 15px;
242 | box-sizing: border-box;
243 | }
244 |
245 | #menu h1 {
246 | background: none left top no-repeat;
247 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD0AAAAyCAIAAABgVkRrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTA0RDI5NkM5QkRGMTFFMzg4ODNEQjEzNjY5NzJEMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTA0RDI5NkQ5QkRGMTFFMzg4ODNEQjEzNjY5NzJEMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MDREMjk2QTlCREYxMUUzODg4M0RCMTM2Njk3MkQwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1MDREMjk2QjlCREYxMUUzODg4M0RCMTM2Njk3MkQwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnG4emkAAASXSURBVHja7Fk9aNtAFL6EDKKUoqGDySRKB1FC8dDBdCgeOmQoIUMG0yGE0EFT8dDBUwidPJQQQgcNpYROGjKI0sFDB9GhaMhgSgcPpWgqHjqYYsINJfQ7PfV0tmX9JI4Sgx+HI8f26bt3733fe6elIf/LbqwdHbJWS1wYBrMstrXJVg36ZJnNhQWBWMB9k+215gq3tDeHBH3pRseJtC8ee2ezEzd62+ncDH/DhS+ttC88qbMPDntaj952uyvXD3q7ETvyyE77pq5HFz9614r7V8C2GnBezBgp9tGNl3ffzIjvwZ9B//dA7Mz3YPLTyl29UhE+MI0KW9YKh2yjwQZichEAjsNu6WlUqNqkvwHUO+0BJeD2gn4hJFXTwAIw6jUzYxlwHkCTvWqy1+0Ct7FtsPh/3Ofc9brOJ5+8ezHr9gKMcGpWf2SK8bhKk48sA1kIOiODmzc2c8U0DLrzwhI5ypjA3fsZtNrOgPP4y5pmGJXamqHd1kQMTIkENYpwEfQHEW7GsGkYZse393ewb+Y9IwE0PJcOejQ2pFgK3Li3BI14hZM269XKaiXPVPodHUOs6l48o/+t5wO038OcQGztHzd31uPfUEgQdCQi3JkfumLLHa9LoK2tunPQtJ6v5wQ9zWoPzebupms34QKxmZNJAugIDzJE+V4rbTrDSMYtr3AD+H5WFIfZ0lIFPu50otiF7zfW2dlgquKccTFWRxYQ8wlFJOVTdc2gAChq/V99vxdgD7O5CIBO/Yi/P3vsUY2dOOxBdSrzIBm2dxJwq+hlaiId9dua5OlEv/IhH0vKvAYXfvUjvUTFB2STeinJu91Oxo3Eh58onwRXcB7zWkGj/Maa9203+9soPIyWEKBEkQdc8veo+sS4wQkYzV1Bi+A1Ee5DnhO33BxsSw1/wszGPHkXmqI7yIQzPvnvhPqEFjAWtSq7j7n2YplwSctVV8F/FXazbN76nQXu68btfe3Odmqwahl5Ca6tel0UVdnVc6pRBX/JkrgYn0RCY0cdAMhYvGYxHbEklbJ++FoqD8LTUiwTlZLEha55WKOmSybWTCXD1eJG8dnc4XAYqmdgmoRFyp/ZqqHbgMiD8qGXZeAOs1RD9YyhBgBVTgL3cMTHwKd2xyUL50qmTI5p/oK/F7jnEjeycLZTFz02SrKlaSPGbe0fOx+9mbTGcMHhe/fwuFMGn4Dy7BMPA3oBGkZrbIDgcp9JgK37YYtZjmSuqApH9yPRcTp+TM939THOpkaYroMguRuSE14tbuegif11vS58poYm7i1vn6fdxF6hMoNk4leIvTJ0B1FhPQ/PxM45eZ2HGjkY8jHXqptghGJJqqmKVHn1oCr4k93xgr8XuOcZ9zmf7dQym68Et6QFcFaBk7EsQ5fdfuteHW7xPM3asyVh05EkxFJITMHuGDUCukxwvOz3YI31mtWoX7TRXkrDjQhBLeFOHBtQQ6n/f8TDlAd/6mNBP7xO7Ecbz2qNjfrl6qoU3Mr5Qa4j9yyLHqZd7jwjL241QQFdPiJTdT7RsBuapslzi5mqVSHcKXYetcZlSelU3P8EGADW25uhkIE0mQAAAABJRU5ErkJggg==);
248 | line-height: 50px;
249 | padding-left: 50px;
250 | padding-top: 9px;
251 | text-transform: lowercase;
252 | margin: 25px 0 10px 16px;
253 | }
254 |
255 | #menu h1 a {
256 | font-style: normal;
257 | }
258 |
259 | #menu h1 .version {
260 | color: #2e84e4;
261 | }
262 |
263 | #menu a {
264 | color: #34567c;
265 | }
266 |
267 | #menu p, #tables {
268 | border: 0;
269 | padding: 0;
270 | }
271 |
272 | #menu #dbs {
273 | background: #fff;
274 | padding: 0 15px 15px;
275 | border: 1px solid #dae8fa;
276 | border-bottom: 0;
277 | box-sizing: border-box;
278 | color: #fff;
279 | }
280 |
281 | #menu #dbs select {
282 | outline: 0;
283 | border-color: rgba(0, 0, 0, 0.1);
284 | width: 100%;
285 | }
286 |
287 | #menu p.links {
288 | margin: 0 0 15px;
289 | border: 1px solid #dae8fa;
290 | border-top: 0;
291 | text-align: center;
292 | display: table;
293 | width: 100%;
294 | box-sizing: border-box;
295 | }
296 |
297 | #menu p.links a {
298 | padding: 8px;
299 | margin: 0;
300 | display: table-cell;
301 | font-size: 12px;
302 | }
303 |
304 | #menu p.links a:hover {
305 | color: #2e84e4;
306 | }
307 |
308 | #menu p.links a.active {
309 | font-weight: normal;
310 | background: #fff;
311 | color: #000;
312 | }
313 |
314 | #content p.links {
315 | margin: -10px 0 15px;
316 | }
317 |
318 | #content p.links a {
319 | padding: 8px;
320 | margin: 0;
321 | display: table-cell;
322 | border: 1px solid #fff;
323 | }
324 |
325 | #content p.links a,
326 | #content p.links a:visited,
327 | #content p.links a:hover {
328 | color: #2e84e4;
329 | }
330 |
331 | #content p.links a.active {
332 | font-weight: normal;
333 | border: 1px solid #2e84e4;
334 | background: #f4f8fd;
335 | }
336 |
337 | #tables {
338 | max-height: 100%;
339 | margin: 32px -15px !important;
340 | position: absolute;
341 | left: 15px;
342 | right: 15px;
343 | bottom: 0;
344 | top: 220px;
345 | overflow: hidden !important;
346 | overflow-y: auto !important;
347 | }
348 |
349 | .rtl #tables {
350 | overflow: hidden !important;
351 | overflow-y: auto !important;
352 | }
353 |
354 | #tables a {
355 | float: right;
356 | padding: 6px 15px;
357 | }
358 |
359 | .rtl #tables a {
360 | float: none;
361 | }
362 |
363 | #tables a[title] {
364 | float: none;
365 | display: block;
366 | }
367 |
368 | .rtl #tables a:first-child,
369 | .rtl #tables br + a {
370 | float: left;
371 | display: block;
372 | margin-left: 15px;
373 | }
374 |
375 | #tables a:hover,
376 | #tables a:hover + a,
377 | #tables a.active,
378 | #tables a.active + a {
379 | background: #fff;
380 | color: #2e84e4;
381 | }
382 |
383 | #tables br {
384 | display: none;
385 | }
386 |
387 | .js .column {
388 | background: #2e84e4;
389 | }
390 |
391 | .js .checked .column {
392 | background: #7b7105;
393 | }
394 |
395 | .pages {
396 | left: 400px;
397 | background: #34567c;
398 | color: #fff;
399 | font-weight: bold;
400 | border: 0;
401 | display: inline-block;
402 | position: static;
403 | }
404 |
405 | .pages a,
406 | .pages a:link,
407 | .pages a:link:hover,
408 | .pages a:visited,
409 | .pages a:visited:hover {
410 | color: #fff;
411 | font-weight: normal;
412 | }
413 |
414 | #breadcrumb {
415 | margin: 0;
416 | left: 400px;
417 | background: none;
418 | padding: 0;
419 | padding-top: 25px;
420 | font-size: 12px;
421 | }
422 |
423 | #breadcrumb a {
424 | color: #aeaeae;
425 | text-decoration: underline;
426 | }
427 |
428 | #breadcrumb,
429 | #breadcrumb a:hover {
430 | color: #666;
431 | }
432 |
433 | .rtl #breadcrumb {
434 | margin: 0;
435 | padding: 0;
436 | padding-top: 25px;
437 | right: 400px;
438 | }
439 |
440 | .logout,
441 | .rtl .logout {
442 | top: 30px;
443 | right: 54px;
444 | margin: 0;
445 | }
446 |
447 | .rtl .logout {
448 | right: auto;
449 | left: 54px;
450 | }
451 |
452 | input:not([type]),
453 | input[type="color"],
454 | input[type="email"],
455 | input[type="number"],
456 | input[type="password"],
457 | input[type="tel"],
458 | input[type="url"],
459 | input[type="text"],
460 | input[type="search"] {
461 | border: 1px solid #bbbbbb;
462 | padding: 6px;
463 | margin: 0;
464 | box-sizing: border-box;
465 | }
466 |
467 | table:not(#table) input:not([type]),
468 | table:not(#table) input[type="color"],
469 | table:not(#table) input[type="email"],
470 | table:not(#table) input[type="number"],
471 | table:not(#table) input[type="password"],
472 | table:not(#table) input[type="tel"],
473 | table:not(#table) input[type="url"],
474 | table:not(#table) input[type="text"],
475 | table:not(#table) input[type="search"] {
476 | min-width: 280px;
477 | }
478 |
479 | input[type=submit],
480 | input[type=button] {
481 | border: 0;
482 | padding: 7px 12px;
483 | cursor: pointer;
484 | outline: 0;
485 | box-shadow: none;
486 | background: #2e84e4;
487 | color: #fff;
488 | font-weight: bold;
489 | margin-bottom: 5px;
490 | transition: background .4s ease;
491 | }
492 |
493 | input[type=submit][disabled],
494 | input[type=button][disabled] {
495 | background: #aeaeae !important;
496 | color: #e9e9e9;
497 | cursor: not-allowed;
498 | }
499 |
500 | input[type=submit]:hover,
501 | input[type=button]:hover,
502 | input[type=submit]:focus,
503 | input[type=button]:focus {
504 | background: #34567c;
505 | }
506 |
507 | .logout input[type=submit] {
508 | background: #f40204;
509 | }
510 |
511 | .logout input[type=submit]:hover {
512 | background: #d50204;
513 | }
514 |
515 | input.default,
516 | input.default {
517 | box-shadow: none;
518 | background: #2e84e4;
519 | color: #fff;
520 | font-weight: bold;
521 | }
522 |
523 | select {
524 | box-sizing: border-box;
525 | margin: 0;
526 | padding: 6px 0;
527 | border: 1px solid #bbbbbb;
528 | }
529 |
530 | label {
531 | cursor: pointer;
532 | margin-right: 6px;
533 | }
534 |
535 | .error,
536 | .message {
537 | margin: 0;
538 | margin-bottom: 15px;
539 | }
540 |
541 | #logins a,
542 | #tables a,
543 | #tables span {
544 | background: none;
545 | }
546 |
547 | #form > p {
548 | margin-bottom: 15px;
549 | }
550 |
551 | #schema .table {
552 | padding: 6px;
553 | }
554 |
555 | #schema .table a {
556 | display: block;
557 | margin: -6px;
558 | margin-bottom: 6px;
559 | padding: 6px;
560 | color: #fff;
561 | background: #34567c;
562 | }
563 |
564 | #schema .table br {
565 | display: none;
566 | }
567 |
568 | #schema .table span {
569 | display: block;
570 | margin-bottom: 1px solid #f5f5f5;
571 | }
572 |
573 | #lang {
574 | position: fixed;
575 | top: 55px;
576 | right: 100%;
577 | z-index: 10;
578 | margin-right: -340px;
579 | line-height: normal;
580 | padding: 0;
581 | left: auto;
582 | font-size: 0;
583 | }
584 |
585 | #lang select {
586 | font-size: 12px;
587 | padding: 0;
588 | text-align: right;
589 | border: 0;
590 | background: none;
591 | -webkit-appearance: none;
592 | -moz-appearance: none;
593 | appearance: none;
594 | cursor: pointer;
595 | outline: 0;
596 | }
597 |
598 | #lang select option {
599 | text-align: right;
600 | }
601 |
602 | .rtl #lang {
603 | margin-right: 0;
604 | left: 100%;
605 | margin-left: -261px;
606 | right: auto;
607 | }
608 |
609 | .jush {
610 | color: #000;
611 | }
612 |
613 | .jush a {
614 | color: #3939f2;
615 | }
616 |
617 | .jush-sql a,
618 | .jush-sql_code a,
619 | .jush-sqlite a,
620 | .jush-pgsql a,
621 | .jush-mssql a,
622 | .jush-oracle a,
623 | .jush-simpledb a {
624 | font-weight: normal;
625 | }
626 |
627 | .jush-bac,
628 | .jush-php_bac,
629 | .jush-bra,
630 | .jush-mssql_bra,
631 | .jush-sqlite_quo {
632 | color: #009900;
633 | }
634 |
635 | .jush-php_quo,
636 | .jush-quo,
637 | .jush-quo_one,
638 | .jush-php_eot,
639 | .jush-apo,
640 | .jush-sql_apo,
641 | .jush-sqlite_apo,
642 | .jush-sql_quo,
643 | .jush-sql_eot {
644 | color: #ce7b00;
645 | }
646 |
647 | .jush-num,
648 | .jush-clr {
649 | color: #000;
650 | }
651 |
652 | @media print {
653 | .logout {
654 | display: none;
655 | }
656 |
657 | #breadcrumb {
658 | position: static;
659 | }
660 |
661 | #content {
662 | margin: 0;
663 | }
664 | }
665 |
--------------------------------------------------------------------------------
/adminer/themes/pilot.css:
--------------------------------------------------------------------------------
1 | #menu {
2 | margin: 0;
3 | position: absolute;
4 | top: 0;
5 | bottom: 0;
6 | left: 0;
7 | width: 270px;
8 | padding: 0;
9 | border-right: 1px #ccc solid;
10 | }
11 |
12 | #menu p {
13 | margin: 0;
14 | padding: 4px 10px;
15 | }
16 |
17 | #menu p select {
18 | width: 100%;
19 | }
20 |
21 | #menu h1 {
22 | height: 25px;
23 | padding: 0 10px;
24 | margin: 0;
25 | line-height: 20px;
26 | display: block;
27 | }
28 |
29 | #menu h1 a {
30 | font-size: 13px;
31 | }
32 |
33 | #menu h1 .version {
34 | font-size: 9px;
35 | }
36 |
37 | #menu * {
38 | margin: 0;
39 | padding: 0;
40 | }
41 |
42 | #tables {
43 | margin: 0;
44 | position: absolute;
45 | top: 118px;
46 | bottom: 0;
47 | left: 0;
48 | padding: 0;
49 | overflow-x: hidden;
50 | overflow-y: auto;
51 | width: 270px;
52 | }
53 |
54 | #logins li, #tables li {
55 | position: relative;
56 | height: 23px;
57 | }
58 |
59 | #logins a {
60 | display: block;
61 | margin-top: 5px;
62 | padding: 0 10px;
63 | }
64 |
65 | #tables a {
66 | display: block;
67 | margin: 0;
68 | padding: 0;
69 | text-decoration: none;
70 | margin-top: 5px;
71 | }
72 |
73 | #tables a[href*="select"] {
74 | position: absolute;
75 | left: 10px;
76 | width: 50px;
77 | }
78 |
79 | #tables a[href*="table"] {
80 | position: absolute;
81 | left: 65px;
82 | width: 200px;
83 | }
84 |
85 | #lang {
86 | top: -1px;
87 | right: 2px;
88 | left: auto;
89 | margin: 0;
90 | padding: 0;
91 | z-index: 10;
92 | }
93 |
94 | #content {
95 | margin: 0;
96 | padding: 0 10px 10px 10px;
97 | position: absolute;
98 | left: 270px;
99 | right: 0;
100 | top: 82px;
101 | bottom: 0;
102 | overflow: auto;
103 | }
104 |
105 | #content h2 {
106 | display: block;
107 | margin: 0;
108 | padding: 0;
109 | height: 55px;
110 | position: fixed;
111 | left: 270px;
112 | right: 0;
113 | top: 26px;
114 | line-height: 55px;
115 | padding-left: 10px;
116 | border-bottom: 1px solid #ccc;
117 | }
118 |
119 | #breadcrumb {
120 | position: fixed;
121 | left: 270px;
122 | right: 0;
123 | top: 0;
124 | height: 25px;
125 | margin: 0;
126 | border-bottom: 1px solid #999;
127 | }
--------------------------------------------------------------------------------
/adminer/themes/price.css:
--------------------------------------------------------------------------------
1 | /**
2 | * @package Adminer.css - v1.0.0 - January 08, 2013
3 | * @author James Price
4 | * @version $Id$
5 | * @copyright Copyright � 2013 Neurotechnics Pty Ltd. http://www.neurotechnics.com/
6 | * @license MIT: http://mit-license.org/
7 | * Permission is hereby granted, free of charge, to any person obtaining a copy of
8 | * this software and associated documentation files (the �Software�), to deal in
9 | * the Software without restriction, including without limitation the rights to use,
10 | * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
11 | * Software, and to permit persons to whom the Software is furnished to do so,
12 | * subject to the following conditions:
13 | *
14 | * The above copyright notice and this permission notice shall be
15 | * included in all copies or substantial portions of the Software.
16 | *
17 | * THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
18 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
19 | * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20 | * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 | * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 | * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 | */
24 |
25 | /* IE doesn't support inline images - So, we use a hack that IE cannot interpret */
26 | html/*\*/>/*/*/body .error {background:#FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC") no-repeat scroll 0.8em center; padding-left:38px;}
27 | html/*\*/>/*/*/body .message, #menu p.message {background:#EEFFEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;}
28 | html/*\*/>/*/*/body a[href$="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
29 | html/*\*/>/*/*/body select[name="db"] {background:white url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:16px;}
30 | html/*\*/>/*/*/body select[name="db"] option {padding-left:18px;}
31 | html/*\*/>/*/*/body a[href$="&create="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;}
32 | html/*\*/>/*/*/body #menu p a[href*="&select="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll left bottom; clear:left; display:block; float:left; height:16px; margin-right:8px; padding:1px 0 0 16px; overflow:hidden; width:0; text-decoration:none; }
33 | html/*\*/>/*/*/body #menu p a[href*="&table="], html/*\*/>/*/*/body #menu p a[href*="&view="] {margin:0; line-height:18px; padding-bottom:1px; text-decoration:none;}
34 | html/*\*/>/*/*/body #content p a[href*="&create="] {padding-left:22px;}
35 | html/*\*/>/*/*/body #content p a[href$="?database="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==") no-repeat scroll 2px bottom; padding-left:22px;}
36 | html/*\*/>/*/*/body #content a[href*="&database="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
37 | html/*\*/>/*/*/body #content p a[href*="&schema="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
38 | html/*\*/>/*/*/body #content p a[href*="&tbsdesc="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
39 | html/*\*/>/*/*/body #content p a[href*="&sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ5SURBVHjapFNLaxNRFP4mnZmQZtKYpJ2I8ZE0NSbSWKpgBYNUhIJQUDddCaILwb34C0RcCi60vpa14sZFoSjxUWxTFEubFkxf9kFS+7Jp0yQmM5mH905SF9pSwQt3vnPnnvPNd86cA13Xsds+23XKsdMdQx//s0z/6hi54he3e8/0d3ZuK0FTFGhUJkVVhSbLUAiq5IxSCQrBEkGWOu8Lh38HGrlpWnlXCKhNSbZQo3cEE9FomYAuKZstE2wFa8RR1cpKqK2o4JhxmLVJVAlh5Df6IFj5MgENcHq9EAMBg2RucBDVLpdxVon0iXdvIf8sQHRIsNReht3XjI3ZI8iuPAOrkDyorBq3G6vT08ikUuAsFiN46HkXXL56eI41QV1/BMF+GulvCfCMDFvNXtSIHrC0KDTPhXgc7lAQdQ2thk2XIpewnkzCJvTA4T8PabEbfDWD+ZFxyEUdX94sw6QVCkZlxWAQU+8/YGZgALV+v0HgbWmBNzQMR0M7it8fg+HWwQk2cLkkcvJh5NNFsCVJMgq1ubiE5o4OI5CS8FYrya8b9saLKC48gIlTIG/6sBaLw3PpHrTEMrSXr4kPIaAKFkbjSA0PEVuFlB+DO8Ah2HoB8tITVPE6iplDWOn7jLn0CSQevoDV6TI+zEpUASkkZzaTYrLIrH3C/qMCFEbE4th9OEQexfQBrPYP44d+DuY91eBp+1dGgFVIDb729kKpdJfQtIy2yFNMdN/E5McYzAebUEhOYjZuQXaj5+9W/nOYbl9vLN26doOFScVI9BXmZ6dy9jpnpO1O5dfsRtBxxlk4Xu9mT4Z80DkpVlhZvdp+d3RmpyH7JcAAnHiAVYWMsdkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:24px;}
40 | html/*\*/>/*/*/body table tbody input[name*="check"] {display:block; float:left;}
41 | html/*\*/>/*/*/body table a[href*="&edit="][href*="&where"] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC") no-repeat scroll right bottom; padding-right:18px;}
42 | html/*\*/>/*/*/body table input + a[href*="&edit="][href*="&where"] {width:0; float:left; display:block; height:16px; overflow:hidden; text-decoration:none; padding:0 0 0 18px; background-position:2px bottom; margin-left:5px;}
43 | html/*\*/>/*/*/body table tbody td:first-child {white-space:normal;}
44 | html/*\*/>/*/*/body table thead input {margin-right: 5px;}
45 | html/*\*/>/*/*/body input[name="delete"], html/*\*/>/*/*/body input[name="drop"] {background:transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVHjapFM5bsJQEB2zSIDFJrHYpEtyAyoKJAp6CrqIkBPkNDlBAKXjBEgUpKOBCyQNijFiEZvZl8z7wsjESYpkpNFfPO/Nmz9j6Xg80n/M9fWi3W7fMOnd4XAo8qogAbvO5xKvL6lU6s0aL1kVMDjP5ye/36+Gw2FyOp3EQFqtVtTr9WixWHT5/JhOp6s2ghP4ORaLyaFQiGazGa3Xa0HgdrvJ6/WSpmk0Go0MjnvIZDLVM0Gr1brm/WskEkkA3O/3abvdQjq5XC6xgoiVka7rNB6PNT6ns9nsu+OkpODxeBLBYJAGgwHt9/uzQ8Vms6Hdbie+KYqC+ASTFrARBMx2HwgEaDKZiHqn0yktl0uxtzrMMAyKx+MCc+4Cs13hwQCC1GQy+W3Lms2mUIUygbEqEBLNun8z8zswVgUfLO0WD4Z6kekn8/l8okNM8GFVUMYDoVWQ6HA4bEAzoyzL1O12kbRsJajwhYZhiUajJEnShWSAQaqqKnU6HahEGysXg9RoNPJ8+cwZZLSKp47m8/k5Kxzg4XBocNxDLper2ka5Xq+LUeatilahJLN1mEJ+ZDHKJthGAKvVauJnYi9ysHIqQee1xOsLg3/+mf5inwIMAJMhb74NwG5wAAAAAElFTkSuQmCC") no-repeat scroll left center; padding:1px 5px 1px 18px; border:0; cursor:pointer; font-size:.9em;}
46 | html/*\*/>/*/*/body input[name="delete"]:hover, html/*\*/>/*/*/body input[name="drop"]:hover {color:red; background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg==")}
47 | body{background-color:#eee}
48 | form{margin:0;overflow:auto}
49 | #breadcrumb{position:absolute;top:0;left:0;height:2.6em;margin:0;padding:5px 5px 0 22em;width:-moz-available!important;width: -webkit-fill-available !important;width:100%;line-height:1.6em;border:1px solid #444;white-space:nowrap;color:#fff;background:#7abcff;background:-moz-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#7abcff),color-stop(44%,#60abf8),color-stop(100%,#4096ee));background:-webkit-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-o-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-ms-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:linear-gradient(to bottom,#7abcff 0,#60abf8 44%,#4096ee 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7abcff',endColorstr='#4096ee',GradientType=0)}
50 | #menu,#content{background-color:#fff;border-radius:10px;border:1px solid #444;box-shadow:0 0 5px #999;margin:5em 1em 2em 0}
51 | #menu{position:absolute;top:0;left:0;margin-left:1em;padding:0 0 30px;width:19em}
52 | #content{border:1px solid #444;margin-left:21.5em;padding:10px 10px 30px 30px}
53 | #menu h1,#content h2{line-height:44px;margin:0;padding:0 20px;border-bottom:1px solid #000;border-radius:9px 9px 0 0;display:block;color:#FFF;background:#1e5799;background:-moz-linear-gradient(top,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#1e5799),color-stop(50%,#2989d8),color-stop(51%,#207cca),color-stop(100%,#7db9e8));background:-webkit-linear-gradient(top,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);background:-o-linear-gradient(top,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);background:-ms-linear-gradient(top,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);background:linear-gradient(to bottom,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#1e5799',endColorstr='#7db9e8',GradientType=0)}
54 | #menu h1,#menu h1 a,#menu h1 span{color:#fff}
55 | #menu h1{line-height:41px}
56 | #content h2{font-weight:normal;position:relative;left:-30px;top:-10px;height:44px;width:100%}
57 | table{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;border-color:#999 -moz-use-text-color -moz-use-text-color #999;border-image:none;border-right:0 none;border-style:solid none none solid;border-width:1px 0 0 1px;font-size:90%;margin:1em 20px 0 0}
58 | td,th{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;border-color:-moz-use-text-color #999 #999 -moz-use-text-color;border-image:none;border-style:none solid solid none;border-width:0 1px 1px 0;padding:.2em .3em}
59 | thead td,thead th{background:#eee;background:-moz-linear-gradient(top,#eee 0,#ccc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#eee),color-stop(100%,#ccc));background:-webkit-linear-gradient(top,#eee 0,#ccc 100%);background:-o-linear-gradient(top,#eee 0,#ccc 100%);background:-ms-linear-gradient(top,#eee 0,#ccc 100%);background:linear-gradient(to bottom,#eee 0,#ccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee',endColorstr='#cccccc',GradientType=0)}
60 | td{background-color:#f4f8ff}
61 | .odd td{background-color:#fff}
62 | tbody tr:hover td,tbody tr:hover th{background-color:#FFE}
63 | p.tabs{margin:0 20px 0 0}
64 | .jush-sql{background:0}
65 | fieldset{border:1px solid #999;border-radius:5px;display:inline;margin:.8em .5em 0 0;padding:.5em .8em;vertical-align:top}
66 | a{color:#369}
67 | a:hover{color:#28c}
68 | #logout,#logins a,#logins a:link,#breadcrumb a,#breadcrumb a:link,.logout a,.logout a:link,.tabs a,.tabs a:link{display:inline-block;border:1px solid #667eac;border-radius:4px;padding:3px 8px;margin:2px 0;vertical-align:middle;text-decoration:none;color:#fff;background:#7abcff;background:-moz-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#7abcff),color-stop(44%,#60abf8),color-stop(100%,#4096ee));background:-webkit-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-o-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-ms-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:linear-gradient(to bottom,#7abcff 0,#60abf8 44%,#4096ee 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7abcff',endColorstr='#4096ee',GradientType=0)}
69 | .logout a,.logout a:link,#logout{padding:3px 4px}
70 | #logout:hover,#logins a:hover,#tables a:hover,#breadcrumb a:hover,.logout a:hover,.tabs a:hover{color:#fff;text-decoration:none;background:#93c9ff;background:-moz-linear-gradient(top,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#93c9ff),color-stop(44%,#79b8f7),color-stop(100%,#57a2ed));background:-webkit-linear-gradient(top,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);background:-o-linear-gradient(top,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);background:-ms-linear-gradient(top,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);background:linear-gradient(to bottom,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#93c9ff',endColorstr='#57a2ed',GradientType=0)}
71 | #breadcrumb a,#breadcrumb a:link{border:1px solid #246;padding:2px 6px;margin:1px auto;line-height:1.6em}
72 | #logins a,#tables a{background:none repeat scroll 0 0 #fff;padding:2px 6px;margin:1px 0;font-size:.8em}
73 | a[title='Show structure'],#tables a[title='Show structure']{border:0;background:0;color:#369}
74 | .jush a{border:0;background:0;margin:0;padding:0}
75 | a.active,a.active:link,a.active:hover{text-decoration:underline}
76 |
--------------------------------------------------------------------------------
/elm.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "application",
3 | "source-directories": [
4 | "src/elm"
5 | ],
6 | "elm-version": "0.19.1",
7 | "dependencies": {
8 | "direct": {
9 | "TSFoster/elm-uuid": "4.0.1",
10 | "elm/browser": "1.0.2",
11 | "elm/core": "1.0.5",
12 | "elm/html": "1.0.0",
13 | "elm/json": "1.1.3",
14 | "elm/random": "1.0.0",
15 | "elm/time": "1.0.0",
16 | "elm-community/list-extra": "8.2.4"
17 | },
18 | "indirect": {
19 | "TSFoster/elm-bytes-extra": "1.3.0",
20 | "TSFoster/elm-md5": "2.0.0",
21 | "TSFoster/elm-sha1": "2.1.1",
22 | "danfishgold/base64-bytes": "1.0.3",
23 | "elm/bytes": "1.0.8",
24 | "elm/url": "1.0.0",
25 | "elm/virtual-dom": "1.0.2",
26 | "rtfeldman/elm-hex": "1.0.0",
27 | "zwilias/elm-utf-tools": "2.0.1"
28 | }
29 | },
30 | "test-dependencies": {
31 | "direct": {
32 | "elm-explorations/test": "1.2.2"
33 | },
34 | "indirect": {}
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "eledminer",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "./src/main.js",
6 | "scripts": {
7 | "start": "npx electron .",
8 | "release": "npm run build && npm run package",
9 | "package": "npx electron-packager . eledminer --platform=darwin --arch=x64 --overwrite",
10 | "build": "npm run build:elm",
11 | "build:elm": "npm run build:elm:home && npm run build:elm:menu && npm run build:elm:settings",
12 | "build:elm:home": "npx elm make src/elm/Home.elm --output ./dst/home.js",
13 | "build:elm:menu": "npx elm make src/elm/Menu.elm --output ./dst/menu.js",
14 | "build:elm:settings": "npx elm make src/elm/Settings.elm --output ./dst/settings.js",
15 | "test": "npm run test:elm",
16 | "test:elm": "npx elm-test"
17 | },
18 | "author": "lusingander",
19 | "license": "MIT",
20 | "devDependencies": {
21 | "electron": "^11.0.0",
22 | "electron-packager": "^15.2.0",
23 | "elm": "^0.19.1-5",
24 | "elm-test": "^0.19.1-revision6"
25 | },
26 | "dependencies": {
27 | "electron-store": "^7.0.2",
28 | "execa": "^5.0.0",
29 | "php-server-manager": "^1.3.3"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/resource/bulma/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2020 Jeremy Thomas
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/resource/fontawesome/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Font Awesome Free License
2 | -------------------------
3 |
4 | Font Awesome Free is free, open source, and GPL friendly. You can use it for
5 | commercial projects, open source projects, or really almost whatever you want.
6 | Full Font Awesome Free license: https://fontawesome.com/license/free.
7 |
8 | # Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
9 | In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
10 | packaged as SVG and JS file types.
11 |
12 | # Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
13 | In the Font Awesome Free download, the SIL OFL license applies to all icons
14 | packaged as web and desktop font files.
15 |
16 | # Code: MIT License (https://opensource.org/licenses/MIT)
17 | In the Font Awesome Free download, the MIT license applies to all non-font and
18 | non-icon files.
19 |
20 | # Attribution
21 | Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
22 | Awesome Free files already contain embedded comments with sufficient
23 | attribution, so you shouldn't need to do anything additional when using these
24 | files normally.
25 |
26 | We've kept attribution comments terse, so we ask that you do not actively work
27 | to remove them from files, especially code. They're a great way for folks to
28 | learn about Font Awesome.
29 |
30 | # Brand Icons
31 | All brand icons are trademarks of their respective owners. The use of these
32 | trademarks does not indicate endorsement of the trademark holder by Font
33 | Awesome, nor vice versa. **Please do not use brand logos for any purpose except
34 | to represent the company, product, or service to which they refer.**
35 |
--------------------------------------------------------------------------------
/resource/fontawesome/webfonts/fa-brands-400.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/fontawesome/webfonts/fa-brands-400.eot
--------------------------------------------------------------------------------
/resource/fontawesome/webfonts/fa-brands-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/fontawesome/webfonts/fa-brands-400.ttf
--------------------------------------------------------------------------------
/resource/fontawesome/webfonts/fa-brands-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/fontawesome/webfonts/fa-brands-400.woff
--------------------------------------------------------------------------------
/resource/fontawesome/webfonts/fa-brands-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/fontawesome/webfonts/fa-brands-400.woff2
--------------------------------------------------------------------------------
/resource/fontawesome/webfonts/fa-regular-400.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/fontawesome/webfonts/fa-regular-400.eot
--------------------------------------------------------------------------------
/resource/fontawesome/webfonts/fa-regular-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/fontawesome/webfonts/fa-regular-400.ttf
--------------------------------------------------------------------------------
/resource/fontawesome/webfonts/fa-regular-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/fontawesome/webfonts/fa-regular-400.woff
--------------------------------------------------------------------------------
/resource/fontawesome/webfonts/fa-regular-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/fontawesome/webfonts/fa-regular-400.woff2
--------------------------------------------------------------------------------
/resource/fontawesome/webfonts/fa-solid-900.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/fontawesome/webfonts/fa-solid-900.eot
--------------------------------------------------------------------------------
/resource/fontawesome/webfonts/fa-solid-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/fontawesome/webfonts/fa-solid-900.ttf
--------------------------------------------------------------------------------
/resource/fontawesome/webfonts/fa-solid-900.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/fontawesome/webfonts/fa-solid-900.woff
--------------------------------------------------------------------------------
/resource/fontawesome/webfonts/fa-solid-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/fontawesome/webfonts/fa-solid-900.woff2
--------------------------------------------------------------------------------
/resource/images/connections.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/images/connections.png
--------------------------------------------------------------------------------
/resource/images/image.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/images/image.gif
--------------------------------------------------------------------------------
/resource/images/sqlite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lusingander/eledminer/52d3ff9ef8ad81f6ce9c32b27033f61ec6dd4682/resource/images/sqlite.png
--------------------------------------------------------------------------------
/src/adminer.js:
--------------------------------------------------------------------------------
1 | const request = require("request");
2 | const PHPServer = require("php-server-manager");
3 | const path = require("path");
4 | const Const = require("./const");
5 | const { UserSettings } = require("./store");
6 | const { canExecutePHP } = require("./php");
7 |
8 | class AdminerServer {
9 | constructor() {
10 | const userSettings = UserSettings.load();
11 | this.server = new PHPServer({
12 | port: userSettings.port,
13 | directory: path.join(__dirname, ".."),
14 | directives: {
15 | display_errors: 1,
16 | expose_php: 1,
17 | },
18 | env: {
19 | ELEDMINER_SETTINGS_THEME: userSettings.theme,
20 | },
21 | });
22 | if (userSettings.php) {
23 | this.server.php = userSettings.php;
24 | }
25 | this.running = false;
26 | }
27 |
28 | run = () => {
29 | this.server.run();
30 | this.running = true;
31 | };
32 |
33 | close = () => {
34 | this.server.close();
35 | this.running = false;
36 | };
37 |
38 | host = () => this.server.host;
39 |
40 | port = () => this.server.port;
41 |
42 | canStart = () => canExecutePHP(this.server.php);
43 | }
44 |
45 | module.exports = {
46 | newServer: () => new AdminerServer(),
47 |
48 | loginAndGetConnectionInfo: (args) => {
49 | return new Promise((resolve, reject) => {
50 | const baseUrl = args.baseUrl;
51 | const driver = args.driver;
52 | const server = args.server;
53 | const username = args.username;
54 | const password = args.password;
55 | const filepath = args.filepath;
56 |
57 | let formData;
58 | if (driver === "sqlite" || driver === "sqlite2") {
59 | formData = {
60 | "auth[driver]": driver,
61 | "auth[username]": "",
62 | "auth[password]": Const.sqliteDummyPassword,
63 | "auth[db]": filepath,
64 | };
65 | } else {
66 | formData = {
67 | "auth[driver]": driver,
68 | "auth[server]": server,
69 | "auth[username]": username,
70 | "auth[password]": password,
71 | };
72 | }
73 | const options = { url: baseUrl, method: "POST", form: formData };
74 |
75 | request(options, (error, response, body) => {
76 | if (error) {
77 | return reject(error);
78 | }
79 | const statusCode = response["statusCode"];
80 | if (statusCode !== 302) {
81 | return reject();
82 | }
83 | const cookieStr = response["headers"]["set-cookie"][0];
84 | const location = response["headers"]["location"];
85 | const adminerSid = cookieStr.match("adminer_sid=([^¥S;]*)")[1];
86 | return resolve({
87 | redirectUrl: baseUrl + location,
88 | cookie: {
89 | url: baseUrl,
90 | name: "adminer_sid",
91 | value: adminerSid,
92 | },
93 | });
94 | });
95 | });
96 | },
97 |
98 | checkConnection: (conn) => {
99 | return new Promise((resolve, reject) => {
100 | const cookie = request.cookie(`${conn.cookie.name}=${conn.cookie.value}`);
101 | const headers = {
102 | Cookie: cookie,
103 | };
104 | const options = {
105 | url: conn.redirectUrl,
106 | method: "GET",
107 | headers: headers,
108 | };
109 | request(options, (error, response, body) => {
110 | if (error) {
111 | return reject(error);
112 | }
113 | const statusCode = response["statusCode"];
114 | if (statusCode !== 200) {
115 | return reject();
116 | }
117 | resolve(conn);
118 | });
119 | });
120 | },
121 | };
122 |
--------------------------------------------------------------------------------
/src/const.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | sqliteDummyPassword: "dummy",
3 | };
4 |
--------------------------------------------------------------------------------
/src/elm/Connection.elm:
--------------------------------------------------------------------------------
1 | module Connection exposing
2 | ( Connection(..)
3 | , ConnectionFields
4 | , DefaultConnectionSetting
5 | , SqliteConnectionSetting
6 | , connectionDecoder
7 | , connectionsDecoder
8 | , defaultConnectionSettingDecoder
9 | , emptyConnection
10 | , encodeConnection
11 | , id
12 | , initConnectionFields
13 | , setPassword
14 | , sqliteConnectionSettingDecoder
15 | , system
16 | , toConnection
17 | , toConnectionFields
18 | )
19 |
20 | import Json.Decode as JD
21 | import Json.Encode as JE
22 |
23 |
24 | type alias ConnectionFields =
25 | { id : String
26 | , system : String
27 | , name : String
28 | , hostname : String
29 | , portStr : String
30 | , username : String
31 | , password : String
32 | , savePassword : Maybe Bool
33 | , filepath : String
34 | }
35 |
36 |
37 | initConnectionFields : ConnectionFields
38 | initConnectionFields =
39 | { id = ""
40 | , system = "server"
41 | , name = ""
42 | , hostname = ""
43 | , portStr = ""
44 | , username = ""
45 | , password = ""
46 | , filepath = ""
47 | , savePassword = Just True
48 | }
49 |
50 |
51 | toConnectionFields : Connection -> ConnectionFields
52 | toConnectionFields c =
53 | case c of
54 | DefaultConnection s ->
55 | { id = s.id
56 | , system = s.system
57 | , name = s.name
58 | , hostname = s.hostname
59 | , portStr = s.portStr
60 | , username = s.username
61 | , password = s.password
62 | , savePassword = Just s.savePassword
63 | , filepath = ""
64 | }
65 |
66 | SqliteConnection s ->
67 | { id = s.id
68 | , system = s.system
69 | , name = s.name
70 | , hostname = ""
71 | , portStr = ""
72 | , username = ""
73 | , password = ""
74 | , savePassword = Nothing
75 | , filepath = s.filepath
76 | }
77 |
78 |
79 | toConnection : ConnectionFields -> Connection
80 | toConnection c =
81 | if c.system == "sqlite" || c.system == "sqlite2" then
82 | SqliteConnection
83 | { id = c.id
84 | , system = c.system
85 | , name = c.name
86 | , filepath = c.filepath
87 | }
88 |
89 | else
90 | DefaultConnection
91 | { id = c.id
92 | , system = c.system
93 | , name = c.name
94 | , hostname = c.hostname
95 | , portStr = c.portStr
96 | , username = c.username
97 | , password = c.password
98 | , savePassword = c.savePassword |> Maybe.withDefault True
99 | }
100 |
101 |
102 | type Connection
103 | = DefaultConnection DefaultConnectionSetting
104 | | SqliteConnection SqliteConnectionSetting
105 |
106 |
107 | emptyConnection : Connection
108 | emptyConnection =
109 | DefaultConnection
110 | { id = ""
111 | , system = "server"
112 | , name = ""
113 | , hostname = ""
114 | , portStr = ""
115 | , username = ""
116 | , password = ""
117 | , savePassword = True
118 | }
119 |
120 |
121 | id : Connection -> String
122 | id c =
123 | case c of
124 | DefaultConnection s ->
125 | s.id
126 |
127 | SqliteConnection s ->
128 | s.id
129 |
130 |
131 | system : Connection -> String
132 | system c =
133 | case c of
134 | DefaultConnection s ->
135 | s.system
136 |
137 | SqliteConnection s ->
138 | s.system
139 |
140 |
141 | setPassword : String -> Connection -> Connection
142 | setPassword password conn =
143 | case conn of
144 | DefaultConnection s ->
145 | DefaultConnection
146 | { s
147 | | password = password
148 | , savePassword = True
149 | }
150 |
151 | _ ->
152 | conn
153 |
154 |
155 | connectionsDecoder : JD.Decoder (List Connection)
156 | connectionsDecoder =
157 | JD.list connectionDecoder
158 |
159 |
160 | connectionDecoder : JD.Decoder Connection
161 | connectionDecoder =
162 | JD.oneOf
163 | [ JD.map DefaultConnection defaultConnectionSettingDecoder
164 | , JD.map SqliteConnection sqliteConnectionSettingDecoder
165 | ]
166 |
167 |
168 | encodeConnection : Connection -> JE.Value
169 | encodeConnection c =
170 | case c of
171 | DefaultConnection s ->
172 | encodeDefaultConnection s
173 |
174 | SqliteConnection s ->
175 | encodeSqliteConnection s
176 |
177 |
178 | type alias DefaultConnectionSetting =
179 | { id : String
180 | , system : String
181 | , name : String
182 | , hostname : String
183 | , portStr : String
184 | , username : String
185 | , password : String
186 | , savePassword : Bool
187 | }
188 |
189 |
190 | defaultConnectionSettingDecoder : JD.Decoder DefaultConnectionSetting
191 | defaultConnectionSettingDecoder =
192 | JD.map8 DefaultConnectionSetting
193 | (JD.field "id" JD.string)
194 | (JD.field "driver" JD.string)
195 | (JD.field "name" JD.string)
196 | (JD.field "hostname" JD.string)
197 | (JD.field "port" JD.string)
198 | (JD.field "username" JD.string)
199 | (JD.field "password" JD.string)
200 | (JD.field "savePassword" JD.bool)
201 |
202 |
203 | encodeDefaultConnection : DefaultConnectionSetting -> JE.Value
204 | encodeDefaultConnection c =
205 | let
206 | password =
207 | if c.savePassword then
208 | c.password
209 |
210 | else
211 | ""
212 | in
213 | JE.object
214 | [ ( "type", JE.string "default" )
215 | , ( "id", JE.string c.id )
216 | , ( "driver", JE.string c.system )
217 | , ( "name", JE.string c.name )
218 | , ( "hostname", JE.string c.hostname )
219 | , ( "port", JE.string c.portStr )
220 | , ( "username", JE.string c.username )
221 | , ( "password", JE.string password )
222 | , ( "savePassword", JE.bool c.savePassword )
223 | ]
224 |
225 |
226 | type alias SqliteConnectionSetting =
227 | { id : String
228 | , system : String
229 | , name : String
230 | , filepath : String
231 | }
232 |
233 |
234 | sqliteConnectionSettingDecoder : JD.Decoder SqliteConnectionSetting
235 | sqliteConnectionSettingDecoder =
236 | JD.map4 SqliteConnectionSetting
237 | (JD.field "id" JD.string)
238 | (JD.field "driver" JD.string)
239 | (JD.field "name" JD.string)
240 | (JD.field "filepath" JD.string)
241 |
242 |
243 | encodeSqliteConnection : SqliteConnectionSetting -> JE.Value
244 | encodeSqliteConnection c =
245 | JE.object
246 | [ ( "type", JE.string "sqlite" )
247 | , ( "id", JE.string c.id )
248 | , ( "driver", JE.string c.system )
249 | , ( "name", JE.string c.name )
250 | , ( "filepath", JE.string c.filepath )
251 | ]
252 |
--------------------------------------------------------------------------------
/src/elm/Menu.elm:
--------------------------------------------------------------------------------
1 | port module Menu exposing (main)
2 |
3 | import Browser
4 | import Html exposing (Html, div, i, span)
5 | import Html.Attributes exposing (class)
6 | import Html.Events exposing (onClick)
7 |
8 |
9 | port home : () -> Cmd msg
10 |
11 |
12 | port settings : () -> Cmd msg
13 |
14 |
15 | main : Program () Model Msg
16 | main =
17 | Browser.element
18 | { init = init
19 | , update = update
20 | , view = view
21 | , subscriptions = subscriptions
22 | }
23 |
24 |
25 | type alias Model =
26 | {}
27 |
28 |
29 | init : () -> ( Model, Cmd msg )
30 | init _ =
31 | ( initModel
32 | , Cmd.none
33 | )
34 |
35 |
36 | initModel : Model
37 | initModel =
38 | {}
39 |
40 |
41 | type Msg
42 | = OnClickHome
43 | | OnClickSettings
44 |
45 |
46 | update : Msg -> Model -> ( Model, Cmd Msg )
47 | update msg model =
48 | case msg of
49 | OnClickHome ->
50 | ( model
51 | , home ()
52 | )
53 |
54 | OnClickSettings ->
55 | ( model
56 | , settings ()
57 | )
58 |
59 |
60 | subscriptions : Model -> Sub Msg
61 | subscriptions _ =
62 | Sub.none
63 |
64 |
65 | view : Model -> Html Msg
66 | view _ =
67 | div [ class "menu-area" ]
68 | [ div [ onClick OnClickHome ]
69 | [ span [ class "icon btn-icon" ] [ i [ class "fas fa-home" ] [] ] ]
70 | , div [ onClick OnClickSettings ]
71 | [ span [ class "icon btn-icon btn-icon-bottom" ] [ i [ class "fas fa-cog" ] [] ] ]
72 | ]
73 |
--------------------------------------------------------------------------------
/src/index.php:
--------------------------------------------------------------------------------
1 | ({
36 | x: menuViewWidth,
37 | y: 0,
38 | width: w - menuViewWidth,
39 | height: h,
40 | });
41 | const menuContentBounds = (h) => ({
42 | x: 0,
43 | y: 0,
44 | width: menuViewWidth,
45 | height: h,
46 | });
47 | const zeroContentBounds = () => ({ x: 0, y: 0, width: 0, height: 0 });
48 |
49 | mainWindow = new BrowserWindow({
50 | width: defaultWindowWidth,
51 | height: defaultWindowHeight,
52 | useContentSize: true,
53 | });
54 | mainWindow.setMinimumSize(minWindowWidth, minWindowHeight);
55 |
56 | const newBrowserView = (preload) => {
57 | const options = preload
58 | ? {
59 | webPreferences: {
60 | nodeIntegration: false,
61 | preload: `${__dirname}/preload.js`,
62 | },
63 | }
64 | : {};
65 | const view = new BrowserView(options);
66 | mainWindow.addBrowserView(view);
67 | return view;
68 | };
69 |
70 | const menuView = newBrowserView(true);
71 | menuView.setBounds(menuContentBounds(mainWindow.getContentSize()[1]));
72 | menuView.setAutoResize({
73 | height: true,
74 | });
75 | menuView.webContents.loadURL("file://" + __dirname + "/view/menu.html");
76 |
77 | const homeView = newBrowserView(true);
78 | homeView.setBounds(mainContentBounds(...mainWindow.getContentSize()));
79 | homeView.setAutoResize({
80 | width: true,
81 | height: true,
82 | });
83 | const homeUrl = "file://" + __dirname + "/view/home.html";
84 | homeView.webContents.loadURL(homeUrl);
85 |
86 | const mainView = newBrowserView(false);
87 | mainView.setBounds(zeroContentBounds());
88 | mainView.setAutoResize({
89 | width: true,
90 | height: true,
91 | });
92 | mainView.webContents.loadURL(baseUrl);
93 |
94 | mainWindow.on("closed", function() {
95 | server.close();
96 | mainWindow = null;
97 | });
98 |
99 | let settingsView;
100 | const createSettingsView = () => {
101 | settingsView = newBrowserView(true);
102 |
103 | settingsView.setBounds(mainContentBounds(...mainWindow.getContentSize()));
104 | settingsView.setAutoResize({
105 | width: true,
106 | height: true,
107 | });
108 | settingsView.webContents.loadURL(
109 | "file://" + __dirname + "/view/settings.html"
110 | );
111 | };
112 |
113 | const openSettings = () => {
114 | if (!settingsView) {
115 | createSettingsView();
116 | }
117 | mainView.setBounds(zeroContentBounds());
118 | homeView.setBounds(zeroContentBounds());
119 | };
120 |
121 | const closeSettings = () => {
122 | if (settingsView) {
123 | mainWindow.removeBrowserView(settingsView);
124 | settingsView.webContents.destroy();
125 | settingsView = null;
126 | }
127 | mainView.setBounds(zeroContentBounds());
128 | homeView.setBounds(mainContentBounds(...mainWindow.getContentSize()));
129 | };
130 |
131 | const openAdminerView = () => {
132 | homeView.setBounds(zeroContentBounds());
133 | mainView.setBounds(mainContentBounds(...mainWindow.getContentSize()));
134 | };
135 |
136 | ipcMain.on("HOME", () => {
137 | mainView.webContents.loadURL(homeUrl);
138 | closeSettings();
139 | });
140 |
141 | ipcMain.on("SETTINGS", () => {
142 | openSettings();
143 | });
144 |
145 | ipcMain.on("HOME_LOADED", (event) => {
146 | event.reply("HOME_LOADED_REPLY", Connections.load());
147 | });
148 |
149 | ipcMain.on("SETTINGS_LOADED", (event) => {
150 | event.reply("SETTINGS_LOADED_REPLY", UserSettings.load());
151 | });
152 |
153 | ipcMain.on("SETTINGS_SAVE", (event, args) => {
154 | UserSettings.save(args.settings);
155 | if (args.restart) {
156 | app.relaunch();
157 | app.exit();
158 | }
159 | });
160 |
161 | ipcMain.on("SETTINGS_CANCEL", () => {
162 | closeSettings();
163 | });
164 |
165 | ipcMain.on("OPEN_CONNECTION", (event, args) => {
166 | if (!server.running) {
167 | event.reply("PHP_SERVER_NOT_RUNNING");
168 | return;
169 | }
170 | Adminer.loginAndGetConnectionInfo({
171 | baseUrl: `http://localhost:${server.port()}/src/`,
172 | driver: args.driver,
173 | server: `${args.hostname}:${args.port}`,
174 | username: args.username,
175 | password: args.password,
176 | filepath: args.filepath,
177 | })
178 | .then(Adminer.checkConnection)
179 | .then((result) =>
180 | mainWindow.webContents.session.cookies
181 | .set(result.cookie)
182 | .then(() => mainView.webContents.loadURL(result.redirectUrl))
183 | )
184 | .then(openAdminerView)
185 | .catch((err) => event.reply("OPEN_CONNECTION_FAILURE")) // TODO: show detail
186 | .finally(() => event.reply("OPEN_CONNECTION_COMPLETE"));
187 | });
188 |
189 | ipcMain.on("SAVE_NEW_CONNECTION", (event, args) => {
190 | const newConnection = args;
191 | Connections.save(args);
192 | event.reply("SAVE_NEW_CONNECTION_SUCCESS", newConnection);
193 | });
194 |
195 | ipcMain.on("SAVE_EDIT_CONNECTION", (event, args) => {
196 | const newConnection = args;
197 | Connections.update(newConnection);
198 | event.reply("SAVE_EDIT_CONNECTION_SUCCESS", newConnection);
199 | });
200 |
201 | ipcMain.on("REMOVE_CONNECTION", (event, args) => {
202 | const id = args;
203 | Connections.removeConnection(id);
204 | event.reply("REMOVE_CONNECTION_SUCCESS", id);
205 | });
206 |
207 | ipcMain.on("OPEN_ADMINER_HOME", (event) => {
208 | if (!server.running) {
209 | event.reply("PHP_SERVER_NOT_RUNNING");
210 | return;
211 | }
212 | mainView.webContents.loadURL(baseUrl);
213 | openAdminerView();
214 | });
215 |
216 | ipcMain.on("OPEN_SQLITE_FILE_DIALOG", (event) => {
217 | const result = dialog.showOpenDialogSync(mainWindow, {
218 | properties: ["openFile"],
219 | });
220 | if (result) {
221 | event.reply("OPEN_SQLITE_FILE_DIALOG_SUCCESS", result[0]);
222 | }
223 | });
224 |
225 | ipcMain.on("OPEN_PHP_EXECUTABLE_PATH_FILE_DIALOG", (event) => {
226 | const result = dialog.showOpenDialogSync(mainWindow, {
227 | properties: ["openFile"],
228 | });
229 | if (result) {
230 | event.reply("OPEN_PHP_EXECUTABLE_PATH_FILE_DIALOG_SUCCESS", result[0]);
231 | }
232 | });
233 |
234 | ipcMain.on("VERIFY_PHP_EXECUTABLE_PATH", (event, args) => {
235 | const php = args || "php";
236 | const ret = canExecutePHP(php);
237 | event.reply("VERIFY_PHP_EXECUTABLE_PATH_SUCCESS", ret);
238 | });
239 | }
240 |
241 | app.on("activate", function() {
242 | if (mainWindow === null) {
243 | createWindow();
244 | }
245 | });
246 |
247 | app.on("ready", createWindow);
248 |
--------------------------------------------------------------------------------
/src/php.js:
--------------------------------------------------------------------------------
1 | const execa = require("execa");
2 |
3 | module.exports = {
4 | // ref: https://github.com/felixfbecker/vscode-php-intellisense/blob/master/src/extension.ts
5 | canExecutePHP: (php) => {
6 | try {
7 | const result = execa.sync(php, ["--version"]);
8 | const match = result.stdout.match(/^PHP 7/);
9 | return result.exitCode === 0 && !!match;
10 | } catch (e) {
11 | return false;
12 | }
13 | },
14 | };
15 |
--------------------------------------------------------------------------------
/src/preload.js:
--------------------------------------------------------------------------------
1 | const home = require("../dst/home.js");
2 | const menu = require("../dst/menu.js");
3 | const settings = require("../dst/settings.js");
4 | const { ipcRenderer } = require("electron");
5 |
6 | window.home = home;
7 | window.menu = menu;
8 | window.settings = settings;
9 | window.ipcRenderer = ipcRenderer;
10 |
--------------------------------------------------------------------------------
/src/store.js:
--------------------------------------------------------------------------------
1 | const Store = require("electron-store");
2 |
3 | module.exports = {
4 | UserSettings: class UserSettings {
5 | static load() {
6 | const store = new Store();
7 | return new UserSettings({
8 | php: store.get("general.php", ""),
9 | port: store.get("general.port", 8000),
10 | theme: store.get("appearance.theme", "default"),
11 | });
12 | }
13 |
14 | static save(params) {
15 | const store = new Store();
16 | store.set("general.php", params.php);
17 | store.set("general.port", params.port);
18 | store.set("appearance.theme", params.theme);
19 | }
20 |
21 | constructor(params) {
22 | this.php = params.php;
23 | this.port = params.port;
24 | this.theme = params.theme;
25 | }
26 | },
27 |
28 | Connections: class Connections {
29 | static load() {
30 | const store = new Store();
31 | return store.get("connections", []);
32 | }
33 |
34 | static save(conn) {
35 | const connections = Connections.load();
36 | connections.unshift(conn);
37 | const store = new Store();
38 | store.set("connections", connections);
39 | }
40 |
41 | static update(conn) {
42 | const connections = Connections.load();
43 | const newConenctions = connections.map((c) =>
44 | c.id === conn.id ? conn : c
45 | );
46 | const store = new Store();
47 | store.set("connections", newConenctions);
48 | }
49 |
50 | static removeConnection(id) {
51 | const connections = Connections.load();
52 | const newConnections = connections.filter((c) => c.id !== id);
53 | const store = new Store();
54 | store.set("connections", newConnections);
55 | }
56 | },
57 | };
58 |
--------------------------------------------------------------------------------
/src/view/home.css:
--------------------------------------------------------------------------------
1 | .card-icon-title {
2 | cursor: pointer;
3 | }
4 |
5 | .card-icon-title:hover {
6 | color: hsl(217, 71%, 53%); /* has-text-link */
7 | }
8 |
9 | .card-icon-edit {
10 | color: hsl(0, 0%, 86%); /* has-text-grey-lighter */
11 | cursor: pointer;
12 | }
13 |
14 | .card-icon-edit:hover {
15 | color: hsl(171, 100%, 41%); /* has-text-primary */
16 | }
17 |
18 | .card-icon-danger {
19 | color: hsl(0, 0%, 86%);
20 | cursor: pointer;
21 | }
22 |
23 | .card-icon-danger:hover {
24 | color: hsl(348, 100%, 61%); /* has-text-danger */
25 | }
26 |
27 | .loader-wrapper {
28 | visibility: hidden;
29 | position: absolute;
30 | top: 0;
31 | left: 0;
32 | height: 100%;
33 | width: 100%;
34 | background: #fff;
35 | opacity: 0;
36 | z-index: -1;
37 | transition: opacity .3s;
38 | display: flex;
39 | justify-content: center;
40 | align-items: center;
41 | border-radius: 6px;
42 | }
43 |
44 | .loader-wrapper .loader {
45 | height: 100px;
46 | width: 100px;
47 | }
48 |
49 | .loader-wrapper.is-active {
50 | visibility: visible;
51 | opacity: 0.7;
52 | z-index: 9999;
53 | }
--------------------------------------------------------------------------------
/src/view/home.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |