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.
- data/lib/vines/services/command/init.rb +10 -7
- data/lib/vines/services/connection.rb +5 -0
- data/lib/vines/services/storage/couchdb/service.rb +7 -0
- data/lib/vines/services/version.rb +1 -1
- data/web/coffeescripts/services.coffee +15 -6
- data/web/coffeescripts/systems.coffee +51 -11
- data/web/javascripts/app.js +2 -2
- data/web/javascripts/services.js +23 -18
- data/web/javascripts/systems.js +65 -16
- data/web/stylesheets/app.css +63 -39
- data/web/stylesheets/common.css +7 -1
- data/web/stylesheets/systems.css +55 -38
- metadata +20 -20
data/web/javascripts/services.js
CHANGED
@@ -168,7 +168,7 @@ ServicesPage = (function() {
|
|
168
168
|
var code, prev;
|
169
169
|
$('#syntax-status').text('');
|
170
170
|
prev = $('#syntax').data('prev');
|
171
|
-
code =
|
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 =
|
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
|
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);
|
data/web/javascripts/systems.js
CHANGED
@@ -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
|
-
|
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').
|
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
|
-
|
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
|
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
|
-
|
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,
|
379
|
+
var container, form, label, msg, msgs;
|
326
380
|
container = $('#container');
|
327
|
-
|
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
|
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;
|
data/web/stylesheets/app.css
CHANGED
@@ -49,7 +49,14 @@ 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
|
+
}
|
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:
|
100
|
-
|
101
|
-
|
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:
|
135
|
-
border:
|
136
|
-
border-radius:
|
137
|
-
box-shadow: 0 10px
|
138
|
-
|
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
|
-
|
145
|
-
font-size:
|
146
|
-
|
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
|
151
|
-
border-bottom: 1px solid
|
152
|
-
line-height:
|
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:
|
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
|
-
|
177
|
-
|
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
|
-
|
204
|
+
background: rgba(255, 255, 255, 0.15);
|
205
|
+
border-radius: 30px;
|
206
|
+
color: #fff;
|
181
207
|
display: inline-block;
|
182
|
-
font-size:
|
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:
|
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:
|
194
|
-
background: -moz-linear-gradient(
|
195
|
-
background: -ms-linear-gradient(
|
196
|
-
background: -o-linear-gradient(
|
197
|
-
background: -webkit-linear-gradient(
|
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 {
|
data/web/stylesheets/common.css
CHANGED
data/web/stylesheets/systems.css
CHANGED
@@ -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:
|
49
|
-
|
50
|
-
|
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:
|
84
|
-
border:
|
85
|
-
border-radius:
|
86
|
-
box-shadow: 0 10px
|
87
|
-
|
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
|
-
|
94
|
-
font-size:
|
95
|
-
|
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
|
100
|
-
border-bottom: 1px solid
|
101
|
-
line-height:
|
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:
|
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
|
-
|
126
|
-
|
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
|
-
|
146
|
+
background: rgba(255, 255, 255, 0.15);
|
147
|
+
border-radius: 30px;
|
148
|
+
color: #fff;
|
130
149
|
display: inline-block;
|
131
|
-
font-size:
|
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:
|
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:
|
143
|
-
background: -moz-linear-gradient(
|
144
|
-
background: -ms-linear-gradient(
|
145
|
-
background: -o-linear-gradient(
|
146
|
-
background: -webkit-linear-gradient(
|
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 {
|