Use wp_print_inline_script_tag()

Makes it possible to apply script content policy.
This commit is contained in:
Tetrakern 2024-11-28 15:24:19 +01:00
parent 5943ec72d2
commit c5f7e23ff5
7 changed files with 173 additions and 28 deletions

View File

@ -2805,7 +2805,21 @@ function fictioneer_render_skin_interface() {
<div class="custom-skin-list" data-css-skin-target="list"></div> <div class="custom-skin-list" data-css-skin-target="list"></div>
<div class="custom-skin _upload" data-css-skin-target="form"> <div class="custom-skin _upload" data-css-skin-target="form">
<script type="text/javascript" data-jetpack-boost="ignore" data-no-optimize="1" data-no-defer="1" data-no-minify="1">var fcn_skinTranslations = <?php echo json_encode( fictioneer_get_skin_translations() ); ?>;</script> <?php
wp_print_inline_script_tag(
'var fcn_skinTranslations = ' . json_encode( fictioneer_get_skin_translations() ) . ';',
array(
'id' => 'fictioneer-skin-translations',
'type' => 'text/javascript',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1',
)
);
?>
<input type="file" name="css-file" accept=".css" data-css-skin-target="file"> <input type="file" name="css-file" accept=".css" data-css-skin-target="file">
<i class="fa-solid fa-plus"></i> <i class="fa-solid fa-plus"></i>
</div> </div>

View File

@ -366,7 +366,17 @@ function fictioneer_output_schemas( $post_id = null ) {
// If schema has been found, echo for selected post types // If schema has been found, echo for selected post types
if ( $schema ) { if ( $schema ) {
echo $schema ? '<script type="application/ld+json">' . $schema . '</script>' : ''; wp_print_inline_script_tag(
$schema,
array(
'id' => 'fictioneer-schema-json',
'type' => 'application/ld+json',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1'
)
);
} }
} }

View File

@ -1282,6 +1282,7 @@ if ( ! current_user_can( 'manage_options' ) ) {
* Hide subscriber profile blocks in admin panel * Hide subscriber profile blocks in admin panel
* *
* @since 5.6.0 * @since 5.6.0
* @since 5.26.1 - Use wp_print_inline_script_tag().
*/ */
function fictioneer_remove_profile_blocks() { function fictioneer_remove_profile_blocks() {
@ -1290,9 +1291,17 @@ if ( ! current_user_can( 'manage_options' ) ) {
// Remove password options // Remove password options
if ( ! get_option( 'fictioneer_show_wp_login_link' ) ) { if ( ! get_option( 'fictioneer_show_wp_login_link' ) ) {
echo '<style type="text/css">.user-pass1-wrap, .user-pass2-wrap, .pw-weak, .user-generate-reset-link-wrap { display: none; }</style>'; wp_print_inline_script_tag(
'document.addEventListener("DOMContentLoaded", () => {document.querySelectorAll(".user-pass1-wrap, .user-pass2-wrap, .pw-weak, .user-generate-reset-link-wrap").forEach(element => {element.remove();});});',
echo '<script>document.addEventListener("DOMContentLoaded", () => {document.querySelectorAll(".user-pass1-wrap, .user-pass2-wrap, .pw-weak, .user-generate-reset-link-wrap").forEach(element => {element.remove();});});</script>'; array(
'id' => 'fictioneer-iife-remove-admin-profile-blocks',
'type' => 'text/javascript',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1'
)
);
} }
} }
@ -1511,10 +1520,22 @@ if ( ! current_user_can( 'manage_options' ) ) {
* Hide the permalink field with JS * Hide the permalink field with JS
* *
* @since 5.6.2 * @since 5.6.2
* @since 5.26.1 - Use wp_print_inline_script_tag().
*
*/ */
function fictioneer_hide_permalink_with_js() { function fictioneer_hide_permalink_with_js() {
echo '<script type="text/javascript">document.querySelectorAll("#edit-slug-buttons").forEach(element => {element.remove();});</script>'; wp_print_inline_script_tag(
'document.querySelectorAll("#edit-slug-buttons").forEach(element => {element.remove();});',
array(
'id' => 'fictioneer-iife-hide-permalink-in-editor',
'type' => 'text/javascript',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1'
)
);
} }
if ( ! current_user_can( 'fcn_edit_permalink' ) ) { if ( ! current_user_can( 'fcn_edit_permalink' ) ) {
@ -1577,10 +1598,21 @@ if ( ! current_user_can( 'manage_options' ) ) {
* Inject javascript for the classic editor * Inject javascript for the classic editor
* *
* @since 5.6.2 * @since 5.6.2
* @since 5.26.1 - Use wp_print_inline_script_tag().
*/ */
function fictioneer_classic_editor_js_restrictions() { function fictioneer_classic_editor_js_restrictions() {
echo '<script type="text/javascript">document.querySelectorAll(".selectit[for=ping_status], #add-new-comment").forEach(element => {element.remove();});</script>'; wp_print_inline_script_tag(
'document.querySelectorAll(".selectit[for=ping_status], #add-new-comment").forEach(element => {element.remove();});',
array(
'id' => 'fictioneer-iife-classic-editor-restrictions',
'type' => 'text/javascript',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1'
)
);
} }
/** /**

View File

@ -370,6 +370,7 @@ function fictioneer_get_shortcode_tax_query( $args ) {
* are active since only one is needed. * are active since only one is needed.
* *
* @since 5.25.0 * @since 5.25.0
* @since 5.26.1 - Use wp_print_inline_script_tag().
* *
* @return string The inline script. * @return string The inline script.
*/ */
@ -383,7 +384,18 @@ function fictioneer_get_splide_inline_init() {
$done = true; $done = true;
return '<script class="temp-script" data-jetpack-boost="ignore" data-no-defer="1" data-no-optimize="1" data-no-minify="1">document.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll(".splide:not(.no-auto-splide, .is-initialized)").forEach(e=>{e.querySelector(".splide__list")&&"undefined"!=typeof Splide&&(e.classList.remove("_splide-placeholder"),new Splide(e).mount())})});</script>'; return wp_get_inline_script_tag(
'document.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll(".splide:not(.no-auto-splide, .is-initialized)").forEach(e=>{e.querySelector(".splide__list")&&"undefined"!=typeof Splide&&(e.classList.remove("_splide-placeholder"),new Splide(e).mount())})});',
array(
'id' => 'fictioneer-iife-splide',
'class' => 'temp-script',
'type' => 'text/javascript',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1'
)
);
} }
// ============================================================================= // =============================================================================

View File

@ -1597,11 +1597,22 @@ add_filter( 'customize_refresh_nonces', 'fictioneer_add_customizer_refresh_nonce
* Print scripts to the wp-login-php * Print scripts to the wp-login-php
* *
* @since 5.7.3 * @since 5.7.3
* @since 5.26.1 - Use wp_print_inline_script_tag().
*/ */
function fictioneer_wp_login_scripts() { function fictioneer_wp_login_scripts() {
// Clear web storage in preparation of login // Clear web storage in preparation of login
echo "<script type='text/javascript' data-no-optimize='1' data-no-defer='1' data-no-minify='1'>localStorage.removeItem('fcnUserData'); localStorage.removeItem('fcnAuth');</script>"; wp_print_inline_script_tag(
'localStorage.removeItem("fcnUserData"); localStorage.removeItem("fcnAuth");',
array(
'id' => 'fictioneer-login-scripts',
'type' => 'text/javascript',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1'
)
);
} }
add_action( 'login_head', 'fictioneer_wp_login_scripts' ); add_action( 'login_head', 'fictioneer_wp_login_scripts' );
@ -1801,6 +1812,7 @@ add_action( 'elementor/editor/after_enqueue_scripts', 'fictioneer_output_head_fo
* Outputs script to prevent flickering of layout on page load * Outputs script to prevent flickering of layout on page load
* *
* @since 5.22.1 * @since 5.22.1
* @since 5.26.1 - Use wp_print_inline_script_tag().
*/ */
function fictioneer_output_head_anti_flicker() { function fictioneer_output_head_anti_flicker() {
@ -1809,8 +1821,19 @@ function fictioneer_output_head_anti_flicker() {
<noscript> <noscript>
<style>body {visibility: visible !important;}</style> <style>body {visibility: visible !important;}</style>
</noscript> </noscript>
<script>document.addEventListener('readystatechange', () => {if (document.readyState === "interactive") document.body.style.visibility = "visible";});</script>
<?php // <--- End HTML <?php // <--- End HTML
wp_print_inline_script_tag(
'document.addEventListener("readystatechange", () => {if (document.readyState === "interactive") document.body.style.visibility = "visible";});console.log("foo");',
array(
'id' => 'fictioneer-anti-flicker',
'type' => 'text/javascript',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1'
)
);
} }
if ( get_option( 'fictioneer_enable_anti_flicker' ) ) { if ( get_option( 'fictioneer_enable_anti_flicker' ) ) {
@ -1832,12 +1855,21 @@ if ( get_option( 'fictioneer_enable_anti_flicker' ) ) {
* *
* @since 5.0.0 * @since 5.0.0
* @since 5.18.1 - No longer pluggable, hooked into wp_head * @since 5.18.1 - No longer pluggable, hooked into wp_head
* @since 5.26.1 - Use wp_print_inline_script_tag().
*/ */
function fictioneer_output_head_critical_scripts() { function fictioneer_output_head_critical_scripts() {
// Start HTML ---> ?> wp_print_inline_script_tag(
<script id="fictioneer-critical-scripts" data-jetpack-boost="ignore" data-no-optimize="1" data-no-defer="1" data-no-minify="1">!function(){if("undefined"!=typeof localStorage){const e=localStorage.getItem("fcnLightmode"),t=document.documentElement;let a,o=localStorage.getItem("fcnSiteSettings");if(o&&(o=JSON.parse(o))&&null!==o&&"object"==typeof o){Object.entries(o).forEach((([e,s])=>{switch(e){case"minimal":t.classList.toggle("minimal",s);break;case"taxonomies":t.classList.toggle("no-taxonomies",!s);break;case"darken":a=s>=0?1+s**2:1-s**2,t.style.setProperty("--darken",`(${a} + var(--lightness-offset))`);break;case"saturation":case"font-lightness":case"font-saturation":a=s>=0?1+s**2:1-s**2,t.style.setProperty(`--${e}`,`(${a} + var(--${e}-offset))`);break;case"hue-rotate":a=Number.isInteger(o["hue-rotate"])?o["hue-rotate"]:0,t.style.setProperty("--hue-rotate",`(${a}deg + var(--hue-offset))`);break;default:t.classList.toggle(`no-${e}`,!s)}})),t.dataset.fontWeight=o["font-weight"]?o["font-weight"]:"default",t.dataset.theme=o["site-theme"]&&!t.dataset.forceChildTheme?o["site-theme"]:"default";let e=getComputedStyle(document.documentElement).getPropertyValue("--theme-color-base").trim().split(" ");const s=o.darken?o.darken:0,r=o.saturation?o.saturation:0,n=o["hue-rotate"]?o["hue-rotate"]:0,l=s>=0?1+s**2:1-s**2;o=r>=0?1+r**2:1-r**2,e=`hsl(${(parseInt(e[0])+n)%360}deg ${(parseInt(e[1])*o).toFixed(2)}% ${(parseInt(e[2])*l).toFixed(2)}%)`,document.querySelector("meta[name=theme-color]").setAttribute("content",e)}e&&(t.dataset.mode="true"==e?"light":"dark")}}(),document.documentElement.classList.remove("no-js");</script> '!function(){if("undefined"!=typeof localStorage){const e=localStorage.getItem("fcnLightmode"),t=document.documentElement;let a,o=localStorage.getItem("fcnSiteSettings");if(o&&(o=JSON.parse(o))&&null!==o&&"object"==typeof o){Object.entries(o).forEach((([e,s])=>{switch(e){case"minimal":t.classList.toggle("minimal",s);break;case"taxonomies":t.classList.toggle("no-taxonomies",!s);break;case"darken":a=s>=0?1+s**2:1-s**2,t.style.setProperty("--darken",`(${a} + var(--lightness-offset))`);break;case"saturation":case"font-lightness":case"font-saturation":a=s>=0?1+s**2:1-s**2,t.style.setProperty(`--${e}`,`(${a} + var(--${e}-offset))`);break;case"hue-rotate":a=Number.isInteger(o["hue-rotate"])?o["hue-rotate"]:0,t.style.setProperty("--hue-rotate",`(${a}deg + var(--hue-offset))`);break;default:t.classList.toggle(`no-${e}`,!s)}})),t.dataset.fontWeight=o["font-weight"]?o["font-weight"]:"default",t.dataset.theme=o["site-theme"]&&!t.dataset.forceChildTheme?o["site-theme"]:"default";let e=getComputedStyle(document.documentElement).getPropertyValue("--theme-color-base").trim().split(" ");const s=o.darken?o.darken:0,r=o.saturation?o.saturation:0,n=o["hue-rotate"]?o["hue-rotate"]:0,l=s>=0?1+s**2:1-s**2;o=r>=0?1+r**2:1-r**2,e=`hsl(${(parseInt(e[0])+n)%360}deg ${(parseInt(e[1])*o).toFixed(2)}% ${(parseInt(e[2])*l).toFixed(2)}%)`,document.querySelector("meta[name=theme-color]").setAttribute("content",e)}e&&(t.dataset.mode="true"==e?"light":"dark")}}(),document.documentElement.classList.remove("no-js");',
<?php // <--- End HTML array(
'id' => 'fictioneer-critical-scripts',
'type' => 'text/javascript',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1'
)
);
} }
add_action( 'wp_head', 'fictioneer_output_head_critical_scripts', 9999 ); add_action( 'wp_head', 'fictioneer_output_head_critical_scripts', 9999 );
@ -1845,12 +1877,21 @@ add_action( 'wp_head', 'fictioneer_output_head_critical_scripts', 9999 );
* Outputs critical skin scripts in the <head> * Outputs critical skin scripts in the <head>
* *
* @since 5.26.0 * @since 5.26.0
* @since 5.26.1 - Use wp_print_inline_script_tag().
*/ */
function fictioneer_output_critical_skin_scripts() { function fictioneer_output_critical_skin_scripts() {
// Start HTML ---> ?> wp_print_inline_script_tag(
<script id="fictioneer-skin-script" type="text/javascript" data-jetpack-boost="ignore" data-no-optimize="1" data-no-defer="1" data-no-minify="1">!function(){const e="fcnLoggedIn=",t=document.cookie.split(";");let n=null;for(var c=0;c<t.length;c++){const i=t[c].trim();if(0==i.indexOf(e)){n=decodeURIComponent(i.substring(12,i.length));break}}if(!n)return;const i=JSON.parse(localStorage.getItem("fcnSkins"))??{data:{},active:null,fingerprint:n};if(i?.data?.[i.active]?.css&&n===i?.fingerprint){const e=document.createElement("style");e.textContent=i.data[i.active].css,e.id="fictioneer-active-custom-skin",document.querySelector("head").appendChild(e)}}();</script> '!function(){const e="fcnLoggedIn=",t=document.cookie.split(";");let n=null;for(var c=0;c<t.length;c++){const i=t[c].trim();if(0==i.indexOf(e)){n=decodeURIComponent(i.substring(12,i.length));break}}if(!n)return;const i=JSON.parse(localStorage.getItem("fcnSkins"))??{data:{},active:null,fingerprint:n};if(i?.data?.[i.active]?.css&&n===i?.fingerprint){const e=document.createElement("style");e.textContent=i.data[i.active].css,e.id="fictioneer-active-custom-skin",document.querySelector("head").appendChild(e)}}();',
<?php // <--- End HTML array(
'id' => 'fictioneer-skin-scripts',
'type' => 'text/javascript',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1'
)
);
} }
if ( get_option( 'fictioneer_enable_css_skins' ) ) { if ( get_option( 'fictioneer_enable_css_skins' ) ) {
@ -1987,10 +2028,21 @@ function fictioneer_get_js_translations() {
* Outputs JSON with translation into the <head> * Outputs JSON with translation into the <head>
* *
* @since 5.12.2 * @since 5.12.2
* @since 5.26.1 - Use wp_print_inline_script_tag().
*/ */
function fictioneer_output_head_translations() { function fictioneer_output_head_translations() {
echo "<script id='fictioneer-translations' type='text/javascript' data-no-optimize='1' data-no-defer='1' data-no-minify='1'>const fictioneer_tl = " . json_encode( fictioneer_get_js_translations() ) . ";</script>"; wp_print_inline_script_tag(
'const fictioneer_tl = ' . json_encode( fictioneer_get_js_translations() ) . ';',
array(
'id' => 'fictioneer-translations',
'type' => 'text/javascript',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1'
)
);
} }
add_action( 'wp_head', 'fictioneer_output_head_translations' ); add_action( 'wp_head', 'fictioneer_output_head_translations' );

View File

@ -256,18 +256,21 @@ if ( ! function_exists( 'fictioneer_get_logout_url' ) ) {
* Make sure local storage is cleared on logout * Make sure local storage is cleared on logout
* *
* @since 5.0.0 * @since 5.0.0
* @since 5.26.1 - Use wp_print_inline_script_tag().
*/ */
function fictioneer_after_logout_cleanup() { function fictioneer_after_logout_cleanup() {
// Start HTML ---> ?> wp_print_inline_script_tag(
<script> 'localStorage.removeItem("fcnProfileAvatar"); localStorage.removeItem("fcnUserData"); localStorage.removeItem("fcnAuth"); localStorage.removeItem("fcnBookshelfContent"); localStorage.removeItem("fcnChapterBookmarks");',
localStorage.removeItem('fcnProfileAvatar'); array(
localStorage.removeItem('fcnUserData'); 'id' => 'fictioneer-logout-cleanup',
localStorage.removeItem('fcnAuth'); 'type' => 'text/javascript',
localStorage.removeItem('fcnBookshelfContent'); 'data-jetpack-boost' => 'ignore',
localStorage.removeItem('fcnChapterBookmarks'); 'data-no-optimize' => '1',
</script> 'data-no-defer' => '1',
<?php // <--- End HTML 'data-no-minify' => '1',
)
);
} }
add_action( 'login_form', 'fictioneer_after_logout_cleanup' ); add_action( 'login_form', 'fictioneer_after_logout_cleanup' );

View File

@ -1295,7 +1295,19 @@ function fictioneer_admin_profile_fields_skins( $profile_user ) {
); );
?></p> ?></p>
<input name="fictioneer_nonce" type="hidden" value="<?php echo wp_create_nonce( 'fictioneer_nonce' ); ?>"> <input name="fictioneer_nonce" type="hidden" value="<?php echo wp_create_nonce( 'fictioneer_nonce' ); ?>">
<script type="text/javascript" data-jetpack-boost="ignore" data-no-optimize="1" data-no-defer="1" data-no-minify="1">var fcn_skinTranslations = <?php echo json_encode( fictioneer_get_skin_translations() ); ?>;</script> <?php
wp_print_inline_script_tag(
'var fcn_skinTranslations = ' . json_encode( fictioneer_get_skin_translations() ) . ';',
array(
'id' => 'fictioneer-skin-translations',
'type' => 'text/javascript',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1',
)
);
?>
<fieldset><?php fictioneer_render_skin_interface(); ?></fieldset> <fieldset><?php fictioneer_render_skin_interface(); ?></fieldset>
</td> </td>
</tr> </tr>
@ -1368,7 +1380,17 @@ function fictioneer_admin_profile_fields_data_nodes( $profile_user ) {
// Clear local bookmarks // Clear local bookmarks
if ( $success && $success === 'admin-profile-cleared-data-node-bookmarks' ) { if ( $success && $success === 'admin-profile-cleared-data-node-bookmarks' ) {
echo "<script>localStorage.removeItem('fcnChapterBookmarks');</script>"; wp_print_inline_script_tag(
'localStorage.removeItem("fcnChapterBookmarks");',
array(
'id' => 'fictioneer-iife-clear-bookmarks',
'type' => 'text/javascript',
'data-jetpack-boost' => 'ignore',
'data-no-optimize' => '1',
'data-no-defer' => '1',
'data-no-minify' => '1'
)
);
} }
// Comment subscriptions? // Comment subscriptions?