discourse/plugins/discourse-local-dates/plugin.rb
Robin Ward a3f0543f99
Support for transpiling .js files (#9160)
* Remove some `.es6` from comments where it does not matter

* Use a post processor for transpilation

This will allow us to eventually use the directory structure to
transpile rather than the extension.

* FIX: Some errors and clean up in confirm-new-email

It would throw an error if the webauthn element wasn't present.
Also I changed things so that no-module is not explicitly
referenced.

* Remove `no-module`

Instead we allow a magic comment: `// discourse-skip-module` to prevent
the asset pipeline from creating a module.

* DEV: Enable babel transpilation based on directory

If it's in `app/assets/javascripts/dicourse` it will be transpiled
even without the `.es6` extension.

* REFACTOR: Remove Tilt/ES6ModuleTranspiler
2020-03-11 09:43:55 -04:00

73 lines
2.2 KiB
Ruby

# frozen_string_literal: true
# name: discourse-local-dates
# about: Display a date in your local timezone
# version: 0.1
# author: Joffrey Jaffeux
hide_plugin if self.respond_to?(:hide_plugin)
register_asset 'javascripts/discourse-local-dates.js.es6'
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
enabled_site_setting :discourse_local_dates_enabled
after_initialize do
module ::DiscourseLocalDates
PLUGIN_NAME ||= 'discourse-local-dates'.freeze
POST_CUSTOM_FIELD ||= 'local_dates'.freeze
end
%w[../lib/discourse_local_dates/engine.rb].each do |path|
load File.expand_path(path, __FILE__)
end
register_post_custom_field_type(DiscourseLocalDates::POST_CUSTOM_FIELD, :json)
on(:before_post_process_cooked) do |doc, post|
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 || '')
end
end
end
dates << date
end
if dates.present?
post.custom_fields[DiscourseLocalDates::POST_CUSTOM_FIELD] = dates
post.save_custom_fields
elsif !post.custom_fields[DiscourseLocalDates::POST_CUSTOM_FIELD].nil?
post.custom_fields.delete(DiscourseLocalDates::POST_CUSTOM_FIELD)
post.save_custom_fields
end
end
add_to_class(:post, :local_dates) do
custom_fields[DiscourseLocalDates::POST_CUSTOM_FIELD] || []
end
on(:reduce_excerpt) do |fragment, post|
fragment.css('.discourse-local-date').each do |container|
container.content = "#{container.content} (UTC)"
end
end
on(:reduce_cooked) do |fragment|
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
end
end
end