diff --git a/peertube-plugin-matomo/README.md b/peertube-plugin-matomo/README.md new file mode 100644 index 0000000..96b7e7c --- /dev/null +++ b/peertube-plugin-matomo/README.md @@ -0,0 +1,3 @@ +# Hello World plugin + +Just a PeerTube plugin example, that says "Hello world". diff --git a/peertube-plugin-matomo/client/common-client-plugin.js b/peertube-plugin-matomo/client/common-client-plugin.js new file mode 100644 index 0000000..c126219 --- /dev/null +++ b/peertube-plugin-matomo/client/common-client-plugin.js @@ -0,0 +1,46 @@ +function register ({ registerHook, peertubeHelpers }) { + initMatomo(registerHook, peertubeHelpers) + .catch(err => console.error('Cannot initialize Matomo', err)) +} + +export { + register +} + +function initMatomo (registerHook, peertubeHelpers) { + return peertubeHelpers.getSettings() + .then(s => { + if (!s || !s['site-id'] || !s['url']) { + console.error('Matomo settings are not set.') + return + } + + const matomoUrl = s['url'] + const siteId = s['site-id'] + + window._paq = window._paq || []; + window._paq.push(['trackPageView']); + window._paq.push(['enableLinkTracking']); + (function() { + var u = matomoUrl + '/'; + window._paq.push(['setTrackerUrl', u+'matomo.php']); + window._paq.push(['setSiteId', siteId]); + var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; + g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); + })(); + + window._paq.push(['setDocumentTitle', window.document.title]); + window._paq.push(['setCustomUrl', '/' + window.location.hash.substr(1)]); + window._paq.push(['trackPageView']); + + registerHook({ + target: 'action:router.navigation-end', + handler: function (params) { + window._paq.push(['setDocumentTitle', window.document.title]); + window._paq.push(['setCustomUrl', params.path]); + window._paq.push(['trackPageView']); + } + }) + }) + +} diff --git a/peertube-plugin-matomo/main.js b/peertube-plugin-matomo/main.js new file mode 100644 index 0000000..e6909f5 --- /dev/null +++ b/peertube-plugin-matomo/main.js @@ -0,0 +1,26 @@ +async function register ({ registerHook, registerSetting, settingsManager, storageManager }) { + registerSetting({ + name: 'url', + label: 'Matomo Url', + type: 'input', + private: false + }) + + registerSetting({ + name: 'site-id', + label: 'Site id', + type: 'input', + private: false + }) +} + +async function unregister () { + return +} + +module.exports = { + register, + unregister +} + +// ############################################################################ diff --git a/peertube-plugin-matomo/package.json b/peertube-plugin-matomo/package.json new file mode 100644 index 0000000..4613625 --- /dev/null +++ b/peertube-plugin-matomo/package.json @@ -0,0 +1,24 @@ +{ + "name": "peertube-plugin-matomo", + "version": "0.0.1", + "description": "Hello world PeerTube plugin example", + "engine": { + "peertube": ">=1.3.0" + }, + "keywords": [ + "peertube", + "plugin" + ], + "homepage": "https://framagit.org/framasoft/peertube/official-plugins/tree/master/peertube-plugin-matomo", + "author": "Chocobozzz", + "bugs": "https://framagit.org/framasoft/peertube/official-plugins/issues", + "library": "./main.js", + "staticDirs": {}, + "css": [], + "clientScripts": [ + { + "script": "client/common-client-plugin.js", + "scopes": [ "common" ] + } + ] +}