pixl-xyapp 2.1.0 → 2.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.
package/css/base.css CHANGED
@@ -12,11 +12,11 @@
12
12
  --pink: rgb(232, 62, 140);
13
13
  --red: rgb(220, 53, 69);
14
14
  --orange: rgb(253, 126, 20);
15
- --yellow: rgb(255, 193, 7);
15
+ --yellow: rgb(240, 200, 0);
16
16
  --green: rgb(40, 167, 69);
17
17
  --teal: rgb(32, 201, 151);
18
18
  --cyan: rgb(23, 162, 184);
19
- --gray: rgb(108, 117, 125);
19
+ --gray: rgb(138, 147, 155);
20
20
  --primary: rgb(0, 123, 255);
21
21
  --secondary: rgb(108, 117, 125);
22
22
  --success: rgb(40, 167, 69);
@@ -109,6 +109,9 @@ body.dark {
109
109
  --yellow: rgb(204, 154, 6);
110
110
  --yellow-highlight: color-mix(in srgb, rgb(204, 154, 6) 80%, white);
111
111
 
112
+ --gray: rgb(98, 107, 115);
113
+ --gray-highlight: color-mix(in srgb, rgb(98, 107, 115) 80%, white);
114
+
112
115
  --border-color: rgb(50, 54, 58);
113
116
  --shadow-color: rgba(0, 0, 0, 0.0);
114
117
  --background-color: rgb(24, 28, 32);
@@ -259,9 +262,6 @@ body.sidebar div.sidebar {
259
262
  left: 0;
260
263
  }
261
264
 
262
- body {
263
- /* transition: 0.2s ease padding-left; */
264
- }
265
265
  div.sidebar {
266
266
  transition: 0.2s ease left;
267
267
  }
@@ -690,6 +690,7 @@ div.toast > span {
690
690
  display: block;
691
691
  position: relative;
692
692
  margin-left: 35px;
693
+ word-break: break-word;
693
694
  }
694
695
 
695
696
  div.toast.success { background: #44bb44; }
@@ -806,10 +807,6 @@ div.message a:hover {
806
807
 
807
808
  /* Main */
808
809
 
809
- div.main {
810
-
811
- }
812
-
813
810
  div.page_intro {
814
811
  padding: 30px 20px 0px 30px;
815
812
  font-size: 14px;
@@ -975,10 +972,6 @@ body.dark .button {
975
972
  opacity: 1.0;
976
973
  /* text-decoration: underline; */
977
974
  }
978
- body.dark .button:hover {
979
- /* background: var(--background-color); */
980
- }
981
-
982
975
  .button:active {
983
976
  top: 0px;
984
977
  box-shadow: none;
@@ -1105,7 +1098,7 @@ body.dark .button.primary {
1105
1098
  width: 100%;
1106
1099
  }
1107
1100
 
1108
- .form_row input[type="text"], .form_row input[type="password"], .form_row input[type="email"], .form_row input[type="url"], .form_row input[type="number"], .form_row input[type="date"], .form_row input[type="datetime-local"] {
1101
+ .form_row input[type="text"], .form_row input[type="password"], .form_row input[type="email"], .form_row input[type="url"], .form_row input[type="number"], .form_row input[type="date"], .form_row input[type="time"], .form_row input[type="datetime-local"], .form_row input[type="tel"], .form_row input[type="color"] {
1109
1102
  -moz-appearance: none;
1110
1103
  -webkit-appearance: none;
1111
1104
  appearance: none;
@@ -1119,15 +1112,19 @@ body.dark .button.primary {
1119
1112
  transition: 0.2s ease all;
1120
1113
  cursor: text;
1121
1114
  }
1122
- .form_row input[type="text"]:focus, .form_row input[type="password"]:focus, .form_row input[type="email"]:focus, .form_row input[type="url"]:focus, .form_row input[type="number"]:focus, .form_row input[type="date"]:focus, .form_row input[type="datetime-local"]:focus {
1115
+ .form_row input[type="text"]:focus, .form_row input[type="password"]:focus, .form_row input[type="email"]:focus, .form_row input[type="url"]:focus, .form_row input[type="number"]:focus, .form_row input[type="date"]:focus, .form_row input[type="time"]:focus, .form_row input[type="datetime-local"]:focus, .form_row input[type="tel"]:focus, .form_row input[type="color"]:focus {
1123
1116
  /* color: var(--theme-color); */
1124
1117
  border: 1px solid var(--theme-color-half);
1125
1118
  }
1126
1119
 
1127
- .form_row input[type="text"].warning, .form_row input[type="email"].warning, .form_row input[type="url"].warning, .form_row input[type="number"].warning, .form_row input[type="date"].warning, .form_row input[type="datetime-local"].warning {
1120
+ .form_row input[type="text"].warning, .form_row input[type="email"].warning, .form_row input[type="url"].warning, .form_row input[type="number"].warning, .form_row input[type="date"].warning, .form_row input[type="time"].warning, .form_row input[type="datetime-local"].warning, .form_row input[type="tel"].warning, .form_row input[type="color"].warning {
1128
1121
  border: 1px solid red;
1129
1122
  }
1130
1123
 
1124
+ .form_row input[type="color"] {
1125
+ cursor: default;
1126
+ }
1127
+
1131
1128
  .form_row input[type="text"].regexp {
1132
1129
  font-size: 12px;
1133
1130
  }
@@ -1149,6 +1146,9 @@ body.dark .button.primary {
1149
1146
  /* color: var(--theme-color); */
1150
1147
  border: 1px solid var(--theme-color-half);
1151
1148
  }
1149
+ .dialog .form_row textarea {
1150
+ resize: none;
1151
+ }
1152
1152
 
1153
1153
  input:disabled, textarea:disabled {
1154
1154
  /* color: var(--body-text-color) !important; */
@@ -1286,6 +1286,9 @@ body.dark .multiselect.multi {
1286
1286
  body.dark .multiselect > .item {
1287
1287
  background: var(--border-color);
1288
1288
  }
1289
+ body.dark .dialog .multiselect > .item {
1290
+ background: rgba(255, 255, 255, 0.1);
1291
+ }
1289
1292
 
1290
1293
  .multiselect > .item > i.mdi-close:hover:before {
1291
1294
  content: "\F0159"; /* mdi-close-circle */
@@ -1308,6 +1311,10 @@ body.dark .multiselect > .item.inherited {
1308
1311
  font-style: italic;
1309
1312
  color: var(--label-color);
1310
1313
 
1314
+ white-space: nowrap;
1315
+ overflow: hidden;
1316
+ text-overflow: ellipsis;
1317
+
1311
1318
  user-select: none;
1312
1319
  -moz-user-select: none;
1313
1320
  -webkit-user-select: none;
@@ -1322,10 +1329,10 @@ body.dark .multiselect > .item.inherited {
1322
1329
  padding-top: 2px;
1323
1330
  padding-bottom: 0px;
1324
1331
  }
1325
- .form_grid .multiselect.single {
1332
+ /* .form_grid .multiselect.single {
1326
1333
  padding-top: 2px;
1327
1334
  padding-bottom: 0px;
1328
- }
1335
+ } */
1329
1336
 
1330
1337
  .multiselect > .single {
1331
1338
  padding-top: 1px;
@@ -1529,6 +1536,12 @@ div.info_value:last-child {
1529
1536
  margin-bottom: 0px;
1530
1537
  }
1531
1538
 
1539
+ div.info_caption {
1540
+ margin-top: 4px;
1541
+ font-size: 11px;
1542
+ color: var(--label-color);
1543
+ }
1544
+
1532
1545
  .checker {
1533
1546
  position: relative;
1534
1547
  left: -12px;
@@ -1708,10 +1721,6 @@ body.dark #dialog, body.dark .dialog {
1708
1721
  color: var(--red);
1709
1722
  }
1710
1723
 
1711
- .dialog_content {
1712
-
1713
- }
1714
-
1715
1724
  .dialog_help {
1716
1725
  font-size: 12px;
1717
1726
  font-style: italic;
@@ -2325,9 +2334,6 @@ body.dark .data_table tr th {
2325
2334
 
2326
2335
  background: transparent;
2327
2336
  /* background: linear-gradient(to top, #efefef 0%, #fff 100%); */
2328
- }
2329
- .data_table tr.highlight td {
2330
-
2331
2337
  }
2332
2338
  .data_table.extra_padding tr td {
2333
2339
  padding-top: 10px;
@@ -2354,6 +2360,10 @@ table.data_table.compact th:first-child, table.data_table.compact td:first-child
2354
2360
  padding-left: 10px;
2355
2361
  }
2356
2362
 
2363
+ div.data_table_compact > div.data_grid > ul.grid_row_header > div {
2364
+ margin-bottom: 5px;
2365
+ }
2366
+
2357
2367
  div.td_big {
2358
2368
  line-height: 21px;
2359
2369
  font-size: 13px;
@@ -2618,10 +2628,6 @@ body.dark .color_label {
2618
2628
  align-items: center;
2619
2629
  }
2620
2630
 
2621
- .simple_grid_horiz > div {
2622
-
2623
- }
2624
-
2625
2631
  /* My Account */
2626
2632
 
2627
2633
  .avatar_edit {
package/js/base.js CHANGED
@@ -42,6 +42,7 @@ var app = {
42
42
  var html = '<div class="header_nav_cont">';
43
43
 
44
44
  items.forEach( function(item, idx) {
45
+ if (!item) return;
45
46
  if (typeof(item) == 'string') {
46
47
  if (config.ui.nav[item]) item = config.ui.nav[item];
47
48
  else { html += item; return; }
@@ -161,6 +162,7 @@ var app = {
161
162
  var page = this.page_manager.find(id);
162
163
  if (page && page.onKeyDown) page.onKeyDown(event);
163
164
  }
165
+ else if (app.onKeyDown) app.onKeyDown(event);
164
166
  },
165
167
 
166
168
  handleUnload: function(event) {
@@ -271,7 +273,7 @@ var app = {
271
273
 
272
274
  request: function(url, opts, callback, errorCallback) {
273
275
  // send HTTP GET to API endpoint
274
- Debug.trace('api', "Sending API request: " + url );
276
+ // Debug.trace('api', "Sending API request: " + url );
275
277
 
276
278
  // default 10 sec timeout
277
279
  var timeout = opts.timeout || 10000;
@@ -634,7 +636,7 @@ window.addEventListener( "click", function(e) {
634
636
 
635
637
  window.addEventListener( "keydown", function(event) {
636
638
  if (Popover.enabled) Popover.handleKeyDown(event);
637
- else if (CodeEditor.handleKeyDown) CodeEditor.handleKeyDown(event);
639
+ else if (CodeEditor.active) CodeEditor.handleKeyDown(event);
638
640
  else if (Dialog.active) Dialog.confirm_key(event);
639
641
  else app.handleKeyDown(event);
640
642
  }, false );
package/js/page.js CHANGED
@@ -62,13 +62,17 @@ window.Page = class Page {
62
62
  // add localized strings and markdown captions
63
63
  var html = '';
64
64
 
65
+ // pull in args from localized ui config (for label, caption, etc.)
65
66
  if (args.id && config.ui.dom[args.id]) {
66
- // pull in args from localized ui config (for label, caption, etc.)
67
- // merge_hash_into( args, config.ui.dom[args.id] );
68
67
  for (var key in config.ui.dom[args.id]) {
69
68
  if (!args[key]) args[key] = config.ui.dom[args.id][key];
70
69
  }
71
70
  }
71
+ else if (args.id && config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) {
72
+ for (var key in config.ui.pages[this.ID][args.id]) {
73
+ if (!args[key]) args[key] = config.ui.pages[this.ID][args.id][key];
74
+ }
75
+ }
72
76
 
73
77
  var label = args.label;
74
78
  var content = args.content;
@@ -98,9 +102,10 @@ window.Page = class Page {
98
102
  if (args.disabled) args.disabled = "disabled";
99
103
  else delete args.disabled;
100
104
 
101
- if (args.id && config.ui.dom[args.id]) {
102
- // pull in args from localized ui config
103
- merge_hash_into( args, config.ui.dom[args.id] );
105
+ // pull in args from localized ui config
106
+ if (args.id) {
107
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
108
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
104
109
  }
105
110
 
106
111
  // stupid hack for safari (autofill bug)
@@ -118,9 +123,10 @@ window.Page = class Page {
118
123
  var value = ('value' in args) ? args.value : '';
119
124
  delete args.value;
120
125
 
121
- if (args.id && config.ui.dom[args.id]) {
122
- // pull in args from localized ui config
123
- merge_hash_into( args, config.ui.dom[args.id] );
126
+ // pull in args from localized ui config
127
+ if (args.id) {
128
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
129
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
124
130
  }
125
131
 
126
132
  return '<textarea ' + compose_attribs(args) + '>' + encode_entities(value) + '</textarea>';
@@ -130,9 +136,10 @@ window.Page = class Page {
130
136
  // render checkbox for form
131
137
  var html = '';
132
138
 
133
- if (args.id && config.ui.dom[args.id]) {
134
- // pull in args from localized ui config
135
- merge_hash_into( args, config.ui.dom[args.id] );
139
+ // pull in args from localized ui config
140
+ if (args.id) {
141
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
142
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
136
143
  }
137
144
 
138
145
  var label = args.label || '';
@@ -165,9 +172,10 @@ window.Page = class Page {
165
172
  var html = '';
166
173
  html += '<div class="select_chevron mdi mdi-chevron-down" style="top:7px;"></div>';
167
174
 
168
- if (args.id && config.ui.dom[args.id]) {
169
- // pull in args from localized ui config
170
- merge_hash_into( args, config.ui.dom[args.id] );
175
+ // pull in args from localized ui config
176
+ if (args.id) {
177
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
178
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
171
179
  }
172
180
 
173
181
  var opts = args.options;
@@ -197,9 +205,10 @@ window.Page = class Page {
197
205
  var html = '';
198
206
  var opt_values = [];
199
207
 
200
- if (args.id && config.ui.dom[args.id]) {
201
- // pull in args from localized ui config
202
- merge_hash_into( args, config.ui.dom[args.id] );
208
+ // pull in args from localized ui config
209
+ if (args.id) {
210
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
211
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
203
212
  }
204
213
 
205
214
  var opts = deep_copy_object(args.options);
@@ -269,9 +278,10 @@ window.Page = class Page {
269
278
  // render single-select menu for form
270
279
  var html = '';
271
280
 
272
- if (args.id && config.ui.dom[args.id]) {
273
- // pull in args from localized ui config
274
- merge_hash_into( args, config.ui.dom[args.id] );
281
+ // pull in args from localized ui config
282
+ if (args.id) {
283
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
284
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
275
285
  }
276
286
 
277
287
  var opts = deep_copy_object(args.options);
@@ -299,9 +309,10 @@ window.Page = class Page {
299
309
 
300
310
  getFormFieldset(args) {
301
311
  // get fieldset for form
302
- if (args.id && config.ui.dom[args.id]) {
303
- // pull in args from localized ui config
304
- merge_hash_into( args, config.ui.dom[args.id] );
312
+ // pull in args from localized ui config
313
+ if (args.id) {
314
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
315
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
305
316
  }
306
317
 
307
318
  var legend = ('legend' in args) ? args.legend : '';
@@ -317,9 +328,10 @@ window.Page = class Page {
317
328
  // get info group pair for fieldset in form
318
329
  var html = '';
319
330
 
320
- if (args.id && config.ui.dom[args.id]) {
321
- // pull in args from localized ui config
322
- merge_hash_into( args, config.ui.dom[args.id] );
331
+ // pull in args from localized ui config
332
+ if (args.id) {
333
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
334
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
323
335
  }
324
336
 
325
337
  if ('label' in args) html += '<div class="info_label">' + args.label + '</div>';
@@ -331,9 +343,10 @@ window.Page = class Page {
331
343
  // render file field for form
332
344
  if (!args.type) args.type = 'file';
333
345
 
334
- if (args.id && config.ui.dom[args.id]) {
335
- // pull in args from localized ui config
336
- merge_hash_into( args, config.ui.dom[args.id] );
346
+ // pull in args from localized ui config
347
+ if (args.id) {
348
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
349
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
337
350
  }
338
351
 
339
352
  return '<input ' + compose_attribs(args) + '/>';
@@ -348,9 +361,10 @@ window.Page = class Page {
348
361
  }
349
362
  if (!args.type) args.type = 'hidden';
350
363
 
351
- if (args.id && config.ui.dom[args.id]) {
352
- // pull in args from localized ui config
353
- merge_hash_into( args, config.ui.dom[args.id] );
364
+ // pull in args from localized ui config
365
+ if (args.id) {
366
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
367
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
354
368
  }
355
369
 
356
370
  return '<input ' + compose_attribs(args) + '/><div class="form_date"></div>';
@@ -364,9 +378,10 @@ window.Page = class Page {
364
378
  var unit = 'seconds';
365
379
  var html = '';
366
380
 
367
- if (args.id && config.ui.dom[args.id]) {
368
- // pull in args from localized ui config
369
- merge_hash_into( args, config.ui.dom[args.id] );
381
+ // pull in args from localized ui config
382
+ if (args.id) {
383
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
384
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
370
385
  }
371
386
 
372
387
  var units = [
@@ -408,9 +423,10 @@ window.Page = class Page {
408
423
  var unit = 'b';
409
424
  var html = '';
410
425
 
411
- if (args.id && config.ui.dom[args.id]) {
412
- // pull in args from localized ui config
413
- merge_hash_into( args, config.ui.dom[args.id] );
426
+ // pull in args from localized ui config
427
+ if (args.id) {
428
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
429
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
414
430
  }
415
431
 
416
432
  var units = [
@@ -454,12 +470,14 @@ window.Page = class Page {
454
470
  if (!args.value) args.value = 0;
455
471
  var html = '';
456
472
 
457
- if (args.id && config.ui.dom[args.id]) {
458
- // pull in args from localized ui config
459
- merge_hash_into( args, config.ui.dom[args.id] );
473
+ // pull in args from localized ui config
474
+ if (args.id) {
475
+ if (config.ui.dom[args.id]) merge_hash_into( args, config.ui.dom[args.id] );
476
+ else if (config.ui.pages[this.ID] && config.ui.pages[this.ID][args.id]) merge_hash_into( args, config.ui.pages[this.ID][args.id] );
460
477
  }
461
478
 
462
- args.onInput = `$P().updateFormRange(this)`;
479
+ if (args.onInput) args.onInput += ';'; else args.onInput = '';
480
+ args.onInput += `$P().updateFormRange(this)`;
463
481
 
464
482
  html += '<div class="form_row_range">';
465
483
  html += '<div>' + this.getFormText( merge_objects(args, { type: 'range' }) ) + '</div>';
@@ -1084,7 +1102,7 @@ window.Page = class Page {
1084
1102
  }
1085
1103
  else {
1086
1104
  Debug.trace("User cookie is invalid, redirecting to login page");
1087
- self.setPref('username', '');
1105
+ app.setPref('username', '');
1088
1106
  setTimeout( function() { Nav.go('Login'); }, 1 );
1089
1107
  }
1090
1108
  } );
package/js/popover.js CHANGED
@@ -16,6 +16,8 @@ var Popover = {
16
16
  });
17
17
  if (!shrinkwrap) $box.css('width', '' + Math.floor( rect.width ) + 'px');
18
18
 
19
+ if ($elem.data('popover-z-index')) $box.css('z-index', $elem.data('popover-z-index'));
20
+
19
21
  $('body').append( $box );
20
22
 
21
23
  this.$box = $box;
@@ -59,9 +61,11 @@ var Popover = {
59
61
 
60
62
  var $overlay = $('<div id="popoverlay"></div>').css('opacity', 0);
61
63
  $('body').append($overlay);
62
- $overlay.fadeTo( 500, 0.5 ).click(function() {
63
- Popover.detach();
64
- });
64
+ $overlay.click( function() { Popover.detach(); } );
65
+
66
+ if (!$elem.data('popover-hide-overlay')) {
67
+ $overlay.fadeTo( 500, 0.5 );
68
+ }
65
69
 
66
70
  if (!Dialog.active) unscroll();
67
71
  }, 1 );
package/js/tools.js CHANGED
@@ -969,7 +969,7 @@ function stablePrettyStringify(node) {
969
969
 
970
970
  function inline_marked(md) {
971
971
  // render text to markdown, trimming and stripping outer <p> tag
972
- return marked.parse(md, config.ui.marked_config).trim().replace(/^<p>(.+)<\/p>$/, '$1')
972
+ return marked.parseInline(md, config.ui.marked_config);
973
973
  };
974
974
 
975
975
  // Debounce Function Generator
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixl-xyapp",
3
- "version": "2.1.0",
3
+ "version": "2.1.2",
4
4
  "description": "A theme for xyOps.",
5
5
  "author": "Joseph Huckaby <jhuckaby@pixlcore.com>",
6
6
  "homepage": "https://github.com/pixlcore/pixl-xyapp",