2019-05-02 18:17:27 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2018-05-04 02:11:33 -04:00
|
|
|
# name: discourse-local-dates
|
|
|
|
# about: Display a date in your local timezone
|
|
|
|
# version: 0.1
|
|
|
|
# author: Joffrey Jaffeux
|
2021-11-13 06:51:53 -05:00
|
|
|
|
2023-08-30 20:01:01 -04:00
|
|
|
hide_plugin
|
2018-05-04 02:11:33 -04:00
|
|
|
|
2019-03-28 11:34:56 -04:00
|
|
|
register_asset "stylesheets/common/discourse-local-dates.scss"
|
|
|
|
register_asset "moment.js", :vendored_core_pretty_text
|
|
|
|
register_asset "moment-timezone.js", :vendored_core_pretty_text
|
2018-05-04 02:11:33 -04:00
|
|
|
|
|
|
|
enabled_site_setting :discourse_local_dates_enabled
|
|
|
|
|
2018-05-18 09:35:37 -04:00
|
|
|
after_initialize do
|
2018-09-06 14:13:24 -04:00
|
|
|
module ::DiscourseLocalDates
|
2024-11-05 17:27:49 -05:00
|
|
|
PLUGIN_NAME = "discourse-local-dates".freeze
|
|
|
|
POST_CUSTOM_FIELD = "local_dates".freeze
|
2018-09-06 14:13:24 -04:00
|
|
|
end
|
|
|
|
|
2024-02-01 11:28:10 -05:00
|
|
|
require_relative "lib/discourse_local_dates/engine"
|
2018-09-06 14:13:24 -04:00
|
|
|
|
|
|
|
register_post_custom_field_type(DiscourseLocalDates::POST_CUSTOM_FIELD, :json)
|
|
|
|
|
2018-09-06 15:01:45 -04:00
|
|
|
on(:before_post_process_cooked) do |doc, post|
|
2020-01-21 10:42:41 -05:00
|
|
|
dates = []
|
|
|
|
|
|
|
|
doc
|
|
|
|
.css("span.discourse-local-date")
|
|
|
|
.map do |cooked_date|
|
|
|
|
next if cooked_date.ancestors("aside").length > 0
|
|
|
|
date = {}
|
|
|
|
cooked_date.attributes.values.each do |attribute|
|
|
|
|
data_name = attribute.name&.gsub("data-", "")
|
|
|
|
if data_name && %w[date time timezone recurring].include?(data_name)
|
|
|
|
unless attribute.value == "undefined"
|
|
|
|
date[data_name] = CGI.escapeHTML(attribute.value || "")
|
2023-01-06 15:42:16 -05:00
|
|
|
end
|
2018-09-06 14:13:24 -04:00
|
|
|
end
|
|
|
|
end
|
2020-01-21 10:42:41 -05:00
|
|
|
dates << date
|
2018-09-06 14:13:24 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
if dates.present?
|
2018-09-17 08:48:43 -04:00
|
|
|
post.custom_fields[DiscourseLocalDates::POST_CUSTOM_FIELD] = dates
|
2018-09-06 14:13:24 -04:00
|
|
|
post.save_custom_fields
|
2018-09-06 15:01:45 -04:00
|
|
|
elsif !post.custom_fields[DiscourseLocalDates::POST_CUSTOM_FIELD].nil?
|
|
|
|
post.custom_fields.delete(DiscourseLocalDates::POST_CUSTOM_FIELD)
|
|
|
|
post.save_custom_fields
|
2018-09-06 14:13:24 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
add_to_class(:post, :local_dates) { custom_fields[DiscourseLocalDates::POST_CUSTOM_FIELD] || [] }
|
|
|
|
|
2019-10-17 10:18:06 -04:00
|
|
|
on(:reduce_excerpt) do |fragment, post|
|
|
|
|
fragment
|
|
|
|
.css(".discourse-local-date")
|
|
|
|
.each { |container| container.content = "#{container.content} (UTC)" }
|
|
|
|
end
|
|
|
|
|
2018-05-18 09:35:37 -04:00
|
|
|
on(:reduce_cooked) do |fragment|
|
2019-03-28 11:34:56 -04:00
|
|
|
fragment
|
|
|
|
.css(".discourse-local-date")
|
|
|
|
.each do |container|
|
|
|
|
if container.attributes["data-email-preview"]
|
|
|
|
preview = container.attributes["data-email-preview"].value
|
2018-10-11 18:26:35 -04:00
|
|
|
container.content = preview
|
2023-01-06 15:42:16 -05:00
|
|
|
end
|
2018-10-11 18:26:35 -04:00
|
|
|
end
|
2018-05-18 09:35:37 -04:00
|
|
|
end
|
|
|
|
end
|