vines-services 0.1.1 → 0.1.2

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.
@@ -168,7 +168,7 @@ ServicesPage = (function() {
168
168
  var code, prev;
169
169
  $('#syntax-status').text('');
170
170
  prev = $('#syntax').data('prev');
171
- code = $.trim($('#syntax').val());
171
+ code = $('#syntax').val().trim();
172
172
  $('#syntax').data('prev', code);
173
173
  if (!(code && code !== prev)) {
174
174
  return;
@@ -194,38 +194,43 @@ ServicesPage = (function() {
194
194
  ServicesPage.prototype.validateForm = function() {
195
195
  var name, valid;
196
196
  $('#name-error').empty();
197
+ $('#unix-users-error').empty();
197
198
  valid = true;
198
- name = $.trim($('#name').val());
199
+ name = $('#name').val().trim();
199
200
  if (name === '') {
200
201
  $('#name-error').text('Name is required.');
201
202
  valid = false;
202
203
  }
204
+ if (this.accounts().length === 0) {
205
+ $('#unix-users-error').text('At least one user account is required.');
206
+ valid = false;
207
+ }
203
208
  return valid;
204
209
  };
210
+ ServicesPage.prototype.accounts = function() {
211
+ var accounts, u, _i, _len, _results;
212
+ accounts = $('#unix-users').val().split(',');
213
+ _results = [];
214
+ for (_i = 0, _len = accounts.length; _i < _len; _i++) {
215
+ u = accounts[_i];
216
+ if (u.trim().length > 0) {
217
+ _results.push(u.trim());
218
+ }
219
+ }
220
+ return _results;
221
+ };
205
222
  ServicesPage.prototype.save = function() {
206
- var accounts, service, u, users;
223
+ var service, users;
207
224
  if (!this.validateForm()) {
208
- return;
225
+ return false;
209
226
  }
210
227
  users = $('#users :checked').map(function() {
211
228
  return $(this).val();
212
229
  }).get();
213
- accounts = $('#unix-users').val().split(',');
214
- accounts = (function() {
215
- var _i, _len, _results;
216
- _results = [];
217
- for (_i = 0, _len = accounts.length; _i < _len; _i++) {
218
- u = accounts[_i];
219
- if ($.trim(u).length > 0) {
220
- _results.push($.trim(u));
221
- }
222
- }
223
- return _results;
224
- })();
225
230
  service = {
226
231
  name: $('#name').val(),
227
232
  code: $('#syntax').val(),
228
- accounts: accounts,
233
+ accounts: this.accounts(),
229
234
  users: users
230
235
  };
231
236
  if ($('#id').val().length > 0) {
@@ -320,7 +325,7 @@ ServicesPage = (function() {
320
325
  $('#services li').removeClass('selected');
321
326
  }
322
327
  $('#beta').empty();
323
- $("<form id=\"editor-form\" class=\"sections y-fill scroll\">\n <input id=\"id\" type=\"hidden\"/>\n <div>\n <section>\n <h2>Service</h2>\n <fieldset>\n <label for=\"name\">Name</label>\n <input id=\"name\" type=\"text\"/>\n <p id=\"name-error\" class=\"error\"></p>\n <label for=\"syntax\">Criteria</label>\n <textarea id=\"syntax\" placeholder=\"fqdn starts with 'www.' and platform is 'mac_os_x'\"></textarea>\n <p id=\"syntax-status\"></p>\n </fieldset>\n </section>\n <section>\n <h2>Members</h2>\n <fieldset id=\"service-preview\">\n <ul id=\"members\" class=\"scroll\"></ul>\n </fieldset>\n </section>\n <section>\n <h2>Permissions</h2>\n <fieldset>\n <label>Users</label>\n <ul id=\"users\" class=\"scroll\"></ul>\n <label for=\"unix-users\">Unix Accounts</label>\n <input id=\"unix-users\" type=\"text\"/>\n </fieldset>\n </section>\n </div>\n</form>\n<form id=\"editor-buttons\">\n <input id=\"save\" type=\"submit\" value=\"Save\"/>\n</form>").appendTo('#beta');
328
+ $("<form id=\"editor-form\" class=\"sections y-fill scroll\">\n <input id=\"id\" type=\"hidden\"/>\n <div>\n <section>\n <h2>Service</h2>\n <fieldset>\n <label for=\"name\">Name</label>\n <input id=\"name\" type=\"text\"/>\n <p id=\"name-error\" class=\"error\"></p>\n <label for=\"syntax\">Criteria</label>\n <textarea id=\"syntax\" placeholder=\"fqdn starts with 'www.' and platform is 'mac_os_x'\"></textarea>\n <p id=\"syntax-status\"></p>\n </fieldset>\n </section>\n <section>\n <h2>Members</h2>\n <fieldset id=\"service-preview\">\n <ul id=\"members\" class=\"scroll\"></ul>\n </fieldset>\n </section>\n <section>\n <h2>Permissions</h2>\n <fieldset>\n <label>Users</label>\n <ul id=\"users\" class=\"scroll\"></ul>\n <label for=\"unix-users\">Unix Accounts</label>\n <input id=\"unix-users\" type=\"text\"/>\n <p id=\"unix-users-error\" class=\"error\"></p>\n <p class=\"hint\">Comma separated user names like: apache, postgres, root, etc.</p>\n </fieldset>\n </section>\n </div>\n</form>\n<form id=\"editor-buttons\">\n <input id=\"save\" type=\"submit\" value=\"Save\"/>\n</form>").appendTo('#beta');
324
329
  if (service) {
325
330
  this.findMembers(service.id);
326
331
  $('#id').val(service.id);
@@ -46,7 +46,7 @@ SystemsPage = (function() {
46
46
  return groups;
47
47
  };
48
48
  SystemsPage.prototype.roster = function() {
49
- var contact, contacts, group, groups, items, name, optgroup, option, sorted, _i, _len, _results;
49
+ var contact, contacts, group, groups, icon, items, name, optgroup, option, opts, sorted, _i, _len, _results;
50
50
  groups = this.groupContacts();
51
51
  sorted = (function() {
52
52
  var _results;
@@ -81,7 +81,7 @@ SystemsPage = (function() {
81
81
  _results2 = [];
82
82
  for (_j = 0, _len2 = contacts.length; _j < _len2; _j++) {
83
83
  contact = contacts[_j];
84
- option = $("<li data-jid=\"" + contact.jid + "\">\n <span class=\"text\"></span>\n <span class=\"unread\" style=\"display:none;\"></span>\n</li>").appendTo(items);
84
+ option = $("<li data-jid=\"" + contact.jid + "\">\n <span class=\"icon\"></span>\n <span class=\"text\"></span>\n <span class=\"unread\" style=\"display:none;\"></span>\n</li>").appendTo(items);
85
85
  if (contact.offline()) {
86
86
  option.addClass('offline');
87
87
  }
@@ -91,7 +91,25 @@ SystemsPage = (function() {
91
91
  name = contact.name || contact.jid.split('@')[0];
92
92
  option.attr('data-name', name);
93
93
  option.attr('data-group', group);
94
- _results2.push($('.text', option).text(name));
94
+ $('.text', option).text(name);
95
+ opts = {
96
+ fill: '#fff',
97
+ stroke: '#404040',
98
+ 'stroke-width': 0.3,
99
+ opacity: 1.0,
100
+ scale: 0.65
101
+ };
102
+ icon = (function() {
103
+ switch (group) {
104
+ case 'People':
105
+ return ICONS.man;
106
+ case 'Services':
107
+ return ICONS.magic;
108
+ default:
109
+ return ICONS.run;
110
+ }
111
+ })();
112
+ _results2.push(new Button($('.icon', option), icon, opts));
95
113
  }
96
114
  return _results2;
97
115
  }).call(this));
@@ -106,7 +124,7 @@ SystemsPage = (function() {
106
124
  if (me || from === this.currentContact) {
107
125
  bottom = this.atBottom();
108
126
  this.appendMessage(message);
109
- if (bottom) {
127
+ if (bottom || me) {
110
128
  return this.scroll({
111
129
  animate: true
112
130
  });
@@ -139,6 +157,7 @@ SystemsPage = (function() {
139
157
  node = $("<li data-jid=\"" + from + "\"><pre></pre></li>").appendTo('#messages');
140
158
  prefix = me ? '$ ' : '';
141
159
  $('pre', node).text(prefix + message.text);
160
+ $('#message-form').css('top', '0px');
142
161
  if (!me) {
143
162
  node.append("<footer>\n <span class=\"author\"></span> @\n <span class=\"time\">" + (this.datef(message.received)) + "</span>\n</footer>");
144
163
  return $('.author', node).text(name);
@@ -192,6 +211,7 @@ SystemsPage = (function() {
192
211
  return $(this).remove();
193
212
  });
194
213
  $('#roster').hide();
214
+ $('#message').focus();
195
215
  selected = $(event.currentTarget);
196
216
  jid = selected.attr('data-jid');
197
217
  contact = this.session.roster[jid];
@@ -201,7 +221,7 @@ SystemsPage = (function() {
201
221
  this.currentContact = jid;
202
222
  $('#message-label').text($('.text', selected).text());
203
223
  $('#messages').empty();
204
- $('#message').focus();
224
+ $('#message-form').css('top', '10px');
205
225
  this.layout.resize();
206
226
  return this.restoreChat(jid);
207
227
  };
@@ -262,10 +282,31 @@ SystemsPage = (function() {
262
282
  input.val('');
263
283
  return false;
264
284
  };
285
+ SystemsPage.prototype.showRoster = function() {
286
+ var container, form, height, items, rform, roster, up;
287
+ container = $('#container');
288
+ form = $('#message-form');
289
+ roster = $('#roster');
290
+ items = $('#roster-items');
291
+ rform = $('#roster-form');
292
+ up = container.height() - form.position().top < container.height() / 2;
293
+ if (up) {
294
+ roster.css('top', '');
295
+ roster.css('bottom', (form.outerHeight() + 5) + 'px');
296
+ height = container.height() - form.outerHeight() - 20;
297
+ } else {
298
+ roster.css('bottom', '');
299
+ roster.css('top', (form.position().top + form.outerHeight()) + 'px');
300
+ height = container.height() - form.position().top - 30;
301
+ }
302
+ items.css('max-height', (height - rform.outerHeight() - 40) + 'px');
303
+ roster.css('max-height', height + 'px');
304
+ return roster.show();
305
+ };
265
306
  SystemsPage.prototype.drawBlankSlate = function() {
266
307
  $("<form id=\"blank-slate\" class=\"float\">\n <p>\n Services, and individual systems, can be controlled by sending\n them shell commands through this terminal. Select a system to chat with\n to get started.\n </p>\n <input type=\"submit\" value=\"Select System\"/>\n</form>").appendTo('#alpha');
267
308
  return $('#blank-slate').submit(__bind(function() {
268
- $('#roster').show();
309
+ this.showRoster();
269
310
  this.layout.resize();
270
311
  return false;
271
312
  }, this));
@@ -278,7 +319,8 @@ SystemsPage = (function() {
278
319
  }
279
320
  $('body').attr('id', 'systems-page');
280
321
  $('#container').hide().empty();
281
- $("<div id=\"alpha\" class=\"primary column x-fill y-fill\">\n <ul id=\"messages\" class=\"scroll y-fill\"></ul>\n <form id=\"message-form\">\n <label id=\"message-label\"></label>\n <input id=\"message\" name=\"message\" type=\"text\" maxlength=\"1024\" placeholder=\"Type a command and press enter to send\"/>\n </form>\n <div id=\"roster\" class=\"float\" style=\"display:none;\">\n <ul id=\"roster-items\"></ul>\n <div id=\"roster-form\"></div>\n </div>\n</div>").appendTo('#container');
322
+ $("<div id=\"alpha\" class=\"primary column x-fill y-fill\">\n <ul id=\"messages\" class=\"scroll\"></ul>\n <form id=\"message-form\">\n <label id=\"message-label\"></label>\n <input id=\"message\" name=\"message\" type=\"text\" maxlength=\"1024\" placeholder=\"Type a command and press enter to send\"/>\n </form>\n <div id=\"roster\" class=\"float\" style=\"display:none;\">\n <ul id=\"roster-items\"></ul>\n <div id=\"roster-form\"></div>\n </div>\n</div>").appendTo('#container');
323
+ $('#message-form').css('top', '10px');
282
324
  $('#message-form').submit(__bind(function() {
283
325
  return this.send();
284
326
  }, this));
@@ -288,9 +330,20 @@ SystemsPage = (function() {
288
330
  $('#message').focus(function() {
289
331
  return $('#roster').hide();
290
332
  });
333
+ $(document).keyup(function(e) {
334
+ if (e.keyCode === 27) {
335
+ return $('#roster').hide();
336
+ }
337
+ });
291
338
  this.roster();
292
339
  $('#message-label').click(__bind(function() {
293
- return $('#roster').toggle();
340
+ var roster;
341
+ roster = $('#roster');
342
+ if (roster.is(':visible')) {
343
+ return roster.hide();
344
+ } else {
345
+ return this.showRoster();
346
+ }
294
347
  }, this));
295
348
  $('#message').keyup(__bind(function(e) {
296
349
  switch (e.keyCode) {
@@ -314,6 +367,7 @@ SystemsPage = (function() {
314
367
  $('#container').show();
315
368
  this.layout = this.resize();
316
369
  this.scroll();
370
+ $('#message').focus();
317
371
  new Filter({
318
372
  list: '#roster-items',
319
373
  form: '#roster-form',
@@ -322,20 +376,15 @@ SystemsPage = (function() {
322
376
  return $('form', '#roster-form').show();
323
377
  };
324
378
  SystemsPage.prototype.resize = function() {
325
- var container, form, items, label, msg, rform, roster;
379
+ var container, form, label, msg, msgs;
326
380
  container = $('#container');
327
- roster = $('#roster');
328
- items = $('#roster-items');
329
- rform = $('#roster-form');
381
+ msgs = $('#messages');
330
382
  msg = $('#message');
331
383
  form = $('#message-form');
332
384
  label = $('#message-label');
333
385
  return new Layout(function() {
334
- var height;
335
386
  msg.width(form.width() - label.width() - 32);
336
- height = container.height() - form.height() - 10;
337
- roster.css('max-height', height);
338
- return items.css('max-height', height - rform.outerHeight() - 10);
387
+ return msgs.css('max-height', container.height() - form.height());
339
388
  });
340
389
  };
341
390
  return SystemsPage;
@@ -49,7 +49,14 @@ form.sections .error {
49
49
  color: #dd2828;
50
50
  font-size: 8pt;
51
51
  width: 89%;
52
- }#systems-page #container {
52
+ }
53
+ .hint {
54
+ color: #aaa;
55
+ font-size: 8pt;
56
+ line-height: 1;
57
+ margin-top: 3px;
58
+ }
59
+ #systems-page #container {
53
60
  height: 100%;
54
61
  }
55
62
  #systems-page #alpha {
@@ -72,7 +79,6 @@ form.sections .error {
72
79
  margin-bottom: 20px;
73
80
  }
74
81
  #systems-page #messages {
75
- height: 100%;
76
82
  list-style: none;
77
83
  width: 100%;
78
84
  }
@@ -91,14 +97,15 @@ form.sections .error {
91
97
  font-family: Menlo, monospace;
92
98
  font-size: 11px;
93
99
  line-height: 1.3;
100
+ word-wrap: break-word;
94
101
  }
95
102
  #systems-page #messages li footer {
96
103
  font-weight: bold;
97
104
  }
98
105
  #systems-page #message-form {
99
- height: 25px;
100
- position: absolute;
101
- bottom: 0;
106
+ height: 21px;
107
+ line-height: 1;
108
+ position: relative;
102
109
  width: 100%;
103
110
  }
104
111
  #systems-page #message-label {
@@ -107,8 +114,6 @@ form.sections .error {
107
114
  font-family: Menlo, monospace;
108
115
  font-size: 11px;
109
116
  padding: 0 2px 0 10px;
110
- position: relative;
111
- top: -3px;
112
117
  }
113
118
  #systems-page #message-label::after {
114
119
  margin: 0;
@@ -124,38 +129,39 @@ form.sections .error {
124
129
  font-size: 11px;
125
130
  margin: 0;
126
131
  padding: 0;
127
- position: relative;
128
- top: -3px;
129
132
  }
130
133
  #systems-page #message:focus {
131
134
  box-shadow: none;
132
135
  }
133
136
  #systems-page #roster {
134
- background: #fff;
135
- border: 1px solid #c4c4c4;
136
- border-radius: 5px;
137
- box-shadow: 0 10px 15px rgba(0,0,0, 0.15);
138
- padding-top: 3px;
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;
139
142
  position: absolute;
140
- bottom: 25px;
141
143
  left: 10px;
142
144
  }
143
145
  #systems-page #roster-items {
144
- font-family: "Lucida Grande", Helvetica, sans-serif;
145
- font-size: 11px;
146
- margin-bottom: 3px;
146
+ color: #fff;
147
+ font-size: 13px;
148
+ font-weight: 500;
147
149
  overflow-y: auto;
150
+ text-shadow: 0 1px 1px rgb(21, 21, 21);
148
151
  }
149
152
  #systems-page #roster-items li {
150
- border-top: 1px solid transparent;
151
- border-bottom: 1px solid transparent;
152
- line-height: 1.5;
153
+ border-top: 1px solid rgb(80, 80, 80);
154
+ border-bottom: 1px solid rgb(48, 48, 48);
155
+ line-height: 38px;
153
156
  list-style: none;
154
157
  padding-right: 50px;
155
158
  position: relative;
156
159
  }
157
160
  #systems-page #roster-items li.offline {
158
- color: rgba(0, 0, 0, 0.25);
161
+ color: #888;
162
+ }
163
+ #systems-page #roster-items li.offline .icon {
164
+ opacity: 0.3;
159
165
  }
160
166
  #systems-page #roster-items li:hover:not(.group) {
161
167
  background: #319be7;
@@ -164,40 +170,58 @@ form.sections .error {
164
170
  background: -o-linear-gradient(#319be7, #1b78d9);
165
171
  background: -webkit-linear-gradient(#319be7, #1b78d9);
166
172
  border-top: 1px solid #148ddf;
167
- border-bottom: 1px solid #095bba;
168
173
  color: #fff;
169
174
  cursor: pointer;
170
175
  text-shadow: -1px 1px 1px hsl(210, 51%, 45%), 0px -1px 1px hsl(210, 51%, 49%);
171
176
  }
172
- #systems-page #roster-items li:not(.group) {
173
- padding-left: 3em;
174
- }
175
177
  #systems-page #roster-items li.group {
176
- color: #808080;
177
- padding-left: 20px;
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;
178
202
  }
179
203
  #systems-page #roster-items li .unread {
180
- color: #c0c0c0;
204
+ background: rgba(255, 255, 255, 0.15);
205
+ border-radius: 30px;
206
+ color: #fff;
181
207
  display: inline-block;
182
- font-size: 9px;
208
+ font-size: 11px;
183
209
  font-weight: bold;
184
210
  line-height: 15px;
211
+ padding: 0 6px;
185
212
  position: absolute;
186
213
  right: 10px;
187
- top: 1px;
214
+ top: 12px;
188
215
  }
189
216
  #systems-page #roster-items li:hover .unread {
190
217
  color: #fff;
191
218
  }
192
219
  #systems-page #roster-form {
193
- background: #f8f8f8;
194
- background: -moz-linear-gradient(#f8f8f8, #eee);
195
- background: -ms-linear-gradient(#f8f8f8, #eee);
196
- background: -o-linear-gradient(#f8f8f8, #eee);
197
- background: -webkit-linear-gradient(#f8f8f8, #eee);
198
- border-top: 1px solid #c4c4c4;
199
- border-bottom-right-radius: 5px;
200
- border-bottom-left-radius: 5px;
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));
201
225
  padding: 3px 5px;
202
226
  }
203
227
  #systems-page #roster-form form {
@@ -49,4 +49,10 @@ form.sections .error {
49
49
  color: #dd2828;
50
50
  font-size: 8pt;
51
51
  width: 89%;
52
- }
52
+ }
53
+ .hint {
54
+ color: #aaa;
55
+ font-size: 8pt;
56
+ line-height: 1;
57
+ margin-top: 3px;
58
+ }
@@ -21,7 +21,6 @@
21
21
  margin-bottom: 20px;
22
22
  }
23
23
  #systems-page #messages {
24
- height: 100%;
25
24
  list-style: none;
26
25
  width: 100%;
27
26
  }
@@ -40,14 +39,15 @@
40
39
  font-family: Menlo, monospace;
41
40
  font-size: 11px;
42
41
  line-height: 1.3;
42
+ word-wrap: break-word;
43
43
  }
44
44
  #systems-page #messages li footer {
45
45
  font-weight: bold;
46
46
  }
47
47
  #systems-page #message-form {
48
- height: 25px;
49
- position: absolute;
50
- bottom: 0;
48
+ height: 21px;
49
+ line-height: 1;
50
+ position: relative;
51
51
  width: 100%;
52
52
  }
53
53
  #systems-page #message-label {
@@ -56,8 +56,6 @@
56
56
  font-family: Menlo, monospace;
57
57
  font-size: 11px;
58
58
  padding: 0 2px 0 10px;
59
- position: relative;
60
- top: -3px;
61
59
  }
62
60
  #systems-page #message-label::after {
63
61
  margin: 0;
@@ -73,38 +71,39 @@
73
71
  font-size: 11px;
74
72
  margin: 0;
75
73
  padding: 0;
76
- position: relative;
77
- top: -3px;
78
74
  }
79
75
  #systems-page #message:focus {
80
76
  box-shadow: none;
81
77
  }
82
78
  #systems-page #roster {
83
- background: #fff;
84
- border: 1px solid #c4c4c4;
85
- border-radius: 5px;
86
- box-shadow: 0 10px 15px rgba(0,0,0, 0.15);
87
- padding-top: 3px;
79
+ background: rgba(60, 60, 60, 0.98);
80
+ border: 2px solid rgb(12, 12, 12);
81
+ border-radius: 3px;
82
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.75);
83
+ min-width: 250px;
88
84
  position: absolute;
89
- bottom: 25px;
90
85
  left: 10px;
91
86
  }
92
87
  #systems-page #roster-items {
93
- font-family: "Lucida Grande", Helvetica, sans-serif;
94
- font-size: 11px;
95
- margin-bottom: 3px;
88
+ color: #fff;
89
+ font-size: 13px;
90
+ font-weight: 500;
96
91
  overflow-y: auto;
92
+ text-shadow: 0 1px 1px rgb(21, 21, 21);
97
93
  }
98
94
  #systems-page #roster-items li {
99
- border-top: 1px solid transparent;
100
- border-bottom: 1px solid transparent;
101
- line-height: 1.5;
95
+ border-top: 1px solid rgb(80, 80, 80);
96
+ border-bottom: 1px solid rgb(48, 48, 48);
97
+ line-height: 38px;
102
98
  list-style: none;
103
99
  padding-right: 50px;
104
100
  position: relative;
105
101
  }
106
102
  #systems-page #roster-items li.offline {
107
- color: rgba(0, 0, 0, 0.25);
103
+ color: #888;
104
+ }
105
+ #systems-page #roster-items li.offline .icon {
106
+ opacity: 0.3;
108
107
  }
109
108
  #systems-page #roster-items li:hover:not(.group) {
110
109
  background: #319be7;
@@ -113,40 +112,58 @@
113
112
  background: -o-linear-gradient(#319be7, #1b78d9);
114
113
  background: -webkit-linear-gradient(#319be7, #1b78d9);
115
114
  border-top: 1px solid #148ddf;
116
- border-bottom: 1px solid #095bba;
117
115
  color: #fff;
118
116
  cursor: pointer;
119
117
  text-shadow: -1px 1px 1px hsl(210, 51%, 45%), 0px -1px 1px hsl(210, 51%, 49%);
120
118
  }
121
- #systems-page #roster-items li:not(.group) {
122
- padding-left: 3em;
123
- }
124
119
  #systems-page #roster-items li.group {
125
- color: #808080;
126
- padding-left: 20px;
120
+ background: #404040;
121
+ background: -moz-linear-gradient(#404040, #353535);
122
+ background: -ms-linear-gradient(#404040, #353535);
123
+ background: -o-linear-gradient(#404040, #353535);
124
+ background: -webkit-linear-gradient(#404040, #353535);
125
+ color: #ccc;
126
+ font-size: 10px;
127
+ font-weight: bold;
128
+ line-height: 2;
129
+ padding-left: 10px;
130
+ text-transform: uppercase;
131
+ }
132
+ #systems-page #roster-items li .icon {
133
+ position: absolute;
134
+ height: 32px;
135
+ width: 32px;
136
+ top: 2px;
137
+ }
138
+ #systems-page #roster-items li .icon svg {
139
+ height: 32px;
140
+ width: 32px;
141
+ }
142
+ #systems-page #roster-items li .text {
143
+ padding-left: 32px;
127
144
  }
128
145
  #systems-page #roster-items li .unread {
129
- color: #c0c0c0;
146
+ background: rgba(255, 255, 255, 0.15);
147
+ border-radius: 30px;
148
+ color: #fff;
130
149
  display: inline-block;
131
- font-size: 9px;
150
+ font-size: 11px;
132
151
  font-weight: bold;
133
152
  line-height: 15px;
153
+ padding: 0 6px;
134
154
  position: absolute;
135
155
  right: 10px;
136
- top: 1px;
156
+ top: 12px;
137
157
  }
138
158
  #systems-page #roster-items li:hover .unread {
139
159
  color: #fff;
140
160
  }
141
161
  #systems-page #roster-form {
142
- background: #f8f8f8;
143
- background: -moz-linear-gradient(#f8f8f8, #eee);
144
- background: -ms-linear-gradient(#f8f8f8, #eee);
145
- background: -o-linear-gradient(#f8f8f8, #eee);
146
- background: -webkit-linear-gradient(#f8f8f8, #eee);
147
- border-top: 1px solid #c4c4c4;
148
- border-bottom-right-radius: 5px;
149
- border-bottom-left-radius: 5px;
162
+ background: rgb(80, 80, 80);
163
+ background: -moz-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
164
+ background: -ms-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
165
+ background: -o-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
166
+ background: -webkit-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
150
167
  padding: 3px 5px;
151
168
  }
152
169
  #systems-page #roster-form form {