trestle 0.9.0 → 0.9.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/rspec.yml +28 -0
- data/.gitignore +3 -0
- data/CONTRIBUTING.md +38 -0
- data/Gemfile +12 -5
- data/README.md +9 -2
- data/app/assets/bundle/trestle/bundle.css +9 -9
- data/app/assets/bundle/trestle/bundle.js +50 -48
- data/app/assets/bundle/trestle/fa-brands-400.eot +0 -0
- data/app/assets/bundle/trestle/fa-brands-400.svg +818 -597
- data/app/assets/bundle/trestle/fa-brands-400.ttf +0 -0
- data/app/assets/bundle/trestle/fa-brands-400.woff +0 -0
- data/app/assets/bundle/trestle/fa-brands-400.woff2 +0 -0
- data/app/assets/bundle/trestle/fa-regular-400.eot +0 -0
- data/app/assets/bundle/trestle/fa-regular-400.svg +93 -95
- data/app/assets/bundle/trestle/fa-regular-400.ttf +0 -0
- data/app/assets/bundle/trestle/fa-regular-400.woff +0 -0
- data/app/assets/bundle/trestle/fa-regular-400.woff2 +0 -0
- data/app/assets/bundle/trestle/fa-solid-900.eot +0 -0
- data/app/assets/bundle/trestle/fa-solid-900.svg +1209 -842
- data/app/assets/bundle/trestle/fa-solid-900.ttf +0 -0
- data/app/assets/bundle/trestle/fa-solid-900.woff +0 -0
- data/app/assets/bundle/trestle/fa-solid-900.woff2 +0 -0
- data/app/assets/bundle/trestle/flatpickr/ar-dz.js +1 -0
- data/app/assets/bundle/trestle/flatpickr/ar.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/at.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/az.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/be.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/bg.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/bn.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/bs.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/cat.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/ckb.js +1 -0
- data/app/assets/bundle/trestle/flatpickr/cs.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/cy.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/da.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/de.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/default.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/eo.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/es.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/et.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/fa.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/fi.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/fo.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/fr.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/ga.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/gr.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/he.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/hi.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/hr.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/hu.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/hy.js +1 -0
- data/app/assets/bundle/trestle/flatpickr/id.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/is.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/it.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/ja.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/ka.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/km.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/ko.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/kz.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/lt.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/lv.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/mk.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/mn.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/ms.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/my.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/nl.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/nn.js +1 -0
- data/app/assets/bundle/trestle/flatpickr/no.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/pa.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/pl.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/pt.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/ro.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/ru.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/si.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/sk.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/sl.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/sq.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/sr-cyr.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/sr.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/sv.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/th.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/tr.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/uk.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/uz.js +1 -0
- data/app/assets/bundle/trestle/flatpickr/uz_latn.js +1 -0
- data/app/assets/bundle/trestle/flatpickr/vn.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/zh-tw.js +1 -1
- data/app/assets/bundle/trestle/flatpickr/zh.js +1 -1
- data/app/assets/javascripts/trestle/admin.js +1 -0
- data/app/assets/javascripts/trestle/i18n.js.erb +8 -0
- data/{lib → app/controllers/concerns}/trestle/controller/breadcrumbs.rb +1 -1
- data/app/controllers/concerns/trestle/controller/title.rb +20 -0
- data/app/controllers/concerns/trestle/controller/toolbars.rb +30 -0
- data/app/controllers/concerns/trestle/resource/controller/actions.rb +133 -0
- data/app/controllers/concerns/trestle/resource/controller/data_methods.rb +52 -0
- data/app/controllers/concerns/trestle/resource/controller/redirection.rb +23 -0
- data/app/controllers/concerns/trestle/resource/controller/toolbar.rb +11 -0
- data/app/controllers/trestle/admin_controller.rb +31 -0
- data/app/controllers/trestle/application_controller.rb +12 -0
- data/app/controllers/trestle/dashboard_controller.rb +2 -2
- data/app/controllers/trestle/resource_controller.rb +6 -0
- data/app/helpers/trestle/avatar_helper.rb +6 -2
- data/app/helpers/trestle/container_helper.rb +12 -4
- data/app/helpers/trestle/grid_helper.rb +51 -7
- data/app/helpers/trestle/hook_helper.rb +1 -25
- data/app/helpers/trestle/i18n_helper.rb +8 -15
- data/app/helpers/trestle/layout_helper.rb +20 -0
- data/app/helpers/trestle/navigation_helper.rb +23 -0
- data/app/helpers/trestle/params_helper.rb +4 -1
- data/app/helpers/trestle/table_helper.rb +22 -3
- data/app/helpers/trestle/title_helper.rb +11 -0
- data/app/helpers/trestle/toolbars_helper.rb +0 -11
- data/app/helpers/trestle/url_helper.rb +1 -11
- data/app/views/layouts/trestle/admin.html.erb +6 -6
- data/app/views/trestle/application/_dialog.html.erb +1 -1
- data/app/views/trestle/application/_header.html.erb +1 -3
- data/app/views/trestle/flash/_alert.html.erb +3 -1
- data/app/views/trestle/flash/_debug.html.erb +13 -8
- data/app/views/trestle/flash/_flash.html.erb +1 -1
- data/app/views/trestle/resource/_scopes.html.erb +17 -8
- data/app/views/trestle/resource/edit.html.erb +2 -2
- data/app/views/trestle/resource/index.html.erb +3 -3
- data/app/views/trestle/resource/new.html.erb +1 -1
- data/app/views/trestle/resource/show.html.erb +2 -2
- data/app/views/trestle/shared/_sidebar.html.erb +5 -6
- data/app/views/trestle/table/_pagination.html.erb +1 -1
- data/config/locales/de.rb +18 -0
- data/config/locales/de.yml +101 -0
- data/config/locales/vi.rb +18 -0
- data/config/locales/vi.yml +101 -0
- data/config/routes.rb +1 -1
- data/frontend/css/components/_alerts.scss +31 -0
- data/frontend/css/components/_avatar.scss +14 -0
- data/frontend/css/components/_buttons.scss +0 -1
- data/frontend/css/components/_datepicker.scss +1 -0
- data/frontend/css/components/_fields.scss +6 -0
- data/frontend/css/components/_modal.scss +2 -0
- data/frontend/css/components/_scopes.scss +66 -21
- data/frontend/css/components/_table.scss +20 -0
- data/frontend/css/components/_tags.scss +2 -0
- data/frontend/css/components/_timestamp.scss +1 -1
- data/frontend/css/layout/_content.scss +5 -2
- data/frontend/css/layout/_sidebar.scss +9 -3
- data/frontend/css/variables/_bootstrap.scss +1 -0
- data/frontend/css/variables/_trestle.scss +25 -5
- data/frontend/js/components/confirmation.js +4 -2
- data/frontend/js/components/dialog.js +15 -4
- data/frontend/js/components/form.js +9 -0
- data/frontend/js/components/navigation.js +63 -0
- data/frontend/js/components/pagination.js +51 -0
- data/frontend/js/components/sidebar.js +8 -11
- data/frontend/js/components/table.js +33 -2
- data/frontend/js/components/tabs.js +3 -3
- data/frontend/js/core/events.js +7 -3
- data/frontend/js/index.js +1 -0
- data/frontend/theme/trestle/theme/_defaults.scss +4 -4
- data/frontend/theme/trestle/theme/bootstrap/_buttons.scss +3 -0
- data/lib/generators/trestle/install/install_generator.rb +6 -2
- data/lib/generators/trestle/install/templates/_custom.css +8 -0
- data/lib/generators/trestle/install/templates/_theme.scss +1 -1
- data/lib/generators/trestle/install/templates/trestle.rb.erb +8 -2
- data/lib/generators/trestle/resource/resource_generator.rb +15 -1
- data/lib/generators/trestle/resource/templates/admin.rb.erb +15 -8
- data/lib/trestle/adapters/active_record_adapter.rb +17 -1
- data/lib/trestle/adapters.rb +1 -1
- data/lib/trestle/admin/builder.rb +7 -3
- data/lib/trestle/admin.rb +18 -8
- data/lib/trestle/configurable.rb +16 -0
- data/lib/trestle/configuration.rb +7 -8
- data/lib/trestle/debug_errors.rb +24 -0
- data/lib/trestle/engine.rb +3 -10
- data/lib/trestle/evaluation_context.rb +11 -3
- data/lib/trestle/form/automatic.rb +4 -2
- data/lib/trestle/form/builder.rb +6 -7
- data/lib/trestle/form/field.rb +44 -17
- data/lib/trestle/form/fields/check_box_helpers.rb +1 -1
- data/lib/trestle/form/fields/collection_select.rb +1 -1
- data/lib/trestle/form/fields/date_picker.rb +9 -3
- data/lib/trestle/form/fields/date_select.rb +1 -1
- data/lib/trestle/form/fields/datetime_select.rb +1 -1
- data/lib/trestle/form/fields/file_field.rb +1 -1
- data/lib/trestle/form/fields/form_group.rb +18 -5
- data/lib/trestle/form/fields/grouped_collection_select.rb +1 -1
- data/lib/trestle/form/fields/range_field.rb +2 -4
- data/lib/trestle/form/fields/select.rb +2 -3
- data/lib/trestle/form/fields/static_field.rb +7 -3
- data/lib/trestle/form/fields/tag_select.rb +3 -1
- data/lib/trestle/form/fields/time_select.rb +1 -1
- data/lib/trestle/form/fields/time_zone_select.rb +1 -1
- data/lib/trestle/form/fields.rb +6 -38
- data/lib/trestle/form/renderer.rb +11 -4
- data/lib/trestle/form.rb +5 -7
- data/lib/trestle/hook/helpers.rb +33 -0
- data/lib/trestle/hook/set.rb +32 -0
- data/lib/trestle/hook.rb +5 -31
- data/lib/trestle/lazy.rb +56 -0
- data/lib/trestle/navigation/group.rb +5 -2
- data/lib/trestle/navigation/item.rb +7 -3
- data/lib/trestle/navigation.rb +3 -6
- data/lib/trestle/registry.rb +61 -0
- data/lib/trestle/reloader.rb +24 -12
- data/lib/trestle/resource/builder.rb +4 -3
- data/lib/trestle/resource/collection.rb +1 -5
- data/lib/trestle/resource/toolbar.rb +42 -0
- data/lib/trestle/resource.rb +8 -9
- data/lib/trestle/scopes/block.rb +9 -8
- data/lib/trestle/scopes/definition.rb +22 -0
- data/lib/trestle/scopes/scope.rb +6 -2
- data/lib/trestle/scopes.rb +38 -11
- data/lib/trestle/tab.rb +2 -0
- data/lib/trestle/table/actions_column.rb +6 -6
- data/lib/trestle/table/automatic.rb +10 -3
- data/lib/trestle/table/builder.rb +4 -4
- data/lib/trestle/table/column.rb +34 -25
- data/lib/trestle/table/row.rb +13 -13
- data/lib/trestle/table/select_column.rb +19 -7
- data/lib/trestle/table.rb +17 -12
- data/lib/trestle/toolbar.rb +4 -11
- data/lib/trestle/version.rb +1 -1
- data/lib/trestle.rb +62 -48
- data/package.json +21 -24
- data/trestle.gemspec +6 -6
- data/webpack.config.js +40 -49
- data/yarn.lock +3044 -4730
- metadata +66 -22
- data/.travis.yml +0 -27
- data/lib/trestle/admin/controller.rb +0 -28
- data/lib/trestle/application_controller.rb +0 -12
- data/lib/trestle/resource/controller.rb +0 -174
- /data/{lib → app/controllers/concerns}/trestle/controller/callbacks.rb +0 -0
- /data/{lib → app/controllers/concerns}/trestle/controller/dialog.rb +0 -0
- /data/{lib → app/controllers/concerns}/trestle/controller/helpers.rb +0 -0
- /data/{lib → app/controllers/concerns}/trestle/controller/layout.rb +0 -0
- /data/{lib → app/controllers/concerns}/trestle/controller/location.rb +0 -0
@@ -1 +1 @@
|
|
1
|
-
!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports):"function"==typeof define&&define.amd?define(["exports"],o):o((e=e||self).sk={})}(this,function(e){"use strict";var o="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},t={weekdays:{shorthand:["Ned","Pon","Ut","Str","Štv","Pia","Sob"],longhand:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"]},months:{shorthand:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],longhand:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"]},firstDayOfWeek:1,rangeSeparator:" do ",time_24hr:!0,ordinal:function(){return"."}};o.l10ns.sk=t;var n=o.l10ns;e.Slovak=t,e.default=n,Object.defineProperty(e,"__esModule",{value:!0})});
|
1
|
+
!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports):"function"==typeof define&&define.amd?define(["exports"],o):o((e="undefined"!=typeof globalThis?globalThis:e||self).sk={})}(this,(function(e){"use strict";var o="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},t={weekdays:{shorthand:["Ned","Pon","Ut","Str","Štv","Pia","Sob"],longhand:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"]},months:{shorthand:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],longhand:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"]},firstDayOfWeek:1,rangeSeparator:" do ",time_24hr:!0,ordinal:function(){return"."}};o.l10ns.sk=t;var n=o.l10ns;e.Slovak=t,e.default=n,Object.defineProperty(e,"__esModule",{value:!0})}));
|
@@ -1 +1 @@
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self).sl={})}(this,function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},o={weekdays:{shorthand:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],longhand:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"]},months:{shorthand:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],longhand:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"]},firstDayOfWeek:1,rangeSeparator:" do ",time_24hr:!0,ordinal:function(){return"."}};n.l10ns.sl=o;var t=n.l10ns;e.Slovenian=o,e.default=t,Object.defineProperty(e,"__esModule",{value:!0})});
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).sl={})}(this,(function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},o={weekdays:{shorthand:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],longhand:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"]},months:{shorthand:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],longhand:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"]},firstDayOfWeek:1,rangeSeparator:" do ",time_24hr:!0,ordinal:function(){return"."}};n.l10ns.sl=o;var t=n.l10ns;e.Slovenian=o,e.default=t,Object.defineProperty(e,"__esModule",{value:!0})}));
|
@@ -1 +1 @@
|
|
1
|
-
!function(e,
|
1
|
+
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).sq={})}(this,(function(e){"use strict";var r="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},a={weekdays:{shorthand:["Di","Hë","Ma","Më","En","Pr","Sh"],longhand:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtunë"]},months:{shorthand:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],longhand:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"]},firstDayOfWeek:1,rangeSeparator:" deri ",weekAbbreviation:"Java",yearAriaLabel:"Viti",monthAriaLabel:"Muaji",hourAriaLabel:"Ora",minuteAriaLabel:"Minuta",time_24hr:!0};r.l10ns.sq=a;var n=r.l10ns;e.Albanian=a,e.default=n,Object.defineProperty(e,"__esModule",{value:!0})}));
|
@@ -1 +1 @@
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self)["sr-cyr"]={})}(this,function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},o={weekdays:{shorthand:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],longhand:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"]},months:{shorthand:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],longhand:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"]},firstDayOfWeek:1,weekAbbreviation:"Нед.",rangeSeparator:" до "};n.l10ns.sr=o;var
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self)["sr-cyr"]={})}(this,(function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},o={weekdays:{shorthand:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],longhand:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"]},months:{shorthand:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],longhand:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"]},firstDayOfWeek:1,weekAbbreviation:"Нед.",rangeSeparator:" до "};n.l10ns.sr=o;var i=n.l10ns;e.SerbianCyrillic=o,e.default=i,Object.defineProperty(e,"__esModule",{value:!0})}));
|
@@ -1 +1 @@
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).sr={})}(this,function(e){"use strict";var t="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},a={weekdays:{shorthand:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],longhand:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"]},months:{shorthand:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],longhand:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"]},firstDayOfWeek:1,weekAbbreviation:"Ned.",rangeSeparator:" do ",time_24hr:!0};t.l10ns.sr=a;var n=t.l10ns;e.Serbian=a,e.default=n,Object.defineProperty(e,"__esModule",{value:!0})});
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).sr={})}(this,(function(e){"use strict";var t="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},a={weekdays:{shorthand:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],longhand:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"]},months:{shorthand:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],longhand:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"]},firstDayOfWeek:1,weekAbbreviation:"Ned.",rangeSeparator:" do ",time_24hr:!0};t.l10ns.sr=a;var n=t.l10ns;e.Serbian=a,e.default=n,Object.defineProperty(e,"__esModule",{value:!0})}));
|
@@ -1 +1 @@
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self).sv={})}(this,function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).sv={})}(this,(function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},a={firstDayOfWeek:1,weekAbbreviation:"v",weekdays:{shorthand:["sön","mån","tis","ons","tor","fre","lör"],longhand:["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"]},months:{shorthand:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],longhand:["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"]},rangeSeparator:" till ",time_24hr:!0,ordinal:function(){return"."}};n.l10ns.sv=a;var o=n.l10ns;e.Swedish=a,e.default=o,Object.defineProperty(e,"__esModule",{value:!0})}));
|
@@ -1 +1 @@
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self).th={})}(this,function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},t={weekdays:{shorthand:["อา","จ","อ","พ","พฤ","ศ","ส"],longhand:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"]},months:{shorthand:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],longhand:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"]},firstDayOfWeek:1,rangeSeparator:" ถึง ",scrollTitle:"เลื่อนเพื่อเพิ่มหรือลด",toggleTitle:"คลิกเพื่อเปลี่ยน",time_24hr:!0,ordinal:function(){return""}};n.l10ns.th=t;var o=n.l10ns;e.Thai=t,e.default=o,Object.defineProperty(e,"__esModule",{value:!0})});
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).th={})}(this,(function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},t={weekdays:{shorthand:["อา","จ","อ","พ","พฤ","ศ","ส"],longhand:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"]},months:{shorthand:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],longhand:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"]},firstDayOfWeek:1,rangeSeparator:" ถึง ",scrollTitle:"เลื่อนเพื่อเพิ่มหรือลด",toggleTitle:"คลิกเพื่อเปลี่ยน",time_24hr:!0,ordinal:function(){return""}};n.l10ns.th=t;var o=n.l10ns;e.Thai=t,e.default=o,Object.defineProperty(e,"__esModule",{value:!0})}));
|
@@ -1 +1 @@
|
|
1
|
-
!function(a
|
1
|
+
!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?a(exports):"function"==typeof define&&define.amd?define(["exports"],a):a((e="undefined"!=typeof globalThis?globalThis:e||self).tr={})}(this,(function(e){"use strict";var a="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},t={weekdays:{shorthand:["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"],longhand:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"]},months:{shorthand:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],longhand:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"]},firstDayOfWeek:1,ordinal:function(){return"."},rangeSeparator:" - ",weekAbbreviation:"Hf",scrollTitle:"Artırmak için kaydırın",toggleTitle:"Aç/Kapa",amPM:["ÖÖ","ÖS"],time_24hr:!0};a.l10ns.tr=t;var r=a.l10ns;e.Turkish=t,e.default=r,Object.defineProperty(e,"__esModule",{value:!0})}));
|
@@ -1 +1 @@
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self).uk={})}(this,function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).uk={})}(this,(function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},o={firstDayOfWeek:1,weekdays:{shorthand:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],longhand:["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"]},months:{shorthand:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],longhand:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"]},time_24hr:!0};n.l10ns.uk=o;var t=n.l10ns;e.Ukrainian=o,e.default=t,Object.defineProperty(e,"__esModule",{value:!0})}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).uz={})}(this,(function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},o={weekdays:{shorthand:["Якш","Душ","Сеш","Чор","Пай","Жум","Шан"],longhand:["Якшанба","Душанба","Сешанба","Чоршанба","Пайшанба","Жума","Шанба"]},months:{shorthand:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],longhand:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"]},firstDayOfWeek:1,ordinal:function(){return""},rangeSeparator:" — ",weekAbbreviation:"Ҳафта",scrollTitle:"Катталаштириш учун айлантиринг",toggleTitle:"Ўтиш учун босинг",amPM:["AM","PM"],yearAriaLabel:"Йил",time_24hr:!0};n.l10ns.uz=o;var t=n.l10ns;e.Uzbek=o,e.default=t,Object.defineProperty(e,"__esModule",{value:!0})}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((a="undefined"!=typeof globalThis?globalThis:a||self).uz_latn={})}(this,(function(a){"use strict";var e="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},n={weekdays:{shorthand:["Ya","Du","Se","Cho","Pa","Ju","Sha"],longhand:["Yakshanba","Dushanba","Seshanba","Chorshanba","Payshanba","Juma","Shanba"]},months:{shorthand:["Yan","Fev","Mar","Apr","May","Iyun","Iyul","Avg","Sen","Okt","Noy","Dek"],longhand:["Yanvar","Fevral","Mart","Aprel","May","Iyun","Iyul","Avgust","Sentabr","Oktabr","Noyabr","Dekabr"]},firstDayOfWeek:1,ordinal:function(){return""},rangeSeparator:" — ",weekAbbreviation:"Hafta",scrollTitle:"Kattalashtirish uchun aylantiring",toggleTitle:"O‘tish uchun bosing",amPM:["AM","PM"],yearAriaLabel:"Yil",time_24hr:!0};e.l10ns.uz_latn=n;var t=e.l10ns;a.UzbekLatin=n,a.default=t,Object.defineProperty(a,"__esModule",{value:!0})}));
|
@@ -1 +1 @@
|
|
1
|
-
!function(n,h){"object"==typeof exports&&"undefined"!=typeof module?h(exports):"function"==typeof define&&define.amd?define(["exports"],h):h((n=n||self).vn={})}(this,function(n){"use strict";var h="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},e={weekdays:{shorthand:["CN","T2","T3","T4","T5","T6","T7"],longhand:["Chủ nhật","Thứ hai","Thứ ba","Thứ tư","Thứ năm","Thứ sáu","Thứ bảy"]},months:{shorthand:["Th1","Th2","Th3","Th4","Th5","Th6","Th7","Th8","Th9","Th10","Th11","Th12"],longhand:["Tháng một","Tháng hai","Tháng ba","Tháng tư","Tháng năm","Tháng sáu","Tháng bảy","Tháng tám","Tháng chín","Tháng mười","Tháng
|
1
|
+
!function(n,h){"object"==typeof exports&&"undefined"!=typeof module?h(exports):"function"==typeof define&&define.amd?define(["exports"],h):h((n="undefined"!=typeof globalThis?globalThis:n||self).vn={})}(this,(function(n){"use strict";var h="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},e={weekdays:{shorthand:["CN","T2","T3","T4","T5","T6","T7"],longhand:["Chủ nhật","Thứ hai","Thứ ba","Thứ tư","Thứ năm","Thứ sáu","Thứ bảy"]},months:{shorthand:["Th1","Th2","Th3","Th4","Th5","Th6","Th7","Th8","Th9","Th10","Th11","Th12"],longhand:["Tháng một","Tháng hai","Tháng ba","Tháng tư","Tháng năm","Tháng sáu","Tháng bảy","Tháng tám","Tháng chín","Tháng mười","Tháng mười một","Tháng mười hai"]},firstDayOfWeek:1,rangeSeparator:" đến "};h.l10ns.vn=e;var T=h.l10ns;n.Vietnamese=e,n.default=T,Object.defineProperty(n,"__esModule",{value:!0})}));
|
@@ -1 +1 @@
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self)["zh-tw"]={})}(this,function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self)["zh-tw"]={})}(this,(function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},o={weekdays:{shorthand:["週日","週一","週二","週三","週四","週五","週六"],longhand:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},months:{shorthand:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],longhand:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},rangeSeparator:" 至 ",weekAbbreviation:"週",scrollTitle:"滾動切換",toggleTitle:"點擊切換 12/24 小時時制"};n.l10ns.zh_tw=o;var t=n.l10ns;e.MandarinTraditional=o,e.default=t,Object.defineProperty(e,"__esModule",{value:!0})}));
|
@@ -1 +1 @@
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self).zh={})}(this,function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},o={weekdays:{shorthand:["周日","周一","周二","周三","周四","周五","周六"],longhand:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},months:{shorthand:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],longhand:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},rangeSeparator:" 至 ",weekAbbreviation:"周",scrollTitle:"滚动切换",toggleTitle:"点击切换 12/24 小时时制"};n.l10ns.zh=o;var t=n.l10ns;e.Mandarin=o,e.default=t,Object.defineProperty(e,"__esModule",{value:!0})});
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).zh={})}(this,(function(e){"use strict";var n="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},o={weekdays:{shorthand:["周日","周一","周二","周三","周四","周五","周六"],longhand:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]},months:{shorthand:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],longhand:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},rangeSeparator:" 至 ",weekAbbreviation:"周",scrollTitle:"滚动切换",toggleTitle:"点击切换 12/24 小时时制"};n.l10ns.zh=o;var t=n.l10ns;e.Mandarin=o,e.default=t,Object.defineProperty(e,"__esModule",{value:!0})}));
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<% flatpickr_locale_conversions = { ca: "cat", el: "gr", nb: "no", vi: "vn" } %>
|
2
|
+
|
3
|
+
<% I18n.available_locales.sort.each do |locale| %>
|
4
|
+
<% Trestle.i18n_fallbacks(locale).each do |candidate| %>
|
5
|
+
<% candidate = flatpickr_locale_conversions[candidate] || candidate %>
|
6
|
+
<% require_asset("trestle/flatpickr/#{candidate}") rescue nil %>
|
7
|
+
<% end %>
|
8
|
+
<% end %>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Trestle
|
2
|
+
module Controller
|
3
|
+
module Title
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
helper_method :default_title
|
8
|
+
end
|
9
|
+
|
10
|
+
protected
|
11
|
+
def title(title=nil)
|
12
|
+
@_title = title if title
|
13
|
+
end
|
14
|
+
|
15
|
+
def default_title
|
16
|
+
@_title || action_name.titleize
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Trestle
|
2
|
+
module Controller
|
3
|
+
module Toolbars
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
helper_method :toolbars
|
8
|
+
helper_method :toolbar
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
def toolbars
|
13
|
+
@_toolbars ||= {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def toolbar(name, options={}, &block)
|
17
|
+
builder = options[:builder] || default_toolbar_builder
|
18
|
+
|
19
|
+
toolbar = (toolbars[name.to_s] ||= Toolbar.new(builder))
|
20
|
+
toolbar.clear! if options[:clear]
|
21
|
+
toolbar.prepend(&block) if block_given?
|
22
|
+
toolbar
|
23
|
+
end
|
24
|
+
|
25
|
+
def default_toolbar_builder
|
26
|
+
Toolbar::Builder
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
module Trestle
|
2
|
+
class Resource
|
3
|
+
module Controller
|
4
|
+
module Actions
|
5
|
+
def index
|
6
|
+
respond_to do |format|
|
7
|
+
format.html
|
8
|
+
format.json { render json: collection }
|
9
|
+
|
10
|
+
yield format if block_given?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def new
|
15
|
+
respond_to do |format|
|
16
|
+
format.html
|
17
|
+
format.json { render json: instance }
|
18
|
+
|
19
|
+
yield format if block_given?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def create
|
24
|
+
if save_instance
|
25
|
+
respond_to do |format|
|
26
|
+
format.html do
|
27
|
+
flash[:message] = flash_message("create.success", title: "Success!", message: "The %{lowercase_model_name} was successfully created.")
|
28
|
+
redirect_to_return_location(:create, instance, default: admin.instance_path(instance))
|
29
|
+
end
|
30
|
+
format.json { render json: instance, status: :created, location: admin.instance_path(instance) }
|
31
|
+
|
32
|
+
yield format if block_given?
|
33
|
+
end
|
34
|
+
else
|
35
|
+
respond_to do |format|
|
36
|
+
format.html do
|
37
|
+
flash.now[:error] = flash_message("create.failure", title: "Warning!", message: "Please correct the errors below.")
|
38
|
+
render "new", status: :unprocessable_entity
|
39
|
+
end
|
40
|
+
format.json { render json: instance.errors, status: :unprocessable_entity }
|
41
|
+
|
42
|
+
yield format if block_given?
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def show
|
48
|
+
if admin.singular? && instance.nil?
|
49
|
+
respond_to do |format|
|
50
|
+
format.html { redirect_to action: :new }
|
51
|
+
format.json { head :not_found }
|
52
|
+
|
53
|
+
yield format if block_given?
|
54
|
+
end
|
55
|
+
else
|
56
|
+
respond_to do |format|
|
57
|
+
format.html
|
58
|
+
format.json { render json: instance }
|
59
|
+
|
60
|
+
yield format if block_given?
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def edit
|
66
|
+
if admin.singular? && instance.nil?
|
67
|
+
respond_to do |format|
|
68
|
+
format.html { redirect_to action: :new }
|
69
|
+
format.json { head :not_found }
|
70
|
+
|
71
|
+
yield format if block_given?
|
72
|
+
end
|
73
|
+
else
|
74
|
+
respond_to do |format|
|
75
|
+
format.html
|
76
|
+
format.json { render json: instance }
|
77
|
+
|
78
|
+
yield format if block_given?
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def update
|
84
|
+
if update_instance
|
85
|
+
respond_to do |format|
|
86
|
+
format.html do
|
87
|
+
flash[:message] = flash_message("update.success", title: "Success!", message: "The %{lowercase_model_name} was successfully updated.")
|
88
|
+
redirect_to_return_location(:update, instance, default: admin.instance_path(instance))
|
89
|
+
end
|
90
|
+
format.json { render json: instance, status: :ok }
|
91
|
+
|
92
|
+
yield format if block_given?
|
93
|
+
end
|
94
|
+
else
|
95
|
+
respond_to do |format|
|
96
|
+
format.html do
|
97
|
+
flash.now[:error] = flash_message("update.failure", title: "Warning!", message: "Please correct the errors below.")
|
98
|
+
render "show", status: :unprocessable_entity
|
99
|
+
end
|
100
|
+
format.json { render json: instance.errors, status: :unprocessable_entity }
|
101
|
+
|
102
|
+
yield format if block_given?
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def destroy
|
108
|
+
success = delete_instance
|
109
|
+
|
110
|
+
respond_to do |format|
|
111
|
+
format.html do
|
112
|
+
if success
|
113
|
+
flash[:message] = flash_message("destroy.success", title: "Success!", message: "The %{lowercase_model_name} was successfully deleted.")
|
114
|
+
redirect_to_return_location(:destroy, instance, default: admin.path(:index))
|
115
|
+
else
|
116
|
+
flash[:error] = flash_message("destroy.failure", title: "Warning!", message: "Could not delete %{lowercase_model_name}.")
|
117
|
+
|
118
|
+
if load_instance
|
119
|
+
redirect_to_return_location(:update, instance, default: admin.instance_path(instance))
|
120
|
+
else
|
121
|
+
redirect_to_return_location(:destroy, instance, default: admin.path(:index))
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
format.json { head :no_content }
|
126
|
+
|
127
|
+
yield format if block_given?
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Trestle
|
2
|
+
class Resource
|
3
|
+
module Controller
|
4
|
+
module DataMethods
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
attr_accessor :instance, :collection
|
9
|
+
helper_method :instance, :collection
|
10
|
+
|
11
|
+
before_action :load_collection, only: [:index]
|
12
|
+
before_action :load_instance, only: [:show, :edit, :update, :destroy]
|
13
|
+
before_action :build_instance, only: [:new, :create]
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
def load_instance
|
18
|
+
self.instance = admin.find_instance(params)
|
19
|
+
end
|
20
|
+
|
21
|
+
def load_collection
|
22
|
+
self.collection = admin.prepare_collection(params)
|
23
|
+
end
|
24
|
+
|
25
|
+
def build_instance
|
26
|
+
self.instance = admin.build_instance(resource_params, params)
|
27
|
+
end
|
28
|
+
|
29
|
+
def update_instance
|
30
|
+
admin.update_instance(instance, resource_params, params)
|
31
|
+
admin.save_instance(instance, params)
|
32
|
+
end
|
33
|
+
|
34
|
+
def save_instance
|
35
|
+
admin.save_instance(instance, params)
|
36
|
+
end
|
37
|
+
|
38
|
+
def delete_instance
|
39
|
+
admin.delete_instance(instance, params)
|
40
|
+
end
|
41
|
+
|
42
|
+
def resource_params
|
43
|
+
if params.key?(admin.parameter_name)
|
44
|
+
admin.permitted_params(params)
|
45
|
+
else
|
46
|
+
{}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Trestle
|
2
|
+
class Resource
|
3
|
+
module Controller
|
4
|
+
module Redirection
|
5
|
+
protected
|
6
|
+
def redirect_to_return_location(action, instance, default:)
|
7
|
+
if admin.return_locations[action] && !dialog_request?
|
8
|
+
location = instance_exec(instance, &admin.return_locations[action])
|
9
|
+
|
10
|
+
case location
|
11
|
+
when :back
|
12
|
+
redirect_back fallback_location: default, turbolinks: false
|
13
|
+
else
|
14
|
+
redirect_to location, turbolinks: false
|
15
|
+
end
|
16
|
+
else
|
17
|
+
redirect_to default, turbolinks: false
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class Trestle::AdminController < Trestle::ApplicationController
|
2
|
+
def index
|
3
|
+
end
|
4
|
+
|
5
|
+
class << self
|
6
|
+
attr_reader :admin
|
7
|
+
|
8
|
+
private
|
9
|
+
def local_prefixes
|
10
|
+
return admin.view_path_prefixes if admin
|
11
|
+
[controller_path.sub(/\/$/, "")]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def admin
|
16
|
+
@_admin ||= self.class.admin.new(self)
|
17
|
+
end
|
18
|
+
helper_method :admin
|
19
|
+
|
20
|
+
protected
|
21
|
+
def breadcrumbs
|
22
|
+
@_breadcrumbs ||= admin.breadcrumbs.dup
|
23
|
+
end
|
24
|
+
|
25
|
+
def flash_message(type, title:, message:)
|
26
|
+
{
|
27
|
+
title: admin.t("flash.#{type}.title", default: title),
|
28
|
+
message: admin.t("flash.#{type}.message", default: message)
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class Trestle::ApplicationController < ActionController::Base
|
2
|
+
protect_from_forgery
|
3
|
+
|
4
|
+
include Trestle::Controller::Breadcrumbs
|
5
|
+
include Trestle::Controller::Callbacks
|
6
|
+
include Trestle::Controller::Dialog
|
7
|
+
include Trestle::Controller::Helpers
|
8
|
+
include Trestle::Controller::Layout
|
9
|
+
include Trestle::Controller::Location
|
10
|
+
include Trestle::Controller::Title
|
11
|
+
include Trestle::Controller::Toolbars
|
12
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
class Trestle::ResourceController < Trestle::AdminController
|
2
|
+
include Trestle::Resource::Controller::Actions
|
3
|
+
include Trestle::Resource::Controller::DataMethods
|
4
|
+
include Trestle::Resource::Controller::Redirection
|
5
|
+
include Trestle::Resource::Controller::Toolbar
|
6
|
+
end
|
@@ -3,19 +3,23 @@ module Trestle
|
|
3
3
|
def avatar(options={})
|
4
4
|
fallback = options.delete(:fallback) if options[:fallback]
|
5
5
|
|
6
|
-
content_tag(:div,
|
6
|
+
content_tag(:div, default_avatar_options.merge(options)) do
|
7
7
|
concat content_tag(:span, fallback, class: "avatar-fallback") if fallback
|
8
8
|
concat yield if block_given?
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
12
|
def gravatar(email, options={})
|
13
|
-
options = { d: "
|
13
|
+
options = { d: "mp" }.merge(options)
|
14
14
|
|
15
15
|
url = "https://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(email.to_s.downcase)}.png"
|
16
16
|
url << "?#{options.to_query}" if options.any?
|
17
17
|
|
18
18
|
image_tag(url)
|
19
19
|
end
|
20
|
+
|
21
|
+
def default_avatar_options
|
22
|
+
Trestle::Options.new(class: ["avatar"])
|
23
|
+
end
|
20
24
|
end
|
21
25
|
end
|
@@ -6,7 +6,7 @@ module Trestle
|
|
6
6
|
|
7
7
|
content_tag(:div, class: "main-content-container") do
|
8
8
|
concat content_tag(:div, content, class: "main-content")
|
9
|
-
concat
|
9
|
+
concat context.sidebar if context.sidebar
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -15,9 +15,17 @@ module Trestle
|
|
15
15
|
@template = template
|
16
16
|
end
|
17
17
|
|
18
|
-
def sidebar(&block)
|
19
|
-
|
20
|
-
|
18
|
+
def sidebar(options={}, &block)
|
19
|
+
if block_given?
|
20
|
+
@sidebar = @template.content_tag(:aside, default_sidebar_options.merge(options), &block)
|
21
|
+
nil
|
22
|
+
else
|
23
|
+
@sidebar
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def default_sidebar_options
|
28
|
+
Trestle::Options.new(class: ["main-content-sidebar"])
|
21
29
|
end
|
22
30
|
end
|
23
31
|
end
|
@@ -1,24 +1,68 @@
|
|
1
1
|
module Trestle
|
2
2
|
module GridHelper
|
3
|
-
|
4
|
-
|
3
|
+
# Renders a row div, one of the building blocks of Bootstrap's grid system.
|
4
|
+
# https://getbootstrap.com/docs/4.4/layout/grid/
|
5
|
+
#
|
6
|
+
# attrs - Hash of attributes that will be passed to the tag (e.g. id, data, class).
|
7
|
+
#
|
8
|
+
# Examples
|
9
|
+
#
|
10
|
+
# <%= row do %>
|
11
|
+
# <%= col do %>Column content<% end %>
|
12
|
+
# <% end %>
|
13
|
+
#
|
14
|
+
# <%= row class: "row-cols-2", id: "my-row" do %> ...
|
15
|
+
#
|
16
|
+
# Returns a HTML-safe String.
|
17
|
+
def row(attrs={})
|
18
|
+
defaults = Trestle::Options.new(class: ["row"])
|
19
|
+
options = defaults.merge(attrs)
|
20
|
+
|
21
|
+
content_tag(:div, options) { yield }
|
5
22
|
end
|
6
23
|
|
24
|
+
# Renders a column div, one of the building blocks of Bootstrap's grid system.
|
25
|
+
# https://getbootstrap.com/docs/4.4/layout/grid/
|
26
|
+
#
|
27
|
+
# Column divs should always be rendered inside of a row div.
|
28
|
+
#
|
29
|
+
# Examples
|
30
|
+
#
|
31
|
+
# # Standard column - evenly fills available space
|
32
|
+
# <%= col do %>...<% end %>
|
33
|
+
#
|
34
|
+
# # Column spans 4 (out of 12) grid columns (i.e. 1/3 width) at all breakpoints
|
35
|
+
# <%= col 4 do %> ...
|
36
|
+
#
|
37
|
+
# # Column spans 6 grid columns at smallest breakpoint, 4 at md breakpoint
|
38
|
+
# # and above (portrait tablet) and 3 at xl breakpoint and above (desktop)
|
39
|
+
# <%= col 6, md: 4, xl: 3 do %> ...
|
40
|
+
#
|
41
|
+
# Returns a HTML-safe String.
|
7
42
|
def col(columns=nil, breakpoints={})
|
8
43
|
if columns.is_a?(Hash)
|
9
44
|
breakpoints = columns
|
10
45
|
columns = breakpoints.delete("xs") || breakpoints.delete(:xs)
|
11
46
|
end
|
12
47
|
|
13
|
-
|
14
|
-
|
15
|
-
|
48
|
+
if columns.nil? && breakpoints.empty?
|
49
|
+
classes = "col"
|
50
|
+
else
|
51
|
+
classes = []
|
52
|
+
classes << "col-#{columns}" if columns
|
53
|
+
classes += breakpoints.map { |breakpoint, span| "col-#{breakpoint}-#{span}" }
|
54
|
+
end
|
16
55
|
|
17
56
|
content_tag(:div, class: classes) { yield }
|
18
57
|
end
|
19
58
|
|
20
|
-
|
21
|
-
|
59
|
+
# Renders an <HR> (horizontal rule) HTML tag.
|
60
|
+
#
|
61
|
+
# attrs - Hash of attributes that will be passed to the tag (e.g. id, data, class).
|
62
|
+
#
|
63
|
+
# Returns a HTML-safe String.
|
64
|
+
def divider(attrs={})
|
65
|
+
tag(:hr, attrs)
|
22
66
|
end
|
23
67
|
end
|
24
68
|
end
|