From ed30ca9979906f29105cd79fddbd3f7a835035c7 Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Sat, 16 Mar 2024 07:42:11 +0000 Subject: [PATCH 1/2] imp: I-7853 calendar performance --- modules/druplan_fc/js/druplan_fc.js | 25 ++++++++++++++----- .../templates/views-view-druplan-fc.html.twig | 10 +++++--- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/modules/druplan_fc/js/druplan_fc.js b/modules/druplan_fc/js/druplan_fc.js index 9aab4b3..13a4a73 100644 --- a/modules/druplan_fc/js/druplan_fc.js +++ b/modules/druplan_fc/js/druplan_fc.js @@ -115,7 +115,9 @@ } function eventContent (info) { - return { html: info.event.extendedProps.renderedContent }; + var div = document.createElement('div'); + div.innerHTML = info.event.extendedProps.renderedContent; + return { html: div.textContent }; } function eventDidMount(info){ // Hier moeten we de variabele uit iets anders als de bordercolor weten halen, want nu worden er op sommige events extra borders geplaatst. @@ -226,17 +228,18 @@ refreshView(views_container); return; } + /* var events = $('#fc-1-events li').map( function (i, e) { // TODO: refactor to loop, but start and end have time element and first/last selector. - + var url = new URL($.trim($(e).find('.' + viewSettings['event_popup_url_field']).text()), window.location.origin); url.searchParams.append('exit_offcanvas_redirect', window.location.pathname + window.location.search); - var ev = { - title: $.trim($(e).find('.' + viewSettings['title_field']).text()), + title: 'test', //$.trim($(e).find('.' + viewSettings['title_field']).text()), start: $(e).find('.' + viewSettings['start_field'] + ' time').first().attr('datetime'), - end: $(e).find('.' + viewSettings['end_field'] + ' time').last().attr('datetime'), + end: $(e).find('.' + viewSettings['end_field'] + ' time').last().attr('datetime'), + allDay: !!$(e).find('.' + viewSettings['all_day_field']).text(), borderColor: $.trim($(e).find('.' + viewSettings['color_field']).text()), classNames: $.trim($(e).find('.' + viewSettings['classes_field']).text()), @@ -251,7 +254,17 @@ return ev; } ); - successCallback(events.get()); + */ + // successCallback(events.get()); + event_data = $("#fc-1-events").html(); + if (event_data === undefined || event_data.trim().length === 0) { + successCallback([]); + } + else { + var events = $.parseJSON(event_data); + console.log(events); + successCallback(events); + } }; calendarOptions['events'] = extractEvents; diff --git a/modules/druplan_fc/templates/views-view-druplan-fc.html.twig b/modules/druplan_fc/templates/views-view-druplan-fc.html.twig index ddb09a7..38f060f 100644 --- a/modules/druplan_fc/templates/views-view-druplan-fc.html.twig +++ b/modules/druplan_fc/templates/views-view-druplan-fc.html.twig @@ -27,11 +27,15 @@ </div> <ul id="fc-{{ view_index }}-events" class="druplan-fc-data"> + {% set first=1 %} + [ {% for row in rows %} - <li> + {% if first %}{% set first=0 %}{% else %},{% endif %} + { {{- row.content -}} - </li> + } {% endfor %} + ] </ul> - + </div> -- GitLab From b9327f1aa6e95c466ee62e1eb9ff77082303753a Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Sat, 16 Mar 2024 19:53:22 +0000 Subject: [PATCH 2/2] imp: I-7853 calendar performance --- modules/druplan_fc/druplan_fc.module | 6 ++ modules/druplan_fc/js/druplan_fc.js | 17 +++++- .../Plugin/views/field/DruplanRestEmbed.php | 55 +++++++++++++++++++ .../templates/views-view-druplan-fc.html.twig | 21 +++---- 4 files changed, 87 insertions(+), 12 deletions(-) create mode 100644 modules/druplan_fc/src/Plugin/views/field/DruplanRestEmbed.php diff --git a/modules/druplan_fc/druplan_fc.module b/modules/druplan_fc/druplan_fc.module index c0750ae..b37e476 100644 --- a/modules/druplan_fc/druplan_fc.module +++ b/modules/druplan_fc/druplan_fc.module @@ -193,5 +193,11 @@ function druplan_fc_views_data_alter(array &$data) { 'id' => 'druplan_color_field', ], ]; + $data['rp_event']['druplan_rest_embed'] = [ + 'title' => t('Druplan REST embed'), + 'field' => [ + 'id' => 'druplan_rest_embed_field', + ], + ]; } diff --git a/modules/druplan_fc/js/druplan_fc.js b/modules/druplan_fc/js/druplan_fc.js index 13a4a73..d7f168b 100644 --- a/modules/druplan_fc/js/druplan_fc.js +++ b/modules/druplan_fc/js/druplan_fc.js @@ -115,9 +115,12 @@ } function eventContent (info) { + /* var div = document.createElement('div'); div.innerHTML = info.event.extendedProps.renderedContent; return { html: div.textContent }; + */ + return { html: info.event.extendedProps.renderedContent.replace('data-replacement-style=', 'style=') }; } function eventDidMount(info){ // Hier moeten we de variabele uit iets anders als de bordercolor weten halen, want nu worden er op sommige events extra borders geplaatst. @@ -262,8 +265,18 @@ } else { var events = $.parseJSON(event_data); - console.log(events); - successCallback(events); + var transformed_events = $.map(events, function (e) { + return { + start: e[0].start, + end: e[0].end, + title: e[0].title, + extendedProps: { + renderedContent: e[0].renderedContent + } + } + }); + console.log(transformed_events); + successCallback(transformed_events); } }; diff --git a/modules/druplan_fc/src/Plugin/views/field/DruplanRestEmbed.php b/modules/druplan_fc/src/Plugin/views/field/DruplanRestEmbed.php new file mode 100644 index 0000000..9ad7b65 --- /dev/null +++ b/modules/druplan_fc/src/Plugin/views/field/DruplanRestEmbed.php @@ -0,0 +1,55 @@ +<?php + +namespace Drupal\druplan_fc\Plugin\views\field; + +use Drupal\views\Plugin\views\field\FieldPluginBase; +use Drupal\views\ResultRow; + +/** + * A handler to provide a field for the druplan event background color. + * + * @ingroup views_field_handlers + * + * @ViewsField("druplan_rest_embed_field") + */ +class DruplanRestEmbed extends FieldPluginBase { + + /** + * {@inheritdoc} + */ + public function usesGroupBy() { + return FALSE; + } + + /** + * {@inheritdoc} + */ + public function query() { + // Do nothing -- to override the parent query. + } + + /** + * {@inheritdoc} + */ + protected function defineOptions() { + $options = parent::defineOptions(); + // $options['hide_alter_empty'] = ['default' => FALSE]; + return $options; + } + + /** + * {@inheritdoc} + */ + public function render(ResultRow $values) { + $entity = $this->getEntity($values); + return [ + "#type" => "view", + "#name" => "druplan_calendar_event", + "#display_id" => "rest_export_1", + "#arguments" => [ + $entity->id(), + ], + ]; + } + +} diff --git a/modules/druplan_fc/templates/views-view-druplan-fc.html.twig b/modules/druplan_fc/templates/views-view-druplan-fc.html.twig index 38f060f..cdf7f79 100644 --- a/modules/druplan_fc/templates/views-view-druplan-fc.html.twig +++ b/modules/druplan_fc/templates/views-view-druplan-fc.html.twig @@ -25,17 +25,18 @@ <div class="js-druplan-fc" calendar-view-index="{{ view_index }}" calendar-view-name="{{ view_id }}" calendar-display="{{ display_id }}"></div> <div class="bottom-buttons fc-button-group"> </div> + <div id="fc-{{ view_index }}-events" class="druplan-fc-data"> + {% set first = 1 %} + [ - <ul id="fc-{{ view_index }}-events" class="druplan-fc-data"> - {% set first=1 %} - [ {% for row in rows %} - {% if first %}{% set first=0 %}{% else %},{% endif %} - { - {{- row.content -}} - } + {% if first == 1 %} + {% set first = 0 %} + {% else %} + , + {% endif %} + {{- row.content -}} {% endfor %} - ] - </ul> - + ] + </div> </div> -- GitLab