plutonium 0.66.0 → 0.67.0
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.
- checksums.yaml +4 -4
- data/.claude/skills/plutonium-resource/SKILL.md +14 -8
- data/.claude/skills/plutonium-ui/SKILL.md +11 -3
- data/CHANGELOG.md +22 -0
- data/SECURITY.md +1 -1
- data/app/assets/plutonium.css +1 -1
- data/app/assets/plutonium.js +56 -3
- data/app/assets/plutonium.js.map +4 -4
- data/app/assets/plutonium.min.js +32 -32
- data/app/assets/plutonium.min.js.map +4 -4
- data/config/brakeman.ignore +1 -1
- data/config/locales/en/js.yml +4 -0
- data/config/locales/en/ui.yml +16 -0
- data/docs/reference/resource/definition.md +12 -7
- data/docs/reference/resource/query.md +11 -1
- data/docs/reference/ui/displays.md +19 -2
- data/docs/reference/ui/forms.md +54 -4
- data/gemfiles/rails_7.gemfile +1 -0
- data/gemfiles/rails_7.gemfile.lock +13 -3
- data/gemfiles/rails_8.0.gemfile +1 -0
- data/gemfiles/rails_8.0.gemfile.lock +10 -1
- data/gemfiles/rails_8.1.gemfile +1 -0
- data/gemfiles/rails_8.1.gemfile.lock +10 -1
- data/lib/plutonium/auth/rodauth.rb +7 -0
- data/lib/plutonium/core/controller.rb +0 -2
- data/lib/plutonium/helpers/content_helper.rb +0 -3
- data/lib/plutonium/query/filter.rb +2 -1
- data/lib/plutonium/query/filters/tags.rb +36 -0
- data/lib/plutonium/ui/component/resolves_tags.rb +13 -0
- data/lib/plutonium/ui/display/base.rb +50 -2
- data/lib/plutonium/ui/display/components/badge.rb +1 -1
- data/lib/plutonium/ui/display/components/binary.rb +20 -0
- data/lib/plutonium/ui/display/components/boolean.rb +1 -1
- data/lib/plutonium/ui/display/components/code.rb +23 -0
- data/lib/plutonium/ui/display/components/color.rb +14 -6
- data/lib/plutonium/ui/display/components/duration.rb +31 -0
- data/lib/plutonium/ui/display/components/file_size.rb +22 -0
- data/lib/plutonium/ui/display/components/key_value.rb +37 -0
- data/lib/plutonium/ui/display/components/list.rb +33 -0
- data/lib/plutonium/ui/display/components/number.rb +32 -0
- data/lib/plutonium/ui/display/components/progress.rb +36 -0
- data/lib/plutonium/ui/display/components/rating.rb +36 -0
- data/lib/plutonium/ui/display/components/relative_time.rb +25 -0
- data/lib/plutonium/ui/display/components/rich_text.rb +23 -0
- data/lib/plutonium/ui/display/components/tags.rb +18 -0
- data/lib/plutonium/ui/display/options/inferred_types.rb +13 -0
- data/lib/plutonium/ui/display/theme.rb +24 -2
- data/lib/plutonium/ui/form/base.rb +30 -1
- data/lib/plutonium/ui/form/components/binary.rb +40 -0
- data/lib/plutonium/ui/form/components/key_value_store.rb +22 -71
- data/lib/plutonium/ui/form/components/list.rb +46 -0
- data/lib/plutonium/ui/form/components/rating.rb +51 -0
- data/lib/plutonium/ui/form/components/rich_text.rb +20 -0
- data/lib/plutonium/ui/form/components/tags.rb +45 -0
- data/lib/plutonium/ui/form/components/tags_filter.rb +40 -0
- data/lib/plutonium/ui/form/components/uppy.rb +1 -1
- data/lib/plutonium/ui/form/options/inferred_types.rb +16 -15
- data/lib/plutonium/ui/form/theme.rb +20 -4
- data/lib/plutonium/ui/grid/card.rb +13 -1
- data/lib/plutonium/ui/layout/base.rb +10 -1
- data/lib/plutonium/ui/options/rich_text_field.rb +18 -0
- data/lib/plutonium/ui/options/secret_field.rb +32 -0
- data/lib/plutonium/ui/options/tags_field.rb +23 -0
- data/lib/plutonium/ui/table/components/toolbar.rb +2 -2
- data/lib/plutonium/ui/table/components/view_switcher.rb +4 -2
- data/lib/plutonium/ui/table/display_theme.rb +30 -2
- data/lib/plutonium/version.rb +1 -1
- data/package.json +1 -1
- data/src/css/components.css +43 -0
- data/src/css/flatpickr.css +91 -0
- data/src/js/controllers/easymde_controller.js +1 -0
- data/src/js/controllers/register_controllers.js +2 -0
- data/src/js/controllers/slim_select_controller.js +32 -3
- data/src/js/controllers/timeago_controller.js +40 -0
- metadata +25 -2
data/src/css/flatpickr.css
CHANGED
|
@@ -795,3 +795,94 @@ span.flatpickr-weekday {
|
|
|
795
795
|
[data-controller="remote-modal"] > .flatpickr-calendar {
|
|
796
796
|
left: auto !important;
|
|
797
797
|
}
|
|
798
|
+
|
|
799
|
+
/* Dark mode: map flatpickr's hardcoded light palette onto the design tokens. */
|
|
800
|
+
.dark .flatpickr-calendar {
|
|
801
|
+
background: var(--pu-surface);
|
|
802
|
+
box-shadow: 0 0 0 1px var(--pu-border), 0 3px 13px rgba(0, 0, 0, 0.4);
|
|
803
|
+
}
|
|
804
|
+
.dark .flatpickr-calendar.arrowTop:after {
|
|
805
|
+
border-bottom-color: var(--pu-surface);
|
|
806
|
+
}
|
|
807
|
+
.dark .flatpickr-calendar.arrowBottom:after {
|
|
808
|
+
border-top-color: var(--pu-surface);
|
|
809
|
+
}
|
|
810
|
+
.dark .flatpickr-calendar.arrowTop:before {
|
|
811
|
+
border-bottom-color: var(--pu-border);
|
|
812
|
+
}
|
|
813
|
+
.dark .flatpickr-calendar.arrowBottom:before {
|
|
814
|
+
border-top-color: var(--pu-border);
|
|
815
|
+
}
|
|
816
|
+
.dark .flatpickr-calendar.hasTime .flatpickr-time {
|
|
817
|
+
border-top-color: var(--pu-border);
|
|
818
|
+
}
|
|
819
|
+
.dark .flatpickr-months .flatpickr-month,
|
|
820
|
+
.dark .flatpickr-months .flatpickr-prev-month,
|
|
821
|
+
.dark .flatpickr-months .flatpickr-next-month,
|
|
822
|
+
.dark .flatpickr-current-month input.cur-year,
|
|
823
|
+
.dark .flatpickr-current-month .flatpickr-monthDropdown-months {
|
|
824
|
+
color: var(--pu-text);
|
|
825
|
+
fill: var(--pu-text);
|
|
826
|
+
}
|
|
827
|
+
.dark .flatpickr-months .flatpickr-prev-month:hover svg,
|
|
828
|
+
.dark .flatpickr-months .flatpickr-next-month:hover svg {
|
|
829
|
+
fill: var(--pu-text-muted);
|
|
830
|
+
}
|
|
831
|
+
.dark .flatpickr-current-month .flatpickr-monthDropdown-months,
|
|
832
|
+
.dark .flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {
|
|
833
|
+
background: var(--pu-surface);
|
|
834
|
+
}
|
|
835
|
+
.dark .flatpickr-current-month .numInputWrapper span.arrowUp:after {
|
|
836
|
+
border-bottom-color: var(--pu-text);
|
|
837
|
+
}
|
|
838
|
+
.dark .flatpickr-current-month .numInputWrapper span.arrowDown:after {
|
|
839
|
+
border-top-color: var(--pu-text);
|
|
840
|
+
}
|
|
841
|
+
.dark span.flatpickr-weekday {
|
|
842
|
+
color: var(--pu-text-muted);
|
|
843
|
+
}
|
|
844
|
+
.dark .flatpickr-day {
|
|
845
|
+
color: var(--pu-text);
|
|
846
|
+
}
|
|
847
|
+
.dark .flatpickr-day:hover,
|
|
848
|
+
.dark .flatpickr-day:focus,
|
|
849
|
+
.dark .flatpickr-day.prevMonthDay:hover,
|
|
850
|
+
.dark .flatpickr-day.nextMonthDay:hover,
|
|
851
|
+
.dark .flatpickr-day.inRange {
|
|
852
|
+
background: var(--pu-surface-alt);
|
|
853
|
+
border-color: var(--pu-surface-alt);
|
|
854
|
+
}
|
|
855
|
+
.dark .flatpickr-day.inRange {
|
|
856
|
+
box-shadow: -5px 0 0 var(--pu-surface-alt), 5px 0 0 var(--pu-surface-alt);
|
|
857
|
+
}
|
|
858
|
+
.dark .flatpickr-day.today {
|
|
859
|
+
border-color: var(--pu-text-muted);
|
|
860
|
+
}
|
|
861
|
+
.dark .flatpickr-day.prevMonthDay,
|
|
862
|
+
.dark .flatpickr-day.nextMonthDay,
|
|
863
|
+
.dark .flatpickr-day.flatpickr-disabled,
|
|
864
|
+
.dark .flatpickr-day.flatpickr-disabled:hover {
|
|
865
|
+
color: var(--pu-text-muted);
|
|
866
|
+
opacity: 0.5;
|
|
867
|
+
}
|
|
868
|
+
.dark .flatpickr-weekwrapper .flatpickr-weeks,
|
|
869
|
+
.dark .dayContainer + .dayContainer {
|
|
870
|
+
box-shadow: none;
|
|
871
|
+
}
|
|
872
|
+
.dark .flatpickr-time input,
|
|
873
|
+
.dark .flatpickr-time .flatpickr-am-pm,
|
|
874
|
+
.dark .flatpickr-time .flatpickr-time-separator {
|
|
875
|
+
color: var(--pu-text);
|
|
876
|
+
}
|
|
877
|
+
.dark .flatpickr-time .numInputWrapper span.arrowUp:after {
|
|
878
|
+
border-bottom-color: var(--pu-text);
|
|
879
|
+
}
|
|
880
|
+
.dark .flatpickr-time .numInputWrapper span.arrowDown:after {
|
|
881
|
+
border-top-color: var(--pu-text);
|
|
882
|
+
}
|
|
883
|
+
.dark .flatpickr-time input:hover,
|
|
884
|
+
.dark .flatpickr-time .flatpickr-am-pm:hover,
|
|
885
|
+
.dark .flatpickr-time input:focus,
|
|
886
|
+
.dark .flatpickr-time .flatpickr-am-pm:focus {
|
|
887
|
+
background: var(--pu-surface-alt);
|
|
888
|
+
}
|
|
@@ -43,6 +43,7 @@ import BreadcrumbsController from "./breadcrumbs_controller.js"
|
|
|
43
43
|
import RunProgressController from "./run_progress_controller.js"
|
|
44
44
|
import ChartController from "./chart_controller.js"
|
|
45
45
|
import FrameRefreshController from "./frame_refresh_controller.js"
|
|
46
|
+
import TimeagoController from "./timeago_controller.js"
|
|
46
47
|
|
|
47
48
|
export default function (application) {
|
|
48
49
|
// Register controllers here
|
|
@@ -90,4 +91,5 @@ export default function (application) {
|
|
|
90
91
|
application.register("run-progress", RunProgressController)
|
|
91
92
|
application.register("chart", ChartController)
|
|
92
93
|
application.register("frame-refresh", FrameRefreshController)
|
|
94
|
+
application.register("timeago", TimeagoController)
|
|
93
95
|
}
|
|
@@ -9,10 +9,15 @@ import { t } from "../i18n.js";
|
|
|
9
9
|
// When present, SlimSelect's built-in client-side
|
|
10
10
|
// filter is replaced by a debounced fetch through
|
|
11
11
|
// this URL.
|
|
12
|
+
// addable — typed text can be added as a new option (chip
|
|
13
|
+
// inputs, see Form::Components::List).
|
|
14
|
+
// max-selected — caps how many options a multi-select keeps.
|
|
12
15
|
export default class extends Controller {
|
|
13
16
|
static values = {
|
|
14
17
|
typeaheadUrl: String,
|
|
15
|
-
typeaheadDebounceMs: { type: Number, default: 200 }
|
|
18
|
+
typeaheadDebounceMs: { type: Number, default: 200 },
|
|
19
|
+
addable: Boolean,
|
|
20
|
+
maxSelected: Number
|
|
16
21
|
}
|
|
17
22
|
|
|
18
23
|
connect() {
|
|
@@ -39,11 +44,19 @@ export default class extends Controller {
|
|
|
39
44
|
// define placeholderText, searchText, searchPlaceholder and searchingText.
|
|
40
45
|
const strings = t("plutonium.js.libraries.slim_select");
|
|
41
46
|
if (strings && typeof strings === "object") {
|
|
42
|
-
const { placeholderText, searchText, searchPlaceholder, searchingText } = strings;
|
|
43
|
-
Object.assign(settings, { placeholderText, searchText, searchPlaceholder, searchingText });
|
|
47
|
+
const { placeholderText, searchText, searchPlaceholder, searchingText, addableText } = strings;
|
|
48
|
+
Object.assign(settings, { placeholderText, searchText, searchPlaceholder, searchingText, addableText });
|
|
44
49
|
Object.keys(settings).forEach((k) => settings[k] === undefined && delete settings[k]);
|
|
45
50
|
}
|
|
46
51
|
|
|
52
|
+
if (this.hasMaxSelectedValue) settings.maxSelected = this.maxSelectedValue;
|
|
53
|
+
|
|
54
|
+
if (this.addableValue) {
|
|
55
|
+
// A plain "Select Value" / "Search" hides that new values can be typed in.
|
|
56
|
+
settings.placeholderText = t("plutonium.js.slim_select.add_placeholder");
|
|
57
|
+
settings.searchPlaceholder = t("plutonium.js.slim_select.add_search_placeholder");
|
|
58
|
+
}
|
|
59
|
+
|
|
47
60
|
this.modal = this.element.closest('[data-controller="remote-modal"]');
|
|
48
61
|
|
|
49
62
|
if (this.modal) {
|
|
@@ -67,6 +80,20 @@ export default class extends Controller {
|
|
|
67
80
|
|
|
68
81
|
const events = {};
|
|
69
82
|
|
|
83
|
+
if (this.modal) {
|
|
84
|
+
// A modal <dialog> gets `overflow: auto` from the UA stylesheet, so a
|
|
85
|
+
// dropdown that runs past the dialog's edge (a select near the bottom
|
|
86
|
+
// of a short modal) is clipped. The dialog never scrolls itself (its
|
|
87
|
+
// body owns the scroll regions), so let it overflow while open.
|
|
88
|
+
events.afterOpen = () => { this.modal.style.overflow = "visible"; };
|
|
89
|
+
events.afterClose = () => { this.modal.style.overflow = ""; };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (this.addableValue) {
|
|
93
|
+
// Returning false rejects blank input instead of adding an empty chip.
|
|
94
|
+
events.addable = (value) => value.trim() || false;
|
|
95
|
+
}
|
|
96
|
+
|
|
70
97
|
if (this.hasTypeaheadUrlValue && this.typeaheadUrlValue) {
|
|
71
98
|
// Replace SlimSelect's client-side filter with a server fetch.
|
|
72
99
|
// Returns the SlimSelect data array shape: {value, text}.
|
|
@@ -193,6 +220,8 @@ export default class extends Controller {
|
|
|
193
220
|
this.boundModalReposition = null;
|
|
194
221
|
}
|
|
195
222
|
|
|
223
|
+
if (this.modal) this.modal.style.overflow = "";
|
|
224
|
+
|
|
196
225
|
if (this.slimSelect) {
|
|
197
226
|
this.slimSelect.destroy();
|
|
198
227
|
this.slimSelect = null;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Controller } from "@hotwired/stimulus"
|
|
2
|
+
|
|
3
|
+
// Renders a <time> as relative text ("3 days ago", "in 5 minutes") in the
|
|
4
|
+
// page's locale and keeps it current. The server-rendered absolute date stays
|
|
5
|
+
// in the element's title, so hovering still shows the exact time.
|
|
6
|
+
const UNITS = [
|
|
7
|
+
["year", 60 * 60 * 24 * 365],
|
|
8
|
+
["month", 60 * 60 * 24 * 30],
|
|
9
|
+
["week", 60 * 60 * 24 * 7],
|
|
10
|
+
["day", 60 * 60 * 24],
|
|
11
|
+
["hour", 60 * 60],
|
|
12
|
+
["minute", 60],
|
|
13
|
+
["second", 1],
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
export default class extends Controller {
|
|
17
|
+
static values = {
|
|
18
|
+
datetime: String,
|
|
19
|
+
refreshInterval: { type: Number, default: 60000 },
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
connect() {
|
|
23
|
+
this.formatter = new Intl.RelativeTimeFormat(document.documentElement.lang || undefined, { numeric: "auto" })
|
|
24
|
+
this.render()
|
|
25
|
+
this.timer = setInterval(() => this.render(), this.refreshIntervalValue)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
disconnect() {
|
|
29
|
+
clearInterval(this.timer)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
render() {
|
|
33
|
+
const date = new Date(this.datetimeValue)
|
|
34
|
+
if (isNaN(date)) return
|
|
35
|
+
|
|
36
|
+
const seconds = Math.round((date - Date.now()) / 1000)
|
|
37
|
+
const [unit, size] = UNITS.find(([, size]) => Math.abs(seconds) >= size) || UNITS[UNITS.length - 1]
|
|
38
|
+
this.element.textContent = this.formatter.format(Math.round(seconds / size), unit)
|
|
39
|
+
}
|
|
40
|
+
}
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: plutonium
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.67.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Stefan Froelich
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2026-10-
|
|
10
|
+
date: 2026-10-09 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: zeitwerk
|
|
@@ -1234,6 +1234,7 @@ files:
|
|
|
1234
1234
|
- lib/plutonium/query/filters/date.rb
|
|
1235
1235
|
- lib/plutonium/query/filters/date_range.rb
|
|
1236
1236
|
- lib/plutonium/query/filters/select.rb
|
|
1237
|
+
- lib/plutonium/query/filters/tags.rb
|
|
1237
1238
|
- lib/plutonium/query/filters/text.rb
|
|
1238
1239
|
- lib/plutonium/query/model_scope.rb
|
|
1239
1240
|
- lib/plutonium/railtie.rb
|
|
@@ -1311,13 +1312,25 @@ files:
|
|
|
1311
1312
|
- lib/plutonium/ui/display/components/association.rb
|
|
1312
1313
|
- lib/plutonium/ui/display/components/attachment.rb
|
|
1313
1314
|
- lib/plutonium/ui/display/components/badge.rb
|
|
1315
|
+
- lib/plutonium/ui/display/components/binary.rb
|
|
1314
1316
|
- lib/plutonium/ui/display/components/boolean.rb
|
|
1317
|
+
- lib/plutonium/ui/display/components/code.rb
|
|
1315
1318
|
- lib/plutonium/ui/display/components/color.rb
|
|
1316
1319
|
- lib/plutonium/ui/display/components/currency.rb
|
|
1320
|
+
- lib/plutonium/ui/display/components/duration.rb
|
|
1321
|
+
- lib/plutonium/ui/display/components/file_size.rb
|
|
1317
1322
|
- lib/plutonium/ui/display/components/formatted_value.rb
|
|
1323
|
+
- lib/plutonium/ui/display/components/key_value.rb
|
|
1324
|
+
- lib/plutonium/ui/display/components/list.rb
|
|
1318
1325
|
- lib/plutonium/ui/display/components/markdown.rb
|
|
1326
|
+
- lib/plutonium/ui/display/components/number.rb
|
|
1319
1327
|
- lib/plutonium/ui/display/components/phlexi_render.rb
|
|
1328
|
+
- lib/plutonium/ui/display/components/progress.rb
|
|
1329
|
+
- lib/plutonium/ui/display/components/rating.rb
|
|
1330
|
+
- lib/plutonium/ui/display/components/relative_time.rb
|
|
1331
|
+
- lib/plutonium/ui/display/components/rich_text.rb
|
|
1320
1332
|
- lib/plutonium/ui/display/components/section.rb
|
|
1333
|
+
- lib/plutonium/ui/display/components/tags.rb
|
|
1321
1334
|
- lib/plutonium/ui/display/options/inferred_types.rb
|
|
1322
1335
|
- lib/plutonium/ui/display/resource.rb
|
|
1323
1336
|
- lib/plutonium/ui/display/theme.rb
|
|
@@ -1326,6 +1339,7 @@ files:
|
|
|
1326
1339
|
- lib/plutonium/ui/empty_card.rb
|
|
1327
1340
|
- lib/plutonium/ui/export_button.rb
|
|
1328
1341
|
- lib/plutonium/ui/form/base.rb
|
|
1342
|
+
- lib/plutonium/ui/form/components/binary.rb
|
|
1329
1343
|
- lib/plutonium/ui/form/components/currency.rb
|
|
1330
1344
|
- lib/plutonium/ui/form/components/easymde.rb
|
|
1331
1345
|
- lib/plutonium/ui/form/components/flatpickr.rb
|
|
@@ -1333,12 +1347,17 @@ files:
|
|
|
1333
1347
|
- lib/plutonium/ui/form/components/intl_tel_input.rb
|
|
1334
1348
|
- lib/plutonium/ui/form/components/json.rb
|
|
1335
1349
|
- lib/plutonium/ui/form/components/key_value_store.rb
|
|
1350
|
+
- lib/plutonium/ui/form/components/list.rb
|
|
1336
1351
|
- lib/plutonium/ui/form/components/password.rb
|
|
1352
|
+
- lib/plutonium/ui/form/components/rating.rb
|
|
1337
1353
|
- lib/plutonium/ui/form/components/resource_select.rb
|
|
1354
|
+
- lib/plutonium/ui/form/components/rich_text.rb
|
|
1338
1355
|
- lib/plutonium/ui/form/components/section.rb
|
|
1339
1356
|
- lib/plutonium/ui/form/components/secure_association.rb
|
|
1340
1357
|
- lib/plutonium/ui/form/components/secure_polymorphic_association.rb
|
|
1341
1358
|
- lib/plutonium/ui/form/components/sticky_footer.rb
|
|
1359
|
+
- lib/plutonium/ui/form/components/tags.rb
|
|
1360
|
+
- lib/plutonium/ui/form/components/tags_filter.rb
|
|
1342
1361
|
- lib/plutonium/ui/form/components/toggle.rb
|
|
1343
1362
|
- lib/plutonium/ui/form/components/uppy.rb
|
|
1344
1363
|
- lib/plutonium/ui/form/concerns/renders_nested_resource_fields.rb
|
|
@@ -1376,6 +1395,9 @@ files:
|
|
|
1376
1395
|
- lib/plutonium/ui/nav_grid_menu.rb
|
|
1377
1396
|
- lib/plutonium/ui/nav_user.rb
|
|
1378
1397
|
- lib/plutonium/ui/options/has_cents_field.rb
|
|
1398
|
+
- lib/plutonium/ui/options/rich_text_field.rb
|
|
1399
|
+
- lib/plutonium/ui/options/secret_field.rb
|
|
1400
|
+
- lib/plutonium/ui/options/tags_field.rb
|
|
1379
1401
|
- lib/plutonium/ui/page/base.rb
|
|
1380
1402
|
- lib/plutonium/ui/page/dashboard.rb
|
|
1381
1403
|
- lib/plutonium/ui/page/edit.rb
|
|
@@ -1511,6 +1533,7 @@ files:
|
|
|
1511
1533
|
- src/js/controllers/table_column_menu_controller.js
|
|
1512
1534
|
- src/js/controllers/table_header_controller.js
|
|
1513
1535
|
- src/js/controllers/textarea_autogrow_controller.js
|
|
1536
|
+
- src/js/controllers/timeago_controller.js
|
|
1514
1537
|
- src/js/controllers/view_switcher_controller.js
|
|
1515
1538
|
- src/js/controllers/wizard_controller.js
|
|
1516
1539
|
- src/js/core.js
|