�a-�Bi��s�&a
y�(%�����0��b�b��w^�UC�݆/�O�U/K�i7ڀ�m��W.��K��?7��g}&K"��%3βd��x7H�g��MhܾV5�;�\NXR����~�r����gf}���?��C��%me�S{jE��V�Q��]�oR��g�8rC�dg:���]�0�+���i|�L����>-.{��kmzO{?�x��WO�r���o֛%��N"�u��v����xC�*��>�Frp�~��bu�[���.RXR��@Y!r%
�=t��gY����e/Y}��:�Q�A�vA
R��&Q��Q� �������CH;+��q�|xY
���q���,~��/�� �A/CU-~���Ӕ���&u��=h�Ҏ0��xw��Քc^ս��y��~��Ƿ�@��}������*d8��)Ĵ����8y��-���
���~��Mȟ��W(���9�o�̯��!�j�GN��9T%ވ�_�*��5��ZC�e��ք��d���*��
��0��K?龱�:���i8x���͡��`r������+ºnpK��j
��Ѡ���0�7�@^��L��ǯ���ޣs9�:1<��`ye5�f��!�ꝫ�;BE��|�h$pR:"�<���M
�绀OZ�v[c��?Ȯ��\�Q-�ꃉ���~d[a�Q(b�
++4,�;
R���,����`�~Z��UI��@��ߚ�߯�9g����h4���R|f!�����.�"����ޯ�tv��ᱍ�_�?�C��hh�m��)��2a>/$%n$׆h�s
Z/��:�;���w�!���u����l�}��g�Cd��Fm}� ���Z*��813�i[�N�Gj�h�p��e!--\��(�\X�Yp�*��h��{j37������;89O|��4��g�{䵀،1Ť�l��`�Sğ���iL1V`��/�Ovu���n@����p�XĒ@�`x>J^[�0���ж�
b�<([�~��z!<�-=W�J�_�N0U��9�oƖ�&��W��t{����re�6(���S�_0E��K�ۧ������I�~K�K+�_T��R���뻡'띎*!� �%���&�w|H���I�I@�e\T��*��P5c+s9®~�F�%� �ib��n]{��� ��H��pG�)��������p��R�6C+�|���m$-cK
��Y�t.Wo�R�퍬�퐨�T�{qT����(�B:��m���9�� Xe��&��P�Dw}���}�]80@�K�ٖfZz��o�D��n,�ui%��a�M����.����J#ܗ��@�5���b�߃<�1��K�
}�!�nَk)j�n�S��ha����"r]_���r9%&(.�>[�of@
��~�:�����v��)n��������af�cr��cX�V`C�����|иUP
�SS��
֯ ��S�����:
Y�p*�� %�b`om��D�ȉs��s(LK3!.G���cs�՟O.n��(�.��m��ۚ�qhY�J����*�|U�T
���y��{3����cEɜ�>T�N#ȇ ���q�����-
<��X�l�=�Ȃ�R��^�����~�\ 碏b���h2O����2�qV48�/{�I��m:�P3D���I�hU�=��H���=��GP-7S!��3�`��1`n��Ĝ)r�n�L���x<�62��*/�;۸IQI!
I���nۇqT�d����BF1<�k�"��s1�>M5�Igq�z
'o�tw��b.�Iž���A����v����}�j���≐_�!h(cٕz|u�D@��>2�/��~���yZ�L�n����������BM4��>��;ꔪ_��|2���?����q����ׯ~�i*C�GE�)F.����M2P1l���E��_�t(<��q�7���������\��~u_O�F�ԞU��!�M�X�7Z��$&0���HE=��5_��|{�|@����҈��l��V���~w��Rr"o�a9�?��+kvE�qE��f̢�{�)���j粘Ѩ�$!,��SdW�^�e�)��V��SR�<�X�
* �X�٘f�+@��F�-����A��Ҹk_�Y�4��������l|���C.���+[mٍF�=B+u/��@\�&r�
w�/
�q��e$�М$PM�h��S1�-����@��*��P�2\�A&9*8�^�J�QDS�$�gcfpL��W��QD�]��%�݂��1D�ɤ��������b�`>��\��~�a��#��\�U} ��ѝJz&��#
����P&����FV�xO1E��l'�,���:gXZ�<X F���o*��$e'`]�l�YVk��� �O�B������KЉk�q�w&�$�%@f�Z��>B��l &PW|
s1�+_BY�\՛��p,E�W�d�Ġĥc���
RH���p�5�`,���]���`q�Y��?�-���N���1��;���!��#��D��[P�X� �B�g9��x�,g|��V�A���$1�gd���z,��cӸ�D ��h%^�E� �t��T��(o�Q,�!b0梥�)|��x��d��KI#��&�}����O��oͨԣ�7:YۋrX*a�>ql�Fm4�p{��D�(�m4��-�˼�?uޱShE6"���
��k�-�,�W�����-� M��H�9���d
�u��#�nk�i�}��Ķ<�Ƣ�\��t�2�G1���mN
@�km�M���f+5Tpo�qv�mC������ە��SG����s��^b��2�g,��9Y��}#��T����֜�4��WN�\�j��^FFm�:~�����o�s�g���a��[YL�^K�(�_�f��0�����<��{���p��Mq��_�eNe��%���NA֮�"�}[���w͖Ȍ?s��v8?��vb%��Y�����U�x<����.yC���iUᎼ�
@k8 ,Q���L
ӕd��Q���V_��.]�9��\���cU�bE� %M�Aމɛ(�L)&��
�Y� �Jvm�h���Rs�&=����ɕ���ݰ�'�`�/�1�F��vY�/�ȱ�"q�%�F���Q?�4G��T"x\?�Q���ڌ�%�G����ǁiY��%`���5_�Z�RQ�/j�te7@h@������g�_�
�i���`5�s��!NX�X[nK��Z���#���4>���B�IJT9��#��fN��k|ܰG���W�-5X���)�_T�-�OPD�:��]���
�����Ot��rI���U�b��U��aJ���bm��CF`�V?�/��/en��:$�&q��.~��`{m `3�
#S9⛏�i�5�=�v��{����=ņ��Wۣ����#�\�
��J���4�"����m����K쟔wD�1�vVߥ]d��~_�\��H�[�3n void
*/
public function localize_script( $handle, $object_name, $data ) {
wp_localize_script( $this->prefix . $handle, $object_name, $data );
}
/**
* Adds an inline script.
*
* @param string $handle The script handle.
* @param string $data The l10n data.
* @param string $position Optional. Whether to add the inline script before the handle or after.
*
* @return void
*/
public function add_inline_script( $handle, $data, $position = 'after' ) {
wp_add_inline_script( $this->prefix . $handle, $data, $position );
}
/**
* A list of styles that shouldn't be registered but are needed in other locations in the plugin.
*
* @return array
*/
public function special_styles() {
$flat_version = $this->flatten_version( WPSEO_VERSION );
$asset_args = [
'name' => 'inside-editor',
'src' => 'inside-editor-' . $flat_version,
];
return [ 'inside-editor' => new WPSEO_Admin_Asset( $asset_args ) ];
}
/**
* Flattens a version number for use in a filename.
*
* @param string $version The original version number.
*
* @return string The flattened version number.
*/
public function flatten_version( $version ) {
$parts = explode( '.', $version );
if ( count( $parts ) === 2 && preg_match( '/^\d+$/', $parts[1] ) === 1 ) {
$parts[] = '0';
}
return implode( '', $parts );
}
/**
* Creates a default location object for use in the admin asset manager.
*
* @return WPSEO_Admin_Asset_Location The location to use in the asset manager.
*/
public static function create_default_location() {
if ( defined( 'YOAST_SEO_DEV_SERVER' ) && YOAST_SEO_DEV_SERVER ) {
$url = defined( 'YOAST_SEO_DEV_SERVER_URL' ) ? YOAST_SEO_DEV_SERVER_URL : WPSEO_Admin_Asset_Dev_Server_Location::DEFAULT_URL;
return new WPSEO_Admin_Asset_Dev_Server_Location( $url );
}
return new WPSEO_Admin_Asset_SEO_Location( WPSEO_FILE, false );
}
/**
* Checks if the given script is enqueued.
*
* @param string $script The script to check.
*
* @return bool True when the script is enqueued.
*/
public function is_script_enqueued( $script ) {
return wp_script_is( $this->prefix . $script );
}
/**
* Returns the scripts that need to be registered.
*
* @todo Data format is not self-documenting. Needs explanation inline. R.
*
* @return array The scripts that need to be registered.
*/
protected function scripts_to_be_registered() {
$header_scripts = [
'admin-global',
'block-editor',
'classic-editor',
'post-edit',
'help-scout-beacon',
'redirect-old-features-tab',
];
$additional_dependencies = [
'analysis-worker' => [ self::PREFIX . 'analysis-package' ],
'api-client' => [ 'wp-api' ],
'crawl-settings' => [ 'jquery' ],
'dashboard-widget' => [ self::PREFIX . 'api-client' ],
'wincher-dashboard-widget' => [ self::PREFIX . 'api-client' ],
'editor-modules' => [ 'jquery' ],
'elementor' => [
self::PREFIX . 'api-client',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
],
'indexation' => [
'jquery-ui-core',
'jquery-ui-progressbar',
],
'first-time-configuration' => [
self::PREFIX . 'api-client',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
],
'integrations-page' => [
self::PREFIX . 'api-client',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
],
'post-edit' => [
self::PREFIX . 'api-client',
self::PREFIX . 'block-editor',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
],
'reindex-links' => [
'jquery-ui-core',
'jquery-ui-progressbar',
],
'settings' => [
'jquery-ui-core',
'jquery-ui-progressbar',
self::PREFIX . 'api-client',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
],
'term-edit' => [
self::PREFIX . 'api-client',
self::PREFIX . 'classic-editor',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
],
'general-page' => [
self::PREFIX . 'api-client',
],
];
$plugin_scripts = $this->load_generated_asset_file(
[
'asset_file' => __DIR__ . '/../src/generated/assets/plugin.php',
'ext_length' => 3,
'additional_deps' => $additional_dependencies,
'header_scripts' => $header_scripts,
]
);
$external_scripts = $this->load_generated_asset_file(
[
'asset_file' => __DIR__ . '/../src/generated/assets/externals.php',
'ext_length' => 3,
'suffix' => '-package',
'base_dir' => 'externals/',
'additional_deps' => $additional_dependencies,
'header_scripts' => $header_scripts,
]
);
$language_scripts = $this->load_generated_asset_file(
[
'asset_file' => __DIR__ . '/../src/generated/assets/languages.php',
'ext_length' => 3,
'suffix' => '-language',
'base_dir' => 'languages/',
'additional_deps' => $additional_dependencies,
'header_scripts' => $header_scripts,
]
);
$renamed_scripts = $this->load_renamed_scripts();
$scripts = array_merge(
$plugin_scripts,
$external_scripts,
$language_scripts,
$renamed_scripts
);
$scripts['installation-success'] = [
'name' => 'installation-success',
'src' => 'installation-success.js',
'deps' => [
'wp-a11y',
'wp-dom-ready',
'wp-components',
'wp-element',
'wp-i18n',
self::PREFIX . 'components-new-package',
self::PREFIX . 'externals-components',
],
'version' => $scripts['installation-success']['version'],
];
$scripts['post-edit-classic'] = [
'name' => 'post-edit-classic',
'src' => $scripts['post-edit']['src'],
'deps' => array_map(
static function ( $dep ) {
if ( $dep === self::PREFIX . 'block-editor' ) {
return self::PREFIX . 'classic-editor';
}
return $dep;
},
$scripts['post-edit']['deps']
),
'in_footer' => ! in_array( 'post-edit-classic', $header_scripts, true ),
'version' => $scripts['post-edit']['version'],
];
$scripts['workouts'] = [
'name' => 'workouts',
'src' => 'workouts.js',
'deps' => [
'clipboard',
'lodash',
'wp-api-fetch',
'wp-a11y',
'wp-components',
'wp-compose',
'wp-data',
'wp-dom-ready',
'wp-element',
'wp-i18n',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
self::PREFIX . 'analysis',
self::PREFIX . 'react-select',
self::PREFIX . 'components-new-package',
],
'version' => $scripts['workouts']['version'],
];
// Add the current language to every script that requires the analysis package.
foreach ( $scripts as $name => $script ) {
if ( substr( $name, -8 ) === 'language' ) {
continue;
}
if ( in_array( self::PREFIX . 'analysis-package', $script['deps'], true ) ) {
$scripts[ $name ]['deps'][] = self::PREFIX . YoastSEO()->helpers->language->get_researcher_language() . '-language';
}
}
return $scripts;
}
/**
* Loads a generated asset file.
*
* @param array $args {
* The arguments.
*
* @type string $asset_file The asset file to load.
* @type int $ext_length The length of the extension, including suffix, of the filename.
* @type string $suffix Optional. The suffix of the asset name.
* @type array $additional_deps Optional. The additional dependencies assets may have.
* @type string $base_dir Optional. The base directory of the asset.
* @type string[] $header_scripts Optional. The script names that should be in the header.
* }
*
* @return array {
* The scripts to be registered.
*
* @type string $name The name of the asset.
* @type string $src The src of the asset.
* @type string[] $deps The dependenies of the asset.
* @type bool $in_footer Whether or not the asset should be in the footer.
* }
*/
protected function load_generated_asset_file( $args ) {
$args = wp_parse_args(
$args,
[
'suffix' => '',
'additional_deps' => [],
'base_dir' => '',
'header_scripts' => [],
]
);
$scripts = [];
$assets = require $args['asset_file'];
foreach ( $assets as $file => $data ) {
$name = substr( $file, 0, -$args['ext_length'] );
$name = strtolower( preg_replace( '/([A-Z])/', '-$1', $name ) );
$name .= $args['suffix'];
$deps = $data['dependencies'];
if ( isset( $args['additional_deps'][ $name ] ) ) {
$deps = array_merge( $deps, $args['additional_deps'][ $name ] );
}
$scripts[ $name ] = [
'name' => $name,
'src' => $args['base_dir'] . $file,
'deps' => $deps,
'in_footer' => ! in_array( $name, $args['header_scripts'], true ),
'version' => $data['version'],
];
}
return $scripts;
}
/**
* Loads the scripts that should be renamed for BC.
*
* @return array {
* The scripts to be registered.
*
* @type string $name The name of the asset.
* @type string $src The src of the asset.
* @type string[] $deps The dependenies of the asset.
* @type bool $in_footer Whether or not the asset should be in the footer.
* }
*/
protected function load_renamed_scripts() {
$scripts = [];
$renamed_scripts = [
'admin-global-script' => 'admin-global',
'analysis' => 'analysis-package',
'analysis-report' => 'analysis-report-package',
'api' => 'api-client',
'commons' => 'commons-package',
'edit-page' => 'edit-page-script',
'draft-js' => 'draft-js-package',
'feature-flag' => 'feature-flag-package',
'helpers' => 'helpers-package',
'jed' => 'jed-package',
'chart.js' => 'chart.js-package',
'network-admin-script' => 'network-admin',
'redux' => 'redux-package',
'replacement-variable-editor' => 'replacement-variable-editor-package',
'search-metadata-previews' => 'search-metadata-previews-package',
'social-metadata-forms' => 'social-metadata-forms-package',
'styled-components' => 'styled-components-package',
'style-guide' => 'style-guide-package',
'yoast-components' => 'components-new-package',
];
foreach ( $renamed_scripts as $original => $replacement ) {
$scripts[] = [
'name' => $original,
'src' => false,
'deps' => [ self::PREFIX . $replacement ],
];
}
return $scripts;
}
/**
* Returns the styles that need to be registered.
*
* @todo Data format is not self-documenting. Needs explanation inline. R.
*
* @return array Styles that need to be registered.
*/
protected function styles_to_be_registered() {
$flat_version = $this->flatten_version( WPSEO_VERSION );
return [
[
'name' => 'admin-css',
'src' => 'yst_plugin_tools-' . $flat_version,
'deps' => [ self::PREFIX . 'toggle-switch' ],
],
[
'name' => 'toggle-switch',
'src' => 'toggle-switch-' . $flat_version,
],
[
'name' => 'dismissible',
'src' => 'wpseo-dismissible-' . $flat_version,
],
[
'name' => 'notifications',
'src' => 'notifications-' . $flat_version,
],
[
'name' => 'alert',
'src' => 'alerts-' . $flat_version,
],
[
'name' => 'edit-page',
'src' => 'edit-page-' . $flat_version,
],
[
'name' => 'featured-image',
'src' => 'featured-image-' . $flat_version,
���Y"�Jx��a�RU��0�\2��Y�*������{Kf}UM�ᙱo� �.��ڸ+q7v�1�L�N� ������֫�N=���<�h�-A(C��b�0�g�ArԂ
�
����ٲ��/9��>Ot�`�S���.��u�au����W����t�Qݹ���A�\�v����%�$_*Q������N/���"O�4�-��~|��ky.���id��Sr�1�Z�
��f@���֜*���K��ǻ�<�F�@�~���<�!�l_�ݭ�&��`���T,Sa��U<�^��>�`Ղ�*c�9����)�P3�{�ff���ػ[��7W�
���<�/U'�X�lb�{�ϩ�Y��7�J�IdsB`f'0tj����;k͊dQ�I:�2n��K������,Tʸ�;�����K��� 2�2�X�#�T��k9�8�&ؐ-�G
@�b�¾��)��?�t�.��eԬA�ܻ55�.Z,��2�k_2�p��E����S�M�ť��,��ңq��֮溊v�~�`&g�D����xK��˵��YLP��_�Q��B�^� ��?�������oV���}.D��P���;L"��x�=^���%<"��ƌ��������aj@�tl�1��
w��"@��sIN¹t|��;^8kJ�R���7z":Z:�Q=�(�2*�>[D��"(3rt�6��������s���&���^���G�
�����Ê4
i|a��thu
��eJr��Fr�w[��A��s�Ǔa��}x���,��O���;:�//F8j���H�vŹ6�����I�
M��?}��9'�,sp��\��&[PT*TWĽ�6�~'�;����ojEq�_������'IܰR��q�U6t�9�x�ajƓ���m+��(�lT7���������Ko���cl�P�e���8��1ɀW�^��L�J�Tel��@V��DS���+��
�=��aپ��(����:��``�ߟ�O��
�����Y�o��KE�b��nxd���3�le����7i�&^ ���m�ᗿ�hK~XMA�`��]��Y��/����d�b>
��6��;���[i�T�|TsN���?+xr�5*��0|K��H���_|��ge���L\K�Sg�3�pA��Z
2kq.�f0*����LXzۖ��P�g1 D�\���P�����uĵ�j{�1DͶ�U� R����Z�3.0٬�D�+u��c<�
��Sa�۟�Ѐ4̎�c?R
�`w�Fh+!]C0�����[D�̷xw#1ǝePξ7�V����˱|AmJ��wWZ�s��w+e+ �P��13�
���of������5�A��7U��R�H��y���T�Vs(�_�ƶ�h5�62�����Z��,��
�
�%9��k�r
�oD��sg��5yٗV ��e��g}G�7�_BȻ+�,��>�����"�����ͪ������i#CD�V3�
�2�i��ǥ��ɕd�I�@C�*�����"�H���2����"�ä�c��d@-���Xy�0�B@��mV�ad}}k��!�)8���`��^����M��8�Lk@��0i,��ƛ��a3��D�S!�7�
����:������חF�WMg�����@amu6�p2O��)YR����d)32��0���Ҝ^�}���Q�����˟����>��.���?��X��b\�̉��0�y���[߶�lC2:�� h������ �!t�seߟ�ϋ�(]CA��hc���j@���!`tW,��:г�(��8v���]�;�Qs��|G�W@��)�w:A[���xO�x*����s@M~ɼh����0�2w�؛9i����>D8��_��MG�D�x&toӣ(��3��O0����RB�WoĤ��a}}�$lļ�Ȕ��UOiͶ*� ���9�U��U�zea����ͻI�߷�-��$=?��u2���B*Ԍ^��7B}ϞGK���\�@g��7r��R�[��
�o�����>������`�
��>�\2}�=\u9��t��`c�/Nf`|L��;У��8@��a��2������l�㜝n\���Bbr�2QBĬbΓ8�SC\�ap��!����wʋEC���.�+@I��H_����:�r�w�e@�;�d�J�7ʸ��Lx��1#�o����g�҈l-R����-R��`uv��){7%����<��я��Q;���J��m��qw�+j�tco�j}��Y����(�0�p�BF2� ��N��th���'9���Y_�Uq��}{�4�k�0���Ċ��ʜ��\2�k�i���KR�-^�$L� ��Cg����pv��C1�*�$4��Vy�TY�]-�}����.7��%Hb
�n�˽�������*C��a��`��g�#Ѷ/c���K<'+W�|5l�$�p�0�?���'BO��S4b����I��m���]Ģ���=�����n�χ7Q�' /OX�_��ou z��
AZ*Ժ{���������P��F��_3d6?�uo�UxA��qAOٍ:��-�@zֻݤ�^k��/Ŷ'�L�wY�Y�����k[���k���y��r�3V����nҥB[�X�zN�kD��^i����
��bb_�+�4� %M�Pҍ�.�p�"�`p����̏0>n��A��6_#*�
�{�����]��It��ħ��Tcɐj�U�x͢�s�?&@�f�g��fd@x/,��G��U�y&Y6wG�s�@r< `BJ!��z� ��f��_�`D�� ��Fd\gd�����;��-��F�CtU��_.�Y���
��2V�R?zƴ���g�Xu�mn�ծ�P:���X0�Y=�I���#�[���_�zH|�(��$�>���v�/l��Y7��̽-;�-eo3T���W{�r2��#�FT��H�.���yT��Q+�E����\���3Og��Nͽ`���o9��"���k��Ɔ�?~��A�����<����AD�
�a�o3� �0t`�2���K�r��;��lxEll�D��z`����|�z���s�A�T䚪���p�j��M�
W�[3���T�d����N��1�~;�$m�����N�/Lj�v��K)�L�Ô�2�n}��$��R��/>��utק�J{CU����C�-��J�1�7�G@��j柢�8|.�[���x�y"�R��4�E��c+��Se:�}�Z�W̖��%ɑdpmf�ƊU����*-H�[�>F�rwY:A_�ҷ=�/P�1D�s�
'YHQZgh�3y���^�����h{ehN��]A����?ΠHq�u���rr_;����f��!��UСиn%��
�˙Ưu�P��M���rj��S��\�0
��|�ۦ��;\���������mSi옰�tݴ�H���j2���ͯ�邂�� �P[t�B�t���G4yU4@UE�V�:��zz��\�ߎ��0���ӊ��f�ʊ!�����v���A�ć�����f͏7��#hRŏ�[*�>��_���g
�$�z'&,>}���>�a3��!RP&hA�D�!4'htN�)L��üD>�Z��d6<�)]B�'\i,oR��78
�
X
^)�x9(.(j��T&�Qn7����W�(@Ʈ�����T�͖�k)E�?B6=A�Q"$j&�(���a-�Bi��s�&a
y�(%�����0��b�b��w^�UC�݆/�O�U/K�i7ڀ�m��W.��K��?7��g}&K"��%3βd��x7H�g��MhܾV5�;�\NXR����~�r����gf}���?��C��%me�S{jE��V�Q��]�oR��g�8rC�dg:���]�0�+���i|�L����>-.{��kmzO{?�x��WO�r���o֛%��N"�u��v����xC�*��>�Frp�~��bu�[���.RXR��@Y!r%
�=t��gY����e/Y}��:�Q�A�vA
R��&Q��Q� �������CH;+��q�|xY
���q���,~��/�� �A/CU-~���Ӕ���&u��=h�Ҏ0��xw��Քc^ս��y��~��Ƿ�@��}������*d8��)Ĵ����8y��-���
���~��Mȟ��W(���9�o�̯��!�j�GN��9T%ވ�_�*��5��ZC�e��ք��d���*��
��0��K?龱�:���i8x���͡��`r������+ºnpK��j
��Ѡ���0�7�@^��L��ǯ���ޣs9�:1<��`ye5�f��!�ꝫ�;BE��|�h$pR:"�<���M
�绀OZ�v[c��?Ȯ��\�Q-�ꃉ���~d[a�Q(b�
++4,�;
R���,����`�~Z��UI��@��ߚ�߯�9g����h4���R|f!�����.�"����ޯ�tv��ᱍ�_�?�C��hh�m��)��2a>/$%n$׆h�s
Z/��:�;���w�!���u����l�}��g�Cd��Fm}� ���Z*��813�i[�N�Gj�h�p��e!--\��(�\X�Yp�*��h��{j37������;89O|��4��g�{䵀،1Ť�l��`�Sğ���iL1V`��/�Ovu���n@����p�XĒ@�`x>J^[�0���ж�
b�<([�~��z!<�-=W�J�_�N0U��9�oƖ�&��W��t{����re�6(���S�_0E��K�ۧ������I�~K�K+�_T��R���뻡'띎*!� �%���&�w|H���I�I@�e\T��*��P5c+s9®~�F�%� �ib��n]{��� ��H��pG�)��������p��R�6C+�|���m$-cK
��Y�t.Wo�R�퍬�퐨�T�{qT����(�B:��m���9�� Xe��&��P�Dw}���}�]80@�K�ٖfZz��o�D��n,�ui%��a�M����.����J#ܗ��@�5���b�߃<�1��K�
}�!�nَk)j�n�S��ha����"r]_���r9%&(.�>[�of@
��~�:�����v��)n��������af�cr��cX�V`C�����|иUP
�SS��
֯ ��S�����:
Y�p*�� %�b`om��D�ȉs��s(LK3!.G���cs�՟O.n��(�.��m��ۚ�qhY�J����*�|U�T
���y��{3����cEɜ�>T�N#ȇ ���q�����-
<��X�l�=�Ȃ�R��^�����~�\ 碏b���h2O����2�qV48�/{�I��m:�P3D���I�hU�=��H���=��GP-7S!��3�`��1`n��Ĝ)r�n�L���x<�62��*/�;۸IQI!
I���nۇqT�d����BF1<�k�"��s1�>M5�Igq�z
'o�tw��b.�Iž���A����v����}�j���≐_�!h(cٕz|u�D@��>2�/��~���yZ�L�n����������BM4��>��;ꔪ_��|2���?����q����ׯ~�i*C�GE�)F.����M2P1l���E��_�t(<��q�7���������\��~u_O�F�ԞU��!�M�X�7Z��$&0���HE=��5_��|{�|@����҈��l��V���~w��Rr"o�a9�?��+kvE�qE��f̢�{�)���j粘Ѩ�$!,��SdW�^�e�)��V��SR�<�X�
* �X�٘f�+@��F�-����A��Ҹk_�Y�4��������l|���C.���+[mٍF�=B+u/��@\�&r�
w�/
�q��e$�М$PM�h��S1�-����@��*��P�2\�A&9*8�^�J�QDS�$�gcfpL��W��QD�]��%�݂��1D�ɤ��������b�`>��\��~�a��#��\�U} ��ѝJz&��#
����P&����FV�xO1E��l'�,���:gXZ�<X F���o*��$e'`]�l�YVk��� �O�B������KЉk�q�w&�$�%@f�Z��>B��l &PW|
s1�+_BY�\՛��p,E�W�d�Ġĥc���
RH���p�5�`,���]���`q�Y��?�-���N���1��;���!��#��D��[P�X� �B�g9��x�,g|��V�A���$1�gd���z,��cӸ�D ��h%^�E� �t��T��(o�Q,�!b0梥�)|��x��d��KI#��&�}����O��oͨԣ�7:YۋrX*a�>ql�Fm4�p{��D�(�m4��-�˼�?uޱShE6"���
��k�-�,�W�����-� M��H�9���d
�u��#�nk�i�}��Ķ<�Ƣ�\��t�2�G1���mN
@�km�M���f+5Tpo�qv�mC������ە��SG����s��^b��2�g,��9Y��}#��T����֜�4��WN�\�j��^FFm�:~�����o�s�g���a��[YL�^K�(�_�f��0�����<��{���p��Mq��_�eNe��%���NA֮�"�}[���w͖Ȍ?s��v8?��vb%��Y�����U�x<����.yC���iUᎼ�
@k8 ,Q���L
ӕd��Q���V_��.]�9��\���cU�bE� %M�Aމɛ(�L)&��
�Y� �Jvm�h���Rs�&=����ɕ���ݰ�'�`�/�1�F��vY�/�ȱ�"q�%�F���Q?�4G��T"x\?�Q���ڌ�%�G����ǁiY��%`���5_�Z�RQ�/j�te7@h@������g�_�
�i���`5�s��!NX�X[nK��Z���#���4>���B�IJT9��#��fN��k|ܰG���W�-5X���)�_T�-�OPD�:��]���
�����Ot��rI���U�b��U��aJ���bm��CF`�V?�/��/en��:$�&q��.~��`{m `3�
#S9⛏�i�5�=�v��{����=ņ��Wۣ����#�\�
��J���4�"����m����K쟔wD�1�vVߥ]d��~_�\��H�[�3n void
*/
public function localize_script( $handle, $object_name, $data ) {
wp_localize_script( $this->prefix . $handle, $object_name, $data );
}
/**
* Adds an inline script.
*
* @param string $handle The script handle.
* @param string $data The l10n data.
* @param string $position Optional. Whether to add the inline script before the handle or after.
*
* @return void
*/
public function add_inline_script( $handle, $data, $position = 'after' ) {
wp_add_inline_script( $this->prefix . $handle, $data, $position );
}
/**
* A list of styles that shouldn't be registered but are needed in other locations in the plugin.
*
* @return array
*/
public function special_styles() {
$flat_version = $this->flatten_version( WPSEO_VERSION );
$asset_args = [
'name' => 'inside-editor',
'src' => 'inside-editor-' . $flat_version,
];
return [ 'inside-editor' => new WPSEO_Admin_Asset( $asset_args ) ];
}
/**
* Flattens a version number for use in a filename.
*
* @param string $version The original version number.
*
* @return string The flattened version number.
*/
public function flatten_version( $version ) {
$parts = explode( '.', $version );
if ( count( $parts ) === 2 && preg_match( '/^\d+$/', $parts[1] ) === 1 ) {
$parts[] = '0';
}
return implode( '', $parts );
}
/**
* Creates a default location object for use in the admin asset manager.
*
* @return WPSEO_Admin_Asset_Location The location to use in the asset manager.
*/
public static function create_default_location() {
if ( defined( 'YOAST_SEO_DEV_SERVER' ) && YOAST_SEO_DEV_SERVER ) {
$url = defined( 'YOAST_SEO_DEV_SERVER_URL' ) ? YOAST_SEO_DEV_SERVER_URL : WPSEO_Admin_Asset_Dev_Server_Location::DEFAULT_URL;
return new WPSEO_Admin_Asset_Dev_Server_Location( $url );
}
return new WPSEO_Admin_Asset_SEO_Location( WPSEO_FILE, false );
}
/**
* Checks if the given script is enqueued.
*
* @param string $script The script to check.
*
* @return bool True when the script is enqueued.
*/
public function is_script_enqueued( $script ) {
return wp_script_is( $this->prefix . $script );
}
/**
* Returns the scripts that need to be registered.
*
* @todo Data format is not self-documenting. Needs explanation inline. R.
*
* @return array The scripts that need to be registered.
*/
protected function scripts_to_be_registered() {
$header_scripts = [
'admin-global',
'block-editor',
'classic-editor',
'post-edit',
'help-scout-beacon',
'redirect-old-features-tab',
];
$additional_dependencies = [
'analysis-worker' => [ self::PREFIX . 'analysis-package' ],
'api-client' => [ 'wp-api' ],
'crawl-settings' => [ 'jquery' ],
'dashboard-widget' => [ self::PREFIX . 'api-client' ],
'wincher-dashboard-widget' => [ self::PREFIX . 'api-client' ],
'editor-modules' => [ 'jquery' ],
'elementor' => [
self::PREFIX . 'api-client',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
],
'indexation' => [
'jquery-ui-core',
'jquery-ui-progressbar',
],
'first-time-configuration' => [
self::PREFIX . 'api-client',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
],
'integrations-page' => [
self::PREFIX . 'api-client',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
],
'post-edit' => [
self::PREFIX . 'api-client',
self::PREFIX . 'block-editor',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
],
'reindex-links' => [
'jquery-ui-core',
'jquery-ui-progressbar',
],
'settings' => [
'jquery-ui-core',
'jquery-ui-progressbar',
self::PREFIX . 'api-client',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
],
'term-edit' => [
self::PREFIX . 'api-client',
self::PREFIX . 'classic-editor',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
],
'general-page' => [
self::PREFIX . 'api-client',
],
];
$plugin_scripts = $this->load_generated_asset_file(
[
'asset_file' => __DIR__ . '/../src/generated/assets/plugin.php',
'ext_length' => 3,
'additional_deps' => $additional_dependencies,
'header_scripts' => $header_scripts,
]
);
$external_scripts = $this->load_generated_asset_file(
[
'asset_file' => __DIR__ . '/../src/generated/assets/externals.php',
'ext_length' => 3,
'suffix' => '-package',
'base_dir' => 'externals/',
'additional_deps' => $additional_dependencies,
'header_scripts' => $header_scripts,
]
);
$language_scripts = $this->load_generated_asset_file(
[
'asset_file' => __DIR__ . '/../src/generated/assets/languages.php',
'ext_length' => 3,
'suffix' => '-language',
'base_dir' => 'languages/',
'additional_deps' => $additional_dependencies,
'header_scripts' => $header_scripts,
]
);
$renamed_scripts = $this->load_renamed_scripts();
$scripts = array_merge(
$plugin_scripts,
$external_scripts,
$language_scripts,
$renamed_scripts
);
$scripts['installation-success'] = [
'name' => 'installation-success',
'src' => 'installation-success.js',
'deps' => [
'wp-a11y',
'wp-dom-ready',
'wp-components',
'wp-element',
'wp-i18n',
self::PREFIX . 'components-new-package',
self::PREFIX . 'externals-components',
],
'version' => $scripts['installation-success']['version'],
];
$scripts['post-edit-classic'] = [
'name' => 'post-edit-classic',
'src' => $scripts['post-edit']['src'],
'deps' => array_map(
static function ( $dep ) {
if ( $dep === self::PREFIX . 'block-editor' ) {
return self::PREFIX . 'classic-editor';
}
return $dep;
},
$scripts['post-edit']['deps']
),
'in_footer' => ! in_array( 'post-edit-classic', $header_scripts, true ),
'version' => $scripts['post-edit']['version'],
];
$scripts['workouts'] = [
'name' => 'workouts',
'src' => 'workouts.js',
'deps' => [
'clipboard',
'lodash',
'wp-api-fetch',
'wp-a11y',
'wp-components',
'wp-compose',
'wp-data',
'wp-dom-ready',
'wp-element',
'wp-i18n',
self::PREFIX . 'externals-components',
self::PREFIX . 'externals-contexts',
self::PREFIX . 'externals-redux',
self::PREFIX . 'analysis',
self::PREFIX . 'react-select',
self::PREFIX . 'components-new-package',
],
'version' => $scripts['workouts']['version'],
];
// Add the current language to every script that requires the analysis package.
foreach ( $scripts as $name => $script ) {
if ( substr( $name, -8 ) === 'language' ) {
continue;
}
if ( in_array( self::PREFIX . 'analysis-package', $script['deps'], true ) ) {
$scripts[ $name ]['deps'][] = self::PREFIX . YoastSEO()->helpers->language->get_researcher_language() . '-language';
}
}
return $scripts;
}
/**
* Loads a generated asset file.
*
* @param array $args {
* The arguments.
*
* @type string $asset_file The asset file to load.
* @type int $ext_length The length of the extension, including suffix, of the filename.
* @type string $suffix Optional. The suffix of the asset name.
* @type array $additional_deps Optional. The additional dependencies assets may have.
* @type string $base_dir Optional. The base directory of the asset.
* @type string[] $header_scripts Optional. The script names that should be in the header.
* }
*
* @return array {
* The scripts to be registered.
*
* @type string $name The name of the asset.
* @type string $src The src of the asset.
* @type string[] $deps The dependenies of the asset.
* @type bool $in_footer Whether or not the asset should be in the footer.
* }
*/
protected function load_generated_asset_file( $args ) {
$args = wp_parse_args(
$args,
[
'suffix' => '',
'additional_deps' => [],
'base_dir' => '',
'header_scripts' => [],
]
);
$scripts = [];
$assets = require $args['asset_file'];
foreach ( $assets as $file => $data ) {
$name = substr( $file, 0, -$args['ext_length'] );
$name = strtolower( preg_replace( '/([A-Z])/', '-$1', $name ) );
$name .= $args['suffix'];
$deps = $data['dependencies'];
if ( isset( $args['additional_deps'][ $name ] ) ) {
$deps = array_merge( $deps, $args['additional_deps'][ $name ] );
}
$scripts[ $name ] = [
'name' => $name,
'src' => $args['base_dir'] . $file,
'deps' => $deps,
'in_footer' => ! in_array( $name, $args['header_scripts'], true ),
'version' => $data['version'],
];
}
return $scripts;
}
/**
* Loads the scripts that should be renamed for BC.
*
* @return array {
* The scripts to be registered.
*
* @type string $name The name of the asset.
* @type string $src The src of the asset.
* @type string[] $deps The dependenies of the asset.
* @type bool $in_footer Whether or not the asset should be in the footer.
* }
*/
protected function load_renamed_scripts() {
$scripts = [];
$renamed_scripts = [
'admin-global-script' => 'admin-global',
'analysis' => 'analysis-package',
'analysis-report' => 'analysis-report-package',
'api' => 'api-client',
'commons' => 'commons-package',
'edit-page' => 'edit-page-script',
'draft-js' => 'draft-js-package',
'feature-flag' => 'feature-flag-package',
'helpers' => 'helpers-package',
'jed' => 'jed-package',
'chart.js' => 'chart.js-package',
'network-admin-script' => 'network-admin',
'redux' => 'redux-package',
'replacement-variable-editor' => 'replacement-variable-editor-package',
'search-metadata-previews' => 'search-metadata-previews-package',
'social-metadata-forms' => 'social-metadata-forms-package',
'styled-components' => 'styled-components-package',
'style-guide' => 'style-guide-package',
'yoast-components' => 'components-new-package',
];
foreach ( $renamed_scripts as $original => $replacement ) {
$scripts[] = [
'name' => $original,
'src' => false,
'deps' => [ self::PREFIX . $replacement ],
];
}
return $scripts;
}
/**
* Returns the styles that need to be registered.
*
* @todo Data format is not self-documenting. Needs explanation inline. R.
*
* @return array Styles that need to be registered.
*/
protected function styles_to_be_registered() {
$flat_version = $this->flatten_version( WPSEO_VERSION );
return [
[
'name' => 'admin-css',
'src' => 'yst_plugin_tools-' . $flat_version,
'deps' => [ self::PREFIX . 'toggle-switch' ],
],
[
'name' => 'toggle-switch',
'src' => 'toggle-switch-' . $flat_version,
],
[
'name' => 'dismissible',
'src' => 'wpseo-dismissible-' . $flat_version,
],
[
'name' => 'notifications',
'src' => 'notifications-' . $flat_version,
],
[
'name' => 'alert',
'src' => 'alerts-' . $flat_version,
],
[
'name' => 'edit-page',
'src' => 'edit-page-' . $flat_version,
],
[
'name' => 'featured-image',
'src' => 'featured-image-' . $flat_version,
���Y"�Jx��a�RU��0�\2��Y�*������{Kf}UM�ᙱo� �.��ڸ+q7v�1�L�N� ������֫�N=���<�h�-A(C��b�0�g�ArԂ
�
����ٲ��/9��>Ot�`�S���.��u�au����W����t�Qݹ���A�\�v����%�$_*Q������N/���"O�4�-��~|��ky.���id��Sr�1�Z�
��f@���֜*���K��ǻ�<�F�@�~���<�!�l_�ݭ�&��`���T,Sa��U<�^��>�`Ղ�*c�9����)�P3�{�ff���ػ[��7W�
���<�/U'�X�lb�{�ϩ�Y��7�J�IdsB`f'0tj����;k͊dQ�I:�2n��K������,Tʸ�;�����K��� 2�2�X�#�T��k9�8�&ؐ-�G
@�b�¾��)��?�t�.��eԬA�ܻ55�.Z,��2�k_2�p��E����S�M�ť��,��ңq��֮溊v�~�`&g�D����xK��˵��YLP��_�Q��B�^� ��?�������oV���}.D��P���;L"��x�=^���%<"��ƌ��������aj@�tl�1��
w��"@��sIN¹t|��;^8kJ�R���7z":Z:�Q=�(�2*�>[D��"(3rt�6��������s���&���^���G�
�����Ê4
i|a��thu
��eJr��Fr�w[��A��s�Ǔa��}x���,��O���;:�//F8j���H�vŹ6�����I�
M��?}��9'�,sp��\��&[PT*TWĽ�6�~'�;����ojEq�_������'IܰR��q�U6t�9�x�ajƓ���m+��(�lT7���������Ko���cl�P�e���8��1ɀW�^��L�J�Tel��@V��DS���+��
�=��aپ��(����:��``�ߟ�O��
�����Y�o��KE�b��nxd���3�le����7i�&^ ���m�ᗿ�hK~XMA�`��]��Y��/����d�b>
��6��;���[i�T�|TsN���?+xr�5*��0|K��H���_|��ge���L\K�Sg�3�pA��Z
2kq.�f0*����LXzۖ��P�g1 D�\���P�����uĵ�j{�1DͶ�U� R����Z�3.0٬�D�+u��c<�
��Sa�۟�Ѐ4̎�c?R
�`w�Fh+!]C0�����[D�̷xw#1ǝePξ7�V����˱|AmJ��wWZ�s��w+e+ �P��13�
���of������5�A��7U��R�H��y���T�Vs(�_�ƶ�h5�62�����Z��,��
�
�%9��k�r
�oD��sg��5yٗV ��e��g}G�7�_BȻ+�,��>�����"�����ͪ������i#CD�V3�
�2�i��ǥ��ɕd�I�@C�*�����"�H���2����"�ä�c��d@-���Xy�0�B@��mV�ad}}k��!�)8���`��^����M��8�Lk@��0i,��ƛ��a3��D�S!�7�
����:������חF�WMg�����@amu6�p2O��)YR����d)32��0���Ҝ^�}���Q�����˟����>��.���?��X��b\�̉��0�y���[߶�lC2:�� h������ �!t�seߟ�ϋ�(]CA��hc���j@���!`tW,��:г�(��8v���]�;�Qs��|G�W@��)�w:A[���xO�x*����s@M~ɼh����0�2w�؛9i����>D8��_��MG�D�x&toӣ(��3��O0����RB�WoĤ��a}}�$lļ�Ȕ��UOiͶ*� ���9�U��U�zea����ͻI�߷�-��$=?��u2���B*Ԍ^��7B}ϞGK���\�@g��7r��R�[��
�o�����>������`�
��>�\2}�=\u9��t��`c�/Nf`|L��;У��8@��a��2������l�㜝n\���Bbr�2QBĬbΓ8�SC\�ap��!����wʋEC���.�+@I��H_����:�r�w�e@�;�d�J�7ʸ��Lx��1#�o����g�҈l-R����-R��`uv��){7%����<��я��Q;���J��m��qw�+j�tco�j}��Y����(�0�p�BF2� ��N��th���'9���Y_�Uq��}{�4�k�0���Ċ��ʜ��\2�k�i���KR�-^�$L� ��Cg����pv��C1�*�$4��Vy�TY�]-�}����.7��%Hb
�n�˽�������*C��a��`��g�#Ѷ/c���K<'+W�|5l�$�p�0�?���'BO��S4b����I��m���]Ģ���=�����n�χ7Q�' /OX�_��ou z��
AZ*Ժ{���������P��F��_3d6?�uo�UxA��qAOٍ:��-�@zֻݤ�^k��/Ŷ'�L�wY�Y�����k[���k���y��r�3V����nҥB[�X�zN�kD��^i����
��bb_�+�4� %M�Pҍ�.�p�"�`p����̏0>n��A��6_#*�
�{�����]��It��ħ��Tcɐj�U�x͢�s�?&@�f�g��fd@x/,��G��U�y&Y6wG�s�@r< `BJ!��z� ��f��_�`D�� ��Fd\gd�����;��-��F�CtU��_.�Y���
��2V�R?zƴ���g�Xu�mn�ծ�P:���X0�Y=�I���#�[���_�zH|�(��$�>���v�/l��Y7��̽-;�-eo3T���W{�r2��#�FT��H�.���yT��Q+�E����\���3Og��Nͽ`���o9��"���k��Ɔ�?~��A�����<����AD�
�a�o3� �0t`�2���K�r��;��lxEll�D��z`����|�z���s�A�T䚪���p�j��M�
W�[3���T�d����N��1�~;�$m�����N�/Lj�v��K)�L�Ô�2�n}��$��R��/>��utק�J{CU����C�-��J�1�7�G@��j柢�8|.�[���x�y"�R��4�E��c+��Se:�}�Z�W̖��%ɑdpmf�ƊU����*-H�[�>F�rwY:A_�ҷ=�/P�1D�s�
'YHQZgh�3y���^�����h{ehN��]A����?ΠHq�u���rr_;����f��!��UСиn%��
�˙Ưu�P��M���rj��S��\�0
��|�ۦ��;\���������mSi옰�tݴ�H���j2���ͯ�邂�� �P[t�B�t���G4yU4@UE�V�:��zz��\�ߎ��0���ӊ��f�ʊ!�����v���A�ć�����f͏7��#hRŏ�[*�>��_���g
�$�z'&,>}���>�a3��!RP&hA�D�!4'htN�)L��üD>�Z��d6<�)]B�'\i,oR��78
�
X
^)�x9(.(j��T&�Qn7����W�(@Ʈ�����T�͖�k)E�?B6=A�Q"$j&�(��