vines-services 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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 {
|