-
Posts
89 -
Joined
-
Last visited
-
Days Won
8
Posts posted by joshua
-
-
1 hour ago, update AG said:
Somehow the Scripts aren't loaded (the banner doesn't appear) when we access a url created with URL-Hooks https://processwire.com/blog/posts/pw-3.0.173/#introducing-url-path-hooks?
That's an interesting finding. PrivacyWire hooks into the page->render method for the rendering:
$this->wire('page')->addHookBefore('render', $this, 'initiatePrivacyWire');
Is this still called when accessing a URL created with URL-Hooks? If not, what would be an alternative point to hook=
-
Sorry for my late response in general.
I haven't used ProcessWire ( and therefore also PrivacyWire) in new business projects in the last time but was quiet busy with work.
On 3/6/2022 at 10:15 AM, ceberlin said:Right now, I am using CSS to hide .privacywire and its wrapper on those.
I think that actually is the easiest way right now.
On 5/29/2022 at 12:37 PM, fruid said:Is PrivacyWire GDPR compliant? (General Data Protection Regulation in the EU)
In general yes. But it depends on how you implement PrivacyWire and the 3rd-party scripts!
On 5/29/2022 at 12:37 PM, fruid said:So any chance I can accomplish this with PrivacyWire?
Yes, this is possible. See this forum thread for examples.
On 6/16/2022 at 9:27 AM, fruid said:would be great if you could add custom cookie categories
Feel free to fork, add the feature and start an PR.
-
2
-
-
-
2
-
-
Thanks @chrizz!
That's a good idea.I will look into your PR later today and will merge it as soon as possible ?
-
1 hour ago, eelkenet said:
However, what does work is hooking into the same Page::render method with a lower priority number, so our code gets an earlier execution. Great!
That's great! Thanks for the feedback. It is even easier now in v1.0.9 as I reduced the hook priority, so every "usual" hook written inside a template should work, too.
-
2
-
-
3 hours ago, eelkenet said:
However, due to the way PrivacyWire has been built, it looks at the $users language BEFORE any of this takes place (in its ready() function).
That's correct, currently PrivacyWire loads itself in the module ready() method.
I played around with some settings to load PrivacyWire later. You can find the feature in this branch:
https://github.com/webworkerJoshua/privacywire/tree/feature-initiate-privacywire-laster
In this version PrivacyWire initiates itself before Page::render:$this->addHookBefore('Page::render', $this, 'initiatePrivacyWire');
Could you try this version and confirm, that it's working the way you wanted / expected? After that I will do some more testing before merging into the main branch just to be sure that there are no side effects ?
Thanks!
-
1
-
1
-
-
2 hours ago, horst said:
A line of code or a keyword hint would be of great help.
I just added a small function for this usecase in v1.0.7. You can trigger this "re-initiating" by calling
window.PrivacyWire.reHandleExternalButtons()Updated / Added code: https://github.com/webworkerJoshua/privacywire/blob/1.0.7/src/js/PrivacyWire.js#L146-L149
-
1
-
-
Is your ProcessWire instance installed in the root web directory or somewhere else?
The only noticible change I find in your code examle is the directory within the script tag:
<script nomodule type='text/javascript' src='.../site/modules/PrivacyWire/js/PrivacyWire_legacy.js'>
Usually the src attribute starts directly with '/site/' instead of '.../site/'
<style>.privacywire{position:fixed;bottom:-250%;left:0;right:0;box-shadow:0 -1px 3px rgba(0,0,0,.3);opacity:0;background:#fff;z-index:1;padding:1rem;transition:bottom .3s ease-in,opacity .3s ease}.show-banner .privacywire-banner,.show-message .privacywire-message,.show-options .privacywire-options{bottom:0;opacity:1}.privacywire-header{font-weight:700}.privacywire-ask-consent-blueprint,.privacywire button[hidden],[data-ask-consent-rendered="1"]{display:none}</style> <script>var PrivacyWireSettings={"version":1,"dnt":"0","customFunction":"","messageTimeout":1500,"consentByClass":"1","cookieGroups":{"necessary":"Necessary","functional":"Functional","statistics":"Statistics","marketing":"Marketing","external_media":"External Media"}};</script> <script type='module' src='/site/modules/Privacywire/js/PrivacyWire.js'></script> <script nomodule type='text/javascript' src='/site/modules/Privacywire/js/ie_polyfill.js'></script> <script nomodule type='text/javascript' src='/site/modules/Privacywire/js/PrivacyWire_legacy.js'></script>
-
1
-
-
Hi Jens,
sounds like an good workflow and also a nice improvement for the PrivacyWire module config.
I'll add it as soon as I find the time.Best,
Joshua-
2
-
-
Thanks for noticing! I fixed the typo in the git repo, should be updated in the PW module repo soon.
Hm, I'm looking into this problem. Which version of PrivacyWire are you using?
-
2
-
-
8 minutes ago, ceberlin said:
<script type=text/plain" data-type="text/javascript" data-category="external_media" class="require-consent">
In this example the starting quote at the type attribute is missing:
<script type="text/plain" data-type="text/javascript" data-category="external_media" class="require-consent">...</script>
In your example:
Does it work with the quotation mark?
-
1
-
-
On 3/23/2021 at 10:28 AM, Matze said:
Hi. Is it possible to make it like a window or modal centered in the middle of the page and the background overlayed with a half transparent color?
I tried to customize it via CSS but didn’t manage it. Maybe there is an easier solution for this?You mean something like the screenshot attached?
That's possible with some CSS (this is just an example, how one could do this)
.show-banner > .privacywire-page-wrapper, .show-options > .privacywire-page-wrapper, .show-message > .privacywire-page-wrapper { position: fixed; left: 0; top: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.6); backdrop-filter: blur(5px); display: flex; justify-content: center; align-items: center; } .privacywire { display: none; } .show-banner .privacywire.privacywire-banner, .show-options .privacywire.privacywire-options, .show-message .privacywire.privacywire-message { display: block; position: relative; left: auto; right: auto; bottom: auto; max-width: 450px; }
-
2
-
1
-
-
On 3/18/2021 at 1:57 PM, fruid said:
I did this. If I leave the src tag empty, nothing is loaded. If I accept the marketing cookies, nothing is loaded either ?
I'm on local BTW, not sure if that's relevantYou can ommit the src attribute also. In my test case it works that way.
I use it a lot in combination with vimeo video and used the implementation as in this video -
Just now, ngrmm said:
ok, is it possible to do this via php?
In theory yes, but as PrivacyWire is not able to set the cookie without JavaScript in the first place, there is no cookie or localStorage to check.
Also caching might be a problem when doing this with php. -
Without enabled JavaScript (thus the <noscript> tag), it is not possible to asynchronously load something (as there is no JavaScript to do so – chasing one's own tail).
-
1
-
-
That's right! Currently I'm doing this with a pretty custom python script, which runs updates directly in the database. But RockMigrations seems to be a better solution - solid as a "rock" ? and easy to handle. Thanks!
-
Hi @bernhard,
Nice work! I'm currently working on something very similiar. Focus would be also mainly triggering the install process via CLI to automate the setup process of new projects.
Further on I want to add the possibility to add Fields and Repeater Matrix Content Types via CLI.
-
Right now there is no "clear cookie" function. You could add an custom js function, which gets triggered after saving the consent and insert the function name in the module config option.

One easy way to not use google analytics afterwards, would be a simple reload:
var reloadAfterConsent = function() { window.location.reload(); };
After the reload, the google script will not be loaded again, but the cookies will remain.
To also delete existing cookies, some extra work is needed as PrivacyWire don't know, what cookies got set by which script and you probably don't want to delete all cookies.
You could write a function to check for current consent state and delete cookies, if no consent to a specific category is given.
Here is a very rough (and not tested in real life) idea, how you could do something like this:function eraseCookie(name) { document.cookie = name+'=; expires=Thu, 01 Jan 1970 00:00:00 UTC;'; } var removeGoogleCookies = function() { if(window.PrivacyWire.userConsent.cookieGroups.statistics !== true) { eraseCookie("_ga"); eraseCookie("_gid"); // or whatever your cookie names are } };
And then add removeGoogleCookies to the "Trigger a custom js function" config option. This script is written with the new logic from the ES6 branch, should also work in earlier versions with different naming though.
-
1
-
-
@LAPS With this new version, there are even more customizations available. Have a look into the comments in PrivacyWire.module.
This example code does the same as the one from my post from last Friday, but with the new syntax of the new version:
<html> <head> <!-- your head content --> <?php $privacywire = $modules->get("PrivacyWire"); // load the css files echo $procache->link([ $config->urls->template . "path/to/your/stylesheet.css", $privacywire->getPrivacyWireStyles()->url ]); // load the inline script echo $privacywire->renderPrivacyWireConfigAsInlineJs(); ?> </head> <body> <!-- your body content --> <!-- your body content --> <!-- your body content --> <?php // render the required DOM elements echo $privacywire->bodyContent; // render the JavaScript files echo $procache->script([ $config->urls->template . "path/to/your/scripts.js", $privacywire->getPrivacyWireCore()->url ]); ?> </body> </html>
-
3
-
-
Hey everyone,
I did a lot of refactoring of PrivacyWire this weekend - both for the backend and frontend.
The Javascript core of PrivacyWire is nearly completely rewritten in ES6. This results in much better readability and of course extensibility. For examle, as asked by @Torsten Baldes, one can now manually trigger to refresh the element detection of PrivacyWire by simple running the following function afterwards:window.PrivacyWire.refresh();
You'll find a brief overview of the updates here: https://github.com/blaueQuelle/privacywire/blob/es6/CHANGELOG.md#101b-beta
Right now this update is in an separate branch at github: https://github.com/blaueQuelle/privacywire/tree/es6
I would be happy if some of you could test this version in your dev environment.
If you haven't used any hooks or modifications, it should just run without any changes.I'm looking forward to your feedback! ?
Best,
Joshua-
4
-
2
-
-
18 minutes ago, LAPS said:
Waiting for the availability of the newest PrivacyWire version (0.4.4) to give it a try.
Already avaiable at github ?
-
1
-
-
22 hours ago, Torsten Baldes said:
Is there a way (a public js function) to trigger the functionality (loading iframes) for elements which are added dynamically?
Hi @Torsten Baldes,
right now there is no such functionality available. I'm will try some ways to implement this soon.
-
Hi everyone,
did I understood it correctly, that you want to to include the JS provided by PrivacyWire in one combined file with your other JS files via ProCache?
And the same with the CSS styles?
This actually requires some steps, as PrivacyWire needs the inline script (to pass the backend settings to the frontend), the body content (to have the DOM elements of the banner) and the JS file (to provide the functionality).With the newest PrivacyWire version (0.4.4) you can do it that way:
Check the "Render Banner and Header Content Manually" in the PrivacyWire config options:

Add the required elements as followed:
<html> <head> <!-- your head content --> <?php // load the css files echo $procache->link([ $config->urls->template . "path/to/your/stylesheet.css", $modules->get("PrivacyWire")->getPathToCssFile() ]); // load the inline script -> needs to be before the other scripts echo $modules->get("PrivacyWire")->getInlineJavaScriptTag(); ?> </head> <body> <!-- your body content --> <?php // render the required DOM elements echo $modules->get("PrivacyWire")->renderBodyContent(); // render the JavaScript files echo $procache->script([ $config->urls->template . "path/to/your/scripts.js", $modules->get("PrivacyWire")->getJsFile() ]); ?> </body> </html>
-
1
-
-
I just added the support for videos embedded via the youtube-nocookie.com domain to the Textformatter. Fixed in 0.4.3
Thank you all for noticing and helping to find the missing URL ?
-
4
-


PrivacyWire - Cookie Management & async external asset loading
in Modules/Plugins
Posted
Hi @Ellyot_Chase,
in the above example you posted there is no type defined on the script element.
See the original example here:
Without the `type="text/plain"` the browser immediately executes the script, PrivacyWire has no chance to stop this behaviour.
When you add the type, the script should only be loaded after the user has given consent.