# HG changeset patch # User Thierry Florac # Date 1548089121 -3600 # Node ID f5521cdc0207a3112d807be9a2492d6faa8c82f1 # Parent c07d3457c72e813bb366901719da4bb310af2fae Added Facebook account and application ID in Opengraph metas headers diff -r c07d3457c72e -r f5521cdc0207 src/pyams_default_theme/resources/js/pyams-default.min.js --- a/src/pyams_default_theme/resources/js/pyams-default.min.js Mon Jan 21 17:44:08 2019 +0100 +++ b/src/pyams_default_theme/resources/js/pyams-default.min.js Mon Jan 21 17:45:21 2019 +0100 @@ -1,1 +1,1 @@ -!function(o,a){"use strict";var l=a.MyAMS;a.PyAMS_default={search:{updateSort:function(){var a=o('form[id="search-results"]');if(a.exists()){var t=o(this).val();o('input[name="order_by"]',a).val(t),a.submit()}},updatePageLength:function(){var a=o('form[id="search-results"]');if(a.exists()){var t=o(this).val();o('input[name="start"]',a).val(0),o('input[name="length"]',a).val(t),a.submit()}},previousPage:function(){var a=o('form[id="search-results"]');if(a.exists()){var t=o(this).parents("ol.pagination").data("ams-current-page"),e=o('input[name="length"]',a).val();o('input[name="start"]',a).val(e*(t-2)),a.submit()}},nextPage:function(){var a=o('form[id="search-results"]');if(a.exists()){var t=o(this).parents("ol.pagination").data("ams-current-page"),e=o('input[name="length"]',a).val();o('input[name="start"]',a).val(e*t),a.submit()}},gotoPage:function(){var a=o('form[id="search-results"]');if(a.exists()){var t=parseInt(o(this).text()),e=o('input[name="length"]',a).val();o('input[name="start"]',a).val(e*(t-1)),a.submit()}}}},o(document).on("click",'[data-toggle="lightbox"]',function(a){a.preventDefault();var t=o(this);l.ajax.check(o.fn.ekkoLightbox,"/--static--/pyams_default_theme/js/ext/ekko-lightbox"+l.devext+".js",function(){t.ekkoLightbox({wrapping:!1,alwaysShowClose:!0,onContentLoaded:function(){var a=this.element().data("description"),t=this.modal(),e=o(".ekko-lightbox-container",t);o(".description",e).remove(),a&&o("
").addClass("description").text(a).appendTo(e)}})})}),o(document).on("click","[data-ams-click-handler]",function(a){var t=o(this),e=t.data("ams-disabled-handlers");if(!0!==e&&"click"!==e&&"all"!==e){var n=t.data();if(n.amsClickHandler){!0!==n.amsStopPropagation&&!0!==n.amsClickStopPropagation||a.stopPropagation(),!0!==n.amsClickKeepDefault&&a.preventDefault();for(var i=n.amsClickHandler.split(/\s+/),s=0;sdiv");a.exists()&&l.dialog.close(a);var t=o(this).data("term")||o(this).text();l.dialog.open("/get-glossary-term.html?term="+t,{},{shown:function(){o(".thesaurus-term").off("click").on("click",e)}})};l.require(["error","ajax","dialog"],function(){o(".thesaurus-term").off("click").on("click",e)})}(jQuery,this); +!function(a,t){"use strict";var e=t.MyAMS;t.PyAMS_default={search:{updateSort:function(){var t=a('form[id="search-results"]');if(t.exists()){var e=a(this).val();a('input[name="order_by"]',t).val(e),t.submit()}},updatePageLength:function(){var t=a('form[id="search-results"]');if(t.exists()){var e=a(this).val();a('input[name="start"]',t).val(0),a('input[name="length"]',t).val(e),t.submit()}},previousPage:function(){var t=a('form[id="search-results"]');if(t.exists()){var e=a(this).parents("ol.pagination").data("ams-current-page"),n=a('input[name="length"]',t).val();a('input[name="start"]',t).val(n*(e-2)),t.submit()}},nextPage:function(){var t=a('form[id="search-results"]');if(t.exists()){var e=a(this).parents("ol.pagination").data("ams-current-page"),n=a('input[name="length"]',t).val();a('input[name="start"]',t).val(n*e),t.submit()}},gotoPage:function(){var t=a('form[id="search-results"]');if(t.exists()){var e=parseInt(a(this).text()),n=a('input[name="length"]',t).val();a('input[name="start"]',t).val(n*(e-1)),t.submit()}}}},a(document).on("click",'[data-toggle="lightbox"]',function(t){t.preventDefault();var n=a(this);e.ajax.check(a.fn.ekkoLightbox,"/--static--/pyams_default_theme/js/ext/ekko-lightbox"+e.devext+".js",function(){n.ekkoLightbox({wrapping:!1,alwaysShowClose:!0,onContentLoaded:function(){var t=this.element().data("description"),e=this.modal(),n=a(".ekko-lightbox-container",e);a(".description",n).remove(),t&&a("
").addClass("description").text(t).appendTo(n)}})})}),a(document).on("click","[data-ams-click-handler]",function(t){var n=a(this),i=n.data("ams-disabled-handlers");if(!0!==i&&"click"!==i&&"all"!==i){var s=n.data();if(s.amsClickHandler){!0!==s.amsStopPropagation&&!0!==s.amsClickStopPropagation||t.stopPropagation(),!0!==s.amsClickKeepDefault&&t.preventDefault();for(var r=s.amsClickHandler.split(/\s+/),o=0;odiv");t.exists()&&e.dialog.close(t);var i=a(this).data("term")||a(this).text();e.dialog.open("/get-glossary-term.html?term="+i,{},{shown:function(){a(".thesaurus-term").off("click").on("click",n)}})};e.require(["error","ajax","dialog"],function(){a(".thesaurus-term").off("click").on("click",n)})}(jQuery,this); diff -r c07d3457c72e -r f5521cdc0207 src/pyams_default_theme/root/opengraph.py --- a/src/pyams_default_theme/root/opengraph.py Mon Jan 21 17:44:08 2019 +0100 +++ b/src/pyams_default_theme/root/opengraph.py Mon Jan 21 17:45:21 2019 +0100 @@ -37,7 +37,6 @@ def get_metas(self): context = self.context request = self.request - i18n = II18n(context) negotiator = get_utility(INegotiator) lang = negotiator.server_language @@ -87,9 +86,12 @@ # twitter properties share_info = ISocialShareInfo(request.root, None) - if (share_info is not None) and share_info.twitter_account: - yield ContentMeta('twitter:site', share_info.twitter_account) - yield ContentMeta('twitter:creator', share_info.twitter_creator_account or share_info.twitter_account) + if share_info is not None: + if share_info.fb_app_id: + yield PropertyMeta('fb:app_id', share_info.fb_app_id) + if share_info.twitter_account: + yield ContentMeta('twitter:site', share_info.twitter_account) + yield ContentMeta('twitter:creator', share_info.twitter_creator_account or share_info.twitter_account) if title: yield ContentMeta('twitter:title', title) if description: diff -r c07d3457c72e -r f5521cdc0207 src/pyams_default_theme/shared/common/opengraph.py --- a/src/pyams_default_theme/shared/common/opengraph.py Mon Jan 21 17:44:08 2019 +0100 +++ b/src/pyams_default_theme/shared/common/opengraph.py Mon Jan 21 17:45:21 2019 +0100 @@ -27,6 +27,7 @@ from pyams_skin.metas import ContentMeta, PropertyMeta, SchemaMeta from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config from pyams_utils.registry import get_utility +from pyams_utils.timezone import tztime from pyams_utils.traversing import get_parent from pyams_utils.url import absolute_url, canonical_url from pyams_workflow.interfaces import IWorkflowPublicationInfo @@ -54,16 +55,26 @@ if description: yield PropertyMeta('og:description', description) - # workflow informations + # URL and site name + yield PropertyMeta('og:url', canonical_url(context, request)) + configuration = IConfiguration(request.root) + yield PropertyMeta('og:site_name', configuration.title) + + # author account + share_info = ISocialShareInfo(request.root, None) + if share_info.fb_account: + yield PropertyMeta('article:author', share_info.fb_account) + + # workflow information dc = IZopeDublinCore(context, None) if (dc is not None) and dc.modified: - yield PropertyMeta('article:modified_time', dc.modified.isoformat()) + yield PropertyMeta('article:modified_time', tztime(dc.modified).isoformat()) pub_info = IWorkflowPublicationInfo(context, None) if pub_info is not None: if pub_info.first_publication_date: - yield PropertyMeta('article:published_time', pub_info.first_publication_date.isoformat()) + yield PropertyMeta('article:published_time', tztime(pub_info.first_publication_date).isoformat()) if pub_info.publication_expiration_date: - yield PropertyMeta('article:expiration_time', pub_info.publication_expiration_date.isoformat()) + yield PropertyMeta('article:expiration_time', tztime(pub_info.publication_expiration_date).isoformat()) # tags tags = ITagsInfo(context, None) @@ -71,11 +82,6 @@ for tag in tags.tags or (): yield PropertyMeta('article:tag', tag.label) - # URL and site name - yield PropertyMeta('og:url', canonical_url(context, request)) - configuration = IConfiguration(request.root) - yield PropertyMeta('og:site_name', configuration.title) - # illustration properties registry = request.registry illustration = None @@ -112,10 +118,12 @@ yield PropertyMeta('og:locale:alternate', other_lang) # twitter properties - share_info = ISocialShareInfo(request.root, None) - if (share_info is not None) and share_info.twitter_account: - yield ContentMeta('twitter:site', share_info.twitter_account) - yield ContentMeta('twitter:creator', share_info.twitter_creator_account or share_info.twitter_account) + if share_info is not None: + if share_info.fb_app_id: + yield PropertyMeta('fb:app_id', share_info.fb_app_id) + if share_info.twitter_account: + yield ContentMeta('twitter:site', share_info.twitter_account) + yield ContentMeta('twitter:creator', share_info.twitter_creator_account or share_info.twitter_account) yield ContentMeta('twitter:title', i18n.query_attribute('title', lang=lang, request=request)) if description: yield ContentMeta('twitter:description', description) diff -r c07d3457c72e -r f5521cdc0207 src/pyams_default_theme/shared/site/__init__.py --- a/src/pyams_default_theme/shared/site/__init__.py Mon Jan 21 17:44:08 2019 +0100 +++ b/src/pyams_default_theme/shared/site/__init__.py Mon Jan 21 17:45:21 2019 +0100 @@ -16,6 +16,7 @@ from pyams_file.interfaces import IThumbnails from pyams_skin.interfaces.configuration import IConfiguration from pyams_utils.registry import get_utility +from pyams_utils.timezone import tztime from pyams_workflow.interfaces import IWorkflowPublicationInfo @@ -88,13 +89,23 @@ if description: yield PropertyMeta('og:description', description) + # URL and site name + yield PropertyMeta('og:url', canonical_url(context, request)) + configuration = IConfiguration(request.root) + yield PropertyMeta('og:site_name', configuration.title) + + # author account + share_info = ISocialShareInfo(request.root, None) + if share_info.fb_account: + yield PropertyMeta('article:author', share_info.fb_account) + # workflow informations pub_info = IWorkflowPublicationInfo(context, None) if pub_info is not None: if pub_info.first_publication_date: - yield PropertyMeta('article:published_time', pub_info.first_publication_date.isoformat()) + yield PropertyMeta('article:published_time', tztime(pub_info.first_publication_date).isoformat()) if pub_info.publication_expiration_date: - yield PropertyMeta('article:expiration_time', pub_info.publication_expiration_date.isoformat()) + yield PropertyMeta('article:expiration_time', tztime(pub_info.publication_expiration_date).isoformat()) # tags tags = ITagsInfo(context, None) @@ -102,11 +113,6 @@ for tag in tags.tags or (): yield PropertyMeta('article:tag', tag.label) - # URL and site name - yield PropertyMeta('og:url', canonical_url(context, request)) - configuration = IConfiguration(request.root) - yield PropertyMeta('og:site_name', configuration.title) - # illustration properties registry = request.registry thumbnail = None @@ -137,10 +143,12 @@ yield PropertyMeta('og:locale:alternate', other_lang) # twitter properties - share_info = ISocialShareInfo(request.root, None) - if (share_info is not None) and share_info.twitter_account: - yield ContentMeta('twitter:site', share_info.twitter_account) - yield ContentMeta('twitter:creator', share_info.twitter_creator_account or share_info.twitter_account) + if share_info is not None: + if share_info.fb_app_id: + yield PropertyMeta('fb:app_id', share_info.fb_app_id) + if share_info.twitter_account: + yield ContentMeta('twitter:site', share_info.twitter_account) + yield ContentMeta('twitter:creator', share_info.twitter_creator_account or share_info.twitter_account) yield ContentMeta('twitter:title', i18n.query_attribute('title', lang=lang, request=request)) if description: yield ContentMeta('twitter:description', description)