From f0dab5a5e4c4d6c3bf4d2d5146ff3138e692b05f Mon Sep 17 00:00:00 2001 From: Vinoth Kannan Date: Thu, 6 Sep 2018 23:43:24 +0530 Subject: [PATCH] DEV: Add local_dates post custom field --- .../lib/discourse_local_dates/engine.rb | 2 - plugins/discourse-local-dates/plugin.rb | 38 ++++++++++++++++++- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/plugins/discourse-local-dates/lib/discourse_local_dates/engine.rb b/plugins/discourse-local-dates/lib/discourse_local_dates/engine.rb index ee920f06176..2338d5e298e 100644 --- a/plugins/discourse-local-dates/lib/discourse_local_dates/engine.rb +++ b/plugins/discourse-local-dates/lib/discourse_local_dates/engine.rb @@ -1,6 +1,4 @@ module ::DiscourseLocalDates - PLUGIN_NAME = "discourse-local-dates" - class Engine < ::Rails::Engine engine_name DiscourseLocalDates::PLUGIN_NAME isolate_namespace DiscourseLocalDates diff --git a/plugins/discourse-local-dates/plugin.rb b/plugins/discourse-local-dates/plugin.rb index f027e75b5f5..ec0b902e7a9 100644 --- a/plugins/discourse-local-dates/plugin.rb +++ b/plugins/discourse-local-dates/plugin.rb @@ -12,6 +12,42 @@ 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 + + [ + "../lib/discourse_local_dates/engine.rb", + ].each { |path| load File.expand_path(path, __FILE__) } + + register_post_custom_field_type(DiscourseLocalDates::POST_CUSTOM_FIELD, :json) + + on(:post_process_cooked) do |doc, post| + dates = doc.css('span.discourse-local-date').map do |cooked_date| + date = {} + cooked_date.attributes.values.each do |attribute| + if attribute.name && ['data-date', 'data-time'].include?(attribute.name) + unless attribute.value == 'undefined' + date[attribute.name.gsub('data-', '')] = CGI.escapeHTML(attribute.value || "") + end + end + end + date + end + + if dates.present? + post.custom_fields[DiscourseLocalDates::POST_CUSTOM_FIELD] = dates.to_json + post.save_custom_fields + elsif post.custom_fields[DiscourseLocalDates::POST_CUSTOM_FIELD].present? + PostCustomField.where(post_id: post.id, name: DiscourseLocalDates::POST_CUSTOM_FIELD).destroy_all + end + end + + add_to_class(:post, :local_dates) do + custom_fields[DiscourseLocalDates::POST_CUSTOM_FIELD] || [] + end + on(:reduce_cooked) do |fragment| container = fragment.css(".discourse-local-date").first @@ -21,5 +57,3 @@ after_initialize do end end end - -load File.expand_path('../lib/discourse_local_dates/engine.rb', __FILE__)