Module: JSAdmin::ApplicationHelper
- Defined in:
- app/helpers/js_admin/application_helper.rb
Constant Summary collapse
- CONTENT_FRAME_ID =
"js_admin_content"- CONTENT_BODY_ID =
"js_admin_content_body"- FLASH_ID =
"js_admin_flash"- THEME_COOKIE_NAME =
"js_admin_theme"- TEXT_INPUT_CLASSES =
[ "w-full rounded-md border border-slate-300 bg-white px-3.5 py-2.5 text-sm text-slate-950 shadow-sm", "placeholder:text-slate-400 focus:border-sky-500 focus:outline-none focus:ring-2 focus:ring-sky-200", "dark:border-slate-700 dark:bg-slate-900 dark:text-slate-100 dark:placeholder:text-slate-500", "dark:focus:border-sky-400 dark:focus:ring-sky-900" ].join(" ")
- SELECT_INPUT_CLASSES =
[ "w-full rounded-md border border-slate-300 bg-white px-3.5 py-2.5 text-sm text-slate-950 shadow-sm", "focus:border-sky-500 focus:outline-none focus:ring-2 focus:ring-sky-200", "dark:border-slate-700 dark:bg-slate-900 dark:text-slate-100", "dark:focus:border-sky-400 dark:focus:ring-sky-900" ].join(" ")
- CHECKBOX_INPUT_CLASSES =
[ "h-4 w-4 rounded border-slate-300 text-sky-600 focus:ring-sky-500", "dark:border-slate-700 dark:bg-slate-900 dark:focus:ring-sky-700" ].join(" ")
- TEXT_INPUT_ERROR_CLASSES =
[ "w-full rounded-md border border-rose-400 bg-white px-3.5 py-2.5 text-sm text-slate-950 shadow-sm", "placeholder:text-slate-400 focus:border-rose-500 focus:outline-none focus:ring-2 focus:ring-rose-200", "dark:border-rose-500 dark:bg-slate-900 dark:text-slate-100 dark:placeholder:text-slate-500", "dark:focus:border-rose-400 dark:focus:ring-rose-950" ].join(" ")
- SELECT_INPUT_ERROR_CLASSES =
[ "w-full rounded-md border border-rose-400 bg-white px-3.5 py-2.5 text-sm text-slate-950 shadow-sm", "focus:border-rose-500 focus:outline-none focus:ring-2 focus:ring-rose-200", "dark:border-rose-500 dark:bg-slate-900 dark:text-slate-100", "dark:focus:border-rose-400 dark:focus:ring-rose-950" ].join(" ")
- CHECKBOX_INPUT_ERROR_CLASSES =
[ "h-4 w-4 rounded border-rose-400 text-rose-600 focus:ring-rose-500", "dark:border-rose-500 dark:bg-slate-900 dark:focus:ring-rose-900" ].join(" ")
- FIELD_LABEL_CLASSES =
"text-sm font-medium text-slate-700 dark:text-slate-300 sm:col-span-4"- FIELD_LABEL_ERROR_CLASSES =
"text-sm font-medium text-rose-700 dark:text-rose-300 sm:col-span-4"- FIELD_ERROR_TEXT_CLASSES =
"mt-2 text-sm text-rose-600 dark:text-rose-300"- FORM_ERROR_CLASSES =
"rounded-md border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-800 dark:border-rose-900 dark:bg-rose-950 dark:text-rose-200"- SIDEBAR_LINK_BASE_CLASSES =
[ "block rounded-md px-3 py-2 text-sm font-medium", "hover:bg-slate-100 hover:text-slate-950", "dark:hover:bg-slate-800 dark:hover:text-slate-100" ].join(" ")
- SIDEBAR_LINK_ACTIVE_CLASSES =
"bg-sky-50 text-sky-700 dark:bg-sky-950 dark:text-sky-200"- SIDEBAR_LINK_INACTIVE_CLASSES =
"text-slate-700 dark:text-slate-300"- FLASH_BASE_CLASSES =
[ "transform rounded-md border px-4 py-3 text-sm shadow-lg transition duration-300 ease-out" ].join(" ")
- FLASH_CLASSES =
{ notice: "border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-900 dark:bg-emerald-950 dark:text-emerald-200", alert: "border-rose-200 bg-rose-50 text-rose-800 dark:border-rose-900 dark:bg-rose-950 dark:text-rose-200" }.freeze
- PAGINATION_LINK_CLASSES =
[ "inline-flex h-9 min-w-9 items-center justify-center rounded-md border border-slate-300 bg-white px-3 text-sm font-medium", "text-slate-700 shadow-sm hover:bg-slate-50", "dark:border-slate-700 dark:bg-slate-900 dark:text-slate-200 dark:hover:bg-slate-800" ].join(" ")
- PAGINATION_DISABLED_CLASSES =
[ "inline-flex h-9 min-w-9 items-center justify-center rounded-md border border-slate-200 bg-slate-100 px-3 text-sm font-medium", "text-slate-400 dark:border-slate-800 dark:bg-slate-900 dark:text-slate-600" ].join(" ")
- PAGINATION_STATUS_CLASSES =
[ "inline-flex h-9 min-w-28 items-center justify-center rounded-md border border-slate-200 bg-slate-50 px-3 text-sm font-medium", "text-slate-700 dark:border-slate-800 dark:bg-slate-900 dark:text-slate-200" ].join(" ")
Instance Method Summary collapse
- #js_admin_asset_exists?(logical_path) ⇒ Boolean
- #js_admin_content_body_id ⇒ Object
- #js_admin_content_frame_data ⇒ Object
- #js_admin_content_frame_id ⇒ Object
- #js_admin_content_link_data ⇒ Object
- #js_admin_field_error_id(form, field) ⇒ Object
- #js_admin_field_error_text_classes ⇒ Object
- #js_admin_field_errors(record, field) ⇒ Object
- #js_admin_field_id(form, field) ⇒ Object
- #js_admin_field_input(form, field) ⇒ Object
- #js_admin_field_label_classes(record, field) ⇒ Object
- #js_admin_flash_classes(type) ⇒ Object
- #js_admin_flash_id ⇒ Object
- #js_admin_form_error_classes ⇒ Object
- #js_admin_form_errors(record, resource) ⇒ Object
- #js_admin_html_classes ⇒ Object
- #js_admin_javascript_tags ⇒ Object
- #js_admin_pagination_disabled_classes ⇒ Object
- #js_admin_pagination_link_classes ⇒ Object
- #js_admin_pagination_status_classes ⇒ Object
- #js_admin_sidebar_link_classes(resource) ⇒ Object
- #js_admin_sidebar_namespace_groups ⇒ Object
- #js_admin_sidebar_namespace_label(namespace) ⇒ Object
- #js_admin_sidebar_namespace_open?(resources) ⇒ Boolean
- #js_admin_sidebar_resource_label(resource) ⇒ Object
- #js_admin_sidebar_top_level_resources ⇒ Object
- #js_admin_stylesheet_link_tag(logical_name) ⇒ Object
- #js_admin_table_value(field, record) ⇒ Object
Instance Method Details
#js_admin_asset_exists?(logical_path) ⇒ Boolean
245 246 247 248 249 250 251 252 253 254 255 256 257 |
# File 'app/helpers/js_admin/application_helper.rb', line 245 def js_admin_asset_exists?(logical_path) assets = Rails.application.assets if assets.respond_to?(:load_path) assets.load_path.find(logical_path).present? elsif Rails.application.assets_manifest Rails.application.assets_manifest.assets[logical_path].present? else false end rescue StandardError false end |
#js_admin_content_body_id ⇒ Object
151 152 153 |
# File 'app/helpers/js_admin/application_helper.rb', line 151 def js_admin_content_body_id CONTENT_BODY_ID end |
#js_admin_content_frame_data ⇒ Object
159 160 161 162 163 |
# File 'app/helpers/js_admin/application_helper.rb', line 159 def js_admin_content_frame_data { turbo_action: "advance" } end |
#js_admin_content_frame_id ⇒ Object
147 148 149 |
# File 'app/helpers/js_admin/application_helper.rb', line 147 def js_admin_content_frame_id CONTENT_FRAME_ID end |
#js_admin_content_link_data ⇒ Object
165 166 167 168 169 170 |
# File 'app/helpers/js_admin/application_helper.rb', line 165 def js_admin_content_link_data { turbo_frame: js_admin_content_frame_id, turbo_action: "advance" } end |
#js_admin_field_error_id(form, field) ⇒ Object
117 118 119 |
# File 'app/helpers/js_admin/application_helper.rb', line 117 def js_admin_field_error_id(form, field) "#{js_admin_field_id(form, field)}_error" end |
#js_admin_field_error_text_classes ⇒ Object
139 140 141 |
# File 'app/helpers/js_admin/application_helper.rb', line 139 def js_admin_field_error_text_classes FIELD_ERROR_TEXT_CLASSES end |
#js_admin_field_errors(record, field) ⇒ Object
121 122 123 |
# File 'app/helpers/js_admin/application_helper.rb', line 121 def js_admin_field_errors(record, field) record.errors[field.name].map(&:to_s) end |
#js_admin_field_id(form, field) ⇒ Object
113 114 115 |
# File 'app/helpers/js_admin/application_helper.rb', line 113 def js_admin_field_id(form, field) "#{form.object_name}_#{field.name}".tr("][", "_").delete_suffix("_") end |
#js_admin_field_input(form, field) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'app/helpers/js_admin/application_helper.rb', line 85 def js_admin_field_input(form, field) case field.input_kind when :text_area tag.textarea(js_admin_field_value(form, field), **(form, field, js_admin_text_input_classes(form, field)), rows: 5) when :check_box tag.div(class: "flex h-10 items-center") do safe_join([ tag.input(type: "hidden", name: js_admin_field_name(form, field), value: "0", autocomplete: "off"), tag.input(**(form, field, js_admin_checkbox_input_classes(form, field)).merge(type: "checkbox", value: "1", checked: js_admin_checkbox_checked?(form, field))) ]) end when :number_field tag.input(**(form, field, js_admin_text_input_classes(form, field)).merge(type: "number", step: field.number_step, value: js_admin_field_value(form, field))) when :date_field tag.input(**(form, field, js_admin_text_input_classes(form, field)).merge(type: "date", value: js_admin_formatted_field_value(form, field, "%Y-%m-%d"))) when :datetime_field tag.input(**(form, field, js_admin_text_input_classes(form, field)).merge(type: "datetime-local", value: js_admin_formatted_field_value(form, field, "%Y-%m-%dT%H:%M:%S"))) when :time_field tag.input(**(form, field, js_admin_text_input_classes(form, field)).merge(type: "time", value: js_admin_formatted_field_value(form, field, "%H:%M:%S"))) when :enum_select select_tag(js_admin_field_name(form, field), (field.enum_values, js_admin_field_value(form, field)), (form, field)) when :association_select select_tag(js_admin_field_name(form, field), (field., js_admin_field_value(form, field)), (form, field)) else tag.input(**(form, field, js_admin_text_input_classes(form, field)).merge(type: "text", value: js_admin_field_value(form, field))) end end |
#js_admin_field_label_classes(record, field) ⇒ Object
135 136 137 |
# File 'app/helpers/js_admin/application_helper.rb', line 135 def js_admin_field_label_classes(record, field) js_admin_field_errors(record, field).any? ? FIELD_LABEL_ERROR_CLASSES : FIELD_LABEL_CLASSES end |
#js_admin_flash_classes(type) ⇒ Object
213 214 215 |
# File 'app/helpers/js_admin/application_helper.rb', line 213 def js_admin_flash_classes(type) [ FLASH_BASE_CLASSES, FLASH_CLASSES.fetch(type.to_sym) ].join(" ") end |
#js_admin_flash_id ⇒ Object
155 156 157 |
# File 'app/helpers/js_admin/application_helper.rb', line 155 def js_admin_flash_id FLASH_ID end |
#js_admin_form_error_classes ⇒ Object
143 144 145 |
# File 'app/helpers/js_admin/application_helper.rb', line 143 def js_admin_form_error_classes FORM_ERROR_CLASSES end |
#js_admin_form_errors(record, resource) ⇒ Object
125 126 127 128 129 130 131 132 133 |
# File 'app/helpers/js_admin/application_helper.rb', line 125 def js_admin_form_errors(record, resource) editable_attributes = resource.editable_fields.map { |field| field.name.to_sym } record.errors.filter_map do |error| next if editable_attributes.include?(error.attribute.to_sym) error. end end |
#js_admin_html_classes ⇒ Object
241 242 243 |
# File 'app/helpers/js_admin/application_helper.rb', line 241 def js_admin_html_classes "dark" if [THEME_COOKIE_NAME] == "dark" end |
#js_admin_javascript_tags ⇒ Object
235 236 237 238 239 |
# File 'app/helpers/js_admin/application_helper.rb', line 235 def return unless respond_to?(:javascript_importmap_tags) "js_admin" end |
#js_admin_pagination_disabled_classes ⇒ Object
221 222 223 |
# File 'app/helpers/js_admin/application_helper.rb', line 221 def js_admin_pagination_disabled_classes PAGINATION_DISABLED_CLASSES end |
#js_admin_pagination_link_classes ⇒ Object
217 218 219 |
# File 'app/helpers/js_admin/application_helper.rb', line 217 def js_admin_pagination_link_classes PAGINATION_LINK_CLASSES end |
#js_admin_pagination_status_classes ⇒ Object
225 226 227 |
# File 'app/helpers/js_admin/application_helper.rb', line 225 def js_admin_pagination_status_classes PAGINATION_STATUS_CLASSES end |
#js_admin_sidebar_link_classes(resource) ⇒ Object
203 204 205 206 207 208 209 210 211 |
# File 'app/helpers/js_admin/application_helper.rb', line 203 def (resource) state_classes = if (resource) SIDEBAR_LINK_ACTIVE_CLASSES else SIDEBAR_LINK_INACTIVE_CLASSES end "#{SIDEBAR_LINK_BASE_CLASSES} #{state_classes}" end |
#js_admin_sidebar_namespace_groups ⇒ Object
183 184 185 186 187 188 189 |
# File 'app/helpers/js_admin/application_helper.rb', line 183 def .reject { |resource| js_admin_resource_namespace(resource).blank? } .group_by { |resource| js_admin_resource_namespace(resource) } .sort_by { |namespace, _resources| namespace } .to_h end |
#js_admin_sidebar_namespace_label(namespace) ⇒ Object
195 196 197 |
# File 'app/helpers/js_admin/application_helper.rb', line 195 def (namespace) namespace.split("::").map { |name| name.underscore.humanize }.join(" / ") end |
#js_admin_sidebar_namespace_open?(resources) ⇒ Boolean
199 200 201 |
# File 'app/helpers/js_admin/application_helper.rb', line 199 def (resources) resources.any? { |resource| (resource) } end |
#js_admin_sidebar_resource_label(resource) ⇒ Object
191 192 193 |
# File 'app/helpers/js_admin/application_helper.rb', line 191 def (resource) resource.model_class.name.demodulize.underscore.humanize end |
#js_admin_sidebar_top_level_resources ⇒ Object
179 180 181 |
# File 'app/helpers/js_admin/application_helper.rb', line 179 def .select { |resource| js_admin_resource_namespace(resource).blank? } end |
#js_admin_stylesheet_link_tag(logical_name) ⇒ Object
229 230 231 232 233 |
# File 'app/helpers/js_admin/application_helper.rb', line 229 def js_admin_stylesheet_link_tag(logical_name) return unless js_admin_asset_exists?("#{logical_name}.css") stylesheet_link_tag logical_name, "data-turbo-track": "reload" end |
#js_admin_table_value(field, record) ⇒ Object
172 173 174 175 176 177 |
# File 'app/helpers/js_admin/application_helper.rb', line 172 def js_admin_table_value(field, record) value = field.formatted_value(record) classes = value == "NULL" ? "text-slate-400 dark:text-slate-500" : "text-slate-700 dark:text-slate-200" tag.span(truncate(value, length: 80), class: classes) end |