2018-05-04 14:11:33 +08:00
|
|
|
# name: discourse-local-dates
|
|
|
|
# about: Display a date in your local timezone
|
|
|
|
# version: 0.1
|
|
|
|
# author: Joffrey Jaffeux
|
2018-05-16 06:43:09 +08:00
|
|
|
hide_plugin if self.respond_to?(:hide_plugin)
|
2018-05-04 14:11:33 +08:00
|
|
|
|
2018-11-26 21:20:32 +08:00
|
|
|
register_asset "javascripts/discourse-local-dates.js.no-module.es6"
|
2018-05-31 01:05:41 +08:00
|
|
|
register_asset "stylesheets/common/discourse-local-dates.scss"
|
2018-05-04 14:11:33 +08:00
|
|
|
register_asset "moment.js", :vendored_core_pretty_text
|
|
|
|
register_asset "moment-timezone.js", :vendored_core_pretty_text
|
|
|
|
|
|
|
|
enabled_site_setting :discourse_local_dates_enabled
|
|
|
|
|
2018-05-18 21:35:37 +08:00
|
|
|
after_initialize do
|
2018-09-07 02:13:24 +08:00
|
|
|
module ::DiscourseLocalDates
|
|
|
|
PLUGIN_NAME ||= "discourse-local-dates".freeze
|
|
|
|
POST_CUSTOM_FIELD ||= "local_dates".freeze
|
|
|
|
end
|
|
|
|
|
|
|
|
[
|
|
|
|
"../lib/discourse_local_dates/engine.rb",
|
|
|
|
].each { |path| load File.expand_path(path, __FILE__) }
|
|
|
|
|
|
|
|
register_post_custom_field_type(DiscourseLocalDates::POST_CUSTOM_FIELD, :json)
|
|
|
|
|
2018-09-07 03:01:45 +08:00
|
|
|
on(:before_post_process_cooked) do |doc, post|
|
2018-09-07 02:13:24 +08:00
|
|
|
dates = doc.css('span.discourse-local-date').map do |cooked_date|
|
|
|
|
date = {}
|
|
|
|
cooked_date.attributes.values.each do |attribute|
|
2018-10-16 07:34:55 +08:00
|
|
|
data_name = attribute.name&.gsub('data-', '')
|
2018-12-27 06:35:10 +08:00
|
|
|
if data_name && ['date', 'time', 'timezone', 'recurring'].include?(data_name)
|
2018-09-07 02:13:24 +08:00
|
|
|
unless attribute.value == 'undefined'
|
2018-10-16 07:34:55 +08:00
|
|
|
date[data_name] = CGI.escapeHTML(attribute.value || "")
|
2018-09-07 02:13:24 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
date
|
|
|
|
end
|
|
|
|
|
|
|
|
if dates.present?
|
2018-09-17 20:48:43 +08:00
|
|
|
post.custom_fields[DiscourseLocalDates::POST_CUSTOM_FIELD] = dates
|
2018-09-07 02:13:24 +08:00
|
|
|
post.save_custom_fields
|
2018-09-07 03:01:45 +08:00
|
|
|
elsif !post.custom_fields[DiscourseLocalDates::POST_CUSTOM_FIELD].nil?
|
|
|
|
post.custom_fields.delete(DiscourseLocalDates::POST_CUSTOM_FIELD)
|
|
|
|
post.save_custom_fields
|
2018-09-07 02:13:24 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
add_to_class(:post, :local_dates) do
|
|
|
|
custom_fields[DiscourseLocalDates::POST_CUSTOM_FIELD] || []
|
|
|
|
end
|
|
|
|
|
2018-05-18 21:35:37 +08:00
|
|
|
on(:reduce_cooked) do |fragment|
|
2018-10-12 06:26:35 +08:00
|
|
|
fragment.css(".discourse-local-date").each do |container|
|
|
|
|
if container.attributes["data-email-preview"]
|
|
|
|
preview = container.attributes["data-email-preview"].value
|
|
|
|
container.content = preview
|
|
|
|
end
|
2018-05-18 23:13:58 +08:00
|
|
|
end
|
2018-05-18 21:35:37 +08:00
|
|
|
end
|
|
|
|
end
|