vines-services 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. data/Gemfile +3 -0
  2. data/{README → README.md} +19 -9
  3. data/Rakefile +20 -113
  4. data/{web/coffeescripts → app/assets/javascripts}/api.coffee +1 -1
  5. data/{web/coffeescripts/init.coffee → app/assets/javascripts/application.coffee} +9 -0
  6. data/{web/coffeescripts → app/assets/javascripts}/commands.coffee +1 -1
  7. data/{web/coffeescripts → app/assets/javascripts}/files.coffee +1 -1
  8. data/{web/coffeescripts → app/assets/javascripts}/services.coffee +1 -1
  9. data/{web/coffeescripts → app/assets/javascripts}/setup.coffee +1 -1
  10. data/{web/coffeescripts → app/assets/javascripts}/systems.coffee +1 -1
  11. data/app/assets/stylesheets/application.css +9 -0
  12. data/{web → app/assets}/stylesheets/common.css +0 -0
  13. data/{web → app/assets}/stylesheets/files.css +0 -0
  14. data/{web → app/assets}/stylesheets/services.css +0 -0
  15. data/{web → app/assets}/stylesheets/setup.css +0 -0
  16. data/{web → app/assets}/stylesheets/systems.css +0 -0
  17. data/config.ru +12 -0
  18. data/lib/vines/services/command/init.rb +4 -1
  19. data/lib/vines/services/version.rb +1 -1
  20. data/{web/stylesheets/app.css → public/assets/application.css} +854 -395
  21. data/public/assets/application.js +10 -0
  22. data/{web → public}/images/default-service.png +0 -0
  23. data/{web → public}/images/linux.png +0 -0
  24. data/{web → public}/images/mac.png +0 -0
  25. data/{web → public}/images/run.png +0 -0
  26. data/{web → public}/images/windows.png +0 -0
  27. data/public/index.html +13 -0
  28. data/test/config_test.rb +1 -1
  29. data/test/priority_queue_test.rb +1 -1
  30. data/test/storage/couchdb_test.rb +1 -1
  31. data/test/vql/compiler_test.rb +1 -1
  32. data/test/vql/vql_test.rb +1 -1
  33. data/vines-services.gemspec +44 -0
  34. metadata +233 -59
  35. data/web/index.html +0 -17
  36. data/web/javascripts/api.js +0 -69
  37. data/web/javascripts/app.js +0 -2
  38. data/web/javascripts/commands.js +0 -28
  39. data/web/javascripts/files.js +0 -424
  40. data/web/javascripts/init.js +0 -27
  41. data/web/javascripts/services.js +0 -409
  42. data/web/javascripts/setup.js +0 -507
  43. data/web/javascripts/systems.js +0 -391
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -1,4 +1,4 @@
1
- == Welcome to Vines Services
1
+ # Welcome to Vines Services
2
2
 
3
3
  Vines Services are dynamically updated groups of systems based on criteria like
4
4
  hostname, installed software, operating system, etc. Send a command to the
@@ -13,22 +13,32 @@ be managed as one group.
13
13
 
14
14
  Additional documentation can be found at www.getvines.org.
15
15
 
16
- == Usage
16
+ ## Usage
17
17
 
18
- 1. gem install vines-services
19
- 2. vines-services init wonderland.lit
20
- 3. cd wonderland.lit && vines-services start
18
+ ```
19
+ $ gem install vines-services
20
+ $ vines-services init wonderland.lit
21
+ $ cd wonderland.lit && vines-services start
22
+ ```
21
23
 
22
- == Dependencies
24
+ ## Dependencies
23
25
 
24
- Vines Services requires Ruby 1.9.2 or better. Instructions for installing the
26
+ Vines Services requires Ruby 1.9.3 or better. Instructions for installing the
25
27
  needed OS packages, as well as Ruby itself, are available at
26
28
  http://www.getvines.org/ruby.
27
29
 
28
- == Contact
30
+ ## Development
31
+
32
+ ```
33
+ $ script/bootstrap
34
+ $ script/tests
35
+ $ script/server
36
+ ```
37
+
38
+ ## Contact
29
39
 
30
40
  * David Graham <david@negativecode.com>
31
41
 
32
- == License
42
+ ## License
33
43
 
34
44
  Vines Services is released under the MIT license. Check the LICENSE file for details.
data/Rakefile CHANGED
@@ -1,50 +1,15 @@
1
1
  require 'rake'
2
2
  require 'rake/clean'
3
3
  require 'rake/testtask'
4
- require 'rubygems/package_task'
5
- require 'nokogiri'
6
- require_relative 'lib/vines/services/version'
4
+ require './lib/vines/services/version'
7
5
 
8
- CLOBBER.include('pkg', 'web/javascripts', 'web/stylesheets/app.css')
6
+ CLOBBER.include('pkg', 'public/assets')
9
7
 
10
- spec = Gem::Specification.new do |s|
11
- s.name = "vines-services"
12
- s.version = Vines::Services::VERSION
8
+ directory 'pkg'
13
9
 
14
- s.summary = "An XMPP component that broadcasts shell commands to many agents."
15
- s.description = "Vines Services are dynamically updated groups of systems based
16
- on criteria like hostname, installed software, operating system, etc. Send a
17
- command to the service and it runs on every system in the group. Services, files
18
- and permissions are managed via the bundled web application."
19
-
20
- s.authors = ["David Graham"]
21
- s.email = %w[david@negativecode.com]
22
- s.homepage = "http://www.getvines.org"
23
-
24
- s.test_files = FileList["test/**/*"]
25
- s.executables = %w[vines-services]
26
- s.require_path = "lib"
27
-
28
- s.add_dependency "bcrypt-ruby", "~> 3.0.1"
29
- s.add_dependency "blather", "~> 0.5.12"
30
- s.add_dependency "citrus", "~> 2.4.0"
31
- s.add_dependency "couchrest_model", "~> 1.1.2"
32
- s.add_dependency "em-http-request", "~> 1.0.1"
33
- s.add_dependency "sqlite3", "~> 1.3.5"
34
- s.add_dependency "vines", ">= 0.4.0"
35
-
36
- s.add_development_dependency "minitest"
37
- s.add_development_dependency "rake"
38
-
39
- s.required_ruby_version = '>= 1.9.2'
40
- end
41
-
42
- # Set gem file list after CoffeeScripts have been compiled, so web/javascripts/
43
- # is included in the gem.
44
- task :gemprep do
45
- spec.files = FileList['[A-Z]*', '{bin,lib,conf,web}/**/*']
46
- Gem::PackageTask.new(spec).define
47
- Rake::Task['gem'].invoke
10
+ desc 'Build distributable packages'
11
+ task :build => [:pkg, :assets] do
12
+ system 'gem build vines-services.gemspec && mv vines-*.gem pkg/'
48
13
  end
49
14
 
50
15
  Rake::TestTask.new(:test) do |test|
@@ -53,80 +18,22 @@ Rake::TestTask.new(:test) do |test|
53
18
  test.warning = false
54
19
  end
55
20
 
56
- # Return an array of local, non-library, js includes.
57
- def scripts(doc)
58
- scripts = []
59
- doc.css('script').each do |node|
60
- file = node['src'].split('/').last()
61
- if node['src'].start_with?('javascripts/')
62
- scripts << file
63
- end
64
- end
65
- scripts
66
- end
67
-
68
- # Replace script tags with combined and minimized files.
69
- def rewrite_js(doc)
70
- doc.css('script').each {|node| node.remove }
71
- doc.css('head').each do |node|
72
- %w[/lib/javascripts/base.js javascripts/app.js].each do |src|
73
- script = doc.create_element('script',
74
- 'type' => 'text/javascript',
75
- 'src' => src)
76
- node.add_child(script)
77
- node.add_child(doc.create_text_node("\n"))
78
- end
79
- end
80
- end
21
+ desc 'Compile web assets'
22
+ task :assets do
23
+ require 'sprockets'
24
+ require 'vines/web'
81
25
 
82
- def stylesheets(doc)
83
- sheets = []
84
- doc.css('link[rel="stylesheet"]').each do |node|
85
- file = node['href'].split('/').last()
86
- if node['href'].start_with?('stylesheets/')
87
- sheets << file
88
- end
89
- end
90
- sheets
91
- end
26
+ env = Sprockets::Environment.new
27
+ env.cache = Sprockets::Cache::FileStore.new(Dir.tmpdir)
28
+ env.append_path 'app/assets/javascripts'
29
+ env.append_path 'app/assets/stylesheets'
30
+ Vines::Web.paths.each {|path| env.append_path path }
31
+ env.js_compressor = :uglifier
92
32
 
93
- def rewrite_css(doc)
94
- doc.css('link[rel="stylesheet"]').each {|node| node.remove }
95
- doc.css('head').each do |node|
96
- %w[/lib/stylesheets/base.css /lib/stylesheets/login.css stylesheets/app.css].each do |file|
97
- link = doc.create_element('link',
98
- 'rel' => 'stylesheet',
99
- 'href' => file)
100
- node.add_child(link)
101
- node.add_child(doc.create_text_node("\n"))
102
- end
33
+ assets = %w[application.js application.css]
34
+ assets.each do |asset|
35
+ env[asset].write_to "public/assets/#{asset}"
103
36
  end
104
37
  end
105
38
 
106
- task :compile do
107
- index = 'web/index.html'
108
- doc = Nokogiri::HTML(File.read(index))
109
- scripts, sheets = scripts(doc), stylesheets(doc)
110
-
111
- rewrite_js(doc)
112
- rewrite_css(doc)
113
-
114
- # save index.html before rewriting
115
- FileUtils.cp(index, '/tmp/index.html')
116
- File.open(index, 'w') {|f| f.write(doc.to_xml(:indent => 2)) }
117
-
118
- js_files = scripts.map {|f| "web/javascripts/#{f}"}.join(' ')
119
- css_files = sheets.map {|f| "web/stylesheets/#{f}"}.join(' ')
120
-
121
- sh %{coffee -c -b -o web/javascripts web/coffeescripts/*.coffee}
122
- sh %{cat #{js_files} | uglifyjs -nc > web/javascripts/app.js}
123
- sh %{cat #{css_files} > web/stylesheets/app.css}
124
- end
125
-
126
- task :cleanup do
127
- # move index.html back into place after gem packaging
128
- FileUtils.cp('/tmp/index.html', 'web/index.html')
129
- File.delete('/tmp/index.html')
130
- end
131
-
132
- task :default => [:clobber, :test, :compile, :gemprep, :cleanup]
39
+ task :default => [:clobber, :test, :build]
@@ -1,4 +1,4 @@
1
- class Api
1
+ class @Api
2
2
  USERS = 'http://getvines.com/protocol/users'
3
3
 
4
4
  constructor: (@session) ->
@@ -1,3 +1,12 @@
1
+ #= require vendor
2
+ #= require lib
3
+ #= require api
4
+ #= require commands
5
+ #= require systems
6
+ #= require services
7
+ #= require files
8
+ #= require setup
9
+
1
10
  $ ->
2
11
  session = new Session()
3
12
  nav = new NavBar(session)
@@ -1,4 +1,4 @@
1
- class Commands
1
+ class @Commands
2
2
  constructor: ->
3
3
  @buf = []
4
4
  @index = 0
@@ -1,4 +1,4 @@
1
- class FilesPage
1
+ class @FilesPage
2
2
  FILES = 'http://getvines.com/protocol/files'
3
3
  LABELS = 'http://getvines.com/protocol/files/labels'
4
4
 
@@ -1,4 +1,4 @@
1
- class ServicesPage
1
+ class @ServicesPage
2
2
  SERVICES = 'http://getvines.com/protocol/services'
3
3
  MEMBERS = 'http://getvines.com/protocol/services/members'
4
4
  SYSTEMS = 'http://getvines.com/protocol/systems'
@@ -1,4 +1,4 @@
1
- class SetupPage
1
+ class @SetupPage
2
2
  SERVICES = 'http://getvines.com/protocol/services'
3
3
  SYSTEMS = 'http://getvines.com/protocol/systems'
4
4
  USERS = 'http://getvines.com/protocol/users'
@@ -1,4 +1,4 @@
1
- class SystemsPage
1
+ class @SystemsPage
2
2
  constructor: (@session) ->
3
3
  @session.onRoster ( ) => this.roster()
4
4
  @session.onMessage (m) => this.message(m)
@@ -0,0 +1,9 @@
1
+ /*
2
+ *= require base
3
+ *= require login
4
+ *= require common
5
+ *= require files
6
+ *= require services
7
+ *= require setup
8
+ *= require systems
9
+ */
File without changes
File without changes
File without changes
File without changes
File without changes
data/config.ru ADDED
@@ -0,0 +1,12 @@
1
+ require 'sprockets'
2
+ require 'vines/web'
3
+
4
+ use Rack::Static, urls: ['/images'], root: 'public', index: 'index.html'
5
+
6
+ map '/assets' do
7
+ env = Sprockets::Environment.new
8
+ env.append_path 'app/assets/javascripts'
9
+ env.append_path 'app/assets/stylesheets'
10
+ Vines::Web.paths.each {|path| env.append_path path }
11
+ run env
12
+ end
@@ -39,8 +39,11 @@ module Vines
39
39
  FileUtils.mv(Dir.glob("#{@domain}/*"), '.')
40
40
  FileUtils.remove_dir(@domain)
41
41
  FileUtils.remove_dir('data')
42
- web = File.expand_path("../../../../../web", __FILE__)
42
+
43
+ `vines-web install web`
44
+ web = File.expand_path("../../../../../public", __FILE__)
43
45
  FileUtils.cp_r(Dir.glob("#{web}/*"), 'web')
46
+
44
47
  update_server_config('conf/config.rb')
45
48
  `vines start -d`
46
49
  puts "Started vines server: vines start -d"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Vines
4
4
  module Services
5
- VERSION = '0.1.3'
5
+ VERSION = '0.1.4'
6
6
  end
7
7
  end
@@ -1,407 +1,510 @@
1
- #editor-buttons {
2
- background: #f8f8f8;
3
- border-top: 1px solid #dfdfdf;
4
- height: 50px;
5
- position: absolute;
6
- bottom: 0;
7
- width: 100%;
8
- }
9
- #editor-buttons {
10
- text-align: right;
11
- }
12
- #editor-buttons #save {
13
- position: relative;
14
- right: 10px;
15
- top: 10px;
16
- }
17
- form.sections h2 {
18
- background: none;
1
+ * {
2
+ margin: 0;
3
+ padding: 0; }
4
+
5
+ html, body {
6
+ height: 100%;
7
+ overflow: hidden; }
8
+
9
+ body {
10
+ color: #222;
11
+ font-family: "Helvetica Neue", Helvetica, sans-serif;
12
+ font-size: 10pt;
13
+ line-height: 20pt; }
14
+
15
+ input[type="text"],
16
+ input[type="email"],
17
+ input[type="password"],
18
+ textarea {
19
+ border-radius: 2px;
19
20
  border: none;
20
- padding-left: 0;
21
- }
22
- form.sections label {
23
- display: block;
21
+ box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.2);
22
+ font-family: "Helvetica Neue", Helvetica, sans-serif;
23
+ font-size: 10pt;
24
+ outline: none;
25
+ padding: 6px; }
26
+
27
+ /* ipad */
28
+ @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
29
+ input[type="text"],
30
+ input[type="email"],
31
+ input[type="password"],
32
+ textarea {
33
+ border: 1px solid #eee; } }
34
+ input[type="text"]:focus,
35
+ input[type="email"]:focus,
36
+ input[type="password"]:focus,
37
+ textarea:focus {
38
+ box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.6); }
39
+
40
+ input[type="button"],
41
+ input[type="submit"] {
42
+ background: -moz-linear-gradient(#ececec, gainsboro);
43
+ background: -ms-linear-gradient(#ececec, gainsboro);
44
+ background: -o-linear-gradient(#ececec, gainsboro);
45
+ background: -webkit-linear-gradient(#ececec, gainsboro);
46
+ border: 1px solid #ccc;
47
+ border-radius: 3px;
48
+ box-shadow: 0 1px 1px white, inset 0 1px 1px rgba(255, 255, 255, 0.5);
49
+ color: #222;
50
+ cursor: pointer;
51
+ font-family: "Helvetica Neue", Helvetica, sans-serif;
52
+ font-size: 13px;
24
53
  font-weight: bold;
25
- font-size: 9pt;
26
- color: rgba(0,0,0,0.8);
27
- margin: 10px 0 -2px 0;
28
- }
29
- form.sections input[type="text"],
30
- form.sections input[type="email"],
31
- form.sections input[type="password"],
32
- form.sections textarea {
33
- width: 90%;
34
- }
35
- form.sections section {
36
- border-bottom: 1px solid #ddd;
37
- margin: 0 20px;
38
- }
39
- form.sections section fieldset {
40
- padding-left: 30%;
41
- margin-top: -33px;
42
- margin-bottom: 10px;
43
- }
44
- form.sections section:last-child {
45
- border-bottom: none;
46
- margin-bottom: 20px;
47
- }
48
- form.sections .error {
49
- color: #dd2828;
50
- font-size: 8pt;
51
- width: 89%;
52
- }
53
- .hint {
54
- color: #aaa;
55
- font-size: 8pt;
54
+ height: 27px;
56
55
  line-height: 1;
57
- margin-top: 3px;
58
- }
59
- #systems-page #container {
60
- height: 100%;
61
- }
62
- #systems-page #alpha {
63
- background: #fff;
64
- box-shadow: none;
65
- left: 0;
66
- }
67
- #systems-page #blank-slate {
68
- margin-top: -65px;
69
- margin-left: -215px;
70
- text-align: center;
71
- width: 430px;
56
+ padding: 0 20px;
57
+ margin-bottom: 10px;
58
+ margin-left: 7px;
59
+ text-shadow: 0 1px 1px #fff; }
60
+
61
+ input[type="submit"] {
62
+ background: #8dd2f7;
63
+ background: -moz-linear-gradient(#8dd2f7, #58b8f4);
64
+ background: -ms-linear-gradient(#8dd2f7, #58b8f4);
65
+ background: -o-linear-gradient(#8dd2f7, #58b8f4);
66
+ background: -webkit-linear-gradient(#8dd2f7, #58b8f4);
67
+ border: 1px solid #448ccd;
68
+ border-top: 1px solid #5da8db;
69
+ color: #0d4078;
70
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.4); }
71
+
72
+ input[type="button"]:active,
73
+ input[type="submit"]:active {
74
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.8);
75
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.8); }
76
+
77
+ input[type="button"].cancel,
78
+ input[type="submit"].cancel {
79
+ background: #ff3137;
80
+ background: -moz-linear-gradient(#ff3137, #dd2828);
81
+ background: -ms-linear-gradient(#ff3137, #dd2828);
82
+ background: -o-linear-gradient(#ff3137, #dd2828);
83
+ background: -webkit-linear-gradient(#ff3137, #dd2828);
84
+ border: 1px solid #981a1a;
85
+ border-top: 1px solid #ac1f23;
86
+ color: #4a0f11; }
87
+
88
+ fieldset {
89
+ border: none; }
90
+
91
+ optgroup {
92
+ font-style: normal; }
93
+
94
+ optgroup option {
95
+ padding-left: 20px; }
96
+
97
+ #container {
98
+ position: relative; }
99
+
100
+ #navbar {
101
+ background: #0c1a2d;
102
+ background: -moz-linear-gradient(#1e4171, #0c1a2d);
103
+ background: -ms-linear-gradient(#1e4171, #0c1a2d);
104
+ background: -o-linear-gradient(#1e4171, #0c1a2d);
105
+ background: -webkit-linear-gradient(#1e4171, #0c1a2d);
106
+ border-bottom: 1px solid rgba(255, 255, 255, 0.3);
107
+ box-shadow: 0 0 3px 1px #222;
108
+ color: #bdd5ff;
109
+ height: 60px;
110
+ position: relative;
111
+ text-shadow: 0 1px 1px #000, 0 0 1px #fff;
112
+ z-index: 10; }
113
+
114
+ #navbar #logo {
115
+ background: url(../images/logo-small.png) no-repeat;
116
+ color: transparent;
117
+ height: 40px;
118
+ opacity: 0.2;
72
119
  position: absolute;
73
- top: 50%;
74
- left: 50%;
75
- }
76
- #systems-page #blank-slate p {
77
- color: rgba(0, 0, 0, 0.3);
78
- font-size: 12pt;
79
- margin-bottom: 20px;
80
- }
81
- #systems-page #messages {
82
- list-style: none;
83
- width: 100%;
84
- }
85
- #systems-page #messages li {
86
- padding: 0 10px;
120
+ top: 10px;
121
+ right: 10px;
122
+ width: 125px;
123
+ text-shadow: none; }
124
+
125
+ #navbar #current-user {
126
+ height: 50px;
127
+ width: 240px;
87
128
  position: relative;
88
- }
89
- #systems-page #messages li:first-child {
90
- padding-top: 10px;
91
- }
92
- #systems-page #messages li:hover > span .time {
93
- opacity: 0.3;
94
- }
95
- #systems-page #messages li pre,
96
- #systems-page #messages li footer {
97
- font-family: Menlo, monospace;
98
- font-size: 11px;
99
- line-height: 1.3;
100
- word-wrap: break-word;
101
- }
102
- #systems-page #messages li footer {
129
+ top: 5px;
130
+ left: 10px; }
131
+
132
+ #navbar #current-user-avatar {
133
+ border: 1px solid rgba(255, 255, 255, 0.1);
134
+ box-shadow: 0 0 1px 0px #bdd5ff;
135
+ height: 48px;
136
+ width: 48px; }
137
+
138
+ #navbar #current-user-info {
139
+ position: relative;
140
+ top: -60px;
141
+ left: 58px; }
142
+
143
+ #navbar #current-user-name {
144
+ font-size: 10pt;
145
+ font-weight: normal;
146
+ line-height: 1.7;
147
+ overflow: hidden;
148
+ text-overflow: ellipsis;
149
+ width: 180px; }
150
+
151
+ #navbar #current-user-presence-form .select {
152
+ background: rgba(255, 255, 255, 0.2);
153
+ border: 1px solid rgba(255, 255, 255, 0.1);
154
+ border-radius: 30px;
155
+ color: rgba(255, 255, 255, 0.8);
156
+ line-height: 16px; }
157
+
158
+ #navbar #current-user-presence {
159
+ border: 1px solid; }
160
+
161
+ #navbar #app-nav {
162
+ height: 100%;
163
+ overflow: hidden;
164
+ position: absolute;
165
+ left: 260px;
166
+ top: 0;
167
+ width: 600px; }
168
+
169
+ #navbar #nav-links {
170
+ height: 100%; }
171
+
172
+ #navbar #nav-links li {
173
+ border-left: 1px solid transparent;
174
+ border-right: 1px solid transparent;
175
+ color: rgba(255, 255, 255, 0.8);
176
+ display: inline-block;
177
+ font-family: "Trebuchet MS", "Helvetica Neue", Helvetica, sans-serif;
103
178
  font-weight: bold;
104
- }
105
- #systems-page #message-form {
106
- height: 21px;
179
+ font-size: 11px;
180
+ height: 100%;
181
+ min-width: 100px;
107
182
  line-height: 1;
183
+ list-style: none;
184
+ text-align: center;
185
+ text-transform: uppercase; }
186
+
187
+ #navbar #nav-links li:hover,
188
+ #navbar #nav-links li.selected {
189
+ background: rgba(255, 255, 255, 0.1);
190
+ border-left: 1px solid rgba(255, 255, 255, 0.15);
191
+ border-right: 1px solid rgba(255, 255, 255, 0.15); }
192
+
193
+ #navbar #nav-links li a {
194
+ color: inherit;
195
+ display: inline-block;
196
+ height: 100%;
197
+ line-height: 60px;
108
198
  position: relative;
109
- width: 100%;
110
- }
111
- #systems-page #message-label {
112
- background: transparent;
113
- cursor: pointer;
114
- font-family: Menlo, monospace;
115
- font-size: 11px;
116
- padding: 0 2px 0 10px;
117
- }
118
- #systems-page #message-label::after {
119
- margin: 0;
120
- content: '$';
121
- }
122
- #systems-page #message-label:hover {
123
- text-decoration: underline;
124
- }
125
- #systems-page #message {
126
- box-shadow: none;
199
+ text-decoration: none;
200
+ width: 100%; }
201
+
202
+ #navbar #nav-links li a svg {
203
+ height: 32px;
204
+ width: 32px;
205
+ position: absolute !important;
206
+ left: 33px;
207
+ top: 4px; }
208
+
209
+ #navbar #nav-links li a span {
210
+ position: relative;
211
+ top: 15px; }
212
+
213
+ .select {
214
+ background: #f0f0f0;
215
+ border-radius: 3px;
127
216
  display: inline-block;
128
- font-family: Menlo, monospace;
129
217
  font-size: 11px;
130
- margin: 0;
131
- padding: 0;
132
- }
133
- #systems-page #message:focus {
134
- box-shadow: none;
135
- }
136
- #systems-page #roster {
137
- background: rgba(60, 60, 60, 0.98);
138
- border: 2px solid rgb(12, 12, 12);
139
- border-radius: 3px;
140
- box-shadow: 0 3px 10px rgba(0, 0, 0, 0.75);
141
- min-width: 250px;
218
+ line-height: 18px;
219
+ padding: 0 5px;
220
+ position: relative; }
221
+
222
+ .select span::after {
223
+ margin-left: 3px;
224
+ content: '\25be'; }
225
+
226
+ .select select {
227
+ cursor: pointer;
228
+ opacity: 0;
142
229
  position: absolute;
143
- left: 10px;
144
- }
145
- #systems-page #roster-items {
146
- color: #fff;
147
- font-size: 13px;
148
- font-weight: 500;
149
- overflow-y: auto;
150
- text-shadow: 0 1px 1px rgb(21, 21, 21);
151
- }
152
- #systems-page #roster-items li {
153
- border-top: 1px solid rgb(80, 80, 80);
154
- border-bottom: 1px solid rgb(48, 48, 48);
155
- line-height: 38px;
156
- list-style: none;
157
- padding-right: 50px;
158
- position: relative;
159
- }
160
- #systems-page #roster-items li.offline {
161
- color: #888;
162
- }
163
- #systems-page #roster-items li.offline .icon {
164
- opacity: 0.3;
165
- }
166
- #systems-page #roster-items li:hover:not(.group) {
230
+ top: 0;
231
+ bottom: 0;
232
+ left: 0;
233
+ right: 0; }
234
+
235
+ .filter-button {
236
+ cursor: pointer;
237
+ display: inline-block;
238
+ line-height: 1;
239
+ position: absolute;
240
+ right: 10px;
241
+ top: 6px; }
242
+
243
+ .filter-button svg {
244
+ height: 16px;
245
+ width: 16px; }
246
+
247
+ .filter-form {
248
+ border-bottom: 1px solid #ddd;
249
+ padding: 5px 10px; }
250
+
251
+ .filter-text {
252
+ width: 100%; }
253
+
254
+ .scroll {
255
+ overflow-y: auto; }
256
+
257
+ .scroll::-webkit-scrollbar {
258
+ width: 6px; }
259
+
260
+ .scroll::-webkit-scrollbar-thumb {
261
+ border-radius: 10px; }
262
+
263
+ .scroll::-webkit-scrollbar-thumb:vertical {
264
+ background: rgba(0, 0, 0, 0.2); }
265
+
266
+ ul.selectable li.selected {
167
267
  background: #319be7;
168
268
  background: -moz-linear-gradient(#319be7, #1b78d9);
169
269
  background: -ms-linear-gradient(#319be7, #1b78d9);
170
270
  background: -o-linear-gradient(#319be7, #1b78d9);
171
271
  background: -webkit-linear-gradient(#319be7, #1b78d9);
172
272
  border-top: 1px solid #148ddf;
273
+ border-bottom: 1px solid #095bba;
173
274
  color: #fff;
174
- cursor: pointer;
175
- text-shadow: -1px 1px 1px hsl(210, 51%, 45%), 0px -1px 1px hsl(210, 51%, 49%);
176
- }
177
- #systems-page #roster-items li.group {
178
- background: #404040;
179
- background: -moz-linear-gradient(#404040, #353535);
180
- background: -ms-linear-gradient(#404040, #353535);
181
- background: -o-linear-gradient(#404040, #353535);
182
- background: -webkit-linear-gradient(#404040, #353535);
183
- color: #ccc;
184
- font-size: 10px;
185
- font-weight: bold;
186
- line-height: 2;
187
- padding-left: 10px;
188
- text-transform: uppercase;
189
- }
190
- #systems-page #roster-items li .icon {
191
- position: absolute;
192
- height: 32px;
193
- width: 32px;
194
- top: 2px;
195
- }
196
- #systems-page #roster-items li .icon svg {
197
- height: 32px;
198
- width: 32px;
199
- }
200
- #systems-page #roster-items li .text {
201
- padding-left: 32px;
202
- }
203
- #systems-page #roster-items li .unread {
204
- background: rgba(255, 255, 255, 0.15);
205
- border-radius: 30px;
275
+ text-shadow: -1px 1px 1px #3873ad, 0px -1px 1px #3d7dbd; }
276
+
277
+ ul.selectable li.selected.secondary {
278
+ background: #bdc7db;
279
+ background: -moz-linear-gradient(#bdc7db, #9cabc4);
280
+ background: -ms-linear-gradient(#bdc7db, #9cabc4);
281
+ background: -o-linear-gradient(#bdc7db, #9cabc4);
282
+ background: -webkit-linear-gradient(#bdc7db, #9cabc4);
283
+ border-top: 1px solid #bdc6d6;
284
+ border-bottom: 1px solid #94a1b8;
206
285
  color: #fff;
207
- display: inline-block;
208
- font-size: 11px;
209
- font-weight: bold;
210
- line-height: 15px;
211
- padding: 0 6px;
212
- position: absolute;
213
- right: 10px;
214
- top: 12px;
215
- }
216
- #systems-page #roster-items li:hover .unread {
217
- color: #fff;
218
- }
219
- #systems-page #roster-form {
220
- background: rgb(80, 80, 80);
221
- background: -moz-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
222
- background: -ms-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
223
- background: -o-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
224
- background: -webkit-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
225
- padding: 3px 5px;
226
- }
227
- #systems-page #roster-form form {
228
- padding: 0;
229
- border: none;
230
- }
231
- #systems-page #roster-filter {
232
- width: 100%;
233
- }
234
- #services-page #container {
286
+ text-shadow: -1px 1px 1px #94a1b8; }
287
+
288
+ .column {
235
289
  height: 100%;
236
- }
237
- #services-page #beta {
238
- background: #fff;
239
- }
240
- #services-page #services {
241
- height: 100%;
242
- list-style: none;
243
- text-shadow: 0 1px 1px #fff;
244
- width: 260px;
245
- }
246
- #services-page #services li {
247
- cursor: pointer;
290
+ position: absolute; }
291
+
292
+ .column h2 {
248
293
  border-bottom: 1px solid #ddd;
249
- font-weight: bold;
250
- min-height: 42px;
251
- padding: 0 10px;
294
+ font-size: 10pt;
295
+ padding-left: 10px;
252
296
  position: relative;
253
- -moz-transition: background 0.3s;
254
- -o-transition: background 0.3s;
255
- -webkit-transition: background 0.3s;
256
- transition: background 0.3s;
257
- }
258
- #services-page #services li #status{
259
- margin-left:100px;
260
- }
261
- #services-page #services li:hover:not(.selected) {
262
- background: rgba(255, 255, 255, 1.0);
263
- }
264
- #services-page #services li.selected .count {
265
- color: rgba(255, 255, 255, 0.85);
266
- }
267
- #services-page #operators {
268
- margin-bottom: 10px;
269
- }
270
- #services-page #operators li {
297
+ text-shadow: 0 -1px 1px #fff; }
298
+
299
+ .column .controls {
300
+ background: rgba(255, 255, 255, 0.05);
301
+ border-top: 1px solid #ddd;
302
+ height: 50px;
303
+ position: absolute;
304
+ bottom: 0;
305
+ width: 260px; }
306
+
307
+ .column .controls > div {
271
308
  cursor: pointer;
272
- position: relative;
273
- -moz-transition: background 0.3s;
274
- -o-transition: background 0.3s;
275
- -webkit-transition: background 0.3s;
276
- transition: background 0.3s;
277
309
  display: inline-block;
278
- border: 1px solid #DDD;
279
- border-radius: 30px;
280
- width: 60px;
281
- height: 15px;
282
- line-height: 15px;
283
- text-align: center;
284
- font-size: 8pt;
285
- margin-left: 10px;
286
- }
287
- #services-page #operators li:hover:not(.selected) {
288
- color: rgba(23, 51, 88, 1.0);
289
- background: rgba(255, 255, 255, 1.0);
290
- }
291
- #services-page #attributes li {
292
- cursor: pointer;
293
- border-bottom: 1px solid #ddd;
294
- padding: 0 10px;
310
+ height: 27px;
311
+ margin: 0 10px;
295
312
  position: relative;
296
- color: rgba(23, 51, 88, 0.85);
297
- -moz-transition: background 0.3s;
298
- -o-transition: background 0.3s;
299
- -webkit-transition: background 0.3s;
300
- transition: background 0.3s;
301
- }
302
- #services-page #attributes li:hover:not(.selected) {
303
- color: rgba(23, 51, 88, 1.0);
304
- background: rgba(255, 255, 255, 1.0);
305
- }
306
- #services-page #services .count {
307
- display: block;
308
- font-size: 11px;
309
- font-weight: normal;
310
- line-height: 11px;
311
- }
312
- #services-page #charlie-controls {
313
- text-align: right;
314
- }
315
- #services-page #search-services-form {
316
- background: #f8f8f8;
317
- }
318
- #services-page #syntax {
319
- height: 45px;
320
- }
321
- #services-page #syntax-status {
322
- font-size: 8pt;
323
- height: 12px;
313
+ top: 10px;
314
+ width: 27px; }
315
+
316
+ .column .controls > div > svg {
317
+ height: 27px;
318
+ width: 27px; }
319
+
320
+ .primary {
321
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.5), 0 0 40px rgba(0, 0, 0, 0.1) inset;
322
+ width: 460px;
323
+ left: 260px;
324
+ z-index: 1; }
325
+
326
+ .sidebar {
327
+ background: url(../images/light-gray.png);
328
+ box-shadow: 0 0 40px rgba(0, 0, 0, 0.1) inset;
329
+ width: 260px; }
330
+
331
+ form.overlay {
332
+ background: rgba(255, 255, 255, 0.95);
333
+ border-bottom: 1px solid #ddd;
334
+ border-top: 1px solid #fff;
335
+ box-shadow: 0px -3px 5px rgba(0, 0, 0, 0.1);
336
+ padding-top: 10px;
337
+ position: absolute;
338
+ bottom: 50px;
339
+ left: 0;
340
+ width: 260px; }
341
+
342
+ form.overlay h2,
343
+ form.inset h2 {
344
+ border: none !important;
324
345
  line-height: 1;
325
- margin: -5px 0 10px 0;
326
- width: 93%;
327
- }
328
- #services-page #service-preview {
329
- margin-top: -15px;
330
- }
331
- #services-page #members {
332
- height: 200px;
333
- margin-bottom: 20px;
334
- }
335
- #services-page #members li {
336
- display: inline-block;
337
- background-color: #fff;
338
- font-size: 8pt;
339
- width: 150px;
340
- max-width: 150px;
341
- height: 25px;
342
- max-height: 25px;
343
- text-overflow: ellipsis;
344
- overflow: hidden;
345
- white-space:nowrap;
346
- float: left;
346
+ margin-bottom: 10px; }
347
+
348
+ form.overlay p,
349
+ form.inset p {
350
+ line-height: 1.5;
351
+ margin: 0 10px 10px 10px;
352
+ text-shadow: 0 1px 1px #fff; }
353
+
354
+ form.inset p {
355
+ margin-top: -5px; }
356
+
357
+ form.overlay .buttons,
358
+ form.inset .buttons {
359
+ padding-right: 10px;
360
+ text-align: right; }
361
+
362
+ form.overlay input[type="text"],
363
+ form.overlay input[type="password"],
364
+ form.overlay input[type="email"] {
365
+ margin-bottom: 10px;
366
+ width: 228px;
367
+ position: relative;
368
+ left: 10px; }
369
+
370
+ .notification {
371
+ background: rgba(12, 26, 45, 0.75);
372
+ border-radius: 30px;
373
+ color: #fff;
374
+ font-size: 10pt;
375
+ font-weight: bold;
376
+ padding: 5px 100px;
377
+ position: absolute;
378
+ top: 50%;
379
+ left: 50%;
380
+ text-align: center;
381
+ text-shadow: 0 1px 1px #000;
382
+ z-index: 2; }
383
+ #login-page {
384
+ background: -moz-radial-gradient(rgba(26, 55, 98, 0.8), rgba(12, 26, 45, 0.8)), url(../images/dark-gray.png);
385
+ background: -ms-radial-gradient(center, 500px 500px, rgba(26, 55, 98, 0.8), rgba(12, 26, 45, 0.8)), url(../images/dark-gray.png);
386
+ background: -o-radial-gradient(rgba(26, 55, 98, 0.8), rgba(12, 26, 45, 0.8)), url(../images/dark-gray.png);
387
+ background: -webkit-radial-gradient(center, 500px 500px, rgba(26, 55, 98, 0.8), rgba(12, 26, 45, 0.8)), url(../images/dark-gray.png); }
388
+
389
+ #login-page #container {
390
+ height: 100%;
391
+ width: 100%;
392
+ text-align: center; }
393
+
394
+ #login-page #login-form {
395
+ margin: 0 auto;
396
+ position: relative;
397
+ width: 640px; }
398
+
399
+ #login-page #login-form h1 {
400
+ background: url(../images/logo-large.png) no-repeat;
401
+ color: transparent;
402
+ height: 82px;
403
+ line-height: 1;
404
+ margin: 0 auto 40px auto;
405
+ text-shadow: none;
406
+ width: 245px; }
407
+
408
+ #login-page #jid,
409
+ #login-page #password {
410
+ margin: 0 auto;
347
411
  margin-bottom: 10px;
348
- margin-right: 10px;
349
- -webkit-border-radius: 3px;
350
- -moz-border-radius: 3px;
412
+ width: 240px;
413
+ display: block; }
414
+
415
+ #login-page #icon {
416
+ position: absolute;
417
+ left: 90px;
418
+ top: 0px;
419
+ width: 100px;
420
+ height: 80px; }
421
+
422
+ #login-page #login-form-controls {
423
+ background: rgba(0, 0, 0, 0.2);
424
+ border: 1px solid rgba(0, 0, 0, 0.1);
425
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
426
+ border-radius: 5px;
427
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.1) inset;
428
+ margin: 0 auto;
429
+ padding: 20px; }
430
+
431
+ #login-page #start {
432
+ width: 100px;
433
+ margin-left: 0;
434
+ margin-bottom: 0; }
435
+
436
+ #login-page #start:active {
437
+ box-shadow: inset 0 1px 7px #0c1a2d; }
438
+
439
+ #login-page input[type="submit"] {
440
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.8), inset 0 1px 1px rgba(255, 255, 255, 0.5); }
441
+
442
+ #login-page #error {
443
+ background: rgba(255, 255, 255, 0.05);
351
444
  border-radius: 3px;
352
- border: 1px solid #ccc;
445
+ color: #4693FF;
446
+ font-size: 10pt;
447
+ margin: 20px auto;
448
+ text-shadow: 0 1px 1px #000;
449
+ width: 250px; }
450
+ #editor-buttons {
451
+ background: #f8f8f8;
452
+ border-top: 1px solid #dfdfdf;
453
+ height: 50px;
454
+ position: absolute;
455
+ bottom: 0;
456
+ width: 100%;
353
457
  }
354
- #services-page #members li span.text {
355
- margin-left: 5px;
458
+ #editor-buttons {
459
+ text-align: right;
356
460
  }
357
- #services-page #members li span.icon {
358
- width: 15px;
359
- height: 15px;
360
- display: inline-block;
461
+ #editor-buttons #save {
361
462
  position: relative;
362
- top: 2px;
363
- left: 3px;
463
+ right: 10px;
464
+ top: 10px;
364
465
  }
365
- #services-page #members li:hover:not(.selected) {
366
- background-color: #ededed;
367
- background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#e0e0e0));
368
- background: -moz-linear-gradient(#ededed, #e0e0e0);
369
- cursor: pointer;
466
+ form.sections h2 {
467
+ background: none;
468
+ border: none;
469
+ padding-left: 0;
370
470
  }
371
- #services-page #members li.selected {
372
- background: #4693FF;
373
- background: -moz-linear-gradient(#4693FF, #015de6);
374
- background: -o-linear-gradient(#4693FF, #015de6);
375
- background: -webkit-gradient(linear, left top, left bottom, from(#4693FF), to(#015de6));
376
- border-bottom: 1px solid #fff;
377
- color: #fff;
378
- text-shadow: 0 -1px 1px #1b3a65;
471
+ form.sections label {
472
+ display: block;
473
+ font-weight: bold;
474
+ font-size: 9pt;
475
+ color: rgba(0,0,0,0.8);
476
+ margin: 10px 0 -2px 0;
379
477
  }
380
- #services-page #users {
381
- max-height: 140px;
382
- list-style: none;
478
+ form.sections input[type="text"],
479
+ form.sections input[type="email"],
480
+ form.sections input[type="password"],
481
+ form.sections textarea {
482
+ width: 90%;
383
483
  }
384
- #services-page #users label {
385
- color: inherit;
386
- display: inline;
387
- font-size: inherit;
388
- font-weight: normal;
389
- margin-left: 2px;
484
+ form.sections section {
485
+ border-bottom: 1px solid #ddd;
486
+ margin: 0 20px;
390
487
  }
391
- #services-page #blank-slate {
392
- margin-top: -65px;
393
- margin-left: -215px;
394
- text-align: center;
395
- width: 430px;
396
- position: absolute;
397
- top: 50%;
398
- left: 50%;
488
+ form.sections section fieldset {
489
+ padding-left: 30%;
490
+ margin-top: -33px;
491
+ margin-bottom: 10px;
399
492
  }
400
- #services-page #blank-slate p {
401
- color: rgba(0, 0, 0, 0.3);
402
- font-size: 12pt;
493
+ form.sections section:last-child {
494
+ border-bottom: none;
403
495
  margin-bottom: 20px;
404
496
  }
497
+ form.sections .error {
498
+ color: #dd2828;
499
+ font-size: 8pt;
500
+ width: 89%;
501
+ }
502
+ .hint {
503
+ color: #aaa;
504
+ font-size: 8pt;
505
+ line-height: 1;
506
+ margin-top: 3px;
507
+ }
405
508
  #files-page #container {
406
509
  height: 100%;
407
510
  }
@@ -580,45 +683,216 @@ form.sections .error {
580
683
  text-shadow: 0 1px 1px #fff;
581
684
  width: 260px;
582
685
  }
583
- #files-page #labels li .text {
584
- text-transform: capitalize;
686
+ #files-page #labels li .text {
687
+ text-transform: capitalize;
688
+ }
689
+ #files-page #labels li,
690
+ #files-page #uploads li {
691
+ cursor: pointer;
692
+ border-bottom: 1px solid #ddd;
693
+ font-weight: bold;
694
+ min-height: 42px;
695
+ padding: 0 10px;
696
+ position: relative;
697
+ -moz-transition: background 0.3s;
698
+ -o-transition: background 0.3s;
699
+ -webkit-transition: background 0.3s;
700
+ transition: background 0.3s;
701
+ }
702
+ #files-page #uploads li {
703
+ font-weight: normal;
704
+ padding: 10px 0 0 0;
705
+ background: #f8f8f8;
706
+ }
707
+ #files-page #labels li:hover:not(.selected),
708
+ #files-page #uploads li:hover {
709
+ background: rgba(255, 255, 255, 1.0);
710
+ }
711
+ #files-page #labels li.selected .count {
712
+ color: rgba(255, 255, 255, 0.85);
713
+ }
714
+ #files-page #labels .count {
715
+ display: block;
716
+ font-size: 11px;
717
+ font-weight: normal;
718
+ line-height: 11px;
719
+ }
720
+ #files-page #charlie-controls {
721
+ text-align: right;
722
+ }
723
+ #files-page #search-files-form {
724
+ background: #f8f8f8;
725
+ }
726
+ #services-page #container {
727
+ height: 100%;
728
+ }
729
+ #services-page #beta {
730
+ background: #fff;
731
+ }
732
+ #services-page #services {
733
+ height: 100%;
734
+ list-style: none;
735
+ text-shadow: 0 1px 1px #fff;
736
+ width: 260px;
737
+ }
738
+ #services-page #services li {
739
+ cursor: pointer;
740
+ border-bottom: 1px solid #ddd;
741
+ font-weight: bold;
742
+ min-height: 42px;
743
+ padding: 0 10px;
744
+ position: relative;
745
+ -moz-transition: background 0.3s;
746
+ -o-transition: background 0.3s;
747
+ -webkit-transition: background 0.3s;
748
+ transition: background 0.3s;
749
+ }
750
+ #services-page #services li #status{
751
+ margin-left:100px;
752
+ }
753
+ #services-page #services li:hover:not(.selected) {
754
+ background: rgba(255, 255, 255, 1.0);
755
+ }
756
+ #services-page #services li.selected .count {
757
+ color: rgba(255, 255, 255, 0.85);
758
+ }
759
+ #services-page #operators {
760
+ margin-bottom: 10px;
761
+ }
762
+ #services-page #operators li {
763
+ cursor: pointer;
764
+ position: relative;
765
+ -moz-transition: background 0.3s;
766
+ -o-transition: background 0.3s;
767
+ -webkit-transition: background 0.3s;
768
+ transition: background 0.3s;
769
+ display: inline-block;
770
+ border: 1px solid #DDD;
771
+ border-radius: 30px;
772
+ width: 60px;
773
+ height: 15px;
774
+ line-height: 15px;
775
+ text-align: center;
776
+ font-size: 8pt;
777
+ margin-left: 10px;
778
+ }
779
+ #services-page #operators li:hover:not(.selected) {
780
+ color: rgba(23, 51, 88, 1.0);
781
+ background: rgba(255, 255, 255, 1.0);
782
+ }
783
+ #services-page #attributes li {
784
+ cursor: pointer;
785
+ border-bottom: 1px solid #ddd;
786
+ padding: 0 10px;
787
+ position: relative;
788
+ color: rgba(23, 51, 88, 0.85);
789
+ -moz-transition: background 0.3s;
790
+ -o-transition: background 0.3s;
791
+ -webkit-transition: background 0.3s;
792
+ transition: background 0.3s;
793
+ }
794
+ #services-page #attributes li:hover:not(.selected) {
795
+ color: rgba(23, 51, 88, 1.0);
796
+ background: rgba(255, 255, 255, 1.0);
797
+ }
798
+ #services-page #services .count {
799
+ display: block;
800
+ font-size: 11px;
801
+ font-weight: normal;
802
+ line-height: 11px;
803
+ }
804
+ #services-page #charlie-controls {
805
+ text-align: right;
806
+ }
807
+ #services-page #search-services-form {
808
+ background: #f8f8f8;
809
+ }
810
+ #services-page #syntax {
811
+ height: 45px;
812
+ }
813
+ #services-page #syntax-status {
814
+ font-size: 8pt;
815
+ height: 12px;
816
+ line-height: 1;
817
+ margin: -5px 0 10px 0;
818
+ width: 93%;
819
+ }
820
+ #services-page #service-preview {
821
+ margin-top: -15px;
822
+ }
823
+ #services-page #members {
824
+ height: 200px;
825
+ margin-bottom: 20px;
826
+ }
827
+ #services-page #members li {
828
+ display: inline-block;
829
+ background-color: #fff;
830
+ font-size: 8pt;
831
+ width: 150px;
832
+ max-width: 150px;
833
+ height: 25px;
834
+ max-height: 25px;
835
+ text-overflow: ellipsis;
836
+ overflow: hidden;
837
+ white-space:nowrap;
838
+ float: left;
839
+ margin-bottom: 10px;
840
+ margin-right: 10px;
841
+ -webkit-border-radius: 3px;
842
+ -moz-border-radius: 3px;
843
+ border-radius: 3px;
844
+ border: 1px solid #ccc;
845
+ }
846
+ #services-page #members li span.text {
847
+ margin-left: 5px;
585
848
  }
586
- #files-page #labels li,
587
- #files-page #uploads li {
588
- cursor: pointer;
589
- border-bottom: 1px solid #ddd;
590
- font-weight: bold;
591
- min-height: 42px;
592
- padding: 0 10px;
849
+ #services-page #members li span.icon {
850
+ width: 15px;
851
+ height: 15px;
852
+ display: inline-block;
593
853
  position: relative;
594
- -moz-transition: background 0.3s;
595
- -o-transition: background 0.3s;
596
- -webkit-transition: background 0.3s;
597
- transition: background 0.3s;
854
+ top: 2px;
855
+ left: 3px;
598
856
  }
599
- #files-page #uploads li {
600
- font-weight: normal;
601
- padding: 10px 0 0 0;
602
- background: #f8f8f8;
857
+ #services-page #members li:hover:not(.selected) {
858
+ background-color: #ededed;
859
+ background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#e0e0e0));
860
+ background: -moz-linear-gradient(#ededed, #e0e0e0);
861
+ cursor: pointer;
603
862
  }
604
- #files-page #labels li:hover:not(.selected),
605
- #files-page #uploads li:hover {
606
- background: rgba(255, 255, 255, 1.0);
863
+ #services-page #members li.selected {
864
+ background: #4693FF;
865
+ background: -moz-linear-gradient(#4693FF, #015de6);
866
+ background: -o-linear-gradient(#4693FF, #015de6);
867
+ background: -webkit-gradient(linear, left top, left bottom, from(#4693FF), to(#015de6));
868
+ border-bottom: 1px solid #fff;
869
+ color: #fff;
870
+ text-shadow: 0 -1px 1px #1b3a65;
607
871
  }
608
- #files-page #labels li.selected .count {
609
- color: rgba(255, 255, 255, 0.85);
872
+ #services-page #users {
873
+ max-height: 140px;
874
+ list-style: none;
610
875
  }
611
- #files-page #labels .count {
612
- display: block;
613
- font-size: 11px;
876
+ #services-page #users label {
877
+ color: inherit;
878
+ display: inline;
879
+ font-size: inherit;
614
880
  font-weight: normal;
615
- line-height: 11px;
881
+ margin-left: 2px;
616
882
  }
617
- #files-page #charlie-controls {
618
- text-align: right;
883
+ #services-page #blank-slate {
884
+ margin-top: -65px;
885
+ margin-left: -215px;
886
+ text-align: center;
887
+ width: 430px;
888
+ position: absolute;
889
+ top: 50%;
890
+ left: 50%;
619
891
  }
620
- #files-page #search-files-form {
621
- background: #f8f8f8;
892
+ #services-page #blank-slate p {
893
+ color: rgba(0, 0, 0, 0.3);
894
+ font-size: 12pt;
895
+ margin-bottom: 20px;
622
896
  }
623
897
  #setup-page #container {
624
898
  height: 100%;
@@ -736,3 +1010,188 @@ form.sections .error {
736
1010
  #setup-page #info p {
737
1011
  line-height: 1;
738
1012
  }
1013
+ #systems-page #container {
1014
+ height: 100%;
1015
+ }
1016
+ #systems-page #alpha {
1017
+ background: #fff;
1018
+ box-shadow: none;
1019
+ left: 0;
1020
+ }
1021
+ #systems-page #blank-slate {
1022
+ margin-top: -65px;
1023
+ margin-left: -215px;
1024
+ text-align: center;
1025
+ width: 430px;
1026
+ position: absolute;
1027
+ top: 50%;
1028
+ left: 50%;
1029
+ }
1030
+ #systems-page #blank-slate p {
1031
+ color: rgba(0, 0, 0, 0.3);
1032
+ font-size: 12pt;
1033
+ margin-bottom: 20px;
1034
+ }
1035
+ #systems-page #messages {
1036
+ list-style: none;
1037
+ width: 100%;
1038
+ }
1039
+ #systems-page #messages li {
1040
+ padding: 0 10px;
1041
+ position: relative;
1042
+ }
1043
+ #systems-page #messages li:first-child {
1044
+ padding-top: 10px;
1045
+ }
1046
+ #systems-page #messages li:hover > span .time {
1047
+ opacity: 0.3;
1048
+ }
1049
+ #systems-page #messages li pre,
1050
+ #systems-page #messages li footer {
1051
+ font-family: Menlo, monospace;
1052
+ font-size: 11px;
1053
+ line-height: 1.3;
1054
+ word-wrap: break-word;
1055
+ }
1056
+ #systems-page #messages li footer {
1057
+ font-weight: bold;
1058
+ }
1059
+ #systems-page #message-form {
1060
+ height: 21px;
1061
+ line-height: 1;
1062
+ position: relative;
1063
+ width: 100%;
1064
+ }
1065
+ #systems-page #message-label {
1066
+ background: transparent;
1067
+ cursor: pointer;
1068
+ font-family: Menlo, monospace;
1069
+ font-size: 11px;
1070
+ padding: 0 2px 0 10px;
1071
+ }
1072
+ #systems-page #message-label::after {
1073
+ margin: 0;
1074
+ content: '$';
1075
+ }
1076
+ #systems-page #message-label:hover {
1077
+ text-decoration: underline;
1078
+ }
1079
+ #systems-page #message {
1080
+ box-shadow: none;
1081
+ display: inline-block;
1082
+ font-family: Menlo, monospace;
1083
+ font-size: 11px;
1084
+ margin: 0;
1085
+ padding: 0;
1086
+ }
1087
+ #systems-page #message:focus {
1088
+ box-shadow: none;
1089
+ }
1090
+ #systems-page #roster {
1091
+ background: rgba(60, 60, 60, 0.98);
1092
+ border: 2px solid rgb(12, 12, 12);
1093
+ border-radius: 3px;
1094
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.75);
1095
+ min-width: 250px;
1096
+ position: absolute;
1097
+ left: 10px;
1098
+ }
1099
+ #systems-page #roster-items {
1100
+ color: #fff;
1101
+ font-size: 13px;
1102
+ font-weight: 500;
1103
+ overflow-y: auto;
1104
+ text-shadow: 0 1px 1px rgb(21, 21, 21);
1105
+ }
1106
+ #systems-page #roster-items li {
1107
+ border-top: 1px solid rgb(80, 80, 80);
1108
+ border-bottom: 1px solid rgb(48, 48, 48);
1109
+ line-height: 38px;
1110
+ list-style: none;
1111
+ padding-right: 50px;
1112
+ position: relative;
1113
+ }
1114
+ #systems-page #roster-items li.offline {
1115
+ color: #888;
1116
+ }
1117
+ #systems-page #roster-items li.offline .icon {
1118
+ opacity: 0.3;
1119
+ }
1120
+ #systems-page #roster-items li:hover:not(.group) {
1121
+ background: #319be7;
1122
+ background: -moz-linear-gradient(#319be7, #1b78d9);
1123
+ background: -ms-linear-gradient(#319be7, #1b78d9);
1124
+ background: -o-linear-gradient(#319be7, #1b78d9);
1125
+ background: -webkit-linear-gradient(#319be7, #1b78d9);
1126
+ border-top: 1px solid #148ddf;
1127
+ color: #fff;
1128
+ cursor: pointer;
1129
+ text-shadow: -1px 1px 1px hsl(210, 51%, 45%), 0px -1px 1px hsl(210, 51%, 49%);
1130
+ }
1131
+ #systems-page #roster-items li.group {
1132
+ background: #404040;
1133
+ background: -moz-linear-gradient(#404040, #353535);
1134
+ background: -ms-linear-gradient(#404040, #353535);
1135
+ background: -o-linear-gradient(#404040, #353535);
1136
+ background: -webkit-linear-gradient(#404040, #353535);
1137
+ color: #ccc;
1138
+ font-size: 10px;
1139
+ font-weight: bold;
1140
+ line-height: 2;
1141
+ padding-left: 10px;
1142
+ text-transform: uppercase;
1143
+ }
1144
+ #systems-page #roster-items li .icon {
1145
+ position: absolute;
1146
+ height: 32px;
1147
+ width: 32px;
1148
+ top: 2px;
1149
+ }
1150
+ #systems-page #roster-items li .icon svg {
1151
+ height: 32px;
1152
+ width: 32px;
1153
+ }
1154
+ #systems-page #roster-items li .text {
1155
+ padding-left: 32px;
1156
+ }
1157
+ #systems-page #roster-items li .unread {
1158
+ background: rgba(255, 255, 255, 0.15);
1159
+ border-radius: 30px;
1160
+ color: #fff;
1161
+ display: inline-block;
1162
+ font-size: 11px;
1163
+ font-weight: bold;
1164
+ line-height: 15px;
1165
+ padding: 0 6px;
1166
+ position: absolute;
1167
+ right: 10px;
1168
+ top: 12px;
1169
+ }
1170
+ #systems-page #roster-items li:hover .unread {
1171
+ color: #fff;
1172
+ }
1173
+ #systems-page #roster-form {
1174
+ background: rgb(80, 80, 80);
1175
+ background: -moz-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
1176
+ background: -ms-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
1177
+ background: -o-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
1178
+ background: -webkit-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
1179
+ padding: 3px 5px;
1180
+ }
1181
+ #systems-page #roster-form form {
1182
+ padding: 0;
1183
+ border: none;
1184
+ }
1185
+ #systems-page #roster-filter {
1186
+ width: 100%;
1187
+ }
1188
+ /*
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+
1196
+ */
1197
+