From 19b9a9654e15d0eb6279a6a6edd014c83e7860b4 Mon Sep 17 00:00:00 2001 From: Manuel Canga Date: Sat, 17 Dec 2016 14:56:08 +0100 Subject: [PATCH] =?UTF-8?q?-=20Evitamos=20que=20la=20web=20se=20quede=20en?= =?UTF-8?q?=20blanco=20si=20hay=20un=20css=20mal=20formado=20-=20Se=20a?= =?UTF-8?q?=C3=B1ade=20el=20plugin=20wordpress-seo=20(=20de=20yoast=20)=20?= =?UTF-8?q?de=20serie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/dependencies/less/lessc.inc.php | 6 +- wp-content/plugins/wordpress-seo/.babelrc | 3 + wp-content/plugins/wordpress-seo/.csslintrc | 2 + .../plugins/wordpress-seo/.eslintignore | 1 + wp-content/plugins/wordpress-seo/.eslintrc | 9 + .../plugins/wordpress-seo/admin/ajax.php | 453 ++++ .../ajax/class-recalculate-scores-ajax.php | 119 + .../admin/ajax/class-shortcode-filter.php | 39 + .../ajax/class-yoast-dismissable-notice.php | 69 + .../admin/ajax/class-yoast-onpage-ajax.php | 38 + .../ajax/class-yoast-plugin-conflict-ajax.php | 105 + .../banner/class-admin-banner-renderer.php | 48 + .../class-admin-banner-sidebar-renderer.php | 60 + .../banner/class-admin-banner-sidebar.php | 356 +++ .../class-admin-banner-spot-renderer.php | 30 + .../admin/banner/class-admin-banner-spot.php | 97 + .../admin/banner/class-admin-banner.php | 87 + .../admin/class-admin-asset-manager.php | 350 +++ .../admin/class-admin-help-panel.php | 91 + .../wordpress-seo/admin/class-admin-init.php | 547 +++++ .../admin/class-admin-user-profile.php | 89 + .../wordpress-seo/admin/class-admin.php | 809 +++++++ .../wordpress-seo/admin/class-asset.php | 223 ++ ...ass-bulk-description-editor-list-table.php | 76 + .../admin/class-bulk-editor-list-table.php | 973 +++++++++ .../class-bulk-title-editor-list-table.php | 86 + .../wordpress-seo/admin/class-config.php | 435 ++++ .../wordpress-seo/admin/class-customizer.php | 255 +++ .../wordpress-seo/admin/class-export.php | 276 +++ .../admin/class-help-center-item.php | 94 + .../wordpress-seo/admin/class-help-center.php | 213 ++ .../admin/class-import-aioseo.php | 98 + .../admin/class-import-external.php | 108 + .../admin/class-import-woothemes-seo.php | 146 ++ .../admin/class-import-wpseo.php | 185 ++ .../wordpress-seo/admin/class-import.php | 196 ++ .../admin/class-meta-columns.php | 501 +++++ .../wordpress-seo/admin/class-option-tab.php | 80 + .../admin/class-option-tabs-formatter.php | 53 + .../wordpress-seo/admin/class-option-tabs.php | 106 + .../admin/class-plugin-availability.php | 241 ++ .../admin/class-plugin-compatibility.php | 101 + .../admin/class-plugin-conflict.php | 155 ++ .../admin/class-premium-popup.php | 87 + .../admin/class-primary-term-admin.php | 226 ++ .../admin/class-product-upsell-notice.php | 201 ++ .../admin/class-recalculate-scores.php | 52 + .../admin/class-social-admin.php | 241 ++ .../admin/class-social-facebook.php | 480 ++++ .../wordpress-seo/admin/class-stop-words.php | 52 + .../admin/class-yoast-alerts.php | 258 +++ .../admin/class-yoast-dashboard-widget.php | 204 ++ .../wordpress-seo/admin/class-yoast-form.php | 685 ++++++ .../admin/class-yoast-notification-center.php | 568 +++++ .../admin/class-yoast-notification.php | 303 +++ .../admin/class-yoast-plugin-conflict.php | 333 +++ .../class-configuration-components.php | 69 + .../class-configuration-endpoint.php | 78 + .../class-configuration-options-adapter.php | 194 ++ .../config-ui/class-configuration-page.php | 268 +++ .../config-ui/class-configuration-service.php | 143 ++ .../config-ui/class-configuration-storage.php | 196 ++ .../class-configuration-structure.php | 87 + ...omponent-connect-google-search-console.php | 149 ++ .../class-component-mailchimp-signup.php | 79 + .../components/interface-component.php | 30 + .../factories/class-factory-post-type.php | 66 + .../fields/class-field-choice-post-type.php | 92 + .../config-ui/fields/class-field-choice.php | 40 + .../fields/class-field-company-logo.php | 28 + .../fields/class-field-company-name.php | 28 + .../fields/class-field-company-or-person.php | 29 + ...ss-field-connect-google-search-console.php | 28 + .../fields/class-field-environment.php | 95 + .../fields/class-field-mailchimp-signup.php | 56 + .../fields/class-field-multiple-authors.php | 81 + .../fields/class-field-person-name.php | 28 + .../class-field-post-type-visibility.php | 23 + .../class-field-profile-url-facebook.php | 29 + .../class-field-profile-url-googleplus.php | 29 + .../class-field-profile-url-instagram.php | 29 + .../class-field-profile-url-linkedin.php | 29 + .../class-field-profile-url-myspace.php | 29 + .../class-field-profile-url-pinterest.php | 29 + .../class-field-profile-url-twitter.php | 28 + .../class-field-profile-url-youtube.php | 29 + .../fields/class-field-separator.php | 43 + .../fields/class-field-site-name.php | 67 + .../fields/class-field-site-type.php | 36 + .../class-field-social-profiles-intro.php | 23 + .../fields/class-field-success-message.php | 42 + ...ass-field-upsell-configuration-service.php | 38 + .../fields/class-field-upsell-site-review.php | 30 + .../admin/config-ui/fields/class-field.php | 134 ++ .../formatter/class-metabox-formatter.php | 99 + .../class-post-metabox-formatter.php | 181 ++ .../class-term-metabox-formatter.php | 143 ++ .../formatter/interface-metabox-formatter.php | 18 + .../google_search_console/class-gsc-ajax.php | 133 ++ .../class-gsc-bulk-action.php | 92 + .../class-gsc-category-filters.php | 192 ++ .../class-gsc-config.php | 22 + .../google_search_console/class-gsc-count.php | 221 ++ .../google_search_console/class-gsc-issue.php | 89 + .../class-gsc-issues.php | 175 ++ .../class-gsc-mapper.php | 112 + .../class-gsc-marker.php | 143 ++ .../class-gsc-platform-tabs.php | 94 + .../class-gsc-service.php | 192 ++ .../class-gsc-settings.php | 102 + .../google_search_console/class-gsc-table.php | 385 ++++ .../admin/google_search_console/class-gsc.php | 310 +++ .../views/gsc-create-redirect.php | 76 + .../views/gsc-display.php | 124 ++ .../import/class-import-aioseo-hooks.php | 39 + .../admin/import/class-import-hooks.php | 89 + .../admin/import/class-import-wpseo-hooks.php | 39 + .../plugins/wordpress-seo/admin/index.php | 4 + .../metabox/class-metabox-add-keyword-tab.php | 50 + .../metabox/class-metabox-addon-section.php | 37 + .../class-metabox-analysis-readability.php | 39 + .../metabox/class-metabox-analysis-seo.php | 39 + .../admin/metabox/class-metabox-editor.php | 64 + .../admin/metabox/class-metabox-form-tab.php | 115 + .../metabox/class-metabox-tab-section.php | 140 ++ .../admin/metabox/class-metabox.php | 1682 ++++++++++++++ .../metabox/interface-metabox-analysis.php | 31 + .../metabox/interface-metabox-section.php | 20 + .../admin/metabox/interface-metabox-tab.php | 24 + .../admin/onpage/class-onpage-option.php | 127 ++ .../admin/onpage/class-onpage-request.php | 76 + .../admin/onpage/class-onpage.php | 230 ++ .../wordpress-seo/admin/pages/advanced.php | 61 + .../wordpress-seo/admin/pages/dashboard.php | 72 + .../wordpress-seo/admin/pages/licenses.php | 239 ++ .../wordpress-seo/admin/pages/metas.php | 63 + .../wordpress-seo/admin/pages/network.php | 149 ++ .../wordpress-seo/admin/pages/social.php | 23 + .../wordpress-seo/admin/pages/tools.php | 88 + .../admin/pages/xml-sitemaps.php | 52 + .../recalculate/class-recalculate-posts.php | 149 ++ .../recalculate/class-recalculate-terms.php | 149 ++ .../admin/recalculate/class-recalculate.php | 107 + .../admin/taxonomy/class-taxonomy-columns.php | 249 +++ .../class-taxonomy-content-fields.php | 73 + .../class-taxonomy-fields-presenter.php | 230 ++ .../admin/taxonomy/class-taxonomy-fields.php | 91 + .../admin/taxonomy/class-taxonomy-metabox.php | 410 ++++ .../class-taxonomy-settings-fields.php | 121 + .../taxonomy/class-taxonomy-social-fields.php | 140 ++ .../admin/taxonomy/class-taxonomy.php | 390 ++++ .../wordpress-seo/admin/views/about.php | 230 ++ .../admin/views/class-yoast-form-fieldset.php | 168 ++ .../admin/views/class-yoast-input-select.php | 128 ++ .../admin/views/dashboard-widget.php | 105 + .../admin/views/form/fieldset.php | 24 + .../wordpress-seo/admin/views/form/select.php | 24 + .../views/interface-yoast-form-element.php | 17 + .../admin/views/js-templates-primary-term.php | 47 + .../admin/views/partial-alerts-errors.php | 19 + .../admin/views/partial-alerts-template.php | 62 + .../admin/views/partial-alerts-warnings.php | 19 + .../admin/views/partial-help-center-video.php | 51 + .../views/partial-settings-tab-video.php | 28 + .../admin/views/tabs/advanced/breadcrumbs.php | 92 + .../admin/views/tabs/advanced/permalinks.php | 59 + .../admin/views/tabs/advanced/rss.php | 45 + .../admin/views/tabs/dashboard/dashboard.php | 24 + .../admin/views/tabs/dashboard/features.php | 67 + .../admin/views/tabs/dashboard/general.php | 58 + .../views/tabs/dashboard/knowledge-graph.php | 50 + .../admin/views/tabs/dashboard/security.php | 22 + .../views/tabs/dashboard/site-analysis.php | 19 + .../views/tabs/dashboard/webmaster-tools.php | 17 + .../admin/views/tabs/metas/archives.php | 69 + .../admin/views/tabs/metas/general.php | 30 + .../admin/views/tabs/metas/home.php | 30 + .../admin/views/tabs/metas/other.php | 23 + .../admin/views/tabs/metas/post-types.php | 80 + .../admin/views/tabs/metas/taxonomies.php | 57 + .../views/tabs/sitemaps/exclude-post.php | 16 + .../admin/views/tabs/sitemaps/general.php | 38 + .../admin/views/tabs/sitemaps/post-types.php | 40 + .../admin/views/tabs/sitemaps/taxonomies.php | 41 + .../views/tabs/sitemaps/user-sitemap.php | 41 + .../admin/views/tabs/social/accounts.php | 27 + .../admin/views/tabs/social/facebook.php | 54 + .../admin/views/tabs/social/google.php | 18 + .../admin/views/tabs/social/pinterest.php | 23 + .../admin/views/tabs/social/twitterbox.php | 24 + .../admin/views/tabs/tool/import-seo.php | 36 + .../admin/views/tabs/tool/wpseo-export.php | 26 + .../admin/views/tabs/tool/wpseo-import.php | 26 + .../admin/views/tool-bulk-editor.php | 81 + .../admin/views/tool-file-editor.php | 150 ++ .../admin/views/tool-import-export.php | 135 ++ .../admin/views/user-profile.php | 90 + .../css/admin-global-370.min.css | 1 + .../css/admin-global-370.min.rapido.css | 1 + .../wordpress-seo/css/adminbar-340.min.css | 1 + .../css/adminbar-340.min.rapido.css | 1 + .../wordpress-seo/css/alerts-340.min.css | 1 + .../css/alerts-340.min.rapido.css | 1 + .../wordpress-seo/css/dashboard-360.min.css | 1 + .../css/dist/admin-global-370-rtl.css | 61 + .../css/dist/admin-global-370-rtl.min.css | 1 + .../css/dist/adminbar-340-rtl.css | 74 + .../css/dist/adminbar-340-rtl.min.css | 1 + .../wordpress-seo/css/dist/alerts-340-rtl.css | 125 ++ .../css/dist/alerts-340-rtl.min.css | 1 + .../css/dist/dashboard-360-rtl.css | 91 + .../css/dist/dashboard-360-rtl.min.css | 1 + .../css/dist/edit-page-330-rtl.css | 42 + .../css/dist/edit-page-330-rtl.min.css | 1 + .../css/dist/featured-image-330-rtl.css | 7 + .../css/dist/featured-image-330-rtl.min.css | 1 + .../css/dist/help-center-340-rtl.css | 207 ++ .../css/dist/help-center-340-rtl.min.css | 1 + .../css/dist/inside-editor-331-rtl.css | 8 + .../css/dist/inside-editor-331-rtl.min.css | 1 + .../css/dist/kb-search-350-rtl.css | 143 ++ .../css/dist/kb-search-350-rtl.min.css | 1 + .../css/dist/metabox-400-rtl.css | 1556 +++++++++++++ .../css/dist/metabox-400-rtl.min.css | 1 + .../css/dist/metabox-primary-category-rtl.css | 47 + .../dist/metabox-primary-category-rtl.min.css | 1 + .../css/dist/select2/select2.min.css | 1 + .../css/dist/select2/select2.min.rapido.css | 1 + .../css/dist/snippet-330-rtl.css | 27 + .../css/dist/snippet-330-rtl.min.css | 1 + .../css/dist/taxonomy-meta-rtl.css | 5 + .../css/dist/taxonomy-meta-rtl.min.css | 1 + .../css/dist/toggle-switch-390-rtl.css | 375 ++++ .../css/dist/toggle-switch-390-rtl.min.css | 1 + .../css/dist/wpseo-dismissible-350-rtl.css | 56 + .../dist/wpseo-dismissible-350-rtl.min.css | 1 + .../css/dist/yoast-components-400-rtl.css | 673 ++++++ .../css/dist/yoast-components-400-rtl.min.css | 1 + .../css/dist/yoast-extensions-390-rtl.css | 899 ++++++++ .../css/dist/yoast-extensions-390-rtl.min.css | 1 + .../css/dist/yst_plugin_tools-400-rtl.css | 537 +++++ .../css/dist/yst_plugin_tools-400-rtl.min.css | 1 + .../css/dist/yst_seo_score-390-rtl.css | 39 + .../css/dist/yst_seo_score-390-rtl.min.css | 1 + .../wordpress-seo/css/edit-page-330.min.css | 1 + .../css/featured-image-330.min.css | 1 + .../wordpress-seo/css/help-center-340.min.css | 1 + .../css/help-center-340.min.rapido.css | 1 + .../css/inside-editor-331.min.css | 1 + .../wordpress-seo/css/kb-search-350.min.css | 1 + .../css/kb-search-350.min.rapido.css | 1 + .../wordpress-seo/css/metabox-400.min.css | 1 + .../css/metabox-400.min.rapido.css | 1 + .../css/metabox-primary-category.min.css | 1 + .../wordpress-seo/css/snippet-330.min.css | 1 + .../wordpress-seo/css/taxonomy-meta.min.css | 1 + .../css/toggle-switch-390.min.css | 1 + .../css/toggle-switch-390.min.rapido.css | 1 + .../css/wpseo-dismissible-350.min.css | 1 + .../css/wpseo-dismissible-350.min.rapido.css | 1 + .../wordpress-seo/css/xml-sitemap-xsl.php | 173 ++ .../css/yoast-components-400.min.css | 1 + .../css/yoast-extensions-390.min.css | 1 + .../css/yst_plugin_tools-400.min.css | 1 + .../css/yst_plugin_tools-400.min.rapido.css | 1 + .../css/yst_seo_score-390.min.css | 1 + .../class-onpage-email-presenter.php | 41 + .../deprecated/class-onpage-notifier.php | 43 + .../deprecated/class-snippet-preview.php | 161 ++ .../deprecated/class-yoast-textstatistics.php | 196 ++ .../frontend/class-breadcrumbs.php | 889 ++++++++ .../wordpress-seo/frontend/class-frontend.php | 1939 +++++++++++++++++ .../frontend/class-googleplus.php | 71 + .../wordpress-seo/frontend/class-json-ld.php | 268 +++ .../frontend/class-opengraph.php | 1078 +++++++++ .../frontend/class-primary-category.php | 69 + .../wordpress-seo/frontend/class-twitter.php | 643 ++++++ .../plugins/wordpress-seo/frontend/index.php | 4 + .../wordpress-seo/images/Yoast_SEO_Icon.svg | 1 + .../images/banner/basic-seo-training.png | Bin 0 -> 83980 bytes .../images/banner/configuration-service.png | Bin 0 -> 79768 bytes .../banner/keyword-research-training.png | Bin 0 -> 80318 bytes .../banner/local-seo-for-woocommerce.png | Bin 0 -> 82027 bytes .../wordpress-seo/images/banner/local-seo.png | Bin 0 -> 76899 bytes .../wordpress-seo/images/banner/news-seo.png | Bin 0 -> 67961 bytes .../images/banner/premium-seo.png | Bin 0 -> 90228 bytes .../wordpress-seo/images/banner/seo-care.png | Bin 0 -> 77201 bytes .../banner/seo-copywriting-training.png | Bin 0 -> 86293 bytes .../wordpress-seo/images/banner/video-seo.png | Bin 0 -> 73543 bytes .../images/banner/website-review.png | Bin 0 -> 70525 bytes .../images/banner/woocommerce-seo.png | Bin 0 -> 94032 bytes .../yoast-seo-for-wordpress-training.png | Bin 0 -> 82117 bytes .../plugins/wordpress-seo/images/editicon.png | Bin 0 -> 509 bytes .../wordpress-seo/images/extensions-local.png | Bin 0 -> 3543 bytes .../wordpress-seo/images/extensions-news.png | Bin 0 -> 3353 bytes .../images/extensions-premium-ribbon.png | Bin 0 -> 12733 bytes .../wordpress-seo/images/extensions-video.png | Bin 0 -> 3541 bytes .../wordpress-seo/images/extensions-woo.png | Bin 0 -> 5573 bytes .../plugins/wordpress-seo/images/index.php | 4 + .../wordpress-seo/images/pinterest-23x30.png | Bin 0 -> 1020 bytes .../wordpress-seo/images/question-mark.png | Bin 0 -> 299 bytes .../plugins/wordpress-seo/images/waiting.gif | Bin 0 -> 3197 bytes .../wordpress-seo/inc/class-rewrite.php | 162 ++ .../wordpress-seo/inc/class-upgrade.php | 242 ++ .../inc/class-wpseo-features.php | 29 + .../inc/class-wpseo-installation.php | 45 + .../wordpress-seo/inc/class-wpseo-meta.php | 1083 +++++++++ .../inc/class-wpseo-primary-term.php | 74 + .../wordpress-seo/inc/class-wpseo-rank.php | 192 ++ .../inc/class-wpseo-replace-vars.php | 1215 +++++++++++ .../inc/class-wpseo-statistics.php | 138 ++ .../wordpress-seo/inc/class-wpseo-utils.php | 969 ++++++++ .../plugins/wordpress-seo/inc/index.php | 4 + .../class-wpseo-option-internallinks.php | 363 +++ .../inc/options/class-wpseo-option-ms.php | 220 ++ .../options/class-wpseo-option-permalinks.php | 131 ++ .../inc/options/class-wpseo-option-rss.php | 69 + .../inc/options/class-wpseo-option-social.php | 319 +++ .../inc/options/class-wpseo-option-titles.php | 613 ++++++ .../inc/options/class-wpseo-option-wpseo.php | 244 +++ .../inc/options/class-wpseo-option-xml.php | 259 +++ .../inc/options/class-wpseo-option.php | 854 ++++++++ .../inc/options/class-wpseo-options.php | 455 ++++ .../inc/options/class-wpseo-taxonomy-meta.php | 600 +++++ .../class-author-sitemap-provider.php | 304 +++ .../class-post-type-sitemap-provider.php | 631 ++++++ .../inc/sitemaps/class-sitemap-cache-data.php | 129 ++ .../sitemaps/class-sitemap-image-parser.php | 428 ++++ .../inc/sitemaps/class-sitemap-timezone.php | 116 + .../inc/sitemaps/class-sitemaps-admin.php | 191 ++ .../class-sitemaps-cache-validator.php | 292 +++ .../inc/sitemaps/class-sitemaps-cache.php | 292 +++ .../inc/sitemaps/class-sitemaps-renderer.php | 322 +++ .../inc/sitemaps/class-sitemaps-router.php | 98 + .../inc/sitemaps/class-sitemaps.php | 545 +++++ .../class-taxonomy-sitemap-provider.php | 289 +++ .../sitemaps/interface-sitemap-cache-data.php | 56 + .../sitemaps/interface-sitemap-provider.php | 36 + .../inc/wpseo-functions-deprecated.php | 392 ++++ .../wordpress-seo/inc/wpseo-functions.php | 294 +++ .../inc/wpseo-non-ajax-functions.php | 538 +++++ wp-content/plugins/wordpress-seo/index.php | 4 + .../js/dist/configuration-wizard-400.min.js | 41 + .../js/dist/jquery.tablesorter.min.js | 3 + .../wordpress-seo/js/dist/select2/i18n/ar.js | 3 + .../wordpress-seo/js/dist/select2/i18n/az.js | 3 + .../wordpress-seo/js/dist/select2/i18n/bg.js | 3 + .../wordpress-seo/js/dist/select2/i18n/ca.js | 3 + .../wordpress-seo/js/dist/select2/i18n/cs.js | 3 + .../wordpress-seo/js/dist/select2/i18n/da.js | 3 + .../wordpress-seo/js/dist/select2/i18n/de.js | 3 + .../wordpress-seo/js/dist/select2/i18n/el.js | 3 + .../wordpress-seo/js/dist/select2/i18n/en.js | 3 + .../wordpress-seo/js/dist/select2/i18n/es.js | 3 + .../wordpress-seo/js/dist/select2/i18n/et.js | 3 + .../wordpress-seo/js/dist/select2/i18n/eu.js | 3 + .../wordpress-seo/js/dist/select2/i18n/fa.js | 3 + .../wordpress-seo/js/dist/select2/i18n/fi.js | 3 + .../wordpress-seo/js/dist/select2/i18n/fr.js | 3 + .../wordpress-seo/js/dist/select2/i18n/gl.js | 3 + .../wordpress-seo/js/dist/select2/i18n/he.js | 3 + .../wordpress-seo/js/dist/select2/i18n/hi.js | 3 + .../wordpress-seo/js/dist/select2/i18n/hr.js | 3 + .../wordpress-seo/js/dist/select2/i18n/hu.js | 3 + .../wordpress-seo/js/dist/select2/i18n/id.js | 3 + .../wordpress-seo/js/dist/select2/i18n/is.js | 3 + .../wordpress-seo/js/dist/select2/i18n/it.js | 3 + .../wordpress-seo/js/dist/select2/i18n/ja.js | 3 + .../wordpress-seo/js/dist/select2/i18n/km.js | 3 + .../wordpress-seo/js/dist/select2/i18n/ko.js | 3 + .../wordpress-seo/js/dist/select2/i18n/lt.js | 3 + .../wordpress-seo/js/dist/select2/i18n/lv.js | 3 + .../wordpress-seo/js/dist/select2/i18n/mk.js | 3 + .../wordpress-seo/js/dist/select2/i18n/ms.js | 3 + .../wordpress-seo/js/dist/select2/i18n/nb.js | 3 + .../wordpress-seo/js/dist/select2/i18n/nl.js | 3 + .../wordpress-seo/js/dist/select2/i18n/pl.js | 3 + .../js/dist/select2/i18n/pt-BR.js | 3 + .../wordpress-seo/js/dist/select2/i18n/pt.js | 3 + .../wordpress-seo/js/dist/select2/i18n/ro.js | 3 + .../wordpress-seo/js/dist/select2/i18n/ru.js | 3 + .../wordpress-seo/js/dist/select2/i18n/sk.js | 3 + .../js/dist/select2/i18n/sr-Cyrl.js | 3 + .../wordpress-seo/js/dist/select2/i18n/sr.js | 3 + .../wordpress-seo/js/dist/select2/i18n/sv.js | 3 + .../wordpress-seo/js/dist/select2/i18n/th.js | 3 + .../wordpress-seo/js/dist/select2/i18n/tr.js | 3 + .../wordpress-seo/js/dist/select2/i18n/uk.js | 3 + .../wordpress-seo/js/dist/select2/i18n/vi.js | 3 + .../js/dist/select2/i18n/zh-CN.js | 3 + .../js/dist/select2/i18n/zh-TW.js | 3 + .../js/dist/select2/select2.min.js | 3 + .../js/dist/wp-seo-admin-400.min.js | 27 + .../js/dist/wp-seo-admin-global-390.min.js | 1 + .../js/dist/wp-seo-admin-gsc-350.min.js | 1 + .../js/dist/wp-seo-admin-media-350.min.js | 1 + .../js/dist/wp-seo-bulk-editor-350.min.js | 1 + .../js/dist/wp-seo-dismissible-350.min.js | 1 + .../js/dist/wp-seo-featured-image-350.min.js | 1 + .../js/dist/wp-seo-metabox-400.min.js | 27 + .../dist/wp-seo-metabox-category-380.min.js | 1 + .../js/dist/wp-seo-post-scraper-400.min.js | 16 + .../js/dist/wp-seo-recalculate-400.min.js | 13 + .../dist/wp-seo-replacevar-plugin-380.min.js | 2 + .../dist/wp-seo-shortcode-plugin-350.min.js | 1 + .../js/dist/wp-seo-term-scraper-400.min.js | 16 + wp-content/plugins/wordpress-seo/js/index.php | 4 + .../plugins/wordpress-seo/languages/index.php | 4 + .../languages/wordpress-seo-bg_BG.json | 1 + .../languages/wordpress-seo-bg_BG.mo | Bin 0 -> 178966 bytes .../languages/wordpress-seo-ca.json | 1 + .../languages/wordpress-seo-ca.mo | Bin 0 -> 127676 bytes .../languages/wordpress-seo-cs_CZ.json | 1 + .../languages/wordpress-seo-cs_CZ.mo | Bin 0 -> 45275 bytes .../languages/wordpress-seo-cy.json | 1 + .../languages/wordpress-seo-cy.mo | Bin 0 -> 55178 bytes .../languages/wordpress-seo-da_DK.json | 1 + .../languages/wordpress-seo-da_DK.mo | Bin 0 -> 128523 bytes .../languages/wordpress-seo-de_DE.json | 1 + .../languages/wordpress-seo-de_DE.mo | Bin 0 -> 115439 bytes .../languages/wordpress-seo-en_AU.json | 1 + .../languages/wordpress-seo-en_AU.mo | Bin 0 -> 123985 bytes .../languages/wordpress-seo-en_CA.json | 1 + .../languages/wordpress-seo-en_CA.mo | Bin 0 -> 123990 bytes .../languages/wordpress-seo-en_GB.json | 1 + .../languages/wordpress-seo-en_GB.mo | Bin 0 -> 124239 bytes .../languages/wordpress-seo-es_ES.json | 1 + .../languages/wordpress-seo-es_ES.mo | Bin 0 -> 134125 bytes .../languages/wordpress-seo-es_MX.json | 1 + .../languages/wordpress-seo-es_MX.mo | Bin 0 -> 95584 bytes .../languages/wordpress-seo-eu.json | 1 + .../languages/wordpress-seo-eu.mo | Bin 0 -> 35870 bytes .../languages/wordpress-seo-fa_IR.json | 1 + .../languages/wordpress-seo-fa_IR.mo | Bin 0 -> 159040 bytes .../languages/wordpress-seo-fi.json | 1 + .../languages/wordpress-seo-fi.mo | Bin 0 -> 63669 bytes .../languages/wordpress-seo-fr_FR.json | 1 + .../languages/wordpress-seo-fr_FR.mo | Bin 0 -> 130029 bytes .../languages/wordpress-seo-he_IL.json | 1 + .../languages/wordpress-seo-he_IL.mo | Bin 0 -> 87851 bytes .../languages/wordpress-seo-hr.json | 1 + .../languages/wordpress-seo-hr.mo | Bin 0 -> 106241 bytes .../languages/wordpress-seo-id_ID.json | 1 + .../languages/wordpress-seo-id_ID.mo | Bin 0 -> 55414 bytes .../languages/wordpress-seo-it_IT.json | 1 + .../languages/wordpress-seo-it_IT.mo | Bin 0 -> 125981 bytes .../languages/wordpress-seo-ja.json | 1 + .../languages/wordpress-seo-ja.mo | Bin 0 -> 66086 bytes .../languages/wordpress-seo-nb_NO.json | 1 + .../languages/wordpress-seo-nb_NO.mo | Bin 0 -> 64788 bytes .../languages/wordpress-seo-nl_NL.json | 1 + .../languages/wordpress-seo-nl_NL.mo | Bin 0 -> 111994 bytes .../languages/wordpress-seo-pl_PL.json | 1 + .../languages/wordpress-seo-pl_PL.mo | Bin 0 -> 82934 bytes .../languages/wordpress-seo-pt_BR.json | 1 + .../languages/wordpress-seo-pt_BR.mo | Bin 0 -> 70997 bytes .../languages/wordpress-seo-pt_PT.json | 1 + .../languages/wordpress-seo-pt_PT.mo | Bin 0 -> 126307 bytes .../languages/wordpress-seo-ro_RO.json | 1 + .../languages/wordpress-seo-ro_RO.mo | Bin 0 -> 33351 bytes .../languages/wordpress-seo-ru_RU.json | 1 + .../languages/wordpress-seo-ru_RU.mo | Bin 0 -> 108319 bytes .../languages/wordpress-seo-sk_SK.json | 1 + .../languages/wordpress-seo-sk_SK.mo | Bin 0 -> 62603 bytes .../languages/wordpress-seo-sv_SE.json | 1 + .../languages/wordpress-seo-sv_SE.mo | Bin 0 -> 59734 bytes .../languages/wordpress-seo-tr_TR.json | 1 + .../languages/wordpress-seo-tr_TR.mo | Bin 0 -> 97770 bytes .../languages/wordpress-seo-zh_CN.json | 1 + .../languages/wordpress-seo-zh_CN.mo | Bin 0 -> 45135 bytes .../languages/wordpress-seo-zh_TW.json | 1 + .../languages/wordpress-seo-zh_TW.mo | Bin 0 -> 44912 bytes .../languages/yoast-components-bg_BG.json | 1 + .../languages/yoast-components-ca.json | 1 + .../languages/yoast-components-da_DK.json | 1 + .../languages/yoast-components-de_DE.json | 1 + .../languages/yoast-components-en_AU.json | 1 + .../languages/yoast-components-en_CA.json | 1 + .../languages/yoast-components-en_GB.json | 1 + .../languages/yoast-components-es_ES.json | 1 + .../languages/yoast-components-es_MX.json | 1 + .../languages/yoast-components-fa_IR.json | 1 + .../languages/yoast-components-fi.json | 1 + .../languages/yoast-components-fr_FR.json | 1 + .../languages/yoast-components-he_IL.json | 1 + .../languages/yoast-components-hr.json | 1 + .../languages/yoast-components-id_ID.json | 1 + .../languages/yoast-components-it_IT.json | 1 + .../languages/yoast-components-ja.json | 1 + .../languages/yoast-components-nb_NO.json | 1 + .../languages/yoast-components-nl_NL.json | 1 + .../languages/yoast-components-pl_PL.json | 1 + .../languages/yoast-components-pt_BR.json | 1 + .../languages/yoast-components-pt_PT.json | 1 + .../languages/yoast-components-ru_RU.json | 1 + .../languages/yoast-components-sk_SK.json | 1 + .../languages/yoast-components-sv_SE.json | 1 + .../languages/yoast-components-tr_TR.json | 1 + .../languages/yoast-components.php | 126 ++ .../wordpress-seo/languages/yoast-seo-js.json | 1 + .../wordpress-seo/languages/yoast-seo-js.php | 424 ++++ wp-content/plugins/wordpress-seo/license.txt | 621 ++++++ wp-content/plugins/wordpress-seo/phpmd.xml | 40 + wp-content/plugins/wordpress-seo/readme.txt | 169 ++ .../plugins/wordpress-seo/vendor/autoload.php | 7 + .../wordpress-seo/vendor/autoload_52.php | 7 + .../vendor/composer/ClassLoader.php | 415 ++++ .../vendor/composer/ClassLoader52.php | 271 +++ .../wordpress-seo/vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 264 +++ .../vendor/composer/autoload_namespaces.php | 11 + .../vendor/composer/autoload_psr4.php | 9 + .../vendor/composer/autoload_real.php | 52 + .../vendor/composer/autoload_real_52.php | 44 + .../vendor/xrstf/composer-php52/LICENSE | 19 + .../xrstf/Composer52/AutoloadGenerator.php | 346 +++ .../lib/xrstf/Composer52/ClassLoader.php | 271 +++ .../lib/xrstf/Composer52/Generator.php | 39 + .../api-libs/class-api-google-client.php | 269 +++ .../yoast/api-libs/class-api-google.php | 64 + .../vendor/yoast/api-libs/class-api-libs.php | 49 + .../yoast/api-libs/google/Google_Client.php | 457 ++++ .../auth/Google_AssertionCredentials.php | 103 + .../api-libs/google/auth/Google_Auth.php | 33 + .../api-libs/google/auth/Google_AuthNone.php | 48 + .../google/auth/Google_LoginTicket.php | 63 + .../api-libs/google/auth/Google_OAuth2.php | 451 ++++ .../api-libs/google/auth/Google_P12Signer.php | 70 + .../google/auth/Google_PemVerifier.php | 66 + .../api-libs/google/auth/Google_Signer.php | 28 + .../api-libs/google/auth/Google_Verifier.php | 29 + .../api-libs/google/cache/Google_Cache.php | 52 + .../api-libs/google/cache/Google_WPCache.php | 53 + .../vendor/yoast/api-libs/google/config.php | 83 + .../google/external/URITemplateParser.php | 209 ++ .../api-libs/google/io/Google_CacheParser.php | 173 ++ .../api-libs/google/io/Google_CurlIO.php | 196 ++ .../api-libs/google/io/Google_HttpRequest.php | 304 +++ .../yoast/api-libs/google/io/Google_IO.php | 156 ++ .../yoast/api-libs/google/io/Google_REST.php | 128 ++ .../yoast/api-libs/google/io/Google_WPIO.php | 170 ++ .../yoast/api-libs/google/io/cacerts.pem | 738 +++++++ .../google/service/Google_BatchRequest.php | 110 + .../google/service/Google_MediaFileUpload.php | 262 +++ .../api-libs/google/service/Google_Model.php | 115 + .../google/service/Google_Service.php | 22 + .../google/service/Google_ServiceResource.php | 205 ++ .../api-libs/google/service/Google_Utils.php | 117 + .../vendor/yoast/i18n-module/i18n-module.php | 282 +++ .../vendor/yoast/license-manager/CHANGELOG.md | 22 + .../license-manager/class-api-request.php | 138 ++ .../license-manager/class-license-manager.php | 613 ++++++ .../class-plugin-license-manager.php | 90 + .../class-plugin-update-manager.php | 93 + .../yoast/license-manager/class-product.php | 323 +++ .../license-manager/class-update-manager.php | 216 ++ .../vendor/yoast/license-manager/index.php | 2 + .../yoast/license-manager/views/form.php | 102 + .../yoast/license-manager/views/index.php | 2 + .../yoast/license-manager/views/script.php | 67 + .../plugins/wordpress-seo/wp-seo-main.php | 493 +++++ wp-content/plugins/wordpress-seo/wp-seo.php | 47 + .../plugins/wordpress-seo/wpml-config.xml | 57 + 563 files changed, 60090 insertions(+), 2 deletions(-) create mode 100644 wp-content/plugins/wordpress-seo/.babelrc create mode 100644 wp-content/plugins/wordpress-seo/.csslintrc create mode 100644 wp-content/plugins/wordpress-seo/.eslintignore create mode 100644 wp-content/plugins/wordpress-seo/.eslintrc create mode 100644 wp-content/plugins/wordpress-seo/admin/ajax.php create mode 100644 wp-content/plugins/wordpress-seo/admin/ajax/class-recalculate-scores-ajax.php create mode 100644 wp-content/plugins/wordpress-seo/admin/ajax/class-shortcode-filter.php create mode 100644 wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-dismissable-notice.php create mode 100644 wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-onpage-ajax.php create mode 100644 wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-plugin-conflict-ajax.php create mode 100644 wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-renderer.php create mode 100644 wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-sidebar-renderer.php create mode 100644 wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-sidebar.php create mode 100644 wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-spot-renderer.php create mode 100644 wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-spot.php create mode 100644 wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-admin-asset-manager.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-admin-help-panel.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-admin-init.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-admin-user-profile.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-admin.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-asset.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-bulk-description-editor-list-table.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-bulk-editor-list-table.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-bulk-title-editor-list-table.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-config.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-customizer.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-export.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-help-center-item.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-help-center.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-import-aioseo.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-import-external.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-import-woothemes-seo.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-import-wpseo.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-import.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-meta-columns.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-option-tab.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-option-tabs-formatter.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-option-tabs.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-plugin-availability.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-plugin-compatibility.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-plugin-conflict.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-premium-popup.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-primary-term-admin.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-product-upsell-notice.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-recalculate-scores.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-social-admin.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-social-facebook.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-stop-words.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-yoast-alerts.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-yoast-dashboard-widget.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-yoast-form.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-yoast-notification-center.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-yoast-notification.php create mode 100644 wp-content/plugins/wordpress-seo/admin/class-yoast-plugin-conflict.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-components.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-endpoint.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-options-adapter.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-page.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-service.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-storage.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-structure.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/components/class-component-connect-google-search-console.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/components/class-component-mailchimp-signup.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/components/interface-component.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/factories/class-factory-post-type.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-choice-post-type.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-choice.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-company-logo.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-company-name.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-company-or-person.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-connect-google-search-console.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-environment.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-mailchimp-signup.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-multiple-authors.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-person-name.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-post-type-visibility.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-facebook.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-googleplus.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-instagram.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-linkedin.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-myspace.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-pinterest.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-twitter.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-youtube.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-separator.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-site-name.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-site-type.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-social-profiles-intro.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-success-message.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-upsell-configuration-service.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-upsell-site-review.php create mode 100644 wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field.php create mode 100644 wp-content/plugins/wordpress-seo/admin/formatter/class-metabox-formatter.php create mode 100644 wp-content/plugins/wordpress-seo/admin/formatter/class-post-metabox-formatter.php create mode 100644 wp-content/plugins/wordpress-seo/admin/formatter/class-term-metabox-formatter.php create mode 100644 wp-content/plugins/wordpress-seo/admin/formatter/interface-metabox-formatter.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-ajax.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-bulk-action.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-category-filters.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-config.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-count.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-issue.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-issues.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-mapper.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-marker.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-platform-tabs.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-service.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-settings.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-table.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/views/gsc-create-redirect.php create mode 100644 wp-content/plugins/wordpress-seo/admin/google_search_console/views/gsc-display.php create mode 100644 wp-content/plugins/wordpress-seo/admin/import/class-import-aioseo-hooks.php create mode 100644 wp-content/plugins/wordpress-seo/admin/import/class-import-hooks.php create mode 100644 wp-content/plugins/wordpress-seo/admin/import/class-import-wpseo-hooks.php create mode 100644 wp-content/plugins/wordpress-seo/admin/index.php create mode 100644 wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-add-keyword-tab.php create mode 100644 wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-addon-section.php create mode 100644 wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-readability.php create mode 100644 wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-seo.php create mode 100644 wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-editor.php create mode 100644 wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-form-tab.php create mode 100644 wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-tab-section.php create mode 100644 wp-content/plugins/wordpress-seo/admin/metabox/class-metabox.php create mode 100644 wp-content/plugins/wordpress-seo/admin/metabox/interface-metabox-analysis.php create mode 100644 wp-content/plugins/wordpress-seo/admin/metabox/interface-metabox-section.php create mode 100644 wp-content/plugins/wordpress-seo/admin/metabox/interface-metabox-tab.php create mode 100644 wp-content/plugins/wordpress-seo/admin/onpage/class-onpage-option.php create mode 100644 wp-content/plugins/wordpress-seo/admin/onpage/class-onpage-request.php create mode 100644 wp-content/plugins/wordpress-seo/admin/onpage/class-onpage.php create mode 100644 wp-content/plugins/wordpress-seo/admin/pages/advanced.php create mode 100644 wp-content/plugins/wordpress-seo/admin/pages/dashboard.php create mode 100644 wp-content/plugins/wordpress-seo/admin/pages/licenses.php create mode 100644 wp-content/plugins/wordpress-seo/admin/pages/metas.php create mode 100644 wp-content/plugins/wordpress-seo/admin/pages/network.php create mode 100644 wp-content/plugins/wordpress-seo/admin/pages/social.php create mode 100644 wp-content/plugins/wordpress-seo/admin/pages/tools.php create mode 100644 wp-content/plugins/wordpress-seo/admin/pages/xml-sitemaps.php create mode 100644 wp-content/plugins/wordpress-seo/admin/recalculate/class-recalculate-posts.php create mode 100644 wp-content/plugins/wordpress-seo/admin/recalculate/class-recalculate-terms.php create mode 100644 wp-content/plugins/wordpress-seo/admin/recalculate/class-recalculate.php create mode 100644 wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-columns.php create mode 100644 wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-content-fields.php create mode 100644 wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields-presenter.php create mode 100644 wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields.php create mode 100644 wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-metabox.php create mode 100644 wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-settings-fields.php create mode 100644 wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-social-fields.php create mode 100644 wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/about.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/class-yoast-form-fieldset.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/class-yoast-input-select.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/dashboard-widget.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/form/fieldset.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/form/select.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/interface-yoast-form-element.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/js-templates-primary-term.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/partial-alerts-errors.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/partial-alerts-template.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/partial-alerts-warnings.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/partial-help-center-video.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/partial-settings-tab-video.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/advanced/breadcrumbs.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/advanced/permalinks.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/advanced/rss.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/dashboard.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/features.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/general.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/knowledge-graph.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/security.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/site-analysis.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/webmaster-tools.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/metas/archives.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/metas/general.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/metas/home.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/metas/other.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/metas/post-types.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/metas/taxonomies.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/exclude-post.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/general.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/post-types.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/taxonomies.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/user-sitemap.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/social/accounts.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/social/facebook.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/social/google.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/social/pinterest.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/social/twitterbox.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/tool/import-seo.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-export.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-import.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tool-bulk-editor.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tool-file-editor.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/tool-import-export.php create mode 100644 wp-content/plugins/wordpress-seo/admin/views/user-profile.php create mode 100644 wp-content/plugins/wordpress-seo/css/admin-global-370.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/admin-global-370.min.rapido.css create mode 100644 wp-content/plugins/wordpress-seo/css/adminbar-340.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/adminbar-340.min.rapido.css create mode 100644 wp-content/plugins/wordpress-seo/css/alerts-340.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/alerts-340.min.rapido.css create mode 100644 wp-content/plugins/wordpress-seo/css/dashboard-360.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/admin-global-370-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/admin-global-370-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/adminbar-340-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/adminbar-340-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/alerts-340-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/alerts-340-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/dashboard-360-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/dashboard-360-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/edit-page-330-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/edit-page-330-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/featured-image-330-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/featured-image-330-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/help-center-340-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/help-center-340-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/inside-editor-331-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/inside-editor-331-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/kb-search-350-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/kb-search-350-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/metabox-400-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/metabox-400-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/select2/select2.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/select2/select2.min.rapido.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/snippet-330-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/snippet-330-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/taxonomy-meta-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/taxonomy-meta-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/toggle-switch-390-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/toggle-switch-390-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-350-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-350-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/yoast-components-400-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/yoast-components-400-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-390-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-390-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-400-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-400-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-390-rtl.css create mode 100644 wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-390-rtl.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/edit-page-330.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/featured-image-330.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/help-center-340.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/help-center-340.min.rapido.css create mode 100644 wp-content/plugins/wordpress-seo/css/inside-editor-331.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/kb-search-350.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/kb-search-350.min.rapido.css create mode 100644 wp-content/plugins/wordpress-seo/css/metabox-400.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/metabox-400.min.rapido.css create mode 100644 wp-content/plugins/wordpress-seo/css/metabox-primary-category.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/snippet-330.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/taxonomy-meta.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/toggle-switch-390.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/toggle-switch-390.min.rapido.css create mode 100644 wp-content/plugins/wordpress-seo/css/wpseo-dismissible-350.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/wpseo-dismissible-350.min.rapido.css create mode 100644 wp-content/plugins/wordpress-seo/css/xml-sitemap-xsl.php create mode 100644 wp-content/plugins/wordpress-seo/css/yoast-components-400.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/yoast-extensions-390.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/yst_plugin_tools-400.min.css create mode 100644 wp-content/plugins/wordpress-seo/css/yst_plugin_tools-400.min.rapido.css create mode 100644 wp-content/plugins/wordpress-seo/css/yst_seo_score-390.min.css create mode 100644 wp-content/plugins/wordpress-seo/deprecated/class-onpage-email-presenter.php create mode 100644 wp-content/plugins/wordpress-seo/deprecated/class-onpage-notifier.php create mode 100644 wp-content/plugins/wordpress-seo/deprecated/class-snippet-preview.php create mode 100644 wp-content/plugins/wordpress-seo/deprecated/class-yoast-textstatistics.php create mode 100644 wp-content/plugins/wordpress-seo/frontend/class-breadcrumbs.php create mode 100644 wp-content/plugins/wordpress-seo/frontend/class-frontend.php create mode 100644 wp-content/plugins/wordpress-seo/frontend/class-googleplus.php create mode 100644 wp-content/plugins/wordpress-seo/frontend/class-json-ld.php create mode 100644 wp-content/plugins/wordpress-seo/frontend/class-opengraph.php create mode 100644 wp-content/plugins/wordpress-seo/frontend/class-primary-category.php create mode 100644 wp-content/plugins/wordpress-seo/frontend/class-twitter.php create mode 100644 wp-content/plugins/wordpress-seo/frontend/index.php create mode 100644 wp-content/plugins/wordpress-seo/images/Yoast_SEO_Icon.svg create mode 100644 wp-content/plugins/wordpress-seo/images/banner/basic-seo-training.png create mode 100644 wp-content/plugins/wordpress-seo/images/banner/configuration-service.png create mode 100644 wp-content/plugins/wordpress-seo/images/banner/keyword-research-training.png create mode 100644 wp-content/plugins/wordpress-seo/images/banner/local-seo-for-woocommerce.png create mode 100644 wp-content/plugins/wordpress-seo/images/banner/local-seo.png create mode 100644 wp-content/plugins/wordpress-seo/images/banner/news-seo.png create mode 100644 wp-content/plugins/wordpress-seo/images/banner/premium-seo.png create mode 100644 wp-content/plugins/wordpress-seo/images/banner/seo-care.png create mode 100644 wp-content/plugins/wordpress-seo/images/banner/seo-copywriting-training.png create mode 100644 wp-content/plugins/wordpress-seo/images/banner/video-seo.png create mode 100644 wp-content/plugins/wordpress-seo/images/banner/website-review.png create mode 100644 wp-content/plugins/wordpress-seo/images/banner/woocommerce-seo.png create mode 100644 wp-content/plugins/wordpress-seo/images/banner/yoast-seo-for-wordpress-training.png create mode 100644 wp-content/plugins/wordpress-seo/images/editicon.png create mode 100644 wp-content/plugins/wordpress-seo/images/extensions-local.png create mode 100644 wp-content/plugins/wordpress-seo/images/extensions-news.png create mode 100644 wp-content/plugins/wordpress-seo/images/extensions-premium-ribbon.png create mode 100644 wp-content/plugins/wordpress-seo/images/extensions-video.png create mode 100644 wp-content/plugins/wordpress-seo/images/extensions-woo.png create mode 100644 wp-content/plugins/wordpress-seo/images/index.php create mode 100644 wp-content/plugins/wordpress-seo/images/pinterest-23x30.png create mode 100644 wp-content/plugins/wordpress-seo/images/question-mark.png create mode 100644 wp-content/plugins/wordpress-seo/images/waiting.gif create mode 100644 wp-content/plugins/wordpress-seo/inc/class-rewrite.php create mode 100644 wp-content/plugins/wordpress-seo/inc/class-upgrade.php create mode 100644 wp-content/plugins/wordpress-seo/inc/class-wpseo-features.php create mode 100644 wp-content/plugins/wordpress-seo/inc/class-wpseo-installation.php create mode 100644 wp-content/plugins/wordpress-seo/inc/class-wpseo-meta.php create mode 100644 wp-content/plugins/wordpress-seo/inc/class-wpseo-primary-term.php create mode 100644 wp-content/plugins/wordpress-seo/inc/class-wpseo-rank.php create mode 100644 wp-content/plugins/wordpress-seo/inc/class-wpseo-replace-vars.php create mode 100644 wp-content/plugins/wordpress-seo/inc/class-wpseo-statistics.php create mode 100644 wp-content/plugins/wordpress-seo/inc/class-wpseo-utils.php create mode 100644 wp-content/plugins/wordpress-seo/inc/index.php create mode 100644 wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-internallinks.php create mode 100644 wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-ms.php create mode 100644 wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-permalinks.php create mode 100644 wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-rss.php create mode 100644 wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-social.php create mode 100644 wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-titles.php create mode 100644 wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-wpseo.php create mode 100644 wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-xml.php create mode 100644 wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option.php create mode 100644 wp-content/plugins/wordpress-seo/inc/options/class-wpseo-options.php create mode 100644 wp-content/plugins/wordpress-seo/inc/options/class-wpseo-taxonomy-meta.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/class-author-sitemap-provider.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/class-post-type-sitemap-provider.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-cache-data.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-image-parser.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-timezone.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-admin.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache-validator.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-renderer.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-router.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/class-taxonomy-sitemap-provider.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/interface-sitemap-cache-data.php create mode 100644 wp-content/plugins/wordpress-seo/inc/sitemaps/interface-sitemap-provider.php create mode 100644 wp-content/plugins/wordpress-seo/inc/wpseo-functions-deprecated.php create mode 100644 wp-content/plugins/wordpress-seo/inc/wpseo-functions.php create mode 100644 wp-content/plugins/wordpress-seo/inc/wpseo-non-ajax-functions.php create mode 100644 wp-content/plugins/wordpress-seo/index.php create mode 100644 wp-content/plugins/wordpress-seo/js/dist/configuration-wizard-400.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/jquery.tablesorter.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ar.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/az.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/bg.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ca.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/cs.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/da.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/de.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/el.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/en.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/es.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/et.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/eu.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/fa.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/fi.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/fr.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/gl.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/he.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/hi.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/hr.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/hu.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/id.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/is.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/it.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ja.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/km.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ko.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/lt.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/lv.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/mk.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ms.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/nb.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/nl.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/pl.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/pt-BR.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/pt.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ro.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ru.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sk.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sr-Cyrl.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sr.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sv.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/th.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/tr.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/uk.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/vi.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/zh-CN.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/i18n/zh-TW.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/select2/select2.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-admin-400.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-admin-global-390.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-admin-gsc-350.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-admin-media-350.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-bulk-editor-350.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-dismissible-350.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-featured-image-350.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-metabox-400.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-metabox-category-380.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-post-scraper-400.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-recalculate-400.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-replacevar-plugin-380.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-shortcode-plugin-350.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/dist/wp-seo-term-scraper-400.min.js create mode 100644 wp-content/plugins/wordpress-seo/js/index.php create mode 100644 wp-content/plugins/wordpress-seo/languages/index.php create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-bg_BG.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-bg_BG.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-ca.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-ca.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-cs_CZ.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-cs_CZ.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-cy.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-cy.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-da_DK.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-da_DK.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-de_DE.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-de_DE.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-en_AU.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-en_AU.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-en_CA.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-en_CA.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-en_GB.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-en_GB.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-es_ES.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-es_ES.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-es_MX.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-es_MX.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-eu.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-eu.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-fa_IR.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-fa_IR.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-fi.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-fi.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-fr_FR.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-fr_FR.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-he_IL.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-he_IL.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-hr.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-hr.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-id_ID.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-id_ID.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-it_IT.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-it_IT.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-ja.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-ja.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-nb_NO.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-nb_NO.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-nl_NL.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-nl_NL.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-pl_PL.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-pl_PL.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-pt_BR.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-pt_BR.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-pt_PT.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-pt_PT.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-ro_RO.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-ro_RO.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-ru_RU.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-ru_RU.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-sk_SK.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-sk_SK.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-sv_SE.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-sv_SE.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-tr_TR.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-tr_TR.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-zh_CN.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-zh_CN.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-zh_TW.json create mode 100644 wp-content/plugins/wordpress-seo/languages/wordpress-seo-zh_TW.mo create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-bg_BG.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-ca.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-da_DK.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-de_DE.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-en_AU.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-en_CA.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-en_GB.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-es_ES.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-es_MX.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-fa_IR.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-fi.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-fr_FR.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-he_IL.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-hr.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-id_ID.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-it_IT.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-ja.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-nb_NO.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-nl_NL.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-pl_PL.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-pt_BR.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-pt_PT.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-ru_RU.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-sk_SK.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-sv_SE.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components-tr_TR.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-components.php create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-seo-js.json create mode 100644 wp-content/plugins/wordpress-seo/languages/yoast-seo-js.php create mode 100644 wp-content/plugins/wordpress-seo/license.txt create mode 100644 wp-content/plugins/wordpress-seo/phpmd.xml create mode 100644 wp-content/plugins/wordpress-seo/readme.txt create mode 100644 wp-content/plugins/wordpress-seo/vendor/autoload.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/autoload_52.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/composer/ClassLoader.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/composer/ClassLoader52.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/composer/LICENSE create mode 100644 wp-content/plugins/wordpress-seo/vendor/composer/autoload_classmap.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/composer/autoload_namespaces.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/composer/autoload_psr4.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/composer/autoload_real.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/composer/autoload_real_52.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/xrstf/composer-php52/LICENSE create mode 100644 wp-content/plugins/wordpress-seo/vendor/xrstf/composer-php52/lib/xrstf/Composer52/AutoloadGenerator.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/xrstf/composer-php52/lib/xrstf/Composer52/ClassLoader.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/xrstf/composer-php52/lib/xrstf/Composer52/Generator.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/class-api-google-client.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/class-api-google.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/class-api-libs.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/Google_Client.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/auth/Google_AssertionCredentials.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/auth/Google_Auth.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/auth/Google_AuthNone.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/auth/Google_LoginTicket.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/auth/Google_OAuth2.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/auth/Google_P12Signer.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/auth/Google_PemVerifier.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/auth/Google_Signer.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/auth/Google_Verifier.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/cache/Google_Cache.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/cache/Google_WPCache.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/config.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/external/URITemplateParser.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/io/Google_CacheParser.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/io/Google_CurlIO.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/io/Google_HttpRequest.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/io/Google_IO.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/io/Google_REST.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/io/Google_WPIO.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/io/cacerts.pem create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/service/Google_BatchRequest.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/service/Google_MediaFileUpload.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/service/Google_Model.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/service/Google_Service.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/service/Google_ServiceResource.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/api-libs/google/service/Google_Utils.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/i18n-module/i18n-module.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/license-manager/CHANGELOG.md create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/license-manager/class-api-request.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/license-manager/class-license-manager.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/license-manager/class-plugin-license-manager.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/license-manager/class-plugin-update-manager.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/license-manager/class-product.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/license-manager/class-update-manager.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/license-manager/index.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/license-manager/views/form.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/license-manager/views/index.php create mode 100644 wp-content/plugins/wordpress-seo/vendor/yoast/license-manager/views/script.php create mode 100644 wp-content/plugins/wordpress-seo/wp-seo-main.php create mode 100644 wp-content/plugins/wordpress-seo/wp-seo.php create mode 100644 wp-content/plugins/wordpress-seo/wpml-config.xml diff --git a/includes/dependencies/less/lessc.inc.php b/includes/dependencies/less/lessc.inc.php index d5fbcd5..5a4c434 100644 --- a/includes/dependencies/less/lessc.inc.php +++ b/includes/dependencies/less/lessc.inc.php @@ -3529,9 +3529,11 @@ public function throwError($msg = "parse error", $count = null) { // TODO this depends on $this->count if ($this->peek("(.*?)(\n|$)", $m, $count)) { - throw new exception("$msg: failed at `$m[1]` $loc"); + error_log("$msg: failed at `$m[1]` $loc"); +// throw new exception("$msg: failed at `$m[1]` $loc"); } else { - throw new exception("$msg: $loc"); + error_log("$msg: $loc"); + //throw new exception("$msg: $loc"); } } diff --git a/wp-content/plugins/wordpress-seo/.babelrc b/wp-content/plugins/wordpress-seo/.babelrc new file mode 100644 index 0000000..4f654b8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/.babelrc @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-react-jsx"] +} diff --git a/wp-content/plugins/wordpress-seo/.csslintrc b/wp-content/plugins/wordpress-seo/.csslintrc new file mode 100644 index 0000000..aacba95 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/.csslintrc @@ -0,0 +1,2 @@ +--exclude-exts=.min.css +--ignore=adjoining-classes,box-model,ids,order-alphabetical,unqualified-attributes diff --git a/wp-content/plugins/wordpress-seo/.eslintignore b/wp-content/plugins/wordpress-seo/.eslintignore new file mode 100644 index 0000000..96212a3 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/.eslintignore @@ -0,0 +1 @@ +**/*{.,-}min.js diff --git a/wp-content/plugins/wordpress-seo/.eslintrc b/wp-content/plugins/wordpress-seo/.eslintrc new file mode 100644 index 0000000..d4c412e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/.eslintrc @@ -0,0 +1,9 @@ +extends: yoast + +rules: + complexity: [1, 6] + react/prop-types: 1 + camelcase: 1 + brace-style: 1 + max-len: 1 + max-statements: 1 diff --git a/wp-content/plugins/wordpress-seo/admin/ajax.php b/wp-content/plugins/wordpress-seo/admin/ajax.php new file mode 100644 index 0000000..9c94904 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/ajax.php @@ -0,0 +1,453 @@ +' . $file . '' + ); + } + } + + if ( is_dir( $file ) ) { + if ( ! @ rmdir( $file ) ) { + $errors[] = sprintf( + /* translators: %s expands to the directory path and name. */ + __( 'The directory %s could not be removed. Please remove it via FTP.', 'wordpress-seo' ), + '' . $file . '' + ); + } + } + } + } + + if ( $errors ) { + $message = implode( '
', $errors ); + wp_send_json_error( array( 'message' => $message ) ); + } + else { + $message = __( 'Files successfully removed.', 'wordpress-seo' ); + wp_send_json_success( array( 'message' => $message ) ); + } +} + +add_action( 'wp_ajax_wpseo_kill_blocking_files', 'wpseo_kill_blocking_files' ); + +/** + * Used in the editor to replace vars for the snippet preview + */ +function wpseo_ajax_replace_vars() { + global $post; + check_ajax_referer( 'wpseo-replace-vars' ); + + $post = get_post( intval( filter_input( INPUT_POST, 'post_id' ) ) ); + global $wp_query; + $wp_query->queried_object = $post; + $wp_query->queried_object_id = $post->ID; + $omit = array( 'excerpt', 'excerpt_only', 'title' ); + echo wpseo_replace_vars( stripslashes( filter_input( INPUT_POST, 'string' ) ), $post, $omit ); + die; +} + +add_action( 'wp_ajax_wpseo_replace_vars', 'wpseo_ajax_replace_vars' ); + +/** + * Save an individual SEO title from the Bulk Editor. + */ +function wpseo_save_title() { + wpseo_save_what( 'title' ); +} + +add_action( 'wp_ajax_wpseo_save_title', 'wpseo_save_title' ); + +/** + * Save an individual meta description from the Bulk Editor. + */ +function wpseo_save_description() { + wpseo_save_what( 'metadesc' ); +} + +add_action( 'wp_ajax_wpseo_save_metadesc', 'wpseo_save_description' ); + +/** + * Save titles & descriptions + * + * @param string $what Type of item to save (title, description). + */ +function wpseo_save_what( $what ) { + check_ajax_referer( 'wpseo-bulk-editor' ); + + $new = filter_input( INPUT_POST, 'new_value' ); + $post_id = intval( filter_input( INPUT_POST, 'wpseo_post_id' ) ); + $original = filter_input( INPUT_POST, 'existing_value' ); + + $results = wpseo_upsert_new( $what, $post_id, $new, $original ); + + wpseo_ajax_json_echo_die( $results ); +} + +/** + * Helper function to update a post's meta data, returning relevant information + * about the information updated and the results or the meta update. + * + * @param int $post_id Post ID. + * @param string $new_meta_value New meta value to record. + * @param string $orig_meta_value Original meta value. + * @param string $meta_key Meta key string. + * @param string $return_key Return key string to use in results. + * + * @return string + */ +function wpseo_upsert_meta( $post_id, $new_meta_value, $orig_meta_value, $meta_key, $return_key ) { + + $post_id = intval( $post_id ); + $sanitized_new_meta_value = wp_strip_all_tags( $new_meta_value ); + $orig_meta_value = wp_strip_all_tags( $orig_meta_value ); + + $upsert_results = array( + 'status' => 'success', + 'post_id' => $post_id, + "new_{$return_key}" => $sanitized_new_meta_value, + "original_{$return_key}" => $orig_meta_value, + ); + + $the_post = get_post( $post_id ); + if ( empty( $the_post ) ) { + + $upsert_results['status'] = 'failure'; + $upsert_results['results'] = __( 'Post doesn\'t exist.', 'wordpress-seo' ); + + return $upsert_results; + } + + $post_type_object = get_post_type_object( $the_post->post_type ); + if ( ! $post_type_object ) { + + $upsert_results['status'] = 'failure'; + $upsert_results['results'] = sprintf( __( 'Post has an invalid Post Type: %s.', 'wordpress-seo' ), $the_post->post_type ); + + return $upsert_results; + } + + if ( ! current_user_can( $post_type_object->cap->edit_posts ) ) { + + $upsert_results['status'] = 'failure'; + $upsert_results['results'] = sprintf( __( 'You can\'t edit %s.', 'wordpress-seo' ), $post_type_object->label ); + + return $upsert_results; + } + + if ( ! current_user_can( $post_type_object->cap->edit_others_posts ) && $the_post->post_author != get_current_user_id() ) { + + $upsert_results['status'] = 'failure'; + $upsert_results['results'] = sprintf( __( 'You can\'t edit %s that aren\'t yours.', 'wordpress-seo' ), $post_type_object->label ); + + return $upsert_results; + + } + + if ( $sanitized_new_meta_value === $orig_meta_value && $sanitized_new_meta_value !== $new_meta_value ) { + $upsert_results['status'] = 'failure'; + $upsert_results['results'] = __( 'You have used HTML in your value which is not allowed.', 'wordpress-seo' ); + + return $upsert_results; + } + + $res = update_post_meta( $post_id, $meta_key, $sanitized_new_meta_value ); + + $upsert_results['status'] = ( $res !== false ) ? 'success' : 'failure'; + $upsert_results['results'] = $res; + + return $upsert_results; +} + +/** + * Save all titles sent from the Bulk Editor. + */ +function wpseo_save_all_titles() { + wpseo_save_all( 'title' ); +} + +add_action( 'wp_ajax_wpseo_save_all_titles', 'wpseo_save_all_titles' ); + +/** + * Save all description sent from the Bulk Editor. + */ +function wpseo_save_all_descriptions() { + wpseo_save_all( 'metadesc' ); +} + +add_action( 'wp_ajax_wpseo_save_all_descriptions', 'wpseo_save_all_descriptions' ); + +/** + * Utility function to save values + * + * @param string $what Type of item so save. + */ +function wpseo_save_all( $what ) { + check_ajax_referer( 'wpseo-bulk-editor' ); + + // @todo the WPSEO Utils class can't filter arrays in POST yet. + $new_values = $_POST['items']; + $original_values = $_POST['existing_items']; + + $results = array(); + + if ( is_array( $new_values ) && $new_values !== array() ) { + foreach ( $new_values as $post_id => $new_value ) { + $original_value = $original_values[ $post_id ]; + $results[] = wpseo_upsert_new( $what, $post_id, $new_value, $original_value ); + } + } + wpseo_ajax_json_echo_die( $results ); +} + +/** + * Insert a new value + * + * @param string $what Item type (such as title). + * @param int $post_id Post ID. + * @param string $new New value to record. + * @param string $original Original value. + * + * @return string + */ +function wpseo_upsert_new( $what, $post_id, $new, $original ) { + $meta_key = WPSEO_Meta::$meta_prefix . $what; + + return wpseo_upsert_meta( $post_id, $new, $original, $meta_key, $what ); +} + +/** + * Handles the posting of a new FB admin. + */ +function wpseo_add_fb_admin() { + check_ajax_referer( 'wpseo_fb_admin_nonce' ); + + if ( ! current_user_can( 'manage_options' ) ) { + die( '-1' ); + } + + $facebook_social = new Yoast_Social_Facebook(); + + wp_die( $facebook_social->add_admin( filter_input( INPUT_POST, 'admin_name' ), filter_input( INPUT_POST, 'admin_id' ) ) ); +} + +add_action( 'wp_ajax_wpseo_add_fb_admin', 'wpseo_add_fb_admin' ); + +/** + * Retrieves the keyword for the keyword doubles. + */ +function ajax_get_keyword_usage() { + $post_id = filter_input( INPUT_POST, 'post_id' ); + $keyword = filter_input( INPUT_POST, 'keyword' ); + + if ( ! current_user_can( 'edit_post', $post_id ) ) { + die( '-1' ); + } + + wp_die( + wp_json_encode( WPSEO_Meta::keyword_usage( $keyword, $post_id ) ) + ); +} + +add_action( 'wp_ajax_get_focus_keyword_usage', 'ajax_get_keyword_usage' ); + +/** + * Retrieves the keyword for the keyword doubles of the termpages. + */ +function ajax_get_term_keyword_usage() { + $post_id = filter_input( INPUT_POST, 'post_id' ); + $keyword = filter_input( INPUT_POST, 'keyword' ); + $taxonomyName = filter_input( INPUT_POST, 'taxonomy' ); + + $taxonomy = get_taxonomy( $taxonomyName ); + + if ( ! $taxonomy ) { + wp_die( 0 ); + } + + if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) { + wp_die( -1 ); + } + + $usage = WPSEO_Taxonomy_Meta::get_keyword_usage( $keyword, $post_id, $taxonomyName ); + + // Normalize the result so it it the same as the post keyword usage AJAX request. + $usage = $usage[ $keyword ]; + + wp_die( + wp_json_encode( $usage ) + ); +} + +add_action( 'wp_ajax_get_term_keyword_usage', 'ajax_get_term_keyword_usage' ); + +/** + * Removes stopword from the sample permalink that is generated in an AJAX request + * + * @param array $permalink The permalink generated for this post by WordPress. + * @param int $post_ID The ID of the post. + * @param string $title The title for the post that the user used. + * @param string $name The name for the post that the user used. + * + * @return array + */ +function wpseo_remove_stopwords_sample_permalink( $permalink, $post_ID, $title, $name ) { + WPSEO_Options::get_instance(); + $options = WPSEO_Options::get_options( array( 'wpseo_permalinks' ) ); + if ( $options['cleanslugs'] !== true ) { + return $permalink; + } + + /* + * If the name is empty and the title is not, WordPress will generate a slug. In that case we want to remove stop + * words from the slug. + */ + if ( empty( $name ) && ! empty( $title ) ) { + $stop_words = new WPSEO_Admin_Stop_Words(); + + // The second element is the slug. + $permalink[1] = $stop_words->remove_in( $permalink[1] ); + } + + return $permalink; +} + +add_action( 'get_sample_permalink', 'wpseo_remove_stopwords_sample_permalink', 10, 4 ); + +// Crawl Issue Manager AJAX hooks. +new WPSEO_GSC_Ajax; + +// SEO Score Recalculations. +new WPSEO_Recalculate_Scores_Ajax; + +new Yoast_Dashboard_Widget(); + +new Yoast_OnPage_Ajax(); + +new WPSEO_Shortcode_Filter(); + +new WPSEO_Taxonomy_Columns(); + + +// Setting the notice for the recalculate the posts. +new Yoast_Dismissable_Notice_Ajax( 'recalculate', Yoast_Dismissable_Notice_Ajax::FOR_SITE ); + +/********************** DEPRECATED METHODS **********************/ + +/** + * Create an export and return the URL + * + * @deprecated 3.3.2 + */ +function wpseo_get_export() { + _deprecated_function( __METHOD__, 'WPSEO 3.3.2', 'This method is deprecated.' ); + + wpseo_ajax_json_echo_die( '' ); +} diff --git a/wp-content/plugins/wordpress-seo/admin/ajax/class-recalculate-scores-ajax.php b/wp-content/plugins/wordpress-seo/admin/ajax/class-recalculate-scores-ajax.php new file mode 100644 index 0000000..66f31b4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/ajax/class-recalculate-scores-ajax.php @@ -0,0 +1,119 @@ + $this->calculate_posts(), + 'terms' => $this->calculate_terms(), + ) + ) + ); + } + + /** + * Start recalculation + */ + public function recalculate_scores() { + check_ajax_referer( 'wpseo_recalculate', 'nonce' ); + + $fetch_object = $this->get_fetch_object(); + if ( ! empty( $fetch_object ) ) { + $paged = filter_input( INPUT_POST, 'paged', FILTER_VALIDATE_INT ); + $response = $fetch_object->get_items_to_recalculate( $paged ); + + if ( ! empty( $response ) ) { + wp_die( wp_json_encode( $response ) ); + } + } + + wp_die( '' ); + } + + /** + * Saves the new linkdex score for given post + */ + public function save_score() { + check_ajax_referer( 'wpseo_recalculate', 'nonce' ); + + $fetch_object = $this->get_fetch_object(); + if ( ! empty( $fetch_object ) ) { + $scores = filter_input( INPUT_POST, 'scores', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ); + $fetch_object->save_scores( $scores ); + } + + wp_die(); + } + + /** + * Returns the needed object for recalculating scores. + * + * @return WPSEO_Recalculate_Posts|WPSEO_Recalculate_Terms + */ + private function get_fetch_object() { + switch ( filter_input( INPUT_POST, 'type' ) ) { + case 'post': + return new WPSEO_Recalculate_Posts(); + case 'term': + return new WPSEO_Recalculate_Terms(); + } + + return null; + } + + /** + * Gets the total number of posts + * + * @return int + */ + private function calculate_posts() { + $count_posts_query = new WP_Query( + array( + 'post_type' => 'any', + 'meta_key' => '_yoast_wpseo_focuskw', + 'posts_per_page' => 1, + 'fields' => 'ids', + ) + ); + + return $count_posts_query->found_posts; + } + + /** + * Get the total number of terms + * + * @return int + */ + private function calculate_terms() { + $total = 0; + foreach ( get_taxonomies( array(), 'objects' ) as $taxonomy ) { + $total += wp_count_terms( $taxonomy->name, array( 'hide_empty' => false ) ); + } + + return $total; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/ajax/class-shortcode-filter.php b/wp-content/plugins/wordpress-seo/admin/ajax/class-shortcode-filter.php new file mode 100644 index 0000000..834001f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/ajax/class-shortcode-filter.php @@ -0,0 +1,39 @@ + $shortcode, + 'output' => do_shortcode( $shortcode ), + ); + } + + wp_die( wp_json_encode( $parsed_shortcodes ) ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-dismissable-notice.php b/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-dismissable-notice.php new file mode 100644 index 0000000..48fd916 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-dismissable-notice.php @@ -0,0 +1,69 @@ +notice_name = $notice_name; + $this->notice_type = $notice_type; + + add_action( 'wp_ajax_wpseo_dismiss_' . $notice_name, array( $this, 'dismiss_notice' ) ); + } + + /** + * Handles the dismiss notice request + */ + public function dismiss_notice() { + check_ajax_referer( 'wpseo-dismiss-' . $this->notice_name ); + + $this->save_dismissed(); + + wp_die( 'true' ); + } + + /** + * Storing the dismissed value in the database. The target location is based on the set notification type. + */ + private function save_dismissed() { + if ( $this->notice_type === self::FOR_SITE ) { + update_option( 'wpseo_dismiss_' . $this->notice_name, 1 ); + + return; + } + + if ( $this->notice_type === self::FOR_NETWORK ) { + update_site_option( 'wpseo_dismiss_' . $this->notice_name, 1 ); + + return; + } + + update_user_meta( get_current_user_id(), 'wpseo_dismiss_' . $this->notice_name, 1 ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-onpage-ajax.php b/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-onpage-ajax.php new file mode 100644 index 0000000..35f791f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-onpage-ajax.php @@ -0,0 +1,38 @@ +save_dismissed(); + + wp_die( 'true' ); + } + + /** + * Storing the dismissed value as an user option in the database + */ + private function save_dismissed() { + update_user_meta( get_current_user_id(), WPSEO_OnPage::USER_META_KEY, 1 ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-plugin-conflict-ajax.php b/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-plugin-conflict-ajax.php new file mode 100644 index 0000000..398beb2 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-plugin-conflict-ajax.php @@ -0,0 +1,105 @@ +dismissed_conflicts = $this->get_dismissed_conflicts( $conflict_data['section'] ); + + $this->compare_plugins( $conflict_data['plugins'] ); + + $this->save_dismissed_conflicts( $conflict_data['section'] ); + + wp_die( 'true' ); + } + + /** + * Getting the user option from the database + * + * @return bool|array + */ + private function get_dismissed_option() { + return get_user_meta( get_current_user_id(), $this->option_name, true ); + } + + /** + * Getting the dismissed conflicts from the database + * + * @param string $plugin_section Type of conflict group (such as Open Graph or sitemap). + * + * @return array + */ + private function get_dismissed_conflicts( $plugin_section ) { + $dismissed_conflicts = $this->get_dismissed_option(); + + if ( is_array( $dismissed_conflicts ) && array_key_exists( $plugin_section, $dismissed_conflicts ) ) { + return $dismissed_conflicts[ $plugin_section ]; + } + + return array(); + } + + /** + * Storing the conflicting plugins as an user option in the database + * + * @param string $plugin_section Plugin conflict type (such as Open Graph or sitemap). + */ + private function save_dismissed_conflicts( $plugin_section ) { + $dismissed_conflicts = $this->get_dismissed_option(); + + $dismissed_conflicts[ $plugin_section ] = $this->dismissed_conflicts; + + update_user_meta( get_current_user_id(), $this->option_name, $dismissed_conflicts ); + } + + /** + * Loop through the plugins to compare them with the already stored dismissed plugin conflicts + * + * @param array $posted_plugins Plugin set to check. + */ + public function compare_plugins( array $posted_plugins ) { + foreach ( $posted_plugins as $posted_plugin ) { + $this->compare_plugin( $posted_plugin ); + } + } + + /** + * Check if plugin is already dismissed, if not store it in the array that will be saved later + * + * @param string $posted_plugin Plugin to check against dismissed conflicts. + */ + private function compare_plugin( $posted_plugin ) { + if ( ! in_array( $posted_plugin, $this->dismissed_conflicts ) ) { + $this->dismissed_conflicts[] = $posted_plugin; + } + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-renderer.php b/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-renderer.php new file mode 100644 index 0000000..347b8f1 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-renderer.php @@ -0,0 +1,48 @@ +get_url() ) . '">'; + $output .= '' . esc_attr( $banner->get_alt() ) . ''; + $output .= ''; + + return $output; + } + + /** + * Sets the base path, where the images are located. + * + * @param string $base_path The image location. + */ + public function set_base_path( $base_path ) { + $this->base_path = $base_path; + } + + /** + * Returns the full path for the image. + * + * @param string $image The image path. + * + * @return string + */ + protected function get_image_path( $image ) { + return rtrim( $this->base_path, '/' ) . '/' . ltrim( $image, '/' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-sidebar-renderer.php b/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-sidebar-renderer.php new file mode 100644 index 0000000..93fef4a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-sidebar-renderer.php @@ -0,0 +1,60 @@ +spot_renderer = $spot_renderer; + } + + /** + * Renders the admin banner sidebar. + * + * @param WPSEO_Admin_Banner_Sidebar $banner_sidebar The sidebar to render. + * + * @return string + */ + public function render( WPSEO_Admin_Banner_Sidebar $banner_sidebar ) { + return sprintf( ' + ', + $banner_sidebar->get_title(), + $this->render_banner_spots( $banner_sidebar->get_banner_spots() ) + ); + } + + /** + * Renders the admin banner spots. + * + * @param WPSEO_Admin_Banner_Spot[] $banner_spots The banner spots to render. + * + * @return string + */ + protected function render_banner_spots( array $banner_spots ) { + $return = ''; + foreach ( $banner_spots as $banner_spot ) { + $return .= $this->spot_renderer->render( $banner_spot ); + } + + return $return; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-sidebar.php b/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-sidebar.php new file mode 100644 index 0000000..a2fe82a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-sidebar.php @@ -0,0 +1,356 @@ +title = $title; + $this->banner_renderer = $banner_renderer; + } + + /** + * Returns the set title. + * + * @return string + */ + public function get_title() { + return $this->title; + } + + /** + * Initializes the banner sidebar by setting its banner spots. + * + * @param WPSEO_Features $features Class regarding WPSEO Features. + */ + public function initialize( WPSEO_Features $features ) { + if ( $features->is_free() ) { + $this->add_banner_spot( $this->get_premium_spot() ); + } + + $this->add_banner_spot( $this->get_services_spot() ); + + $extensions_spot = $this->get_extensions_spot( $this->get_active_extensions() ); + if ( $extensions_spot->has_banners() ) { + $this->add_banner_spot( $extensions_spot ); + } + + $this->add_banner_spot( $this->get_courses_spot() ); + $this->add_banner_spot( $this->get_remove_banner_spot() ); + } + + /** + * Returns array with bannerspots. + * + * @return WPSEO_Admin_Banner_Spot[] + */ + public function get_banner_spots() { + return $this->banner_spots; + } + + /** + * Adds a banner spot. + * + * @param WPSEO_Admin_Banner_Spot $spot The spot to add. + */ + protected function add_banner_spot( WPSEO_Admin_Banner_Spot $spot ) { + $this->banner_spots[] = $spot; + } + + /** + * Returns the premium banner spot. + * + * @return WPSEO_Admin_Banner_Spot + */ + protected function get_premium_spot() { + $premium_spot = new WPSEO_Admin_Banner_Spot( __( 'Premium', 'wordpress-seo' ), $this->banner_renderer ); + + $premium_spot->set_description( + sprintf( + /* translators: %1$s expands to a link start tag to the Yoast plugin page, %2$s is the link closing tag */ + __( 'Want to get the most out of your SEO-strategy? %1$sGo premium!%2$s.', 'wordpress-seo' ), + '', + '' + ) + ); + + $premium_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoa.st/jj', + 'premium-seo.png', + 261, + 152, + sprintf( + /* translators: %1$s expands to Yoast SEO Premium. */ + __( 'Buy the %1$s plugin now and get access to extra features and 24/7 support!', 'wordpress-seo' ), + 'Yoast SEO Premium' + ) + ) + ); + + return $premium_spot; + } + + /** + * Returns the services banner spot. + * + * @return WPSEO_Admin_Banner_Spot + */ + protected function get_services_spot() { + $service_spot = new WPSEO_Admin_Banner_Spot( __( 'Services', 'wordpress-seo' ), $this->banner_renderer ); + + $service_spot->set_description( + sprintf( + /* translators: %1$s expands to a link start tag to the Yoast Services page, %2$s to Yoast, %3$s is the link closing tag. */ + __( 'Do you want to know how to improve your rankings? %1$sLet team %2$s help you!%3$s', 'wordpress-seo' ), + '', + 'Yoast', + '' + ) + ); + + $service_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoa.st/jl', + 'website-review.png', + 261, + 152, + __( 'Order a Website Review and we will tell you what to improve to attract more visitors!', 'wordpress-seo' ) + ) + ); + + $service_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoa.st/jm', + 'configuration-service.png', + 261, + 152, + sprintf( + /* translators: %1$s expands to Yoast SEO Premium. */ + __( 'Let our experts set up your %1$s plugin!', 'wordpress-seo' ), + 'Yoast SEO Premium' + ) + ) + ); + + $service_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoa.st/seo-care-banner', + 'seo-care.png', + 261, + 152, + sprintf( + /* translators: %1$s expands to Yoast SEO Care. */ + __( 'Let us help you take care of the SEO of your website. Order %1$s now!', 'wordpress-seo' ), + 'Yoast SEO Care' + ) + ) + ); + + return $service_spot; + } + + /** + * Returns an array with the Yoast SEO extensions with the value true when they are active. + * + * @return array + */ + protected function get_active_extensions() { + return array( + 'video' => class_exists( 'wpseo_Video_Sitemap' ), + 'woocommerce' => class_exists( 'Woocommerce' ) && class_exists( 'Yoast_WooCommerce_SEO' ), + 'news' => class_exists( 'WPSEO_News' ), + 'local' => defined( 'WPSEO_LOCAL_VERSION' ), + ); + } + + /** + * Returns the extensions banner spot. + * + * @param array $active_extensions The active extensions. + * + * @return WPSEO_Admin_Banner_Spot + */ + protected function get_extensions_spot( array $active_extensions ) { + $extension_spot = new WPSEO_Admin_Banner_Spot( __( 'Extensions', 'wordpress-seo' ), $this->banner_renderer ); + + $extension_spot->set_description( + sprintf( + /* translators: %1$s expands to a link start tag to the Yoast plugin page, %2$s is the link closing tag. */ + __( 'Take your SEO to the next level and outrank your competition with our %1$sSEO plugins%2$s.', 'wordpress-seo' ), + '', + '' + ) + ); + + if ( empty( $active_extensions['video'] ) ) { + $extension_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoa.st/jo', + 'video-seo.png', + 261, + 152, + sprintf( + /* translators: %1$s expands to Yoast Video SEO. */ + __( 'Buy the %1$s plugin now and optimize your videos for video search results and social media!', 'wordpress-seo' ), + 'Yoast Video SEO' + ) + ) + ); + } + + if ( empty( $active_extensions['woocommerce'] ) ) { + $extension_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoa.st/jp', + 'woocommerce-seo.png', + 261, + 152, + sprintf( + /* translators: %1$s expands to Yoast WooCommerce SEO. */ + __( 'Buy the %1$s plugin now and optimize your shop today to improve your product promotion!', 'wordpress-seo' ), + 'Yoast WooCommerce SEO' + ) + ) + ); + } + + if ( empty( $active_extensions['local'] ) ) { + $extension_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoa.st/jq', + 'local-seo.png', 261, + 152, + sprintf( + /* translators: %1$s expands to Yoast Local SEO. */ + __( 'Buy the %1$s plugin now to improve your site’s Local SEO and ranking in Google Maps!', 'wordpress-seo' ), + 'Yoast Local SEO' + ) + ) + ); + } + + if ( empty( $active_extensions['news'] ) ) { + $extension_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoa.st/jr', + 'news-seo.png', + 261, + 152, + sprintf( + /* translators: %1$s expands to Yoast News SEO. */ + __( 'Buy the %1$s plugin now and start optimizing to get your site featured in Google News!', 'wordpress-seo' ), + 'Yoast News SEO' + ) + ) + ); + } + + return $extension_spot; + } + + /** + * Returns the courses banner spot. + * + * @return WPSEO_Admin_Banner_Spot + */ + protected function get_courses_spot() { + $courses_spot = new WPSEO_Admin_Banner_Spot( __( 'Courses', 'wordpress-seo' ), $this->banner_renderer ); + + $courses_spot->set_description( + sprintf( + /* translators: %1$s expands to a link start tag to the Yoast Services page, %2$s is the link closing tag. */ + __( 'Do you want to get a grip on your own SEO-strategy? Learn all about it in one of %1$sour courses%2$s.', 'wordpress-seo' ), + '', + '' + ) + ); + + $courses_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoa.st/ju', + 'basic-seo-training.png', + 261, + 152, + __( 'Take the online Basic SEO Training course and learn the fundamentals of SEO!', 'wordpress-seo' ) + ) + ); + + $courses_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoa.st/jv', + 'yoast-seo-for-wordpress-training.png', + 261, + 152, + /* translators: %1$s expands to Yoast SEO for WordPress Training, %2$s to Yoast SEO for WordPress. */ + sprintf( + __( 'Take the %s course and become a certified %2$s expert!', 'wordpress-seo' ), + 'Yoast SEO for WordPress Training', + 'Yoast SEO for WordPress' + ) + ) + ); + + $courses_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoa.st/jw', + 'seo-copywriting-training.png', + 261, + 152, + __( 'Take the online SEO Copywriting Training course and learn how to write awesome copy that ranks!', 'wordpress-seo' ) + ) + ); + + $courses_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoa.st/jx', + 'keyword-research-training.png', + 261, + 152, + __( 'Take the online Keyword Research Training course and learn how to rank with your keywords!', 'wordpress-seo' ) + ) + ); + + return $courses_spot; + } + + /** + * Returns the remove banner spot. + * + * @return WPSEO_Admin_Banner_Spot + */ + protected function get_remove_banner_spot() { + + $remove_banner_spot = new WPSEO_Admin_Banner_Spot( + __( 'Remove these ads?', 'wordpress-seo' ) + ); + + $remove_banner_spot->set_description( + ''. + /* translators: %1$s expands to Yoast SEO Premium */ + sprintf( __( 'Upgrade to %1$s »', 'wordpress-seo' ), 'Yoast SEO Premium' ) . + '' + ); + + return $remove_banner_spot; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-spot-renderer.php b/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-spot-renderer.php new file mode 100644 index 0000000..7acf81d --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-spot-renderer.php @@ -0,0 +1,30 @@ +' . $banner_spot->get_title() . ''; + + if ( $banner_spot->get_description() !== '' ) { + $output .= '

' . $banner_spot->get_description() . '

'; + } + + $output .= $banner_spot->render_banner(); + $output .= ''; + + return $output; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-spot.php b/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-spot.php new file mode 100644 index 0000000..f7af825 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner-spot.php @@ -0,0 +1,97 @@ +title = $title; + $this->banner_renderer = ( is_null( $banner_renderer ) ? new WPSEO_Admin_Banner_Renderer() : $banner_renderer ); + } + + /** + * Returns the title. + * + * @return string + */ + public function get_title() { + return $this->title; + } + + /** + * Returns the description. + * + * @return string + */ + public function get_description() { + return $this->description; + } + + /** + * Sets the description + * + * @param string $description The description. + */ + public function set_description( $description ) { + $this->description = $description; + } + + /** + * Adds an admin banner. + * + * @param WPSEO_Admin_Banner $banner The banner to add. + */ + public function add_banner( WPSEO_Admin_Banner $banner ) { + $this->banners[] = $banner; + } + + /** + * Renders the banner. + * + * @return string + */ + public function render_banner() { + if ( ! $this->has_banners() ) { + return ''; + } + + return $this->banner_renderer->render( $this->get_random_banner() ); + } + + /** + * Checks if there are any banners set. + * + * @return bool + */ + public function has_banners() { + return ! empty( $this->banners ); + } + + /** + * Returns a random banner. + * + * @return null|WPSEO_Admin_Banner + */ + protected function get_random_banner() { + return $this->banners[ array_rand( $this->banners, 1 ) ]; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner.php b/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner.php new file mode 100644 index 0000000..d179c42 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/banner/class-admin-banner.php @@ -0,0 +1,87 @@ +url = $url; + $this->image = $image; + $this->alt = $alt; + $this->width = $width; + $this->height = $height; + } + + /** + * Returns the set url. + * + * @return string + */ + public function get_url() { + return $this->url; + } + + /** + * Returns the image. + * + * @return string + */ + public function get_image() { + return $this->image; + } + + /** + * Returns the alt-text. + * + * @return string + */ + public function get_alt() { + return $this->alt; + } + + /** + * Returns the width. + * + * @return string + */ + public function get_width() { + return $this->width; + } + + /** + * Returns the height. + * + * @return string + */ + public function get_height() { + return $this->height; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-admin-asset-manager.php b/wp-content/plugins/wordpress-seo/admin/class-admin-asset-manager.php new file mode 100644 index 0000000..cca1b15 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-admin-asset-manager.php @@ -0,0 +1,350 @@ +get_name(), + $script->get_url( WPSEO_Admin_Asset::TYPE_JS, WPSEO_FILE ), + $script->get_deps(), + $script->get_version(), + $script->is_in_footer() + ); + } + + /** + * Registers styles based on it's parameters. + * + * @param WPSEO_Admin_Asset $style The style to register. + */ + public function register_style( WPSEO_Admin_Asset $style ) { + wp_register_style( + self::PREFIX . $style->get_name(), + $style->get_url( WPSEO_Admin_Asset::TYPE_CSS, WPSEO_FILE ), + $style->get_deps(), + $style->get_version(), + $style->get_media() + ); + } + + /** + * Calls the functions that register scripts and styles with the scripts and styles to be registered as arguments. + */ + public function register_assets() { + $this->register_scripts( $this->scripts_to_be_registered() ); + $this->register_styles( $this->styles_to_be_registered() ); + } + + /** + * Registers all the scripts passed to it. + * + * @param array $scripts The scripts passed to it. + */ + public function register_scripts( $scripts ) { + foreach ( $scripts as $script ) { + $script = new WPSEO_Admin_Asset( $script ); + $this->register_script( $script ); + } + } + + /** + * Registers all the styles it recieves. + * + * @param array $styles Styles that need to be registerd. + */ + public function register_styles( $styles ) { + foreach ( $styles as $style ) { + $style = new WPSEO_Admin_Asset( $style ); + $this->register_style( $style ); + } + } + + /** + * A list of styles that shouldn't be registered but are needed in other locations in the plugin. + * + * @return array + */ + public function special_styles() { + return array( + 'inside-editor' => new WPSEO_Admin_Asset( array( + 'name' => 'inside-editor', + 'src' => 'inside-editor-331', + ) ), + ); + } + + /** + * Returns the scripts that need to be registered. + * + * @TODO data format is not self-documenting. Needs explanation inline. R. + * + * @return array scripts that need to be registered. + */ + private function scripts_to_be_registered() { + + $select2_language = 'en'; + $locale = WPSEO_Utils::get_user_locale(); + $language = WPSEO_Utils::get_language( $locale ); + + if ( file_exists( WPSEO_PATH . "js/dist/select2/i18n/{$locale}.js" ) ) { + $select2_language = $locale; // Chinese and some others use full locale. + } + elseif ( file_exists( WPSEO_PATH . "js/dist/select2/i18n/{$language}.js" ) ) { + $select2_language = $language; + } + + return array( + array( + 'name' => 'admin-script', + 'src' => 'wp-seo-admin-400', + 'deps' => array( + 'jquery', + 'jquery-ui-core', + 'jquery-ui-progressbar', + self::PREFIX . 'select2', + self::PREFIX . 'select2-translations', + ), + ), + array( + 'name' => 'admin-media', + 'src' => 'wp-seo-admin-media-350', + 'deps' => array( + 'jquery', + 'jquery-ui-core', + ), + ), + array( + 'name' => 'bulk-editor', + 'src' => 'wp-seo-bulk-editor-350', + 'deps' => array( 'jquery' ), + ), + array( + 'name' => 'dismissible', + 'src' => 'wp-seo-dismissible-350', + 'deps' => array( 'jquery' ), + ), + array( + 'name' => 'admin-global-script', + 'src' => 'wp-seo-admin-global-390', + 'deps' => array( 'jquery' ), + ), + array( + 'name' => 'metabox', + 'src' => 'wp-seo-metabox-400', + 'deps' => array( + 'jquery', + 'jquery-ui-core', + 'jquery-ui-autocomplete', + self::PREFIX . 'select2', + self::PREFIX . 'select2-translations', + ), + 'in_footer' => false, + ), + array( + 'name' => 'featured-image', + 'src' => 'wp-seo-featured-image-350', + 'deps' => array( + 'jquery' + ), + ), + array( + 'name' => 'admin-gsc', + 'src' => 'wp-seo-admin-gsc-350', + 'deps' => array(), + 'in_footer' => false, + ), + array( + 'name' => 'post-scraper', + 'src' => 'wp-seo-post-scraper-400', + 'deps' => array( + self::PREFIX . 'replacevar-plugin', + self::PREFIX . 'shortcode-plugin', + 'wp-util', + ), + ), + array( + 'name' => 'term-scraper', + 'src' => 'wp-seo-term-scraper-400', + 'deps' => array( + self::PREFIX . 'replacevar-plugin', + ), + ), + array( + 'name' => 'replacevar-plugin', + 'src' => 'wp-seo-replacevar-plugin-380', + ), + array( + 'name' => 'shortcode-plugin', + 'src' => 'wp-seo-shortcode-plugin-350', + ), + array( + 'name' => 'recalculate', + 'src' => 'wp-seo-recalculate-400', + 'deps' => array( + 'jquery', + 'jquery-ui-core', + 'jquery-ui-progressbar', + ), + ), + array( + 'name' => 'primary-category', + 'src' => 'wp-seo-metabox-category-380', + 'deps' => array( + 'jquery', + 'wp-util', + ), + ), + array( + 'name' => 'select2', + 'src' => 'select2/select2', + 'suffix' => '.min', + 'deps' => array( + 'jquery', + ), + 'version' => '4.0.3', + ), + array( + 'name' => 'select2-translations', + 'src' => 'select2/i18n/' . $select2_language, + 'deps' => array( + 'jquery', + self::PREFIX . 'select2', + ), + 'version' => '4.0.3', + 'suffix' => '', + ), + array( + 'name' => 'configuration-wizard', + 'src' => 'configuration-wizard-400', + 'deps' => array( + 'jquery', + ), + ), + ); + } + + /** + * 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. + */ + private function styles_to_be_registered() { + return array( + array( + 'name' => 'admin-css', + 'src' => 'yst_plugin_tools-400', + 'deps' => array( self::PREFIX . 'toggle-switch' ), + ), + array( + 'name' => 'toggle-switch', + 'src' => 'toggle-switch-390', + ), + array( + 'name' => 'dismissible', + 'src' => 'wpseo-dismissible-350', + ), + array( + 'name' => 'alerts', + 'src' => 'alerts-340', + ), + array( + 'name' => 'edit-page', + 'src' => 'edit-page-330', + ), + array( + 'name' => 'featured-image', + 'src' => 'featured-image-330', + ), + array( + 'name' => 'metabox-css', + 'src' => 'metabox-400', + 'deps' => array( + self::PREFIX . 'select2', + ), + ), + array( + 'name' => 'wp-dashboard', + 'src' => 'dashboard-360', + ), + array( + 'name' => 'scoring', + 'src' => 'yst_seo_score-390', + ), + array( + 'name' => 'snippet', + 'src' => 'snippet-330', + ), + array( + 'name' => 'adminbar', + 'src' => 'adminbar-340', + ), + array( + 'name' => 'primary-category', + 'src' => 'metabox-primary-category', + ), + array( + 'name' => 'select2', + 'src' => 'dist/select2/select2', + 'suffix' => '.min', + 'version' => '4.0.1', + 'rtl' => false, + ), + array( + 'name' => 'kb-search', + 'src' => 'kb-search-350', + ), + array( + 'name' => 'help-center', + 'src' => 'help-center-340', + ), + array( + 'name' => 'admin-global', + 'src' => 'admin-global-370', + ), + array( + 'name' => 'yoast-components', + 'src' => 'yoast-components-400', + ), + array( + 'name' => 'extensions', + 'src' => 'yoast-extensions-390', + ), + ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-admin-help-panel.php b/wp-content/plugins/wordpress-seo/admin/class-admin-help-panel.php new file mode 100644 index 0000000..74550e4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-admin-help-panel.php @@ -0,0 +1,91 @@ +id = $id; + $this->help_button_text = $help_button_text; + $this->help_content = $help_content; + $this->wrapper = $wrapper; + } + + /** + * Returns the html for the Help Button. + * + * @return string + */ + public function get_button_html() { + + if ( ! $this->id || ! $this->help_button_text || ! $this->help_content ) { + return ''; + } + + return sprintf( + ' ', + esc_attr( $this->id ), + $this->help_button_text + ); + } + + /** + * Returns the html for the Help Panel. + * + * @return string + */ + public function get_panel_html() { + + if ( ! $this->id || ! $this->help_button_text || ! $this->help_content ) { + return ''; + } + + $wrapper_start = $wrapper_end = ''; + + if ( 'has-wrapper' === $this->wrapper ) { + $wrapper_start = '
'; + $wrapper_end = '
'; + } + + return sprintf( + '%1$s

%3$s

%4$s', + $wrapper_start, + esc_attr( $this->id ), + $this->help_content, + $wrapper_end + ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-admin-init.php b/wp-content/plugins/wordpress-seo/admin/class-admin-init.php new file mode 100644 index 0000000..8946ca0 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-admin-init.php @@ -0,0 +1,547 @@ +options = WPSEO_Options::get_option( 'wpseo_xml' ); + + $GLOBALS['wpseo_admin'] = new WPSEO_Admin; + + $this->pagenow = $GLOBALS['pagenow']; + + $this->asset_manager = new WPSEO_Admin_Asset_Manager(); + + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_dismissible' ) ); + add_action( 'admin_init', array( $this, 'tagline_notice' ), 15 ); + add_action( 'admin_init', array( $this, 'blog_public_notice' ), 15 ); + add_action( 'admin_init', array( $this, 'permalink_notice' ), 15 ); + add_action( 'admin_init', array( $this, 'page_comments_notice' ), 15 ); + add_action( 'admin_init', array( $this, 'ga_compatibility_notice' ), 15 ); + add_action( 'admin_init', array( $this, 'yoast_plugin_compatibility_notification' ), 15 ); + add_action( 'admin_init', array( $this, 'recalculate_notice' ), 15 ); + add_action( 'admin_init', array( $this->asset_manager, 'register_assets' ) ); + add_action( 'admin_init', array( $this, 'show_hook_deprecation_warnings' ) ); + add_action( 'admin_init', array( 'WPSEO_Plugin_Conflict', 'hook_check_for_plugin_conflicts' ) ); + + $this->load_meta_boxes(); + $this->load_taxonomy_class(); + $this->load_admin_page_class(); + $this->load_admin_user_class(); + $this->load_xml_sitemaps_admin(); + } + + /** + * Enqueue our styling for dismissible yoast notifications. + */ + public function enqueue_dismissible() { + $this->asset_manager->enqueue_style( 'dismissible' ); + } + + /** + * Helper to verify if the current user has already seen the about page for the current version + * + * @return bool + */ + private function seen_about() { + $seen_about_version = substr( get_user_meta( get_current_user_id(), 'wpseo_seen_about_version', true ), 0, 3 ); + $last_minor_version = substr( WPSEO_VERSION, 0, 3 ); + + return version_compare( $seen_about_version, $last_minor_version, '>=' ); + } + + /** + * Notify about the default tagline if the user hasn't changed it + */ + public function tagline_notice() { + + $current_url = ( is_ssl() ? 'https://' : 'http://' ); + $current_url .= sanitize_text_field( $_SERVER['SERVER_NAME'] ) . sanitize_text_field( $_SERVER['REQUEST_URI'] ); + $customize_url = add_query_arg( array( + 'url' => urlencode( $current_url ), + ), wp_customize_url() ); + + $info_message = sprintf( + __( 'You still have the default WordPress tagline, even an empty one is probably better. %1$sYou can fix this in the customizer%2$s.', 'wordpress-seo' ), + '', + '' + ); + + $notification_options = array( + 'type' => Yoast_Notification::ERROR, + 'id' => 'wpseo-dismiss-tagline-notice', + 'capabilities' => 'manage_options', + ); + + $tagline_notification = new Yoast_Notification( $info_message, $notification_options ); + + $notification_center = Yoast_Notification_Center::get(); + if ( $this->has_default_tagline() ) { + $notification_center->add_notification( $tagline_notification ); + } + else { + $notification_center->remove_notification( $tagline_notification ); + } + } + + /** + * Add an alert if the blog is not publicly visible + */ + public function blog_public_notice() { + + $info_message = '' . __( 'Huge SEO Issue: You\'re blocking access to robots.', 'wordpress-seo' ) . ' '; + $info_message .= sprintf( + /* translators: %1$s resolves to the opening tag of the link to the reading settings, %1$s resolves to the closing tag for the link */ + __( 'You must %1$sgo to your Reading Settings%2$s and uncheck the box for Search Engine Visibility.', 'wordpress-seo' ), + '', + '' + ); + + $notification_options = array( + 'type' => Yoast_Notification::ERROR, + 'id' => 'wpseo-dismiss-blog-public-notice', + 'priority' => 1.0, + 'capabilities' => 'manage_options', + ); + + $notification = new Yoast_Notification( $info_message, $notification_options ); + + $notification_center = Yoast_Notification_Center::get(); + if ( ! $this->is_blog_public() ) { + $notification_center->add_notification( $notification ); + } + else { + $notification_center->remove_notification( $notification ); + } + } + + /** + * Display notice to disable comment pagination + */ + public function page_comments_notice() { + + $info_message = __( 'Paging comments is enabled, this is not needed in 999 out of 1000 cases, we recommend to disable it.', 'wordpress-seo' ); + $info_message .= '
'; + + /* translators: %1$s resolves to the opening tag of the link to the comment setting page, %2$s resolves to the closing tag of the link */ + $info_message .= sprintf( + __( 'Simply uncheck the box before "Break comments into pages..." on the %1$sComment settings page%2$s.', 'wordpress-seo' ), + '', + '' + ); + + $notification_options = array( + 'type' => Yoast_Notification::WARNING, + 'id' => 'wpseo-dismiss-page_comments-notice', + 'capabilities' => 'manage_options', + ); + + $tagline_notification = new Yoast_Notification( $info_message, $notification_options ); + + $notification_center = Yoast_Notification_Center::get(); + if ( $this->has_page_comments() ) { + $notification_center->add_notification( $tagline_notification ); + } + else { + $notification_center->remove_notification( $tagline_notification ); + } + } + + /** + * Returns whether or not the site has the default tagline + * + * @return bool + */ + public function has_default_tagline() { + $blog_description = get_bloginfo( 'description' ); + $default_blog_description = 'Just another WordPress site'; + return __( $default_blog_description ) === $blog_description || $default_blog_description === $blog_description; + } + + /** + * Show alert when the permalink doesn't contain %postname% + */ + public function permalink_notice() { + + $info_message = __( 'You do not have your postname in the URL of your posts and pages, it is highly recommended that you do. Consider setting your permalink structure to /%postname%/.', 'wordpress-seo' ); + $info_message .= '
'; + $info_message .= sprintf( + /* translators: %1$s resolves to the starting tag of the link to the permalink settings page, %2$s resolves to the closing tag of the link */ + __( 'You can fix this on the %1$sPermalink settings page%2$s.', 'wordpress-seo' ), + '', + '' + ); + + $notification_options = array( + 'type' => Yoast_Notification::WARNING, + 'id' => 'wpseo-dismiss-permalink-notice', + 'capabilities' => 'manage_options', + 'priority' => 0.8, + ); + + $notification = new Yoast_Notification( $info_message, $notification_options ); + + $notification_center = Yoast_Notification_Center::get(); + if ( ! $this->has_postname_in_permalink() ) { + $notification_center->add_notification( $notification ); + } + else { + $notification_center->remove_notification( $notification ); + } + } + + /** + * Are page comments enabled + * + * @return bool + */ + public function has_page_comments() { + return '1' === get_option( 'page_comments' ); + } + + /** + * Shows a notice to the user if they have Google Analytics for WordPress 5.4.3 installed because it causes an error + * on the google search console page. + */ + public function ga_compatibility_notice() { + + $notification = $this->get_compatibility_notification(); + $notification_center = Yoast_Notification_Center::get(); + + if ( defined( 'GAWP_VERSION' ) && '5.4.3' === GAWP_VERSION ) { + $notification_center->add_notification( $notification ); + } + else { + $notification_center->remove_notification( $notification ); + } + } + + /** + * Build compatibility problem notification + * + * @return Yoast_Notification + */ + private function get_compatibility_notification() { + $info_message = sprintf( + /* translators: %1$s expands to Yoast SEO, %2$s expands to 5.4.3, %3$s expands to Google Analytics by Yoast */ + __( '%1$s detected you are using version %2$s of %3$s, please update to the latest version to prevent compatibility issues.', 'wordpress-seo' ), + 'Yoast SEO', + '5.4.3', + 'Google Analytics by Yoast' + ); + + return new Yoast_Notification( + $info_message, + array( + 'id' => 'gawp-compatibility-notice', + 'type' => Yoast_Notification::ERROR, + ) + ); + } + + /** + * Add an alert if outdated versions of Yoast SEO plugins are running. + */ + public function yoast_plugin_compatibility_notification() { + $compatibility_checker = new WPSEO_Plugin_Compatibility( WPSEO_VERSION ); + $plugins = $compatibility_checker->get_installed_plugins_compatibility(); + + $notification_center = Yoast_Notification_Center::get(); + + foreach ( $plugins as $name => $plugin ) { + $type = ( $plugin['active'] ) ? Yoast_Notification::ERROR : Yoast_Notification::WARNING; + $notification = $this->get_yoast_seo_compatibility_notification( $name, $plugin, $type ); + + if ( $plugin['compatible'] === false ) { + $notification_center->add_notification( $notification ); + } + else { + $notification_center->remove_notification( $notification ); + } + } + } + + /** + * Build Yoast SEO compatibility problem notification + * + * @param string $name The plugin name to use for the unique ID. + * @param array $plugin The plugin to retrieve the data from. + * @param string $level The severity level to use for the notification. + * + * @return Yoast_Notification + */ + private function get_yoast_seo_compatibility_notification( $name, $plugin, $level = Yoast_Notification::WARNING ) { + $info_message = sprintf( + /* translators: %1$s expands to Yoast SEO, %2$s expands to the plugin version, %3$s expands to the plugin name */ + __( '%1$s detected you are using version %2$s of %3$s, please update to the latest version to prevent compatibility issues.', 'wordpress-seo' ), + 'Yoast SEO', + $plugin['version'], + $plugin['title'] + ); + + return new Yoast_Notification( + $info_message, + array( + 'id' => 'wpseo-outdated-yoast-seo-plugin-' . $name, + 'type' => $level, + ) + ); + } + + /** + * Shows the notice for recalculating the post. the Notice will only be shown if the user hasn't dismissed it before. + */ + public function recalculate_notice() { + // Just a return, because we want to temporary disable this notice (#3998 and #4532). + return; + + if ( filter_input( INPUT_GET, 'recalculate' ) === '1' ) { + update_option( 'wpseo_dismiss_recalculate', '1' ); + return; + } + + $can_access = is_multisite() ? WPSEO_Utils::grant_access() : current_user_can( 'manage_options' ); + if ( $can_access && ! $this->is_site_notice_dismissed( 'wpseo_dismiss_recalculate' ) ) { + Yoast_Notification_Center::get()->add_notification( + new Yoast_Notification( + /* translators: 1: is a link to 'admin_url / admin.php?page=wpseo_tools&recalculate=1' 2: closing link tag */ + sprintf( + __( 'We\'ve updated our SEO score algorithm. %1$sRecalculate the SEO scores%2$s for all posts and pages.', 'wordpress-seo' ), + '', + '' + ), + array( + 'type' => 'updated yoast-dismissible', + 'id' => 'wpseo-dismiss-recalculate', + 'nonce' => wp_create_nonce( 'wpseo-dismiss-recalculate' ), + ) + ) + ); + } + } + + /** + * Check if the user has dismissed the given notice (by $notice_name) + * + * @param string $notice_name The name of the notice that might be dismissed. + * + * @return bool + */ + private function is_site_notice_dismissed( $notice_name ) { + return '1' === get_option( $notice_name, true ); + } + + /** + * Helper to verify if the user is currently visiting one of our admin pages. + * + * @return bool + */ + private function on_wpseo_admin_page() { + return 'admin.php' === $this->pagenow && strpos( filter_input( INPUT_GET, 'page' ), 'wpseo' ) === 0; + } + + /** + * Determine whether we should load the meta box class and if so, load it. + */ + private function load_meta_boxes() { + + $is_editor = WPSEO_Metabox::is_post_overview( $this->pagenow ) || WPSEO_Metabox::is_post_edit( $this->pagenow ); + $is_inline_save = filter_input( INPUT_POST, 'action' ) === 'inline-save'; + + /** + * Filter: 'wpseo_always_register_metaboxes_on_admin' - Allow developers to change whether + * the WPSEO metaboxes are only registered on the typical pages (lean loading) or always + * registered when in admin. + * + * @api bool Whether to always register the metaboxes or not. Defaults to false. + */ + if ( $is_editor || $is_inline_save || apply_filters( 'wpseo_always_register_metaboxes_on_admin', false ) + ) { + $GLOBALS['wpseo_metabox'] = new WPSEO_Metabox; + $GLOBALS['wpseo_meta_columns'] = new WPSEO_Meta_Columns(); + } + } + + /** + * Determine if we should load our taxonomy edit class and if so, load it. + */ + private function load_taxonomy_class() { + if ( + WPSEO_Taxonomy::is_term_edit( $this->pagenow ) + || WPSEO_Taxonomy::is_term_overview( $this->pagenow ) + ) { + new WPSEO_Taxonomy; + } + } + + /** + * Determine if we should load our admin pages class and if so, load it. + * + * Loads admin page class for all admin pages starting with `wpseo_`. + */ + private function load_admin_user_class() { + if ( in_array( $this->pagenow, array( 'user-edit.php', 'profile.php' ) ) && current_user_can( 'edit_users' ) ) { + new WPSEO_Admin_User_Profile; + } + } + + /** + * Determine if we should load our admin pages class and if so, load it. + * + * Loads admin page class for all admin pages starting with `wpseo_`. + */ + private function load_admin_page_class() { + + if ( $this->on_wpseo_admin_page() ) { + // For backwards compatabilty, this still needs a global, for now... + $GLOBALS['wpseo_admin_pages'] = new WPSEO_Admin_Pages; + + // Only register the yoast i18n when the page is a Yoast SEO page. + if ( WPSEO_Utils::is_yoast_seo_free_page( filter_input( INPUT_GET, 'page' ) ) ) { + $this->register_i18n_promo_class(); + } + } + } + + /** + * Register the promotion class for our GlotPress instance + * + * @link https://github.com/Yoast/i18n-module + */ + private function register_i18n_promo_class() { + new yoast_i18n( + array( + 'textdomain' => 'wordpress-seo', + 'project_slug' => 'wordpress-seo', + 'plugin_name' => 'Yoast SEO', + 'hook' => 'wpseo_admin_promo_footer', + 'glotpress_url' => 'http://translate.yoast.com/gp/', + 'glotpress_name' => 'Yoast Translate', + 'glotpress_logo' => 'https://translate.yoast.com/gp-templates/images/Yoast_Translate.svg', + 'register_url' => 'https://translate.yoast.com/gp/projects#utm_source=plugin&utm_medium=promo-box&utm_campaign=wpseo-i18n-promo', + ) + ); + } + + /** + * See if we should start our XML Sitemaps Admin class + */ + private function load_xml_sitemaps_admin() { + if ( $this->options['enablexmlsitemap'] === true ) { + new WPSEO_Sitemaps_Admin; + } + } + + /** + * Check if the site is set to be publicly visible + * + * @return bool + */ + private function is_blog_public() { + return '1' == get_option( 'blog_public' ); + } + + /** + * Shows deprecation warnings to the user if a plugin has registered a filter we have deprecated. + */ + public function show_hook_deprecation_warnings() { + global $wp_filter; + + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { + return false; + } + + // WordPress hooks that have been deprecated in Yoast SEO 3.0. + $deprecated_30 = array( + 'wpseo_pre_analysis_post_content', + 'wpseo_metadesc_length', + 'wpseo_metadesc_length_reason', + 'wpseo_body_length_score', + 'wpseo_linkdex_results', + 'wpseo_snippet', + ); + + $deprecated_notices = array_intersect( + $deprecated_30, + array_keys( $wp_filter ) + ); + + foreach ( $deprecated_notices as $deprecated_filter ) { + _deprecated_function( + /* %s expands to the actual filter/action that has been used. */ + sprintf( __( '%s filter/action', 'wordpress-seo' ), $deprecated_filter ), + 'WPSEO 3.0', + 'javascript' + ); + } + } + + /** + * Check if there is a dismiss notice action. + * + * @param string $notice_name The name of the notice to dismiss. + * + * @return bool + */ + private function dismiss_notice( $notice_name ) { + return filter_input( INPUT_GET, $notice_name ) === '1' && wp_verify_nonce( filter_input( INPUT_GET, 'nonce' ), $notice_name ); + } + + /** + * Returns whether or not the user has seen the tagline notice + * + * @deprecated 3.3 + * + * @return bool + */ + public function seen_tagline_notice() { + return false; + } + + /** + * Check if the permalink uses %postname% + * + * @return bool + */ + private function has_postname_in_permalink() { + return ( false !== strpos( get_option( 'permalink_structure' ), '%postname%' ) ); + } + + /** + * Redirect first time or just upgraded users to the about screen. + * + * @deprecated 3.5 + */ + public function after_update_notice() { + _deprecated_function( 'WPSEO_Admin_Init::after_update_notice', 'WPSEO 3.5' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-admin-user-profile.php b/wp-content/plugins/wordpress-seo/admin/class-admin-user-profile.php new file mode 100644 index 0000000..c547535 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-admin-user-profile.php @@ -0,0 +1,89 @@ +filter_input_post( 'wpseo_nonce' ); + + if ( empty( $nonce_value ) ) { // Submit from alternate forms. + return; + } + + check_admin_referer( 'wpseo_user_profile_update', 'wpseo_nonce' ); + + update_user_meta( $user_id, 'wpseo_title', $this->filter_input_post( 'wpseo_author_title' ) ); + update_user_meta( $user_id, 'wpseo_metadesc', $this->filter_input_post( 'wpseo_author_metadesc' ) ); + update_user_meta( $user_id, 'wpseo_metakey', $this->filter_input_post( 'wpseo_author_metakey' ) ); + update_user_meta( $user_id, 'wpseo_excludeauthorsitemap', $this->filter_input_post( 'wpseo_author_exclude' ) ); + update_user_meta( $user_id, 'wpseo_content_analysis_disable', $this->filter_input_post( 'wpseo_content_analysis_disable' ) ); + update_user_meta( $user_id, 'wpseo_keyword_analysis_disable', $this->filter_input_post( 'wpseo_keyword_analysis_disable' ) ); + } + + /** + * Add the inputs needed for SEO values to the User Profile page + * + * @param WP_User $user User instance to output for. + */ + public function user_profile( $user ) { + $options = WPSEO_Options::get_option( 'wpseo_titles' ); + + wp_nonce_field( 'wpseo_user_profile_update', 'wpseo_nonce' ); + + require_once( 'views/user-profile.php' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-admin.php b/wp-content/plugins/wordpress-seo/admin/class-admin.php new file mode 100644 index 0000000..3a0110b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-admin.php @@ -0,0 +1,809 @@ +options = WPSEO_Options::get_options( array( 'wpseo', 'wpseo_permalinks' ) ); + + if ( is_multisite() ) { + WPSEO_Options::maybe_set_multisite_defaults( false ); + } + + if ( $this->options['stripcategorybase'] === true ) { + add_action( 'created_category', array( $this, 'schedule_rewrite_flush' ) ); + add_action( 'edited_category', array( $this, 'schedule_rewrite_flush' ) ); + add_action( 'delete_category', array( $this, 'schedule_rewrite_flush' ) ); + } + + $this->admin_features = array( + // Google Search Console. + 'google_search_console' => new WPSEO_GSC(), + 'dashboard_widget' => new Yoast_Dashboard_Widget(), + ); + + if ( WPSEO_Metabox::is_post_overview( $pagenow ) || WPSEO_Metabox::is_post_edit( $pagenow ) ) { + $this->admin_features['primary_category'] = new WPSEO_Primary_Term_Admin(); + } + + if ( filter_input( INPUT_GET, 'page' ) === 'wpseo_tools' && filter_input( INPUT_GET, 'tool' ) === null ) { + new WPSEO_Recalculate_Scores(); + } + + // Needs the lower than default priority so other plugins can hook underneath it without issue. + add_action( 'admin_menu', array( $this, 'register_settings_page' ), 5 ); + add_action( 'network_admin_menu', array( $this, 'register_network_settings_page' ) ); + + add_filter( 'plugin_action_links_' . WPSEO_BASENAME, array( $this, 'add_action_link' ), 10, 2 ); + + add_action( 'admin_enqueue_scripts', array( $this, 'config_page_scripts' ) ); + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_global_style' ) ); + + if ( $this->options['cleanslugs'] === true ) { + add_filter( 'name_save_pre', array( $this, 'remove_stopwords_from_slug' ), 0 ); + } + + add_filter( 'user_contactmethods', array( $this, 'update_contactmethods' ), 10, 1 ); + + add_action( 'after_switch_theme', array( $this, 'switch_theme' ) ); + add_action( 'switch_theme', array( $this, 'switch_theme' ) ); + + add_filter( 'set-screen-option', array( $this, 'save_bulk_edit_options' ), 10, 3 ); + + add_action( 'admin_init', array( 'WPSEO_Plugin_Conflict', 'hook_check_for_plugin_conflicts' ), 10, 1 ); + add_action( 'admin_init', array( $this, 'import_plugin_hooks' ) ); + + add_filter( 'wpseo_submenu_pages', array( $this, 'filter_settings_pages' ) ); + + WPSEO_Sitemaps_Cache::register_clear_on_option_update( 'wpseo' ); + + if ( WPSEO_Utils::is_yoast_seo_page() ) { + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) ); + } + + if ( WPSEO_Utils::is_api_available() ) { + $configuration = new WPSEO_Configuration_Page; + $configuration->catch_configuration_request(); + } + + $this->set_upsell_notice(); + } + + /** + * Setting the hooks for importing data from other plugins + */ + public function import_plugin_hooks() { + if ( current_user_can( $this->get_manage_options_cap() ) ) { + $plugin_imports = array( + 'wpSEO' => new WPSEO_Import_WPSEO_Hooks(), + 'aioseo' => new WPSEO_Import_AIOSEO_Hooks(), + ); + } + } + + /** + * Schedules a rewrite flush to happen at shutdown + */ + function schedule_rewrite_flush() { + add_action( 'shutdown', 'flush_rewrite_rules' ); + } + + /** + * Returns all the classes for the admin features + * + * @return array + */ + public function get_admin_features() { + return $this->admin_features; + } + + /** + * Register the menu item and its sub menu's. + * + * @global array $submenu used to change the label on the first item. + */ + function register_settings_page() { + if ( WPSEO_Utils::grant_access() !== true ) { + return; + } + + global $admin_page_hooks; + + // Base 64 encoded SVG image. + $icon_svg = WPSEO_Utils::get_icon_svg(); + + $manage_options_cap = $this->get_manage_options_cap(); + + $notification_center = Yoast_Notification_Center::get(); + $notification_count = $notification_center->get_notification_count(); + + // Add main page. + /* translators: %s: number of notifications */ + $counter_screen_reader_text = sprintf( _n( '%s notification', '%s notifications', $notification_count, 'wordpress-seo' ), number_format_i18n( $notification_count ) ); + $counter = sprintf( '%2$s', $notification_count, $counter_screen_reader_text ); + + $admin_page = add_menu_page( 'Yoast SEO: ' . __( 'Dashboard', 'wordpress-seo' ), __( 'SEO', 'wordpress-seo' ) . ' ' . $counter, $manage_options_cap, self::PAGE_IDENTIFIER, array( + $this, + 'load_page', + ), $icon_svg, '99.31337' ); + + $admin_page_hooks[ self::PAGE_IDENTIFIER ] = 'seo'; // Wipe notification bits from hooks. R. + + // Sub menu pages. + $submenu_pages = array( + array( + self::PAGE_IDENTIFIER, + '', + __( 'General', 'wordpress-seo' ), + $manage_options_cap, + self::PAGE_IDENTIFIER, + array( $this, 'load_page' ), + null, + ), + array( + self::PAGE_IDENTIFIER, + '', + __( 'Titles & Metas', 'wordpress-seo' ), + $manage_options_cap, + 'wpseo_titles', + array( $this, 'load_page' ), + ), + array( + self::PAGE_IDENTIFIER, + '', + __( 'Social', 'wordpress-seo' ), + $manage_options_cap, + 'wpseo_social', + array( $this, 'load_page' ), + null, + ), + array( + self::PAGE_IDENTIFIER, + '', + __( 'XML Sitemaps', 'wordpress-seo' ), + $manage_options_cap, + 'wpseo_xml', + array( $this, 'load_page' ), + null, + ), + array( + self::PAGE_IDENTIFIER, + '', + __( 'Advanced', 'wordpress-seo' ), + $manage_options_cap, + 'wpseo_advanced', + array( $this, 'load_page' ), + null, + ), + array( + self::PAGE_IDENTIFIER, + '', + __( 'Tools', 'wordpress-seo' ), + $manage_options_cap, + 'wpseo_tools', + array( $this, 'load_page' ), + null, + ), + array( + self::PAGE_IDENTIFIER, + '', + __( 'Search Console', 'wordpress-seo' ), + $manage_options_cap, + 'wpseo_search_console', + array( $this->admin_features['google_search_console'], 'display' ), + array( array( $this->admin_features['google_search_console'], 'set_help' ) ), + ), + array( + self::PAGE_IDENTIFIER, + '', + __( 'Go Premium', 'wordpress-seo' ) . ' ' . $this->get_premium_indicator(), + $manage_options_cap, + 'wpseo_licenses', + array( $this, 'load_page' ), + null, + ), + ); + + // Allow submenu pages manipulation. + $submenu_pages = apply_filters( 'wpseo_submenu_pages', $submenu_pages ); + + // Loop through submenu pages and add them. + if ( count( $submenu_pages ) ) { + foreach ( $submenu_pages as $submenu_page ) { + + $page_title = $submenu_page[2] . ' - Yoast SEO'; + + // We cannot use $submenu_page[1] because add-ons define that, so hard-code this value. + if ( 'wpseo_licenses' === $submenu_page[4] ) { + $page_title = __( 'Premium', 'wordpress-seo' ) . ' - Yoast SEO'; + } + + // Add submenu page. + $admin_page = add_submenu_page( $submenu_page[0], $page_title, $submenu_page[2], $submenu_page[3], $submenu_page[4], $submenu_page[5] ); + + // Check if we need to hook. + if ( isset( $submenu_page[6] ) && ( is_array( $submenu_page[6] ) && $submenu_page[6] !== array() ) ) { + foreach ( $submenu_page[6] as $submenu_page_action ) { + add_action( 'load-' . $admin_page, $submenu_page_action ); + } + } + } + } + + global $submenu; + if ( isset( $submenu[ self::PAGE_IDENTIFIER ] ) && current_user_can( $manage_options_cap ) ) { + $submenu[ self::PAGE_IDENTIFIER ][0][0] = __( 'Dashboard', 'wordpress-seo' ); + } + } + + /** + * Register assets needed on admin pages + */ + public function enqueue_assets() { + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_style( 'help-center' ); + + if ( 'wpseo_licenses' === filter_input( INPUT_GET, 'page' ) ) { + $asset_manager->enqueue_style( 'extensions' ); + } + } + + /** + * Returns the manage_options cap + * + * @return mixed|void + */ + private function get_manage_options_cap() { + /** + * Filter: 'wpseo_manage_options_capability' - Allow changing the capability users need to view the settings pages + * + * @api string unsigned The capability + */ + $manage_options_cap = apply_filters( 'wpseo_manage_options_capability', 'manage_options' ); + + return $manage_options_cap; + } + + /** + * Adds contextual help to the titles & metas page. + */ + function title_metas_help_tab() { + $screen = get_current_screen(); + + $screen->set_help_sidebar( ' +

' . __( 'For more information:', 'wordpress-seo' ) . '

+

' . __( 'Title optimization', 'wordpress-seo' ) . '

+

' . __( 'Why Google won\'t display the right page title', 'wordpress-seo' ) . '

' + ); + + $screen->add_help_tab( + array( + 'id' => 'basic-help', + 'title' => __( 'Template explanation', 'wordpress-seo' ), + /* translators: %1$s expands to Yoast SEO */ + 'content' => '

' . sprintf( __( 'The title & metas settings for %1$s are made up of variables that are replaced by specific values from the page when the page is displayed. The tabs on the left explain the available variables.', 'wordpress-seo' ), 'Yoast SEO' ) . '

' . '

' . __( 'Note that not all variables can be used in every template.', 'wordpress-seo' ) . '

', + ) + ); + + $screen->add_help_tab( + array( + 'id' => 'title-vars', + 'title' => __( 'Basic Variables', 'wordpress-seo' ), + 'content' => "\n\t\t

" . __( 'Basic Variables', 'wordpress-seo' ) . "

\n\t\t" . WPSEO_Replace_Vars::get_basic_help_texts(), + ) + ); + + $screen->add_help_tab( + array( + 'id' => 'title-vars-advanced', + 'title' => __( 'Advanced Variables', 'wordpress-seo' ), + 'content' => "\n\t\t

" . __( 'Advanced Variables', 'wordpress-seo' ) . "

\n\t\t" . WPSEO_Replace_Vars::get_advanced_help_texts(), + ) + ); + } + + /** + * Register the settings page for the Network settings. + */ + function register_network_settings_page() { + if ( WPSEO_Utils::grant_access() ) { + // Base 64 encoded SVG image. + $icon_svg = WPSEO_Utils::get_icon_svg(); + + add_menu_page( 'Yoast SEO: ' . __( 'MultiSite Settings', 'wordpress-seo' ), __( 'SEO', 'wordpress-seo' ), 'delete_users', self::PAGE_IDENTIFIER, array( + $this, + 'network_config_page', + ), $icon_svg ); + + if ( WPSEO_Utils::allow_system_file_edit() === true ) { + add_submenu_page( self::PAGE_IDENTIFIER, 'Yoast SEO: ' . __( 'Edit Files', 'wordpress-seo' ), __( 'Edit Files', 'wordpress-seo' ), 'delete_users', 'wpseo_files', array( + $this, + 'load_page', + ) ); + } + + // Add Extension submenu page. + add_submenu_page( self::PAGE_IDENTIFIER, 'Yoast SEO: ' . __( 'Extensions', 'wordpress-seo' ), __( 'Extensions', 'wordpress-seo' ), 'delete_users', 'wpseo_licenses', array( + $this, + 'load_page', + ) ); + } + } + + + /** + * Load the form for a WPSEO admin page + */ + function load_page() { + $page = filter_input( INPUT_GET, 'page' ); + + switch ( $page ) { + case 'wpseo_advanced': + require_once( WPSEO_PATH . 'admin/pages/advanced.php' ); + break; + + case 'wpseo_tools': + require_once( WPSEO_PATH . 'admin/pages/tools.php' ); + break; + + case 'wpseo_titles': + require_once( WPSEO_PATH . 'admin/pages/metas.php' ); + break; + + case 'wpseo_social': + require_once( WPSEO_PATH . 'admin/pages/social.php' ); + break; + + case 'wpseo_xml': + require_once( WPSEO_PATH . 'admin/pages/xml-sitemaps.php' ); + break; + + case 'wpseo_licenses': + require_once( WPSEO_PATH . 'admin/pages/licenses.php' ); + break; + + case 'wpseo_files': + require_once( WPSEO_PATH . 'admin/views/tool-file-editor.php' ); + break; + + case 'wpseo_tutorial_videos': + require_once( WPSEO_PATH . 'admin/pages/tutorial-videos.php' ); + break; + + case 'wpseo_configurator': + require_once( WPSEO_PATH . 'admin/config-ui/class-configuration-page.php' ); + break; + + case self::PAGE_IDENTIFIER: + default: + require_once( WPSEO_PATH . 'admin/pages/dashboard.php' ); + break; + } + } + + /** + * Loads the form for the network configuration page. + */ + function network_config_page() { + require_once( WPSEO_PATH . 'admin/pages/network.php' ); + } + + + /** + * Adds the ability to choose how many posts are displayed per page + * on the bulk edit pages. + */ + function bulk_edit_options() { + $option = 'per_page'; + $args = array( + 'label' => __( 'Posts', 'wordpress-seo' ), + 'default' => 10, + 'option' => 'wpseo_posts_per_page', + ); + add_screen_option( $option, $args ); + } + + /** + * Saves the posts per page limit for bulk edit pages. + * + * @param int $status Status value to pass through. + * @param string $option Option name. + * @param int $value Count value to check. + * + * @return int + */ + function save_bulk_edit_options( $status, $option, $value ) { + if ( 'wpseo_posts_per_page' === $option && ( $value > 0 && $value < 1000 ) ) { + return $value; + } + + return $status; + } + + /** + * Add a link to the settings page to the plugins list + * + * @staticvar string $this_plugin holds the directory & filename for the plugin + * + * @param array $links array of links for the plugins, adapted when the current plugin is found. + * @param string $file the filename for the current plugin, which the filter loops through. + * + * @return array $links + */ + function add_action_link( $links, $file ) { + if ( WPSEO_BASENAME === $file && WPSEO_Utils::grant_access() ) { + $settings_link = '' . __( 'Settings', 'wordpress-seo' ) . ''; + array_unshift( $links, $settings_link ); + } + + if ( class_exists( 'WPSEO_Product_Premium' ) ) { + $license_manager = new Yoast_Plugin_License_Manager( new WPSEO_Product_Premium() ); + if ( $license_manager->license_is_valid() ) { + return $links; + } + } + + // Add link to premium support landing page. + $premium_link = '' . __( 'Premium Support', 'wordpress-seo' ) . ''; + array_unshift( $links, $premium_link ); + + // Add link to docs. + $faq_link = '' . __( 'FAQ', 'wordpress-seo' ) . ''; + array_unshift( $links, $faq_link ); + + return $links; + } + + /** + * Enqueues the (tiny) global JS needed for the plugin. + */ + function config_page_scripts() { + if ( WPSEO_Utils::grant_access() ) { + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_script( 'admin-global-script' ); + + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'admin-global-script', 'wpseoAdminGlobalL10n', $this->localize_admin_global_script() ); + } + } + + /** + * Enqueues the (tiny) global stylesheet needed for the plugin. + */ + public function enqueue_global_style() { + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_style( 'admin-global' ); + } + + /** + * Filter the $contactmethods array and add Facebook, Google+ and Twitter. + * + * These are used with the Facebook author, rel="author" and Twitter cards implementation. + * + * @param array $contactmethods currently set contactmethods. + * + * @return array $contactmethods with added contactmethods. + */ + public function update_contactmethods( $contactmethods ) { + // Add Google+. + $contactmethods['googleplus'] = __( 'Google+', 'wordpress-seo' ); + // Add Twitter. + $contactmethods['twitter'] = __( 'Twitter username (without @)', 'wordpress-seo' ); + // Add Facebook. + $contactmethods['facebook'] = __( 'Facebook profile URL', 'wordpress-seo' ); + + return $contactmethods; + } + + /** + * Cleans stopwords out of the slug, if the slug hasn't been set yet. + * + * @since 1.1.7 + * + * @param string $slug if this isn't empty, the function will return an unaltered slug. + * + * @return string $clean_slug cleaned slug + */ + function remove_stopwords_from_slug( $slug ) { + return $this->filter_stopwords_from_slug( $slug, filter_input( INPUT_POST, 'post_title' ) ); + } + + /** + * Filter the stopwords from the slug + * + * @param string $slug The current slug, if not empty there will be done nothing. + * @param string $post_title The title which will be used in case of an empty slug. + * + * @return string + */ + public function filter_stopwords_from_slug( $slug, $post_title ) { + // Don't change an existing slug. + if ( isset( $slug ) && $slug !== '' ) { + return $slug; + } + + // When the post title is empty, just return the slug. + if ( empty( $post_title ) ) { + return $slug; + } + + // Don't change the slug if this is a multisite installation and the site has been switched. + if ( is_multisite() && ms_is_switched() ) { + return $slug; + } + + // Don't change slug if the post is a draft, this conflicts with polylang. + // Doesn't work with filter_input() since need current value, not originally submitted one. + if ( 'draft' === $_POST['post_status'] ) { + return $slug; + } + + // Lowercase the slug and strip slashes. + $new_slug = sanitize_title( stripslashes( $post_title ) ); + + $stop_words = new WPSEO_Admin_Stop_Words(); + return $stop_words->remove_in( $new_slug ); + } + + /** + * Filters all advanced settings pages from the given pages. + * + * @param array $pages The pages to filter. + * + * @return array + */ + public function filter_settings_pages( array $pages ) { + + if ( wpseo_advanced_settings_enabled( $this->options ) ) { + return $pages; + } + + $pages_to_hide = array( 'wpseo_titles', 'wpseo_social', 'wpseo_xml', 'wpseo_advanced', 'wpseo_tools' ); + + foreach ( $pages as $page_key => $page ) { + $page_name = $page[4]; + + if ( in_array( $page_name, $pages_to_hide ) ) { + unset( $pages[ $page_key ] ); + } + } + + return $pages; + } + + /** + * Returns the stopwords for the current language + * + * @since 1.1.7 + * @deprecated 3.1 Use WPSEO_Admin_Stop_Words::list_stop_words() instead. + * + * @return array $stopwords array of stop words to check and / or remove from slug + */ + function stopwords() { + $stop_words = new WPSEO_Admin_Stop_Words(); + return $stop_words->list_stop_words(); + } + + + /** + * Check whether the stopword appears in the string + * + * @deprecated 3.1 + * + * @param string $haystack The string to be checked for the stopword. + * @param bool $checkingUrl Whether or not we're checking a URL. + * + * @return bool|mixed + */ + function stopwords_check( $haystack, $checkingUrl = false ) { + $stopWords = $this->stopwords(); + + if ( is_array( $stopWords ) && $stopWords !== array() ) { + foreach ( $stopWords as $stopWord ) { + // If checking a URL remove the single quotes. + if ( $checkingUrl ) { + $stopWord = str_replace( "'", '', $stopWord ); + } + + // Check whether the stopword appears as a whole word. + // @todo [JRF => whomever] check whether the use of \b (=word boundary) would be more efficient ;-). + $res = preg_match( "`(^|[ \n\r\t\.,'\(\)\"\+;!?:])" . preg_quote( $stopWord, '`' ) . "($|[ \n\r\t\.,'\(\)\"\+;!?:])`iu", $haystack ); + if ( $res > 0 ) { + return $stopWord; + } + } + } + + return false; + } + + /** + * Log the updated timestamp for user profiles when theme is changed + */ + function switch_theme() { + $users = get_users( array( 'who' => 'authors' ) ); + if ( is_array( $users ) && $users !== array() ) { + foreach ( $users as $user ) { + update_user_meta( $user->ID, '_yoast_wpseo_profile_updated', time() ); + } + } + } + + /** + * Localization for the dismiss urls. + * + * @return array + */ + private function localize_admin_global_script() { + return array( + 'dismiss_about_url' => $this->get_dismiss_url( 'wpseo-dismiss-about' ), + 'dismiss_tagline_url' => $this->get_dismiss_url( 'wpseo-dismiss-tagline-notice' ), + 'help_video_iframe_title' => __( 'Yoast SEO video tutorial', 'wordpress-seo' ), + ); + } + + /** + * Extending the current page URL with two params to be able to ignore the notice. + * + * @param string $dismiss_param The param used to dismiss the notification. + * + * @return string + */ + private function get_dismiss_url( $dismiss_param ) { + $arr_params = array( + $dismiss_param => '1', + 'nonce' => wp_create_nonce( $dismiss_param ), + ); + + return esc_url( add_query_arg( $arr_params ) ); + } + + /** + * @return string + */ + private function get_premium_indicator() { + /** + * The class that will be applied to the premium indicator. + * + * @type array Classes that will be applied tot the premium indicator. + */ + $classes = apply_filters( 'wpseo_premium_indicator_classes', array( + 'wpseo-premium-indicator', + 'wpseo-premium-indicator--no', + 'wpseo-js-premium-indicator', + 'update-plugins', + ) ); + + /** + * The text to put inside the premium indicator. + * + * @type string The text to read to screen readers. + */ + $text = apply_filters( 'wpseo_premium_indicator_text', __( 'Disabled', 'wordpress-seo' ) ); + + $premium_indicator = sprintf( + "%s", + esc_attr( implode( ' ', $classes ) ), + esc_html( $text ) + ); + + return $premium_indicator; + } + + /** + * Sets the upsell notice. + */ + protected function set_upsell_notice() { + $upsell = new WPSEO_Product_Upsell_Notice(); + $upsell->dismiss_notice_listener(); + $upsell->initialize(); + } + + /********************** DEPRECATED METHODS **********************/ + + /** + * Check whether the current user is allowed to access the configuration. + * + * @deprecated 1.5.0 + * @deprecated use WPSEO_Utils::grant_access() + * @see WPSEO_Utils::grant_access() + * + * @return boolean + */ + function grant_access() { + _deprecated_function( __METHOD__, 'WPSEO 1.5.0', 'WPSEO_Utils::grant_access()' ); + + return WPSEO_Utils::grant_access(); + } + + /** + * Check whether the current user is allowed to access the configuration. + * + * @deprecated 1.5.0 + * @deprecated use wpseo_do_upgrade() + * @see WPSEO_Upgrade + */ + function maybe_upgrade() { + _deprecated_function( __METHOD__, 'WPSEO 1.5.0', 'wpseo_do_upgrade' ); + new WPSEO_Upgrade(); + } + + /** + * Clears the cache + * + * @deprecated 1.5.0 + * @deprecated use WPSEO_Utils::clear_cache() + * @see WPSEO_Utils::clear_cache() + */ + function clear_cache() { + _deprecated_function( __METHOD__, 'WPSEO 1.5.0', 'WPSEO_Utils::clear_cache()' ); + WPSEO_Utils::clear_cache(); + } + + /** + * Clear rewrites + * + * @deprecated 1.5.0 + * @deprecated use WPSEO_Utils::clear_rewrites() + * @see WPSEO_Utils::clear_rewrites() + */ + function clear_rewrites() { + _deprecated_function( __METHOD__, 'WPSEO 1.5.0', 'WPSEO_Utils::clear_rewrites()' ); + WPSEO_Utils::clear_rewrites(); + } + + /** + * Register all the options needed for the configuration pages. + * + * @deprecated 1.5.0 + * @deprecated use WPSEO_Option::register_setting() on each individual option + * @see WPSEO_Option::register_setting() + */ + function options_init() { + _deprecated_function( __METHOD__, 'WPSEO 1.5.0', 'WPSEO_Option::register_setting()' ); + } + + /** + * Display an error message when the blog is set to private. + * + * @deprecated 3.3 + */ + function blog_public_warning() { + return; + } + + /** + * Display an error message when the theme contains a meta description tag. + * + * @since 1.4.14 + * + * @deprecated 3.3 + */ + function meta_description_warning() { + _deprecated_function( __FUNCTION__, 'WPSEO 3.3.0' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-asset.php b/wp-content/plugins/wordpress-seo/admin/class-asset.php new file mode 100644 index 0000000..3721a05 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-asset.php @@ -0,0 +1,223 @@ + array(), + 'version' => WPSEO_VERSION, + 'in_footer' => true, + 'rtl' => true, + 'media' => 'all', + 'suffix' => WPSEO_CSSJS_SUFFIX, + ), $args ); + + $this->name = $args['name']; + $this->src = $args['src']; + $this->deps = $args['deps']; + $this->version = $args['version']; + $this->media = $args['media']; + $this->in_footer = $args['in_footer']; + $this->rtl = $args['rtl']; + $this->suffix = $args['suffix']; + } + + /** + * @return string + */ + public function get_name() { + return $this->name; + } + + /** + * @return string + */ + public function get_src() { + return $this->src; + } + + /** + * @return array|string + */ + public function get_deps() { + return $this->deps; + } + + /** + * @return string + */ + public function get_version() { + return $this->version; + } + + /** + * @return string + */ + public function get_media() { + return $this->media; + } + + /** + * @return boolean + */ + public function is_in_footer() { + return $this->in_footer; + } + + /** + * @return boolean + */ + public function has_rtl() { + return $this->rtl; + } + + /** + * @return string + */ + public function get_suffix() { + return $this->suffix; + } + + /** + * Returns the full URL for this asset based on the path to the plugin file. + * + * @param string $type Type of asset. + * @param string $plugin_file Absolute path to the plugin file. + * + * @return string The full URL to the asset. + */ + public function get_url( $type, $plugin_file ) { + + $relative_path = $this->get_relative_path( $type ); + if ( empty( $relative_path ) ) { + return ''; + } + + if ( 'development' !== YOAST_ENVIRONMENT && ! $this->get_suffix() ) { + $plugin_path = plugin_dir_path( $plugin_file ); + if ( ! file_exists( $plugin_path . $relative_path ) ) { + + // Give a notice to the user in the console (only once). + WPSEO_Utils::javascript_console_notification( + 'Development Files', + sprintf( + /* translators: %1$s resolves to https://github.com/Yoast/wordpress-seo */ + __( 'You are trying to load non-minified files, these are only available in our development package. Check out %1$s to see all the source files.', 'wordpress-seo' ), + 'https://github.com/Yoast/wordpress-seo' + ), + true + ); + + // Just load the .min file. + $relative_path = $this->get_relative_path( $type, '.min' ); + } + } + + return plugins_url( $relative_path, $plugin_file ); + } + + /** + * Get the relative file for this asset + * + * @param string $type Type of this asset. + * @param null $force_suffix Force use suffix. + * + * @return string + */ + protected function get_relative_path( $type, $force_suffix = null ) { + $relative_path = $rtl_path = $rtl_suffix = ''; + + $suffix = ( is_null( $force_suffix ) ) ? $this->get_suffix() : $force_suffix; + + switch ( $type ) { + case self::TYPE_JS: + $relative_path = 'js/dist/' . $this->get_src() . $suffix . '.js'; + break; + + case self::TYPE_CSS: + // Path and suffix for RTL stylesheets. + if ( function_exists( 'is_rtl' ) && is_rtl() && $this->has_rtl() ) { + $rtl_path = 'dist/'; + $rtl_suffix = '-rtl'; + } + $relative_path = 'css/' . $rtl_path . $this->get_src() . $rtl_suffix . $suffix . '.css'; + break; + } + + return $relative_path; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-bulk-description-editor-list-table.php b/wp-content/plugins/wordpress-seo/admin/class-bulk-description-editor-list-table.php new file mode 100644 index 0000000..2b2c647 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-bulk-description-editor-list-table.php @@ -0,0 +1,76 @@ + 'wpseo_bulk_description', + 'plural' => 'wpseo_bulk_descriptions', + 'ajax' => true, + ); + + /** + * The field in the database where meta field is saved. + * + * @var string + */ + protected $target_db_field = 'metadesc'; + + /** + * The columns shown on the table + * + * @return array + */ + public function get_columns() { + $columns = array( + 'col_existing_yoast_seo_metadesc' => __( 'Existing Yoast Meta Description', 'wordpress-seo' ), + 'col_new_yoast_seo_metadesc' => __( 'New Yoast Meta Description', 'wordpress-seo' ), + ); + + return $this->merge_columns( $columns ); + } + + /** + * Parse the metadescription + * + * @param string $column_name Column name. + * @param object $record Data object. + * @param string $attributes HTML attributes. + * + * @return string + */ + protected function parse_page_specific_column( $column_name, $record, $attributes ) { + switch ( $column_name ) { + case 'col_new_yoast_seo_metadesc': + return sprintf( + '', + 'wpseo-new-metadesc-' . $record->ID, + $record->ID + ); + break; + + case 'col_existing_yoast_seo_metadesc': + // TODO inconsistent return/echo behavior R. + echo $this->parse_meta_data_field( $record->ID, $attributes ); + break; + } + } +} /* End of class */ diff --git a/wp-content/plugins/wordpress-seo/admin/class-bulk-editor-list-table.php b/wp-content/plugins/wordpress-seo/admin/class-bulk-editor-list-table.php new file mode 100644 index 0000000..b6751ec --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-bulk-editor-list-table.php @@ -0,0 +1,973 @@ +page_type) there will be constructed an url part, for subpages and + * navigation + * + * @var string + */ + protected $page_url; + + /** + * The settings which will be used in the __construct. + * + * @var array + */ + protected $settings; + + /** + * @var array + */ + protected $pagination = array(); + + /** + * Class constructor + */ + function __construct() { + parent::__construct( $this->settings ); + + $this->request_url = $_SERVER['REQUEST_URI']; + $this->current_page = ( ! empty( $_GET['paged'] ) ) ? $_GET['paged'] : 1; + $this->current_filter = ( ! empty( $_GET['post_type_filter'] ) ) ? $_GET['post_type_filter'] : 1; + $this->current_status = ( ! empty( $_GET['post_status'] ) ) ? $_GET['post_status'] : 1; + $this->current_order = array( + 'order' => ( ! empty( $_GET['order'] ) ) ? $_GET['order'] : 'asc', + 'orderby' => ( ! empty( $_GET['orderby'] ) ) ? $_GET['orderby'] : 'post_title', + ); + + $this->verify_nonce(); + + $this->nonce = wp_create_nonce( 'bulk-editor-table' ); + $this->page_url = "&nonce={$this->nonce}&type={$this->page_type}#top#{$this->page_type}"; + + $this->populate_editable_post_types(); + + } + + /** + * Verifies nonce if additional parameters have been sent. + * + * Shows an error notification if the nonce check fails. + */ + private function verify_nonce() { + if ( $this->should_verify_nonce() && ! wp_verify_nonce( filter_input( INPUT_GET, 'nonce' ), 'bulk-editor-table' ) ) { + Yoast_Notification_Center::get()->add_notification( + new Yoast_Notification( + __( 'You are not allowed to access this page.', 'wordpress-seo' ), + array( 'type' => Yoast_Notification::ERROR ) + ) + ); + Yoast_Notification_Center::get()->display_notifications(); + die; + } + } + + /** + * Checks if additional parameters have been sent to determine if nonce should be checked or not. + * + * @return bool + */ + private function should_verify_nonce() { + $possible_params = array( + 'type', + 'paged', + 'post_type_filter', + 'post_status', + 'order', + 'orderby', + ); + + foreach ( $possible_params as $param_name ) { + if ( filter_input( INPUT_GET, $param_name ) ) { + return true; + } + } + } + + /** + * Prepares the data and renders the page. + */ + public function show_page() { + $this->prepare_page_navigation(); + $this->prepare_items(); + + $this->views(); + $this->display(); + } + + /** + * Used in the constructor to build a reference list of post types the current user can edit. + */ + protected function populate_editable_post_types() { + $post_types = get_post_types( array( 'public' => true, 'exclude_from_search' => false ), 'object' ); + + $this->all_posts = array(); + $this->own_posts = array(); + + if ( is_array( $post_types ) && $post_types !== array() ) { + foreach ( $post_types as $post_type ) { + if ( ! current_user_can( $post_type->cap->edit_posts ) ) { + continue; + } + + if ( current_user_can( $post_type->cap->edit_others_posts ) ) { + $this->all_posts[] = esc_sql( $post_type->name ); + } + else { + $this->own_posts[] = esc_sql( $post_type->name ); + } + } + } + } + + + /** + * Will shown the navigation for the table like pagenavigation and pagefilter; + * + * @param string $which Table nav location (such as top). + */ + function display_tablenav( $which ) { + $post_status = sanitize_text_field( filter_input( INPUT_GET, 'post_status' ) ); + ?> +
+ + +
+ + + + + + + + + + + + + extra_tablenav( $which ); + $this->pagination( $which ); + ?> + +
+ +
+ +
+ + prepare(), passing the current user_id in as the first parameter. + */ + function get_base_subquery() { + global $wpdb; + + $all_posts_string = "'" . implode( "', '", $this->all_posts ) . "'"; + $own_posts_string = "'" . implode( "', '", $this->own_posts ) . "'"; + + $post_author = esc_sql( (int) get_current_user_id() ); + + $subquery = "( + SELECT * + FROM {$wpdb->posts} + WHERE post_type IN ({$all_posts_string}) + UNION ALL + SELECT * + FROM {$wpdb->posts} + WHERE post_type IN ({$own_posts_string}) AND post_author = {$post_author} + ) sub_base"; + + return $subquery; + } + + + /** + * @return array + */ + function get_views() { + global $wpdb; + + $status_links = array(); + + $states = get_post_stati( array( 'show_in_admin_all_list' => true ) ); + $states['trash'] = 'trash'; + $states = esc_sql( $states ); + $all_states = "'" . implode( "', '", $states ) . "'"; + + $subquery = $this->get_base_subquery(); + + $total_posts = $wpdb->get_var( + " + SELECT COUNT(ID) FROM {$subquery} + WHERE post_status IN ({$all_states}) + " + ); + + + $post_status = filter_input( INPUT_GET, 'post_status' ); + $class = empty( $post_status ) ? ' class="current"' : ''; + $status_links['all'] = '' . sprintf( _nx( 'All (%s)', 'All (%s)', $total_posts, 'posts', 'wordpress-seo' ), number_format_i18n( $total_posts ) ) . ''; + + $post_stati = get_post_stati( array( 'show_in_admin_all_list' => true ), 'objects' ); + if ( is_array( $post_stati ) && $post_stati !== array() ) { + foreach ( $post_stati as $status ) { + + $status_name = esc_sql( $status->name ); + + $total = (int) $wpdb->get_var( + $wpdb->prepare( + " + SELECT COUNT(ID) FROM {$subquery} + WHERE post_status = %s + ", + $status_name + ) + ); + + if ( $total === 0 ) { + continue; + } + + $class = ''; + if ( $status_name === $post_status ) { + $class = ' class="current"'; + } + + $status_links[ $status_name ] = '' . sprintf( translate_nooped_plural( $status->label_count, $total ), number_format_i18n( $total ) ) . ''; + } + } + unset( $post_stati, $status, $status_name, $total, $class ); + + $trashed_posts = $wpdb->get_var( + " + SELECT COUNT(ID) FROM {$subquery} + WHERE post_status IN ('trash') + " + ); + + $class = ''; + if ( 'trash' === $post_status ) { + $class = 'class="current"'; + } + $status_links['trash'] = '' . sprintf( _nx( 'Trash (%s)', 'Trash (%s)', $trashed_posts, 'posts', 'wordpress-seo' ), number_format_i18n( $trashed_posts ) ) . ''; + + return $status_links; + } + + + /** + * @param string $which Table nav location (such as top). + */ + function extra_tablenav( $which ) { + + if ( 'top' === $which ) { + $post_types = get_post_types( array( 'public' => true, 'exclude_from_search' => false ) ); + + $instance_type = esc_attr( $this->page_type ); + + if ( is_array( $post_types ) && $post_types !== array() ) { + global $wpdb; + + echo '
'; + + $post_types = esc_sql( $post_types ); + $post_types = "'" . implode( "', '", $post_types ) . "'"; + + $states = get_post_stati( array( 'show_in_admin_all_list' => true ) ); + $states['trash'] = 'trash'; + $states = esc_sql( $states ); + $all_states = "'" . implode( "', '", $states ) . "'"; + + $subquery = $this->get_base_subquery(); + + $post_types = $wpdb->get_results( + " + SELECT DISTINCT post_type FROM {$subquery} + WHERE post_status IN ({$all_states}) + ORDER BY 'post_type' ASC + " + ); + + $post_type_filter = filter_input( INPUT_GET, 'post_type_filter' ); + $selected = ( ! empty( $post_type_filter ) ) ? sanitize_text_field( $post_type_filter ) : '-1'; + + $options = ''; + + if ( is_array( $post_types ) && $post_types !== array() ) { + foreach ( $post_types as $post_type ) { + $obj = get_post_type_object( $post_type->post_type ); + $options .= sprintf( '', $obj->labels->name, $post_type->post_type, selected( $selected, $post_type->post_type, false ) ); + } + } + + printf( + '', + 'post-type-filter-' . $instance_type, + __( 'Filter by post type', 'wordpress-seo' ) + ); + echo sprintf( '', $options, $instance_type ); + submit_button( __( 'Filter', 'wordpress-seo' ), 'button', false, false, array( 'id' => 'post-query-submit' ) ); + echo '
'; + } + } + } + + /** + * + * @return array + */ + function get_sortable_columns() { + return $sortable = array( + 'col_page_title' => array( 'post_title', true ), + 'col_post_type' => array( 'post_type', false ), + 'col_post_date' => array( 'post_date', false ), + ); + } + + /** + * Sets the correct pagenumber and pageurl for the navigation + */ + function prepare_page_navigation() { + + $request_url = $this->request_url . $this->page_url; + + $current_page = $this->current_page; + $current_filter = $this->current_filter; + $current_status = $this->current_status; + $current_order = $this->current_order; + + // If current type doesn't compare with objects page_type, than we have to unset some vars in the requested url (which will be use for internal table urls). + if ( $_GET['type'] != $this->page_type ) { + $request_url = remove_query_arg( 'paged', $request_url ); // Page will be set with value 1 below. + $request_url = remove_query_arg( 'post_type_filter', $request_url ); + $request_url = remove_query_arg( 'post_status', $request_url ); + $request_url = remove_query_arg( 'orderby', $request_url ); + $request_url = remove_query_arg( 'order', $request_url ); + $request_url = add_query_arg( 'pages', 1, $request_url ); + + $current_page = 1; + $current_filter = '-1'; + $current_status = ''; + $current_order = array( 'orderby' => 'post_title', 'order' => 'asc' ); + + } + + $_SERVER['REQUEST_URI'] = $request_url; + + $_GET['paged'] = $current_page; + $_REQUEST['paged'] = $current_page; + $_REQUEST['post_type_filter'] = $current_filter; + $_GET['post_type_filter'] = $current_filter; + $_GET['post_status'] = $current_status; + $_GET['orderby'] = $current_order['orderby']; + $_GET['order'] = $current_order['order']; + + } + + /** + * Preparing the requested pagerows and setting the needed variables + */ + function prepare_items() { + + $post_type_clause = $this->get_post_type_clause(); + $all_states = $this->get_all_states(); + $subquery = $this->get_base_subquery(); + + // Setting the column headers. + $this->set_column_headers(); + + // Count the total number of needed items and setting pagination given $total_items. + $total_items = $this->count_items( $subquery, $all_states, $post_type_clause ); + $this->set_pagination( $total_items ); + + // Getting items given $query. + $query = $this->parse_item_query( $subquery, $all_states, $post_type_clause ); + $this->get_items( $query ); + + // Get the metadata for the current items ($this->items). + $this->get_meta_data(); + + } + + /** + * Getting the columns for first row + * + * @return array + */ + public function get_columns() { + return $this->merge_columns(); + } + + /** + * Setting the column headers + */ + protected function set_column_headers() { + $columns = $this->get_columns(); + $hidden = array(); + $sortable = $this->get_sortable_columns(); + $this->_column_headers = array( $columns, $hidden, $sortable ); + } + + /** + * Counting total items + * + * @param string $subquery SQL FROM part. + * @param string $all_states SQL IN part. + * @param string $post_type_clause SQL post type part. + * + * @return mixed + */ + protected function count_items( $subquery, $all_states, $post_type_clause ) { + global $wpdb; + $total_items = $wpdb->get_var( + " + SELECT COUNT(ID) + FROM {$subquery} + WHERE post_status IN ({$all_states}) $post_type_clause + " + ); + + return $total_items; + } + + /** + * Getting the post_type_clause filter + * + * @return string + */ + protected function get_post_type_clause() { + // Filter Block. + $post_types = null; + $post_type_clause = ''; + $post_type_filter = filter_input( INPUT_GET, 'post_type_filter' ); + + if ( ! empty( $post_type_filter ) && get_post_type_object( sanitize_text_field( $post_type_filter ) ) ) { + $post_types = esc_sql( sanitize_text_field( $post_type_filter ) ); + $post_type_clause = "AND post_type IN ('{$post_types}')"; + } + + return $post_type_clause; + } + + /** + * Setting the pagination. + * + * Total items is the number of all visible items. + * + * @param int $total_items Total items counts. + */ + protected function set_pagination( $total_items ) { + + // Calculate items per page. + $per_page = $this->get_items_per_page( 'wpseo_posts_per_page', 10 ); + $paged = esc_sql( sanitize_text_field( filter_input( INPUT_GET, 'paged' ) ) ); + + if ( empty( $paged ) || ! is_numeric( $paged ) || $paged <= 0 ) { + $paged = 1; + } + + $this->set_pagination_args( + array( + 'total_items' => $total_items, + 'total_pages' => ceil( $total_items / $per_page ), + 'per_page' => $per_page, + ) + ); + + $this->pagination = array( + 'per_page' => $per_page, + 'offset' => ( $paged - 1 ) * $per_page, + ); + + } + + /** + * Parse the query to get items from database. + * + * Based on given parameters there will be parse a query which will get all the pages/posts and other post_types + * from the database. + * + * @param string $subquery SQL FROM part. + * @param string $all_states SQL IN part. + * @param string $post_type_clause SQL post type part. + * + * @return string + */ + protected function parse_item_query( $subquery, $all_states, $post_type_clause ) { + // Order By block. + $orderby = filter_input( INPUT_GET, 'orderby' ); + + $orderby = ! empty( $orderby ) ? esc_sql( sanitize_text_field( $orderby ) ) : 'post_title'; + $orderby = $this->sanitize_orderby( $orderby ); + + // Order clause. + $order = filter_input( INPUT_GET, 'order' ); + $order = ! empty( $order ) ? esc_sql( strtoupper( sanitize_text_field( $order ) ) ) : 'ASC'; + $order = $this->sanitize_order( $order ); + + // Get all needed results. + $query = " + SELECT ID, post_title, post_type, post_status, post_modified, post_date + FROM {$subquery} + WHERE post_status IN ({$all_states}) $post_type_clause + ORDER BY {$orderby} {$order} + LIMIT %d,%d + "; + + return $query; + } + + /** + * Heavily restricts the possible columns by which a user can order the table in the bulk editor, thereby preventing a possible CSRF vulnerability. + * + * @param string $orderby The column by which we want to order. + * + * @return string $orderby + */ + protected function sanitize_orderby( $orderby ) { + $valid_column_names = array( + 'post_title', + 'post_type', + 'post_date', + ); + + if ( in_array( $orderby, $valid_column_names ) ) { + return $orderby; + } + + return 'post_title'; + } + + /** + * Makes sure the order clause is always ASC or DESC for the bulk editor table, thereby preventing a possible CSRF vulnerability. + * + * @param string $order Whether we want to sort ascending or descending. + * + * @return string $order SQL order string (ASC, DESC). + */ + protected function sanitize_order( $order ) { + if ( in_array( strtoupper( $order ), array( 'ASC', 'DESC' ) ) ) { + return $order; + } + + return 'ASC'; + } + + /** + * Getting all the items. + * + * @param string $query SQL query to use. + */ + protected function get_items( $query ) { + global $wpdb; + + $this->items = $wpdb->get_results( + $wpdb->prepare( + $query, + $this->pagination['offset'], + $this->pagination['per_page'] + ) + ); + } + + /** + * Getting all the states. + * + * @return string + */ + protected function get_all_states() { + $states = get_post_stati( array( 'show_in_admin_all_list' => true ) ); + $states['trash'] = 'trash'; + + if ( ! empty( $_GET['post_status'] ) ) { + $requested_state = sanitize_text_field( $_GET['post_status'] ); + if ( in_array( $requested_state, $states ) ) { + $states = array( $requested_state ); + } + } + + $states = esc_sql( $states ); + $all_states = "'" . implode( "', '", $states ) . "'"; + + return $all_states; + } + + + /** + * Based on $this->items and the defined columns, the table rows will be displayed. + */ + function display_rows() { + + $records = $this->items; + + list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); + + if ( ( is_array( $records ) && $records !== array() ) && ( is_array( $columns ) && $columns !== array() ) ) { + + foreach ( $records as $rec ) { + + echo ''; + + foreach ( $columns as $column_name => $column_display_name ) { + + $classes = ''; + if ( $primary === $column_name ) { + $classes .= ' has-row-actions column-primary'; + } + + $attributes = $this->column_attributes( $column_name, $hidden, $classes ); + + $column_value = $this->parse_column( $column_name, $rec ); + + if ( method_exists( $this, 'parse_page_specific_column' ) && empty( $column_value ) ) { + $column_value = $this->parse_page_specific_column( $column_name, $rec, $attributes ); + } + + if ( ! empty( $column_value ) ) { + echo sprintf( '%1$s', $column_value, $attributes ); + } + } + + echo ''; + } + } + } + + /** + * Getting the attributes for each table cell. + * + * @param string $column_name Column name string. + * @param array $hidden Set of hidden columns. + * @param string $classes Additional CSS classes. + * + * @return string + */ + protected function column_attributes( $column_name, $hidden, $classes ) { + + $attributes = ''; + $class = array( $column_name, "column-$column_name$classes" ); + + if ( in_array( $column_name, $hidden ) ) { + $class[] = 'hidden'; + } + + if ( ! empty( $class ) ) { + $attributes = 'class="' . implode( ' ', $class ) . '"'; + } + + return $attributes; + } + + /** + * Parsing the title. + * + * @param WP_Post $rec Post object. + * + * @return string + */ + protected function parse_page_title_column( $rec ) { + + $title = empty( $rec->post_title ) ? __( '(no title)', 'wordpress-seo' ) : $rec->post_title; + + $return = sprintf( '%1$s', stripslashes( wp_strip_all_tags( $title ) ) ); + + $post_type_object = get_post_type_object( $rec->post_type ); + $can_edit_post = current_user_can( $post_type_object->cap->edit_post, $rec->ID ); + + $actions = array(); + + if ( $can_edit_post && 'trash' !== $rec->post_status ) { + $actions['edit'] = sprintf( + '%s', + esc_url( get_edit_post_link( $rec->ID, true ) ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Edit “%s”', 'wordpress-seo' ), $title ) ), + __( 'Edit', 'wordpress-seo' ) + ); + } + + if ( $post_type_object->public ) { + if ( in_array( $rec->post_status, array( 'pending', 'draft', 'future' ) ) ) { + if ( $can_edit_post ) { + $actions['view'] = sprintf( + '%s', + esc_url( add_query_arg( 'preview', 'true', get_permalink( $rec->ID ) ) ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Preview “%s”', 'wordpress-seo' ), $title ) ), + __( 'Preview', 'wordpress-seo' ) + ); + } + } + elseif ( 'trash' !== $rec->post_status ) { + $actions['view'] = sprintf( + '%s', + esc_url( get_permalink( $rec->ID ) ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'View “%s”', 'wordpress-seo' ), $title ) ), + __( 'View', 'wordpress-seo' ) + ); + } + } + + $return .= $this->row_actions( $actions ); + + return $return; + + } + + /** + * Parsing the column based on the $column_name. + * + * @param string $column_name Column name. + * @param WP_Post $rec Post object. + * + * @return string + */ + protected function parse_column( $column_name, $rec ) { + + static $date_format; + + if ( $date_format == null ) { + $date_format = get_option( 'date_format' ); + } + + switch ( $column_name ) { + case 'col_page_title': + $column_value = $this->parse_page_title_column( $rec ); + break; + + case 'col_page_slug': + $permalink = get_permalink( $rec->ID ); + $display_slug = str_replace( get_bloginfo( 'url' ), '', $permalink ); + $column_value = sprintf( '%1$s', stripslashes( $display_slug ), esc_url( $permalink ) ); + break; + + case 'col_post_type': + $post_type = get_post_type_object( $rec->post_type ); + $column_value = $post_type->labels->singular_name; + break; + + case 'col_post_status': + $post_status = get_post_status_object( $rec->post_status ); + $column_value = $post_status->label; + break; + + case 'col_post_date': + $column_value = date_i18n( $date_format, strtotime( $rec->post_date ) ); + break; + + case 'col_row_action': + $column_value = sprintf( 'Save Save All', $rec->ID ); + break; + } + + if ( ! empty( $column_value ) ) { + return $column_value; + } + } + + /** + * Parse the field where the existing meta-data value is displayed. + * + * @param integer $record_id Record ID. + * @param string $attributes HTML attributes. + * @param bool|array $values Optional values data array. + * + * @return string + */ + protected function parse_meta_data_field( $record_id, $attributes, $values = false ) { + + // Fill meta data if exists in $this->meta_data. + $meta_data = ( ! empty( $this->meta_data[ $record_id ] ) ) ? $this->meta_data[ $record_id ] : array(); + $meta_key = WPSEO_Meta::$meta_prefix . $this->target_db_field; + $meta_value = ( ! empty( $meta_data[ $meta_key ] ) ) ? $meta_data[ $meta_key ] : ''; + + if ( ! empty( $values ) ) { + $meta_value = $values[ $meta_value ]; + } + + return sprintf( '%1$s', $meta_value, $attributes, $record_id, $this->target_db_field ); + } + + /** + * Method for setting the meta data, which belongs to the records that will be shown on the current page. + * + * This method will loop through the current items ($this->items) for getting the post_id. With this data + * ($needed_ids) the method will query the meta-data table for getting the title. + */ + protected function get_meta_data() { + + $post_ids = $this->get_post_ids(); + $meta_data = $this->get_meta_data_result( $post_ids ); + + $this->parse_meta_data( $meta_data ); + + // Little housekeeping. + unset( $post_ids, $meta_data ); + + } + + /** + * Getting all post_ids from to $this->items. + * + * @return string + */ + protected function get_post_ids() { + $needed_ids = array(); + foreach ( $this->items as $item ) { + $needed_ids[] = $item->ID; + } + + $post_ids = "'" . implode( "', '", $needed_ids ) . "'"; + + return $post_ids; + } + + /** + * Getting the meta_data from database. + * + * @param string $post_ids Post IDs string for SQL IN part. + * + * @return mixed + */ + protected function get_meta_data_result( $post_ids ) { + global $wpdb; + + $meta_data = $wpdb->get_results( + " + SELECT * + FROM {$wpdb->postmeta} + WHERE post_id IN({$post_ids}) && meta_key = '" . WPSEO_Meta::$meta_prefix . $this->target_db_field . "' + " + ); + + return $meta_data; + } + + /** + * Setting $this->meta_data. + * + * @param array $meta_data Meta data set. + */ + protected function parse_meta_data( $meta_data ) { + + foreach ( $meta_data as $row ) { + $this->meta_data[ $row->post_id ][ $row->meta_key ] = $row->meta_value; + } + + } + + /** + * This method will merge general array with given parameter $columns. + * + * @param array $columns Optional columns set. + * + * @return array + */ + protected function merge_columns( $columns = array() ) { + $columns = array_merge( + array( + 'col_page_title' => __( 'WP Page Title', 'wordpress-seo' ), + 'col_post_type' => __( 'Post Type', 'wordpress-seo' ), + 'col_post_status' => __( 'Post Status', 'wordpress-seo' ), + 'col_post_date' => __( 'Publication date', 'wordpress-seo' ), + 'col_page_slug' => __( 'Page URL/Slug', 'wordpress-seo' ), + ), + $columns + ); + + $columns['col_row_action'] = __( 'Action', 'wordpress-seo' ); + + return $columns; + } +} /* End of class */ diff --git a/wp-content/plugins/wordpress-seo/admin/class-bulk-title-editor-list-table.php b/wp-content/plugins/wordpress-seo/admin/class-bulk-title-editor-list-table.php new file mode 100644 index 0000000..2c12227 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-bulk-title-editor-list-table.php @@ -0,0 +1,86 @@ + 'wpseo_bulk_title', + 'plural' => 'wpseo_bulk_titles', + 'ajax' => true, + ); + + /** + * The field in the database where meta field is saved. + * + * @var string + */ + protected $target_db_field = 'title'; + + /** + * The columns shown on the table + * + * @return array + */ + public function get_columns() { + + $columns = array( + /* translators: %1$s expands to Yoast SEO */ + 'col_existing_yoast_seo_title' => sprintf( __( 'Existing %1$s Title', 'wordpress-seo' ), 'Yoast SEO' ), + /* translators: %1$s expands to Yoast SEO */ + 'col_new_yoast_seo_title' => sprintf( __( 'New %1$s Title', 'wordpress-seo' ), 'Yoast SEO' ), + ); + + return $this->merge_columns( $columns ); + } + + /** + * Parse the title columns + * + * @param string $column_name Column name. + * @param object $record Data object. + * @param string $attributes HTML attributes. + * + * @return string + */ + protected function parse_page_specific_column( $column_name, $record, $attributes ) { + + // Fill meta data if exists in $this->meta_data. + $meta_data = ( ! empty( $this->meta_data[ $record->ID ] ) ) ? $this->meta_data[ $record->ID ] : array(); + + switch ( $column_name ) { + case 'col_existing_yoast_seo_title': + // TODO inconsistent echo/return behavior R. + echo $this->parse_meta_data_field( $record->ID, $attributes ); + break; + + case 'col_new_yoast_seo_title': + return sprintf( + '', + 'wpseo-new-title-' . $record->ID, + $record->ID + ); + break; + } + + unset( $meta_data ); + } +} /* End of class */ diff --git a/wp-content/plugins/wordpress-seo/admin/class-config.php b/wp-content/plugins/wordpress-seo/admin/class-config.php new file mode 100644 index 0000000..9f3b2f7 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-config.php @@ -0,0 +1,435 @@ +asset_manager = new WPSEO_Admin_Asset_Manager(); + } + + /** + * Make sure the needed scripts are loaded for admin pages + */ + function init() { + if ( filter_input( INPUT_GET, 'wpseo_reset_defaults' ) && wp_verify_nonce( filter_input( INPUT_GET, 'nonce' ), 'wpseo_reset_defaults' ) && current_user_can( 'manage_options' ) ) { + WPSEO_Options::reset(); + wp_redirect( admin_url( 'admin.php?page=' . WPSEO_Admin::PAGE_IDENTIFIER ) ); + } + + if ( WPSEO_Utils::grant_access() ) { + add_action( 'admin_init', array( $this, 'admin_init' ) ); + add_action( 'admin_enqueue_scripts', array( $this, 'config_page_scripts' ) ); + add_action( 'admin_enqueue_scripts', array( $this, 'config_page_styles' ) ); + } + } + + /** + * Run admin-specific actions. + */ + public function admin_init() { + + $page = filter_input( INPUT_GET, 'page' ); + $tool = filter_input( INPUT_GET, 'tool' ); + $export_nonce = filter_input( INPUT_POST, WPSEO_Export::NONCE_NAME ); + + if ( 'wpseo_tools' === $page && 'import-export' === $tool && $export_nonce !== null ) { + $this->do_yoast_export(); + } + } + + /** + * Loads the required styles for the config page. + */ + function config_page_styles() { + wp_enqueue_style( 'dashboard' ); + wp_enqueue_style( 'thickbox' ); + wp_enqueue_style( 'global' ); + wp_enqueue_style( 'wp-admin' ); + $this->asset_manager->enqueue_style( 'select2' ); + + $this->asset_manager->enqueue_style( 'admin-css' ); + + $this->asset_manager->enqueue_style( 'kb-search' ); + } + + /** + * Loads the required scripts for the config page. + */ + function config_page_scripts() { + $this->asset_manager->enqueue_script( 'admin-script' ); + + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'admin-script', 'wpseoAdminL10n', WPSEO_Help_Center::get_translated_texts() ); + + wp_enqueue_script( 'dashboard' ); + wp_enqueue_script( 'thickbox' ); + + $page = filter_input( INPUT_GET, 'page' ); + + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'admin-script', 'wpseoSelect2Locale', WPSEO_Utils::get_language( WPSEO_Utils::get_user_locale() ) ); + + if ( in_array( $page, array( 'wpseo_social', WPSEO_Admin::PAGE_IDENTIFIER ) ) ) { + wp_enqueue_media(); + + $this->asset_manager->enqueue_script( 'admin-media' ); + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'admin-media', 'wpseoMediaL10n', $this->localize_media_script() ); + } + + if ( 'wpseo_tools' === $page ) { + $this->enqueue_tools_scripts(); + } + } + + /** + * Pass some variables to js for upload module. + * + * @return array + */ + public function localize_media_script() { + return array( + 'choose_image' => __( 'Use Image', 'wordpress-seo' ), + ); + } + + /** + * Enqueues and handles all the tool dependencies. + */ + private function enqueue_tools_scripts() { + $tool = filter_input( INPUT_GET, 'tool' ); + + if ( empty( $tool ) ) { + $this->asset_manager->enqueue_script( 'yoast-seo' ); + } + + if ( 'bulk-editor' === $tool ) { + $this->asset_manager->enqueue_script( 'bulk-editor' ); + } + } + + /** + * Runs the yoast exporter class to possibly init the file download. + */ + private function do_yoast_export() { + check_admin_referer( WPSEO_Export::NONCE_ACTION, WPSEO_Export::NONCE_NAME ); + + if ( ! current_user_can( 'manage_options' ) ) { + return; + } + + $wpseo_post = filter_input( INPUT_POST, 'wpseo' ); + $include_taxonomy = ! empty( $wpseo_post['include_taxonomy'] ); + $export = new WPSEO_Export( $include_taxonomy ); + + if ( $export->has_error() ) { + add_action( 'admin_notices', array( $export, 'set_error_hook' ) ); + + } + } + + /********************** DEPRECATED METHODS **********************/ + + /** + * Exports the current site's Yoast SEO settings. + * + * @param bool $include_taxonomy Whether to include the taxonomy metadata the plugin creates. + * + * @return bool|string $return False when failed, the URL to the export file when succeeded. + */ + public function export_settings( $include_taxonomy ) { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please use the WPSEO_Export class.' ); + + $export = new WPSEO_Export( $include_taxonomy ); + if ( $export->success ) { + return $export->export_zip_url; + } + + return false; + } + + /** + * Generates the header for admin pages + * + * @deprecated 2.0 + * + * @param bool $form Whether or not the form start tag should be included. + * @param mixed $option_long_name The long name of the option to use for the current page. + * @param string $option The short name of the option to use for the current page. + * @param bool $contains_files Whether the form should allow for file uploads. + */ + public function admin_header( $form = true, $option_long_name = false, $option = 'wpseo', $contains_files = false ) { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please use the Yoast_Form class.' ); + + Yoast_Form::get_instance()->admin_header( $form, $option, $contains_files, $option_long_name ); + } + + /** + * Generates the footer for admin pages + * + * @deprecated 2.0 + * + * @param bool $submit Whether or not a submit button and form end tag should be shown. + * @param bool $show_sidebar Whether or not to show the banner sidebar - used by premium plugins to disable it. + */ + public function admin_footer( $submit = true, $show_sidebar = true ) { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please use the Yoast_Form class.' ); + + Yoast_Form::get_instance()->admin_footer( $submit, $show_sidebar ); + } + + /** + * Generates the sidebar for admin pages. + * + * @deprecated 2.0 + */ + public function admin_sidebar() { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please use the Yoast_Form class.' ); + + Yoast_Form::get_instance()->admin_sidebar(); + } + + /** + * Create a Checkbox input field. + * + * @deprecated 2.0 + * + * @param string $var The variable within the option to create the checkbox for. + * @param string $label The label to show for the variable. + * @param bool $label_left Whether the label should be left (true) or right (false). + * @param string $option The option the variable belongs to. + */ + public function checkbox( $var, $label, $label_left = false, $option = '' ) { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please use the Yoast_Form class.' ); + + if ( $option !== '' ) { + Yoast_Form::get_instance()->set_option( $option ); + } + + Yoast_Form::get_instance()->checkbox( $var, $label, $label_left ); + } + + /** + * Create a Text input field. + * + * @deprecated 2.0 + * + * @param string $var The variable within the option to create the text input field for. + * @param string $label The label to show for the variable. + * @param string $option The option the variable belongs to. + */ + function textinput( $var, $label, $option = '' ) { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please use the Yoast_Form class.' ); + + if ( $option !== '' ) { + Yoast_Form::get_instance()->set_option( $option ); + } + Yoast_Form::get_instance()->textinput( $var, $label ); + } + + /** + * Create a textarea. + * + * @deprecated 2.0 + * + * @param string $var The variable within the option to create the textarea for. + * @param string $label The label to show for the variable. + * @param string $option The option the variable belongs to. + * @param array $attr The CSS class to assign to the textarea. + */ + function textarea( $var, $label, $option = '', $attr = array() ) { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please use the Yoast_Form class.' ); + + if ( $option !== '' ) { + Yoast_Form::get_instance()->set_option( $option ); + } + + Yoast_Form::get_instance()->textarea( $var, $label, $attr ); + } + + /** + * Create a hidden input field. + * + * @deprecated 2.0 + * + * @param string $var The variable within the option to create the hidden input for. + * @param string $option The option the variable belongs to. + */ + function hidden( $var, $option = '' ) { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please use the Yoast_Form class.' ); + + if ( $option !== '' ) { + Yoast_Form::get_instance()->set_option( $option ); + } + + Yoast_Form::get_instance()->hidden( $var ); + } + + /** + * Create a Select Box. + * + * @deprecated 2.0 + * + * @param string $var The variable within the option to create the select for. + * @param string $label The label to show for the variable. + * @param array $values The select options to choose from. + * @param string $option The option the variable belongs to. + */ + function select( $var, $label, $values, $option = '' ) { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please use the Yoast_Form class.' ); + + if ( $option !== '' ) { + Yoast_Form::get_instance()->set_option( $option ); + } + + Yoast_Form::get_instance()->select( $var, $label, $values ); + } + + /** + * Create a File upload field. + * + * @deprecated 2.0 + * + * @param string $var The variable within the option to create the file upload field for. + * @param string $label The label to show for the variable. + * @param string $option The option the variable belongs to. + */ + function file_upload( $var, $label, $option = '' ) { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please use the Yoast_Form class.' ); + + if ( $option !== '' ) { + Yoast_Form::get_instance()->set_option( $option ); + } + + Yoast_Form::get_instance()->file_upload( $var, $label ); + } + + /** + * Media input + * + * @deprecated 2.0 + * + * @param string $var Option name. + * @param string $label Label message. + * @param string $option Optional option key. + */ + function media_input( $var, $label, $option = '' ) { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please use the Yoast_Form class.' ); + + if ( $option !== '' ) { + Yoast_Form::get_instance()->set_option( $option ); + } + + Yoast_Form::get_instance()->media_input( $var, $label ); + } + + /** + * Create a Radio input field. + * + * @deprecated 2.0 + * + * @param string $var The variable within the option to create the file upload field for. + * @param array $values The radio options to choose from. + * @param string $label The label to show for the variable. + * @param string $option The option the variable belongs to. + */ + function radio( $var, $values, $label, $option = '' ) { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please use the Yoast_Form class.' ); + + if ( $option !== '' ) { + Yoast_Form::get_instance()->set_option( $option ); + } + + Yoast_Form::get_instance()->radio( $var, $values, $label ); + } + + /** + * Create a postbox widget. + * + * @deprecated 2.0 + * + * @param string $id ID of the postbox. + * @param string $title Title of the postbox. + * @param string $content Content of the postbox. + */ + function postbox( $id, $title, $content ) { + _deprecated_function( __METHOD__, 'WPSEO 2.0', 'This method is deprecated, please re-implement the admin pages.' ); + + ?> +
+

+ +
+ '; + foreach ( $rows as $row ) { + $content .= ''; + if ( isset( $row['id'] ) && $row['id'] != '' ) { + $content .= ''; + } + else { + $content .= esc_html( $row['label'] ); + } + if ( isset( $row['desc'] ) && $row['desc'] != '' ) { + $content .= '
' . esc_html( $row['desc'] ) . ''; + } + $content .= ''; + $content .= $row['content']; + $content .= ''; + } + $content .= ''; + + return $content; + } + + /** + * Resets the site to the default Yoast SEO settings and runs a title test to check + * whether force rewrite needs to be on. + * + * @deprecated 1.5.0 + * @deprecated use WPSEO_Options::reset() + * @see WPSEO_Options::reset() + */ + function reset_defaults() { + _deprecated_function( __METHOD__, 'WPSEO 1.5.0', 'WPSEO_Options::reset()' ); + WPSEO_Options::reset(); + } +} /* End of class */ diff --git a/wp-content/plugins/wordpress-seo/admin/class-customizer.php b/wp-content/plugins/wordpress-seo/admin/class-customizer.php new file mode 100644 index 0000000..1c6a9e4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-customizer.php @@ -0,0 +1,255 @@ +wp_customize = $wp_customize; + + $this->breadcrumbs_section(); + $this->breadcrumbs_blog_remove_setting(); + $this->breadcrumbs_separator_setting(); + $this->breadcrumbs_home_setting(); + $this->breadcrumbs_prefix_setting(); + $this->breadcrumbs_archiveprefix_setting(); + $this->breadcrumbs_searchprefix_setting(); + $this->breadcrumbs_404_setting(); + } + + /** + * Add the breadcrumbs section to the customizer + */ + private function breadcrumbs_section() { + $this->wp_customize->add_section( + 'wpseo_breadcrumbs_customizer_section', array( + /* translators: %s is the name of the plugin */ + 'title' => sprintf( __( '%s Breadcrumbs', 'wordpress-seo' ), 'Yoast SEO' ), + 'priority' => 999, + 'active_callback' => array( $this, 'breadcrumbs_active_callback' ), + ) + ); + + } + + /** + * Returns whether or not the breadcrumbs are active + * + * @return bool + */ + public function breadcrumbs_active_callback() { + $options = WPSEO_Options::get_option( 'wpseo_internallinks' ); + + return true === ( current_theme_supports( 'yoast-seo-breadcrumbs' ) || $options['breadcrumbs-enable'] ); + } + + /** + * Adds the breadcrumbs remove blog checkbox + */ + private function breadcrumbs_blog_remove_setting() { + $this->wp_customize->add_setting( + 'wpseo_internallinks[breadcrumbs-blog-remove]', array( + 'default' => '', + 'type' => 'option', + 'transport' => 'refresh', + ) + ); + + $this->wp_customize->add_control( + new WP_Customize_Control( + $this->wp_customize, 'wpseo-breadcrumbs-blog-remove', array( + 'label' => __( 'Remove blog page from breadcrumbs', 'wordpress-seo' ), + 'type' => 'checkbox', + 'section' => 'wpseo_breadcrumbs_customizer_section', + 'settings' => 'wpseo_internallinks[breadcrumbs-blog-remove]', + 'context' => '', + 'active_callback' => array( $this, 'breadcrumbs_blog_remove_active_cb' ), + ) + ) + ); + } + + /** + * Returns whether or not to show the breadcrumbs blog remove option + * + * @return bool + */ + public function breadcrumbs_blog_remove_active_cb() { + return 'page' === get_option( 'show_on_front' ); + } + + /** + * Adds the breadcrumbs separator text field + */ + private function breadcrumbs_separator_setting() { + $this->wp_customize->add_setting( + 'wpseo_internallinks[breadcrumbs-sep]', array( + 'default' => '', + 'type' => 'option', + 'transport' => 'refresh', + ) + ); + + $this->wp_customize->add_control( + new WP_Customize_Control( + $this->wp_customize, 'wpseo-breadcrumbs-separator', array( + 'label' => __( 'Breadcrumbs separator:', 'wordpress-seo' ), + 'type' => 'text', + 'section' => 'wpseo_breadcrumbs_customizer_section', + 'settings' => 'wpseo_internallinks[breadcrumbs-sep]', + 'context' => '', + ) + ) + ); + } + + /** + * Adds the breadcrumbs home anchor text field + */ + private function breadcrumbs_home_setting() { + $this->wp_customize->add_setting( + 'wpseo_internallinks[breadcrumbs-home]', array( + 'default' => '', + 'type' => 'option', + 'transport' => 'refresh', + ) + ); + + $this->wp_customize->add_control( + new WP_Customize_Control( + $this->wp_customize, 'wpseo-breadcrumbs-home', array( + 'label' => __( 'Anchor text for the homepage:', 'wordpress-seo' ), + 'type' => 'text', + 'section' => 'wpseo_breadcrumbs_customizer_section', + 'settings' => 'wpseo_internallinks[breadcrumbs-home]', + 'context' => '', + ) + ) + ); + } + + /** + * Adds the breadcrumbs prefix text field + */ + private function breadcrumbs_prefix_setting() { + $this->wp_customize->add_setting( + 'wpseo_internallinks[breadcrumbs-prefix]', array( + 'default' => '', + 'type' => 'option', + 'transport' => 'refresh', + ) + ); + + $this->wp_customize->add_control( + new WP_Customize_Control( + $this->wp_customize, 'wpseo-breadcrumbs-prefix', array( + 'label' => __( 'Prefix for breadcrumbs:', 'wordpress-seo' ), + 'type' => 'text', + 'section' => 'wpseo_breadcrumbs_customizer_section', + 'settings' => 'wpseo_internallinks[breadcrumbs-prefix]', + 'context' => '', + ) + ) + ); + } + + /** + * Adds the breadcrumbs archive prefix text field + */ + private function breadcrumbs_archiveprefix_setting() { + $this->wp_customize->add_setting( + 'wpseo_internallinks[breadcrumbs-archiveprefix]', array( + 'default' => '', + 'type' => 'option', + 'transport' => 'refresh', + ) + ); + + $this->wp_customize->add_control( + new WP_Customize_Control( + $this->wp_customize, 'wpseo-breadcrumbs-archiveprefix', array( + 'label' => __( 'Prefix for archive pages:', 'wordpress-seo' ), + 'type' => 'text', + 'section' => 'wpseo_breadcrumbs_customizer_section', + 'settings' => 'wpseo_internallinks[breadcrumbs-archiveprefix]', + 'context' => '', + ) + ) + ); + } + + /** + * Adds the breadcrumbs search prefix text field + */ + private function breadcrumbs_searchprefix_setting() { + $this->wp_customize->add_setting( + 'wpseo_internallinks[breadcrumbs-searchprefix]', array( + 'default' => '', + 'type' => 'option', + 'transport' => 'refresh', + ) + ); + + $this->wp_customize->add_control( + new WP_Customize_Control( + $this->wp_customize, 'wpseo-breadcrumbs-searchprefix', array( + 'label' => __( 'Prefix for search result pages:', 'wordpress-seo' ), + 'type' => 'text', + 'section' => 'wpseo_breadcrumbs_customizer_section', + 'settings' => 'wpseo_internallinks[breadcrumbs-searchprefix]', + 'context' => '', + ) + ) + ); + } + + /** + * Adds the breadcrumb 404 prefix text field + */ + private function breadcrumbs_404_setting() { + $this->wp_customize->add_setting( + 'wpseo_internallinks[breadcrumbs-404crumb]', array( + 'default' => '', + 'type' => 'option', + 'transport' => 'refresh', + ) + ); + + $this->wp_customize->add_control( + new WP_Customize_Control( + $this->wp_customize, 'wpseo-breadcrumbs-404crumb', array( + 'label' => __( 'Breadcrumb for 404 pages:', 'wordpress-seo' ), + 'type' => 'text', + 'section' => 'wpseo_breadcrumbs_customizer_section', + 'settings' => 'wpseo_internallinks[breadcrumbs-404crumb]', + 'context' => '', + ) + ) + ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-export.php b/wp-content/plugins/wordpress-seo/admin/class-export.php new file mode 100644 index 0000000..14a8fce --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-export.php @@ -0,0 +1,276 @@ +include_taxonomy = $include_taxonomy; + $this->dir = wp_upload_dir(); + + $this->export_settings(); + } + + /** + * Returns true when the property error has a value. + * + * @return bool + */ + public function has_error() { + return ( $this->error !== '' ); + } + + /** + * Sets the error hook, to display the error to the user. + */ + public function set_error_hook() { + $class = 'notice notice-error'; + $message = sprintf( __( 'Error creating %1$s export: ', 'wordpress-seo' ), 'Yoast SEO' ) . $this->error; + + printf( '

%2$s

', $class, $message ); + } + + /** + * Exports the current site's WP SEO settings. + */ + private function export_settings() { + + $this->export_header(); + + foreach ( WPSEO_Options::get_option_names() as $opt_group ) { + $this->write_opt_group( $opt_group ); + } + + $this->taxonomy_metadata(); + + if ( ! $this->write_settings_file() ) { + $this->error = __( 'Could not write settings to file.', 'wordpress-seo' ); + + return; + } + + if ( $this->zip_file() ) { + // Just exit, because there is a download being served. + exit; + } + } + + /** + * Writes the header of the export file. + */ + private function export_header() { + /* translators: %1$s expands to Yoast SEO */ + $this->write_line( '; ' . sprintf( __( 'This is a settings export file for the %1$s plugin by Yoast.com', 'wordpress-seo' ), 'Yoast SEO' ) . ' - https://yoast.com/wordpress/plugins/seo/' ); + if ( $this->include_taxonomy ) { + $this->write_line( '; ' . __( 'This export includes taxonomy metadata', 'wordpress-seo' ) ); + } + } + + /** + * Writes a line to the export + * + * @param string $line Line string. + * @param boolean $newline_first Boolean flag whether to prepend with new line. + */ + private function write_line( $line, $newline_first = false ) { + if ( $newline_first ) { + $this->export .= PHP_EOL; + } + $this->export .= $line . PHP_EOL; + } + + /** + * Writes an entire option group to the export + * + * @param string $opt_group Option group name. + */ + private function write_opt_group( $opt_group ) { + + $this->write_line( '[' . $opt_group . ']', true ); + + $options = get_option( $opt_group ); + + if ( ! is_array( $options ) ) { + return; + } + + foreach ( $options as $key => $elem ) { + if ( is_array( $elem ) ) { + for ( $i = 0; $i < count( $elem ); $i ++ ) { + $this->write_setting( $key . '[]', $elem[ $i ] ); + } + } + else { + $this->write_setting( $key, $elem ); + } + } + } + + /** + * Writes a settings line to the export + * + * @param string $key Key string. + * @param string $val Value string. + */ + private function write_setting( $key, $val ) { + if ( is_string( $val ) ) { + $val = '"' . $val . '"'; + } + $this->write_line( $key . ' = ' . $val ); + } + + /** + * Adds the taxonomy meta data if there is any + */ + private function taxonomy_metadata() { + if ( $this->include_taxonomy ) { + $taxonomy_meta = get_option( 'wpseo_taxonomy_meta' ); + if ( is_array( $taxonomy_meta ) ) { + $this->write_line( '[wpseo_taxonomy_meta]', true ); + $this->write_setting( 'wpseo_taxonomy_meta', urlencode( wp_json_encode( $taxonomy_meta ) ) ); + } + else { + $this->write_line( '; ' . __( 'No taxonomy metadata found', 'wordpress-seo' ), true ); + } + } + } + + /** + * Writes the settings to our temporary settings.ini file + * + * @return boolean unsigned + */ + private function write_settings_file() { + $handle = fopen( $this->dir['path'] . '/' . self::INI_FILENAME, 'w' ); + if ( ! $handle ) { + return false; + } + + $res = fwrite( $handle, $this->export ); + if ( ! $res ) { + return false; + } + + fclose( $handle ); + + return true; + } + + /** + * Zips the settings ini file + * + * @return bool|null + */ + private function zip_file() { + $is_zip_created = $this->create_zip(); + + // The settings.ini isn't needed, because it's in the zipfile. + $this->remove_settings_ini(); + + if ( ! $is_zip_created ) { + $this->error = __( 'Could not zip settings-file.', 'wordpress-seo' ); + + return false; + } + + $this->serve_settings_export(); + $this->remove_zip(); + + return true; + } + + /** + * Creates the zipfile and returns true if it created successful. + * + * @return bool + */ + private function create_zip() { + chdir( $this->dir['path'] ); + $zip = new PclZip( './' . self::ZIP_FILENAME ); + if ( 0 === $zip->create( './' . self::INI_FILENAME ) ) { + return false; + } + + return file_exists( self::ZIP_FILENAME ); + } + + /** + * Downloads the zip file. + */ + private function serve_settings_export() { + // Clean any content that has been already output. For example by other plugins or faulty PHP files. + if ( ob_get_contents() ) { + ob_clean(); + } + header( 'Content-Type: application/octet-stream; charset=utf-8' ); + header( 'Content-Transfer-Encoding: Binary' ); + header( 'Content-Disposition: attachment; filename=' . self::ZIP_FILENAME ); + header( 'Content-Length: ' . filesize( self::ZIP_FILENAME ) ); + + readfile( self::ZIP_FILENAME ); + } + + /** + * Removes the settings ini file. + */ + private function remove_settings_ini() { + unlink( './' . self::INI_FILENAME ); + } + + /** + * Removes the files because they are already downloaded. + */ + private function remove_zip() { + unlink( './' . self::ZIP_FILENAME ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-help-center-item.php b/wp-content/plugins/wordpress-seo/admin/class-help-center-item.php new file mode 100644 index 0000000..cc3449c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-help-center-item.php @@ -0,0 +1,94 @@ +identifier = $identifier; + $this->label = $label; + $this->dashicon = $dashicon; + $this->args = $args; + } + + /** + * Get the label. + * + * @return string + */ + public function get_label() { + return $this->label; + } + + /** + * Get the identifier. + * + * @return string + */ + public function get_identifier() { + return $this->identifier; + } + + /** + * Get the dashicon. + * + * @return string + */ + public function get_dashicon() { + return $this->dashicon; + } + + /** + * Get the content of this tab. + * + * @return mixed|string + */ + public function get_content() { + if ( ! empty( $this->args['content'] ) ) { + return $this->args['content']; + } + + if ( ! empty( $this->args['callback'] ) ) { + return call_user_func_array( $this->args['callback'], array( $this ) ); + } + + if ( ! empty( $this->args['view'] ) ) { + $view = $this->args['view']; + if ( substr( $view, - 4 ) === '.php' ) { + $view = substr( $view, 0, - 4 ); + } + + if ( ! empty( $this->args['view_arguments'] ) ) { + extract( $this->args['view_arguments'] ); + } + + include WPSEO_PATH . 'admin/views/' . $view . '.php'; + } + + return ''; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-help-center.php b/wp-content/plugins/wordpress-seo/admin/class-help-center.php new file mode 100644 index 0000000..828e8e8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-help-center.php @@ -0,0 +1,213 @@ +group_name = $group_name; + $this->tab = $tab; + + $this->add_video_tutorial_item(); + $this->add_kb_search_item(); + $this->add_contact_support_item(); + } + + /** + * Add the knowledge base search help center item to the help center. + */ + private function add_kb_search_item() { + $kb_help_center_item = new WPSEO_Help_Center_Item( + 'knowledge-base', + __( 'Knowledge base', 'wordpress-seo' ), + array( + 'content' => '', + 'view_arguments' => array( 'identifier' => $this->tab->get_name() ), + ), + 'dashicons-search' + ); + array_push( $this->help_center_items, $kb_help_center_item ); + } + + /** + * Add the contact support help center item to the help center. + */ + private function add_contact_support_item() { + $popup_title = sprintf( __( 'Email support is a %s feature', 'wordpress-seo' ), 'Yoast SEO Premium' ); + /* translators: %1$s: expands to 'Yoast SEO Premium', %2$s: links to Yoast SEO Premium plugin page. */ + $popup_content = sprintf( __( 'To be able to contact our support team, you need %1$s. You can buy the plugin, including one year of support, updates and upgrades, on %2$s.', 'wordpress-seo' ), + 'Yoast SEO Premium', + 'yoast.com' ); + + $premium_popup = new WPSEO_Premium_Popup( 'contact-support', 'h3', $popup_title, $popup_content ); + $contact_support_help_center_item = new WPSEO_Help_Center_Item( + 'contact-support', + __( 'Email support', 'wordpress-seo' ), + array( 'content' => $premium_popup->get_premium_message( false ) ), + 'dashicons-email-alt' + ); + + array_push( $this->help_center_items, $contact_support_help_center_item ); + } + + /** + * Add the video tutorial help center item to the help center. + */ + private function add_video_tutorial_item() { + array_push( $this->help_center_items, $this->get_video_help_center_item() ); + } + + /** + * @return mixed (WPSEO_Help_Center_Item | null) Returns a help center item containing a video. + */ + private function get_video_help_center_item() { + $url = $this->tab->get_video_url(); + if ( empty( $url ) ) { + return null; + } + + return new WPSEO_Help_Center_Item( + 'video', + __( 'Video tutorial', 'wordpress-seo' ), + array( + 'view' => 'partial-help-center-video', + 'view_arguments' => array( + 'tab_video_url' => $url, + ), + ), + 'dashicons-video-alt3' + ); + } + + /** + * Outputs the help center. + */ + public function output_help_center() { + $help_center_items = apply_filters( 'wpseo_help_center_items', $this->help_center_items ); + $help_center_items = array_filter( $help_center_items, array( $this, 'is_a_help_center_item' ) ); + if ( empty( $help_center_items ) ) { + return; + } + + $id = sprintf( 'tab-help-center-%s-%s', $this->group_name, $this->tab->get_name() ); + ?> +
+ +
+
+
    + get_identifier(); + $dashicon = $help_center_item->get_dashicon(); + if ( ! empty( $dashicon ) ) { + $dashicon = 'dashicons-before ' . $dashicon; + } + $link_id = "tab-link-{$this->group_name}_{$this->tab->get_name()}__{$id}"; + $panel_id = "tab-panel-{$this->group_name}_{$this->tab->get_name()}__{$id}"; + ?> + + + +
+
+
+ get_identifier(); + + $panel_id = "tab-panel-{$this->group_name}_{$this->tab->get_name()}__{$id}"; + ?> +
+ get_content(); ?> +
+ +
+
+
+ %s and replaced again in the javascript with the actual variable. + * + * @return array Translated text strings for the help center. + */ + public static function get_translated_texts() { + return array( + /* translators: %s: '%%term_title%%' variable used in titles and meta's template that's not compatible with the given template */ + 'variable_warning' => sprintf( __( 'Warning: the variable %s cannot be used in this template. See the help center for more info.', 'wordpress-seo' ), '%s' ), + 'locale' => get_locale(), + 'userLocale' => WPSEO_Utils::get_user_locale(), + /* translators: %d: number of knowledge base search results found. */ + 'kb_found_results' => __( 'Number of search results: %d', 'wordpress-seo' ), + 'kb_no_results' => __( 'No results found.', 'wordpress-seo' ), + 'kb_heading' => __( 'Search the Yoast knowledge base', 'wordpress-seo' ), + 'kb_search_button_text' => __( 'Search', 'wordpress-seo' ), + 'kb_search_results_heading' => __( 'Search results', 'wordpress-seo' ), + 'kb_error_message' => __( 'Something went wrong. Please try again later.', 'wordpress-seo' ), + 'kb_loading_placeholder' => __( 'Loading...', 'wordpress-seo' ), + 'kb_search' => __( 'search', 'wordpress-seo' ), + 'kb_back' => __( 'Back', 'wordpress-seo' ), + 'kb_back_label' => __( 'Back to search results' , 'wordpress-seo' ), + 'kb_open' => __( 'Open', 'wordpress-seo' ), + 'kb_open_label' => __( 'Open the knowledge base article in a new window or read it in the iframe below' , 'wordpress-seo' ), + 'kb_iframe_title' => __( 'Knowledge base article', 'wordpress-seo' ), + ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-import-aioseo.php b/wp-content/plugins/wordpress-seo/admin/class-import-aioseo.php new file mode 100644 index 0000000..5546284 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-import-aioseo.php @@ -0,0 +1,98 @@ +aioseo_options = get_option( 'aioseop_options' ); + + $this->import_metas(); + $this->import_ga(); + } + + /** + * Import All In One SEO meta values + */ + private function import_metas() { + WPSEO_Meta::replace_meta( '_aioseop_description', WPSEO_Meta::$meta_prefix . 'metadesc', $this->replace ); + WPSEO_Meta::replace_meta( '_aioseop_keywords', WPSEO_Meta::$meta_prefix . 'metakeywords', $this->replace ); + WPSEO_Meta::replace_meta( '_aioseop_title', WPSEO_Meta::$meta_prefix . 'title', $this->replace ); + } + + /** + * Import the Google Analytics settings + */ + private function import_ga() { + if ( isset( $this->aioseo_options['aiosp_google_analytics_id'] ) ) { + + if ( get_option( 'yst_ga' ) === false ) { + update_option( 'yst_ga', $this->determine_ga_settings() ); + } + + $plugin_install_nonce = wp_create_nonce( 'install-plugin_google-analytics-for-wordpress' ); // Use the old name because that's the WordPress.org repo. + + $this->set_msg( __( sprintf( + 'All in One SEO data successfully imported. Would you like to %sdisable the All in One SEO plugin%s. You\'ve had Google Analytics enabled in All in One SEO, would you like to install our %sGoogle Analytics plugin%s?', + '', + '', + '', + '' + ), 'wordpress-seo' ) ); + } + else { + $this->set_msg( __( sprintf( 'All in One SEO data successfully imported. Would you like to %sdisable the All in One SEO plugin%s.', '', '' ), 'wordpress-seo' ) ); + } + } + + /** + * Determine the appropriate GA settings for this site + * + * @return array $ga_settings + */ + private function determine_ga_settings() { + $ga_universal = 0; + if ( $this->aioseo_options['aiosp_ga_use_universal_analytics'] == 'on' ) { + $ga_universal = 1; + } + + $ga_track_outbound = 0; + if ( $this->aioseo_options['aiosp_ga_track_outbound_links'] == 'on' ) { + $ga_track_outbound = 1; + } + + $ga_anonymize_ip = 0; + if ( $this->aioseo_options['aiosp_ga_anonymize_ip'] == 'on' ) { + $ga_anonymize_ip = 1; + } + + return array( + 'ga_general' => array( + 'manual_ua_code' => (int) 1, + 'manual_ua_code_field' => $this->aioseo_options['aiosp_google_analytics_id'], + 'enable_universal' => $ga_universal, + 'track_outbound' => $ga_track_outbound, + 'ignore_users' => (array) $this->aioseo_options['aiosp_ga_exclude_users'], + 'anonymize_ips' => (int) $ga_anonymize_ip, + ), + ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-import-external.php b/wp-content/plugins/wordpress-seo/admin/class-import-external.php new file mode 100644 index 0000000..cb40a33 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-import-external.php @@ -0,0 +1,108 @@ +replace = $replace; + + WPSEO_Options::initialize(); + } + + /** + * Convenience function to set import message + * + * @param string $msg Message string. + */ + protected function set_msg( $msg ) { + if ( ! empty( $this->msg ) ) { + $this->msg .= PHP_EOL; + } + $this->msg .= $msg; + } + + /** + * Deletes an option depending on the class replace state + * + * @param string $option Option key. + */ + protected function perhaps_delete( $option ) { + if ( $this->replace ) { + delete_option( $option ); + } + } + + /** + * Import HeadSpace SEO settings + */ + public function import_headspace() { + global $wpdb; + + WPSEO_Meta::replace_meta( '_headspace_description', WPSEO_Meta::$meta_prefix . 'metadesc', $this->replace ); + WPSEO_Meta::replace_meta( '_headspace_keywords', WPSEO_Meta::$meta_prefix . 'metakeywords', $this->replace ); + WPSEO_Meta::replace_meta( '_headspace_page_title', WPSEO_Meta::$meta_prefix . 'title', $this->replace ); + + /** + * @todo [JRF => whomever] verify how headspace sets these metas ( 'noindex', 'nofollow', 'noarchive', 'noodp', 'noydir' ) + * and if the values saved are concurrent with the ones we use (i.e. 0/1/2) + */ + WPSEO_Meta::replace_meta( '_headspace_noindex', WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', $this->replace ); + WPSEO_Meta::replace_meta( '_headspace_nofollow', WPSEO_Meta::$meta_prefix . 'meta-robots-nofollow', $this->replace ); + + /* + * @todo - [JRF => whomever] check if this can be done more efficiently by querying only the meta table + * possibly directly changing it using concat on the existing values + */ + $posts = $wpdb->get_results( "SELECT ID FROM $wpdb->posts" ); + if ( is_array( $posts ) && $posts !== array() ) { + foreach ( $posts as $post ) { + $custom = get_post_custom( $post->ID ); + $robotsmeta_adv = ''; + if ( isset( $custom['_headspace_noarchive'] ) ) { + $robotsmeta_adv .= 'noarchive,'; + } + if ( isset( $custom['_headspace_noodp'] ) ) { + $robotsmeta_adv .= 'noodp,'; + } + $robotsmeta_adv = preg_replace( '`,$`', '', $robotsmeta_adv ); + WPSEO_Meta::set_value( 'meta-robots-adv', $robotsmeta_adv, $post->ID ); + } + } + + if ( $this->replace ) { + // We no longer use noydir, but we remove the meta key as it's unneeded. + $hs_meta = array( 'noarchive', 'noodp', 'noydir' ); + foreach ( $hs_meta as $meta ) { + delete_post_meta_by_key( '_headspace_' . $meta ); + } + unset( $hs_meta, $meta ); + } + $this->set_msg( __( 'HeadSpace2 data successfully imported', 'wordpress-seo' ) ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-import-woothemes-seo.php b/wp-content/plugins/wordpress-seo/admin/class-import-woothemes-seo.php new file mode 100644 index 0000000..f06fcd3 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-import-woothemes-seo.php @@ -0,0 +1,146 @@ +import_home(); + $this->import_option( 'seo_woo_single_layout', 'post' ); + $this->import_option( 'seo_woo_page_layout', 'page' ); + $this->import_archive_option(); + $this->import_custom_values( 'seo_woo_meta_home_desc', 'metadesc-home-wpseo' ); + $this->import_custom_values( 'seo_woo_meta_home_key', 'metakey-home-wpseo' ); + $this->import_metas(); + + update_option( 'wpseo_titles', $this->options ); + + $this->set_msg( __( 'WooThemes SEO framework settings & data successfully imported.', 'wordpress-seo' ) ); + } + + /** + * Holds the WPSEO Title Options + * + * @var array + */ + private $options; + + /** + * Import options. + * + * @param string $option Option key. + * @param string $post_type Post type name to import for. + */ + private function import_option( $option, $post_type ) { + switch ( get_option( $option ) ) { + case 'a': + $this->options[ 'title-' . $post_type ] = '%%title%% %%sep%% %%sitename%%'; + break; + case 'b': + $this->options[ 'title-' . $post_type ] = '%%title%%'; + break; + case 'c': + $this->options[ 'title-' . $post_type ] = '%%sitename%% %%sep%% %%title%%'; + break; + case 'd': + $this->options[ 'title-' . $post_type ] = '%%title%% %%sep%% %%sitedesc%%'; + break; + case 'e': + $this->options[ 'title-' . $post_type ] = '%%sitename%% %%sep%% %%title%% %%sep%% %%sitedesc%%'; + break; + } + $this->perhaps_delete( $option ); + } + + /** + * Import the archive layout for all taxonomies + */ + private function import_archive_option() { + $reinstate_replace = false; + if ( $this->replace ) { + $this->replace = false; + $reinstate_replace = true; + } + $taxonomies = get_taxonomies( array( 'public' => true ), 'names' ); + if ( is_array( $taxonomies ) && $taxonomies !== array() ) { + foreach ( $taxonomies as $tax ) { + $this->import_option( 'seo_woo_archive_layout', 'tax-' . $tax ); + } + } + if ( $reinstate_replace ) { + $this->replace = true; + $this->perhaps_delete( 'seo_woo_archive_layout' ); + } + } + + /** + * Import custom descriptions and meta keys + * + * @param string $option Option key. + * @param string $key Internal key to import over. + */ + private function import_custom_values( $option, $key ) { + // Import the custom homepage description. + if ( 'c' == get_option( $option ) ) { + $this->options[ $key ] = get_option( $option . '_custom' ); + } + $this->perhaps_delete( $option ); + $this->perhaps_delete( $option . '_custom' ); + } + + /** + * Imports the WooThemes SEO homepage settings + */ + private function import_home() { + switch ( get_option( 'seo_woo_home_layout' ) ) { + case 'a': + $this->options['title-home-wpseo'] = '%%sitename%% %%sep%% %%sitedesc%%'; + break; + case 'b': + $this->options['title-home-wpseo'] = '%%sitename%% ' . get_option( 'seo_woo_paged_var' ) . ' %%pagenum%%'; + break; + case 'c': + $this->options['title-home-wpseo'] = '%%sitedesc%%'; + break; + } + $this->perhaps_delete( 'seo_woo_home_layout' ); + } + + /** + * Import meta values if they're applicable + */ + private function import_metas() { + WPSEO_Meta::replace_meta( 'seo_follow', WPSEO_Meta::$meta_prefix . 'meta-robots-nofollow', $this->replace ); + WPSEO_Meta::replace_meta( 'seo_noindex', WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', $this->replace ); + + // If WooSEO is set to use the Woo titles, import those. + if ( 'true' == get_option( 'seo_woo_wp_title' ) ) { + WPSEO_Meta::replace_meta( 'seo_title', WPSEO_Meta::$meta_prefix . 'title', $this->replace ); + } + + // If WooSEO is set to use the Woo meta descriptions, import those. + if ( 'b' == get_option( 'seo_woo_meta_single_desc' ) ) { + WPSEO_Meta::replace_meta( 'seo_description', WPSEO_Meta::$meta_prefix . 'metadesc', $this->replace ); + } + + // If WooSEO is set to use the Woo meta keywords, import those. + if ( 'b' == get_option( 'seo_woo_meta_single_key' ) ) { + WPSEO_Meta::replace_meta( 'seo_keywords', WPSEO_Meta::$meta_prefix . 'metakeywords', $this->replace ); + } + + foreach ( array( 'seo_woo_wp_title', 'seo_woo_meta_single_desc', 'seo_woo_meta_single_key' ) as $option ) { + $this->perhaps_delete( $option ); + } + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-import-wpseo.php b/wp-content/plugins/wordpress-seo/admin/class-import-wpseo.php new file mode 100644 index 0000000..ea742a7 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-import-wpseo.php @@ -0,0 +1,185 @@ +import_post_metas(); + $this->import_taxonomy_metas(); + + $this->set_msg( + __( + sprintf( + 'wpSEO data successfully imported. Would you like to %sdisable the wpSEO plugin%s?', + '', + '' + ), + 'wordpress-seo' + ) + ); + + } + + /** + * Import the post meta values to Yoast SEO by replacing the wpSEO fields by Yoast SEO fields + */ + private function import_post_metas() { + WPSEO_Meta::replace_meta( '_wpseo_edit_title', WPSEO_Meta::$meta_prefix . 'title', $this->replace ); + WPSEO_Meta::replace_meta( '_wpseo_edit_description', WPSEO_Meta::$meta_prefix . 'metadesc', $this->replace ); + WPSEO_Meta::replace_meta( '_wpseo_edit_keywords', WPSEO_Meta::$meta_prefix . 'keywords', $this->replace ); + WPSEO_Meta::replace_meta( '_wpseo_edit_canonical', WPSEO_Meta::$meta_prefix . 'canonical', $this->replace ); + + $this->import_post_robots(); + } + + /** + * Importing the robot values from WPSEO plugin. These have to be converted to the Yoast format. + */ + private function import_post_robots() { + $query_posts = new WP_Query( 'post_type=any&meta_key=_wpseo_edit_robots&order=ASC' ); + + if ( ! empty( $query_posts->posts ) ) { + foreach ( $query_posts->posts as $post ) { + $this->import_post_robot( $post->ID ); + } + } + } + + /** + * Getting the wpSEO robot value and map this to Yoast SEO values. + * + * @param integer $post_id The post id of the current post. + */ + private function import_post_robot( $post_id ) { + $wpseo_robots = get_post_meta( $post_id, '_wpseo_edit_robots', true ); + + // Does the value exists in our mapping. + if ( $robot_value = $this->get_robot_value( $wpseo_robots ) ) { + // Saving the new meta values for Yoast SEO. + WPSEO_Meta::set_value( $robot_value['index'], 'meta-robots-noindex', $post_id ); + WPSEO_Meta::set_value( $robot_value['follow'], 'meta-robots-nofollow', $post_id ); + } + + $this->delete_post_robot( $post_id ); + } + + /** + * Delete the wpSEO robot values, because they aren't needed anymore. + * + * @param integer $post_id The post id of the current post. + */ + private function delete_post_robot( $post_id ) { + if ( $this->replace ) { + delete_post_meta( $post_id, '_wpseo_edit_robots' ); + } + } + + /** + * Import the taxonomy metas from wpSEO + */ + private function import_taxonomy_metas() { + $terms = get_terms( get_taxonomies(), array( 'hide_empty' => false ) ); + $tax_meta = get_option( 'wpseo_taxonomy_meta' ); + + foreach ( $terms as $term ) { + $this->import_taxonomy_description( $tax_meta, $term->taxonomy, $term->term_id ); + $this->import_taxonomy_robots( $tax_meta, $term->taxonomy, $term->term_id ); + $this->delete_taxonomy_metas( $term->taxonomy, $term->term_id ); + } + + update_option( 'wpseo_taxonomy_meta', $tax_meta ); + } + + /** + * Import the meta description to Yoast SEO + * + * @param array $tax_meta The array with the current metadata. + * @param string $taxonomy String with the name of the taxonomy. + * @param string $term_id The ID of the current term. + */ + private function import_taxonomy_description( & $tax_meta, $taxonomy, $term_id ) { + $description = get_option( 'wpseo_' . $taxonomy . '_' . $term_id, false ); + if ( $description !== false ) { + // Import description. + $tax_meta[ $taxonomy ][ $term_id ]['wpseo_desc'] = $description; + } + } + + /** + * Import the robot value to Yoast SEO + * + * @param array $tax_meta The array with the current metadata. + * @param string $taxonomy String with the name of the taxonomy. + * @param string $term_id The ID of the current term. + */ + private function import_taxonomy_robots( & $tax_meta, $taxonomy, $term_id ) { + $wpseo_robots = get_option( 'wpseo_' . $taxonomy . '_' . $term_id . '_robots', false ); + if ( $wpseo_robots !== false ) { + // The value 1, 2 and 6 are the index values in wpSEO. + $new_robot_value = ( in_array( $wpseo_robots, array( 1, 2, 6 ) ) ) ? 'index' : 'noindex'; + + $tax_meta[ $taxonomy ][ $term_id ]['wpseo_noindex'] = $new_robot_value; + } + } + + /** + * Delete the wpSEO taxonomy meta data. + * + * @param string $taxonomy String with the name of the taxonomy. + * @param string $term_id The ID of the current term. + */ + private function delete_taxonomy_metas( $taxonomy, $term_id ) { + if ( $this->replace ) { + delete_option( 'wpseo_' . $taxonomy . '_' . $term_id ); + delete_option( 'wpseo_' . $taxonomy . '_' . $term_id . '_robots' ); + } + } + + /** + * Getting the robot config by given wpSEO robots value. + * + * @param string $wpseo_robots The value in wpSEO that needs to be converted to the Yoast format. + * + * @return array + */ + private function get_robot_value( $wpseo_robots ) { + static $robot_values; + + if ( $robot_values === null ) { + /** + * The values 1 - 6 are the configured values from wpSEO. This array will map the values of wpSEO to our values. + * + * There are some double array like 1-6 and 3-4. The reason is they only set the index value. The follow value is + * the default we use in the cases there isn't a follow value present. + * + * @var array + */ + $robot_values = array( + 1 => array( 'index' => 2, 'follow' => 0 ), // In wpSEO: index, follow. + 2 => array( 'index' => 2, 'follow' => 1 ), // In wpSEO: index, nofollow. + 3 => array( 'index' => 1, 'follow' => 0 ), // In wpSEO: noindex. + 4 => array( 'index' => 1, 'follow' => 0 ), // In wpSEO: noindex, follow. + 5 => array( 'index' => 1, 'follow' => 1 ), // In wpSEO: noindex, nofollow. + 6 => array( 'index' => 2, 'follow' => 0 ), // In wpSEO: index. + ); + } + + if ( array_key_exists( $wpseo_robots, $robot_values ) ) { + return $robot_values[ $wpseo_robots ]; + } + + return array( 'index' => 2, 'follow' => 0 ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-import.php b/wp-content/plugins/wordpress-seo/admin/class-import.php new file mode 100644 index 0000000..0affee8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-import.php @@ -0,0 +1,196 @@ +handle_upload() ) { + return; + } + + $this->determine_path(); + + if ( ! $this->unzip_file() ) { + $this->clean_up(); + + return; + } + + $this->parse_options(); + + $this->clean_up(); + } + + /** + * Handle the file upload + * + * @return boolean + */ + private function handle_upload() { + $overrides = array( 'mimes' => array( 'zip' => 'application/zip' ) ); // Explicitly allow zip in multisite. + $this->file = wp_handle_upload( $_FILES['settings_import_file'], $overrides ); + + if ( is_wp_error( $this->file ) ) { + $this->msg = __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . $this->file->get_error_message(); + + return false; + } + + if ( is_array( $this->file ) && isset( $this->file['error'] ) ) { + $this->msg = __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . $this->file['error']; + + return false; + } + + if ( ! isset( $this->file['file'] ) ) { + $this->msg = __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . __( 'Upload failed.', 'wordpress-seo' ); + + return false; + } + + return true; + } + + /** + * Determine the path to the import file + */ + private function determine_path() { + $this->upload_dir = wp_upload_dir(); + + if ( ! defined( 'DIRECTORY_SEPARATOR' ) ) { + define( 'DIRECTORY_SEPARATOR', '/' ); + } + $this->path = $this->upload_dir['basedir'] . DIRECTORY_SEPARATOR . 'wpseo-import' . DIRECTORY_SEPARATOR; + + if ( ! isset( $GLOBALS['wp_filesystem'] ) || ! is_object( $GLOBALS['wp_filesystem'] ) ) { + WP_Filesystem(); + } + } + + /** + * Unzip the file + * + * @return boolean + */ + private function unzip_file() { + $unzipped = unzip_file( $this->file['file'], $this->path ); + if ( is_wp_error( $unzipped ) ) { + $this->msg = __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . sprintf( __( 'Unzipping failed with error "%s".', 'wordpress-seo' ), $unzipped->get_error_message() ); + + return false; + } + + $this->filename = $this->path . 'settings.ini'; + if ( ! is_file( $this->filename ) || ! is_readable( $this->filename ) ) { + $this->msg = __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . __( 'Unzipping failed - file settings.ini not found.', 'wordpress-seo' ); + + return false; + } + + return true; + } + + /** + * Parse the option file + */ + private function parse_options() { + $options = parse_ini_file( $this->filename, true ); + + if ( is_array( $options ) && $options !== array() ) { + if ( isset( $options['wpseo']['version'] ) && $options['wpseo']['version'] !== '' ) { + $this->old_wpseo_version = $options['wpseo']['version']; + } + foreach ( $options as $name => $opt_group ) { + $this->parse_option_group( $name, $opt_group, $options ); + } + $this->msg = __( 'Settings successfully imported.', 'wordpress-seo' ); + $this->success = true; + } + else { + $this->msg = __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . __( 'No settings found in file.', 'wordpress-seo' ); + } + } + + /** + * Parse the option group and import it + * + * @param string $name Name string. + * @param array $opt_group Option group data. + * @param array $options Options data. + */ + private function parse_option_group( $name, $opt_group, $options ) { + if ( $name === 'wpseo_taxonomy_meta' ) { + $opt_group = json_decode( urldecode( $opt_group['wpseo_taxonomy_meta'] ), true ); + } + + // Make sure that the imported options are cleaned/converted on import. + $option_instance = WPSEO_Options::get_option_instance( $name ); + if ( is_object( $option_instance ) && method_exists( $option_instance, 'import' ) ) { + $option_instance->import( $opt_group, $this->old_wpseo_version, $options ); + } + elseif ( WP_DEBUG === true || ( defined( 'WPSEO_DEBUG' ) && WPSEO_DEBUG === true ) ) { + $this->msg = sprintf( __( 'Setting "%s" is no longer used and has been discarded.', 'wordpress-seo' ), $name ); + } + } + + /** + * Remove the files + */ + private function clean_up() { + if ( file_exists( $this->filename ) && is_writable( $this->filename ) ) { + unlink( $this->filename ); + } + if ( ! empty( $this->file['file'] ) && file_exists( $this->file['file'] ) && is_writable( $this->file['file'] ) ) { + unlink( $this->file['file'] ); + } + if ( file_exists( $this->path ) && is_writable( $this->path ) ) { + $wp_file = new WP_Filesystem_Direct( $this->path ); + $wp_file->rmdir( $this->path, true ); + } + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-meta-columns.php b/wp-content/plugins/wordpress-seo/admin/class-meta-columns.php new file mode 100644 index 0000000..bd5d888 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-meta-columns.php @@ -0,0 +1,501 @@ +analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + $this->analysis_readability = new WPSEO_Metabox_Analysis_Readability(); + } + + /** + * Setting up the hooks + */ + public function setup_hooks() { + $this->set_post_type_hooks(); + + $options = WPSEO_Options::get_option( 'wpseo_titles' ); + + if ( ! empty( $options['keyword-analysis-active'] ) ) { + add_action( 'restrict_manage_posts', array( $this, 'posts_filter_dropdown' ) ); + } + + add_filter( 'request', array( $this, 'column_sort_orderby' ) ); + } + + /** + * Adds the column headings for the SEO plugin for edit posts / pages overview + * + * @param array $columns Already existing columns. + * + * @return array + */ + public function column_heading( $columns ) { + if ( $this->is_metabox_hidden() === true ) { + return $columns; + } + + $added_columns = array(); + + if ( $this->analysis_seo->is_enabled() ) { + $added_columns['wpseo-score'] = __( 'SEO', 'wordpress-seo' ); + } + if ( $this->analysis_readability->is_enabled() ) { + $added_columns['wpseo-score-readability'] = __( 'Readability', 'wordpress-seo' ); + } + $added_columns['wpseo-title'] = __( 'SEO Title', 'wordpress-seo' ); + $added_columns['wpseo-metadesc'] = __( 'Meta Desc.', 'wordpress-seo' ); + + if ( $this->analysis_seo->is_enabled() ) { + $added_columns['wpseo-focuskw'] = __( 'Focus KW', 'wordpress-seo' ); + } + + return array_merge( $columns, $added_columns ); + } + + /** + * Display the column content for the given column + * + * @param string $column_name Column to display the content for. + * @param int $post_id Post to display the column content for. + */ + public function column_content( $column_name, $post_id ) { + if ( $this->is_metabox_hidden() === true ) { + return; + } + + switch ( $column_name ) { + case 'wpseo-score' : + echo $this->parse_column_score( $post_id ); + break; + case 'wpseo-score-readability': + echo $this->parse_column_score_readability( $post_id ); + break; + case 'wpseo-title' : + echo esc_html( apply_filters( 'wpseo_title', wpseo_replace_vars( $this->page_title( $post_id ), get_post( $post_id, ARRAY_A ) ) ) ); + break; + case 'wpseo-metadesc' : + $metadesc_val = apply_filters( 'wpseo_metadesc', wpseo_replace_vars( WPSEO_Meta::get_value( 'metadesc', $post_id ), get_post( $post_id, ARRAY_A ) ) ); + $metadesc = ( '' === $metadesc_val ) ? '' . __( 'Meta description not set.', 'wordpress-seo' ) . '' : esc_html( $metadesc_val ); + echo $metadesc; + break; + case 'wpseo-focuskw' : + $focuskw_val = WPSEO_Meta::get_value( 'focuskw', $post_id ); + $focuskw = ( '' === $focuskw_val ) ? '' . __( 'Focus keyword not set.', 'wordpress-seo' ) . '' : esc_html( $focuskw_val ); + echo $focuskw; + break; + } + } + + /** + * Indicate which of the SEO columns are sortable. + * + * @param array $columns appended with their orderby variable. + * + * @return array + */ + public function column_sort( $columns ) { + if ( $this->is_metabox_hidden() === true ) { + return $columns; + } + + $columns['wpseo-metadesc'] = 'wpseo-metadesc'; + + if ( $this->analysis_seo->is_enabled() ) { + $columns['wpseo-focuskw'] = 'wpseo-focuskw'; + } + + return $columns; + } + + /** + * Hide the SEO Title, Meta Desc and Focus KW columns if the user hasn't chosen which columns to hide + * + * @param array|false $result The hidden columns. + * @param string $option The option name used to set which columns should be hidden. + * @param WP_User $user The User. + * + * @return array|false $result + */ + public function column_hidden( $result, $option, $user ) { + global $wpdb; + + $prefix = $wpdb->get_blog_prefix(); + if ( ! $user->has_prop( $prefix . $option ) && ! $user->has_prop( $option ) ) { + + if ( ! is_array( $result ) ) { + $result = array(); + } + + array_push( $result, 'wpseo-title', 'wpseo-metadesc' ); + + if ( $this->analysis_seo->is_enabled() ) { + array_push( $result, 'wpseo-focuskw' ); + } + } + + return $result; + } + + /** + * Adds a dropdown that allows filtering on the posts SEO Quality. + * + * @return void + */ + public function posts_filter_dropdown() { + if ( $GLOBALS['pagenow'] === 'upload.php' || $this->is_metabox_hidden() === true ) { + return; + } + + $ranks = WPSEO_Rank::get_all_ranks(); + $current_seo_filter = filter_input( INPUT_GET, 'seo_filter' ); + + echo ' + + '; + } + + /** + * Modify the query based on the seo_filter variable in $_GET + * + * @param array $vars Query variables. + * + * @return array + */ + public function column_sort_orderby( $vars ) { + if ( $seo_filter = filter_input( INPUT_GET, 'seo_filter' ) ) { + $rank = new WPSEO_Rank( $seo_filter ); + + if ( WPSEO_Rank::NO_FOCUS === $seo_filter || WPSEO_Rank::NO_INDEX === $seo_filter ) { + $vars = $this->filter_other( $vars, $seo_filter ); + } + else { + $vars = array_merge( $vars, $this->filter_scored( $rank->get_starting_score(), $rank->get_end_score() ) ); + } + } + + if ( $seo_kw_filter = filter_input( INPUT_GET, 'seo_kw_filter' ) ) { + $vars = array_merge( + $vars, array( + 'post_type' => get_query_var( 'post_type', 'post' ), + 'meta_key' => WPSEO_Meta::$meta_prefix . 'focuskw', + 'meta_value' => sanitize_text_field( $seo_kw_filter ), + ) + ); + } + + if ( isset( $vars['orderby'] ) ) { + $vars = array_merge( $vars, $this->filter_order_by( $vars['orderby'] ) ); + } + + return $vars; + } + + /** + * When there is a score just return this meta query array + * + * @param string $low The lowest number in the score range. + * @param string $high The highest number in the score range. + * + * @return array + */ + private function filter_scored( $low, $high ) { + /** + * @internal DON'T touch the order of these without double-checking/adjusting the seo_score_posts_where() method below! + */ + return array( + 'meta_query' => array( + 'relation' => 'AND', + array( + 'key' => WPSEO_Meta::$meta_prefix . 'linkdex', + 'value' => array( $low, $high ), + 'type' => 'numeric', + 'compare' => 'BETWEEN', + ), + array( + 'relation' => 'OR', + array( + 'key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', + 'value' => '1', + 'compare' => '!=', + ), + ), + ), + ); + } + + /** + * Get vars for noindex or na filters + * + * @param array $vars The unmerged vars. + * @param string $seo_filter The SEO filter. + * + * @return array + */ + private function filter_other( $vars, $seo_filter ) { + switch ( $seo_filter ) { + case 'noindex': + $vars = array_merge( + $vars, + array( + 'meta_query' => array( + array( + 'key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', + 'value' => '1', + 'compare' => '=', + ), + ), + ) + ); + break; + case 'na': + $vars = array_merge( + $vars, + array( + 'meta_query' => array( + 'relation' => 'AND', + array( + 'key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', + 'value' => 'needs-a-value-anyway', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => WPSEO_Meta::$meta_prefix . 'linkdex', + 'value' => 'needs-a-value-anyway', + 'compare' => 'NOT EXISTS', + ) + ), + ) + ); + break; + } + + return $vars; + } + + /** + * Returning filters when $order_by is matched in the if-statement + * + * @param string $order_by The ID of the column by which to order the posts. + * + * @return array + */ + private function filter_order_by( $order_by ) { + switch ( $order_by ) { + case 'wpseo-metadesc' : + return array( + 'meta_key' => WPSEO_Meta::$meta_prefix . 'metadesc', + 'orderby' => 'meta_value', + ); + break; + case 'wpseo-focuskw' : + return array( + 'meta_key' => WPSEO_Meta::$meta_prefix . 'focuskw', + 'orderby' => 'meta_value', + ); + break; + } + + return array(); + } + + /** + * Parsing the score column + * + * @param integer $post_id The ID of the post for which to show the score. + * + * @return string The HTML for the SEO score indicator. + */ + private function parse_column_score( $post_id ) { + if ( '1' === WPSEO_Meta::get_value( 'meta-robots-noindex', $post_id ) ) { + $rank = new WPSEO_Rank( WPSEO_Rank::NO_INDEX ); + $title = __( 'Post is set to noindex.', 'wordpress-seo' ); + WPSEO_Meta::set_value( 'linkdex', 0, $post_id ); + } + elseif ( '' === WPSEO_Meta::get_value( 'focuskw', $post_id ) ) { + $rank = new WPSEO_Rank( WPSEO_Rank::NO_FOCUS ); + $title = __( 'Focus keyword not set.', 'wordpress-seo' ); + } + else { + $score = (int) WPSEO_Meta::get_value( 'linkdex', $post_id ); + $rank = WPSEO_Rank::from_numeric_score( $score ); + $title = $rank->get_label(); + } + + return $this->render_score_indicator( $rank, $title ); + } + + /** + * Parsing the readability score column. + * + * @param int $post_id The ID of the post for which to show the readability score. + * + * @return string The HTML for the readability score indicator. + */ + private function parse_column_score_readability( $post_id ) { + $score = (int) WPSEO_Meta::get_value( 'content_score', $post_id ); + $rank = WPSEO_Rank::from_numeric_score( $score ); + + return $this->render_score_indicator( $rank ); + } + + /** + * Setting the hooks for the post_types + */ + private function set_post_type_hooks() { + $post_types = get_post_types( array( 'public' => true ), 'names' ); + + if ( is_array( $post_types ) && $post_types !== array() ) { + foreach ( $post_types as $pt ) { + if ( $this->is_metabox_hidden( $pt ) === false ) { + add_filter( 'manage_' . $pt . '_posts_columns', array( $this, 'column_heading' ), 10, 1 ); + add_action( 'manage_' . $pt . '_posts_custom_column', array( + $this, + 'column_content', + ), 10, 2 ); + add_action( 'manage_edit-' . $pt . '_sortable_columns', array( + $this, + 'column_sort', + ), 10, 2 ); + + /* + * Use the `get_user_option_{$option}` filter to change the output of the get_user_option + * function for the `manage{$screen}columnshidden` option, which is based on the current + * admin screen. The admin screen we want to target is the `edit-{$post_type}` screen. + */ + $filter = sprintf( 'get_user_option_%s', sprintf( 'manage%scolumnshidden', 'edit-' . $pt ) ); + add_filter( $filter, array( $this, 'column_hidden' ), 10, 3 ); + } + } + unset( $pt ); + } + } + + /** + * Test whether the metabox should be hidden either by choice of the admin or because + * the post type is not a public post type + * + * @since 1.5.0 + * + * @param string $post_type (optional) The post type to test, defaults to the current post post_type. + * + * @return bool Whether or not the meta box (and associated columns etc) should be hidden + */ + private function is_metabox_hidden( $post_type = null ) { + if ( ! isset( $post_type ) && $get_post_type = filter_input( INPUT_GET, 'post_type' ) ) { + $post_type = sanitize_text_field( $get_post_type ); + } + + if ( isset( $post_type ) ) { + // Don't make static as post_types may still be added during the run. + $cpts = get_post_types( array( 'public' => true ), 'names' ); + $options = get_option( 'wpseo_titles' ); + + return ( ( isset( $options[ 'hideeditbox-' . $post_type ] ) && $options[ 'hideeditbox-' . $post_type ] === true ) || in_array( $post_type, $cpts ) === false ); + } + + return false; + } + + /** + * Retrieve the page title. + * + * @param int $post_id Post to retrieve the title for. + * + * @return string + */ + private function page_title( $post_id ) { + $fixed_title = WPSEO_Meta::get_value( 'title', $post_id ); + if ( $fixed_title !== '' ) { + return $fixed_title; + } + + $post = get_post( $post_id ); + $options = WPSEO_Options::get_option( 'wpseo_titles' ); + if ( is_object( $post ) && ( isset( $options[ 'title-' . $post->post_type ] ) && $options[ 'title-' . $post->post_type ] !== '' ) ) { + $title_template = $options[ 'title-' . $post->post_type ]; + $title_template = str_replace( ' %%page%% ', ' ', $title_template ); + + return wpseo_replace_vars( $title_template, $post ); + } + + return wpseo_replace_vars( '%%title%%', $post ); + } + + /** + * @param WPSEO_Rank $rank The rank this indicator should have. + * @param string $title Optional. The title for this rank, defaults to the title of the rank. + * + * @return string The HTML for a score indicator. + */ + private function render_score_indicator( $rank, $title = '' ) { + if ( empty( $title ) ) { + $title = $rank->get_label(); + } + + return '' . $title . ''; + } + + /** + * Hacky way to get round the limitation that you can only have AND *or* OR relationship between + * meta key clauses and not a combination - which is what we need. + * + * @deprecated 3.5 Unnecessary with nested meta queries in core. + * + * @param string $where Where clause. + * + * @return string + */ + public function seo_score_posts_where( $where ) { + + _deprecated_function( 'WPSEO_Metabox_Columns::seo_score_posts_where', '3.5' ); + + global $wpdb; + + /* Find the two mutually exclusive noindex clauses which should be changed from AND to OR relation */ + $find = '`([\s]+AND[\s]+)((?:' . $wpdb->prefix . 'postmeta|mt[0-9]|mt1)\.post_id IS NULL[\s]+)AND([\s]+\([\s]*(?:' . $wpdb->prefix . 'postmeta|mt[0-9])\.meta_key = \'' . WPSEO_Meta::$meta_prefix . 'meta-robots-noindex\' AND CAST\([^\)]+\)[^\)]+\))`'; + + $replace = '$1( $2OR$3 )'; + + $new_where = preg_replace( $find, $replace, $where ); + + if ( $new_where ) { + return $new_where; + } + return $where; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-option-tab.php b/wp-content/plugins/wordpress-seo/admin/class-option-tab.php new file mode 100644 index 0000000..10fe2d2 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-option-tab.php @@ -0,0 +1,80 @@ +name = sanitize_title( $name ); + $this->label = $label; + $this->arguments = (array) $arguments; + } + + /** + * Get the name + * + * @return string + */ + public function get_name() { + return $this->name; + } + + /** + * Get the label + * + * @return string + */ + public function get_label() { + return $this->label; + } + + /** + * Get the video URL + * + * @return string + */ + public function get_video_url() { + return $this->get_argument( 'video_url' ); + } + + /** + * Get the option group + * + * @return string + */ + public function get_opt_group() { + return $this->get_argument( 'opt_group' ); + } + + /** + * Get the variable from the supplied arguments + * + * @param string $variable Variable to retrieve. + * @param string $default Default to use when variable not found. + * + * @return mixed|string + */ + protected function get_argument( $variable, $default = '' ) { + return ! empty( $this->arguments[ $variable ] ) ? $this->arguments[ $variable ] : $default; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-option-tabs-formatter.php b/wp-content/plugins/wordpress-seo/admin/class-option-tabs-formatter.php new file mode 100644 index 0000000..7377b80 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-option-tabs-formatter.php @@ -0,0 +1,53 @@ +get_base() . '/' . $tab->get_name() . '.php'; + } + + /** + * @param WPSEO_Option_Tabs $option_tabs Option Tabs to get tabs from. + * @param Yoast_Form $yform Yoast Form which is being used in the views. + * @param array $options Options which are being used in the views. + */ + public function run( WPSEO_Option_Tabs $option_tabs, Yoast_Form $yform, $options = array() ) { + + echo ''; + + foreach ( $option_tabs->get_tabs() as $tab ) { + // Prepare the help center for each tab. + $help_center = new WPSEO_Help_Center( $option_tabs->get_base(), $tab ); + + $identifier = $tab->get_name(); + printf( '
', $identifier ); + + // Output the help center. + $help_center->output_help_center(); + + // Output the settings view for all tabs. + $tab_view = $this->get_tab_view( $option_tabs, $tab ); + if ( is_file( $tab_view ) ) { + require_once $tab_view; + } + + echo '
'; + } + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-option-tabs.php b/wp-content/plugins/wordpress-seo/admin/class-option-tabs.php new file mode 100644 index 0000000..2d5bd54 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-option-tabs.php @@ -0,0 +1,106 @@ +base = sanitize_title( $base ); + + $tab = filter_input( INPUT_GET, 'tab' ); + $this->active_tab = empty( $tab ) ? $active_tab : $tab; + } + + /** + * Get the base + * + * @return string + */ + public function get_base() { + return $this->base; + } + + /** + * Add a tab + * + * @param WPSEO_Option_Tab $tab Tab to add. + * + * @return $this + */ + public function add_tab( WPSEO_Option_Tab $tab ) { + $this->tabs[] = $tab; + + return $this; + } + + /** + * Get active tab + * + * @return null|WPSEO_Option_Tab Get the active tab. + */ + public function get_active_tab() { + if ( empty( $this->active_tab ) ) { + return null; + } + + $active_tabs = array_filter( $this->tabs, array( $this, 'is_active_tab' ) ); + if ( ! empty( $active_tabs ) ) { + $active_tabs = array_values( $active_tabs ); + if ( count( $active_tabs ) === 1 ) { + return $active_tabs[0]; + } + } + + return null; + } + + /** + * Is the tab the active tab + * + * @param WPSEO_Option_Tab $tab Tab to check for active tab. + * + * @return bool + */ + public function is_active_tab( WPSEO_Option_Tab $tab ) { + return ( $tab->get_name() === $this->active_tab ); + } + + /** + * Get all tabs + * + * @return WPSEO_Option_Tab[] + */ + public function get_tabs() { + return $this->tabs; + } + + /** + * Display the tabs + * + * @param Yoast_Form $yform Yoast Form needed in the views. + * @param array $options Options needed in the views. + */ + public function display( Yoast_Form $yform, $options = array() ) { + $formatter = new WPSEO_Option_Tabs_Formatter(); + $formatter->run( $this, $yform, $options ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-plugin-availability.php b/wp-content/plugins/wordpress-seo/admin/class-plugin-availability.php new file mode 100644 index 0000000..7a04b59 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-plugin-availability.php @@ -0,0 +1,241 @@ +register_yoast_plugins(); + $this->register_yoast_plugins_status(); + } + + /** + * Registers all the available Yoast SEO plugins. + */ + protected function register_yoast_plugins() { + $this->plugins = array( + 'yoast-seo-premium' => array( + 'url' => 'https://yoast.com/wordpress/plugins/seo-premium/', + 'title' => 'Yoast SEO Premium', + /* translators: %1$s expands to Yoast SEO */ + 'description' => sprintf( __( 'The premium version of %1$s with more features & support.', 'wordpress-seo' ), 'Yoast SEO' ), + 'installed' => false, + 'slug' => 'wordpress-seo-premium/wp-seo-premium.php', + ), + + 'video-seo-for-wordpress-seo-by-yoast' => array( + 'url' => 'https://yoast.com/wordpress/plugins/video-seo/', + 'title' => 'Video SEO', + 'description' => __( 'Optimize your videos to show them off in search results and get more clicks!', 'wordpress-seo' ), + 'installed' => false, + 'slug' => 'wpseo-video/video-seo.php', + ), + + 'yoast-news-seo' => array( + 'url' => 'https://yoast.com/wordpress/plugins/news-seo/', + 'title' => 'News SEO', + 'description' => __( 'Are you in Google News? Increase your traffic from Google News by optimizing for it!', 'wordpress-seo' ), + 'installed' => false, + 'slug' => 'wpseo-news/wpseo-news.php', + ), + + 'local-seo-for-yoast-seo' => array( + 'url' => 'https://yoast.com/wordpress/plugins/local-seo/', + 'title' => 'Local SEO', + 'description' => __( 'Rank better locally and in Google Maps, without breaking a sweat!', 'wordpress-seo' ), + 'installed' => false, + 'slug' => 'wordpress-seo-local/local-seo.php', + ), + + 'yoast-woocommerce-seo' => array( + 'url' => 'https://yoast.com/wordpress/plugins/yoast-woocommerce-seo/', + 'title' => 'Yoast WooCommerce SEO', + /* translators: %1$s expands to Yoast SEO */ + 'description' => sprintf( __( 'Seamlessly integrate WooCommerce with %1$s and get extra features!', 'wordpress-seo' ), 'Yoast SEO' ), + 'installed' => false, + 'slug' => 'wpseo-woocommerce/wpseo-woocommerce.php', + ), + ); + } + + /** + * Sets certain plugin properties based on WordPress' status. + */ + protected function register_yoast_plugins_status() { + + foreach ( $this->plugins as $name => $plugin ) { + + $plugin_slug = $plugin['slug']; + $plugin_path = WP_PLUGIN_DIR . '/' . $plugin_slug; + + if ( file_exists( $plugin_path ) ) { + $plugin_data = get_plugin_data( $plugin_path, false, false ); + $this->plugins[ $name ]['installed'] = true; + $this->plugins[ $name ]['version'] = $plugin_data['Version']; + $this->plugins[ $name ]['active'] = is_plugin_active( $plugin_slug ); + } + } + } + + /** + * Checks whether or not a plugin is known within the Yoast SEO collection. + * + * @param {string} $plugin The plugin to search for. + * + * @return bool Whether or not the plugin is exists. + */ + protected function plugin_exists( $plugin ) { + return isset( $this->plugins[ $plugin ] ); + } + + /** + * Gets all the possibly available plugins. + * + * @return array Array containing the information about the plugins. + */ + public function get_plugins() { + return $this->plugins; + } + + /** + * Gets a specific plugin. Returns an empty array if it cannot be found. + * + * @param {string} $plugin The plugin to search for. + * + * @return array The plugin properties. + */ + public function get_plugin( $plugin ) { + if ( ! $this->plugin_exists( $plugin ) ) { + return array(); + } + + return $this->plugins[ $plugin ]; + } + + /** + * Gets the version of the plugin. + * + * @param {string} $plugin The plugin to search for. + * + * @return string The version associated with the plugin. + */ + public function get_version( $plugin ) { + if ( ! isset( $plugin['version'] ) ) { + return ''; + } + + return $plugin['version']; + } + + /** + * Checks if there are dependencies available for the plugin. + * + * @param {string} $plugin The plugin to search for. + * + * @return bool Whether or not there is a dependency present. + */ + public function has_dependencies( $plugin ) { + return ( isset( $plugin['_dependencies'] ) && ! empty( $plugin['_dependencies'] ) ); + } + + /** + * Gets the dependencies for the plugin. + * + * @param {string} $plugin The plugin to search for. + * + * @return array Array containing all the dependencies associated with the plugin. + */ + public function get_dependencies( $plugin ) { + if ( ! $this->has_dependencies( $plugin ) ) { + return array(); + } + + return $plugin['_dependencies']; + } + + /** + * Checks if all dependencies are satisfied. + * + * @param {string} $plugin The plugin to search for. + * + * @return bool Whether or not the dependencies are satisfied. + */ + public function dependencies_are_satisfied( $plugin ) { + if ( ! $this->has_dependencies( $plugin ) ) { + return true; + } + + $dependencies = $this->get_dependencies( $plugin ); + $installed_dependencies = array_filter( $dependencies, array( $this, 'is_dependency_available' ) ); + + return count( $installed_dependencies ) === count( $dependencies ); + } + + /** + * Checks whether or not one of the plugins is properly installed and usable. + * + * @param {string} $plugin The plugin to search for. + * + * @return bool Whether or not the plugin is properly installed. + */ + public function is_installed( $plugin ) { + if ( empty( $plugin ) ) { + return false; + } + + $dependencies_are_satisfied = $this->dependencies_are_satisfied( $plugin ); + + return $dependencies_are_satisfied && $this->is_available( $plugin ); + } + + /** + * Gets all installed plugins. + * + * @return array + */ + public function get_installed_plugins() { + $installed = array(); + + foreach ( $this->plugins as $pluginKey => $plugin ) { + if ( $this->is_installed( $plugin ) ) { + $installed[ $pluginKey ] = $plugin; + } + } + + return $installed; + } + + /** + * Checks for the availability of the plugin. + * + * @param {string} $plugin The plugin to search for. + * + * @return bool Whether or not the plugin is available. + */ + public function is_available( $plugin ) { + return isset( $plugin['installed'] ) && $plugin['installed'] === true; + } + + /** + * Checks whether a dependency is available. + * + * @param {string} $dependency The dependency to look for. + * + * @return bool Whether or not the dependency is available. + */ + public function is_dependency_available( $dependency ) { + return class_exists( $dependency ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-plugin-compatibility.php b/wp-content/plugins/wordpress-seo/admin/class-plugin-compatibility.php new file mode 100644 index 0000000..9b0ee88 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-plugin-compatibility.php @@ -0,0 +1,101 @@ +current_wpseo_version = $this->get_major_minor_version( $version ); + $this->availability_checker = $this->retrieve_availability_checker( $availability_checker ); + $this->installed_plugins = $this->availability_checker->get_installed_plugins(); + } + + /** + * Retrieves the availability checker. + * + * @param null|object $checker The checker to set. + * + * @return WPSEO_Plugin_Availability The checker to use. + */ + private function retrieve_availability_checker( $checker ) { + if ( is_null( $checker ) || ! is_object( $checker ) ) { + return new WPSEO_Plugin_Availability(); + } + + return $checker; + } + + /** + * Wraps the availability checker's get_installed_plugins method. + * + * @return array Array containing all the installed plugins. + */ + public function get_installed_plugins() { + return $this->installed_plugins; + } + + /** + * Creates a list of installed plugins and whether or not they are compatible. + * + * @return array Array containing the installed plugins and compatibility. + */ + public function get_installed_plugins_compatibility() { + foreach ( $this->installed_plugins as $key => $plugin ) { + + $this->installed_plugins[ $key ]['compatible'] = $this->is_compatible( $key ); + } + + return $this->installed_plugins; + } + + /** + * Checks whether or not a plugin is compatible. + * + * @param string $plugin The plugin to look for and match. + * + * @return bool Whether or not the plugin is compatible. + */ + public function is_compatible( $plugin ) { + $plugin = $this->availability_checker->get_plugin( $plugin ); + $plugin_version = $this->availability_checker->get_version( $plugin ); + + return $this->get_major_minor_version( $plugin_version ) === $this->current_wpseo_version; + } + + /** + * Gets the major/minor version of the plugin for easier comparing. + * + * @param string $version The version to trim. + * + * @return string The major/minor version of the plugin. + */ + protected function get_major_minor_version( $version ) { + return substr( $version, 0, 3 ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-plugin-conflict.php b/wp-content/plugins/wordpress-seo/admin/class-plugin-conflict.php new file mode 100644 index 0000000..bb0b751 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-plugin-conflict.php @@ -0,0 +1,155 @@ + array( + '2-click-socialmedia-buttons/2-click-socialmedia-buttons.php', + // 2 Click Social Media Buttons. + 'add-link-to-facebook/add-link-to-facebook.php', // Add Link to Facebook. + 'add-meta-tags/add-meta-tags.php', // Add Meta Tags. + 'easy-facebook-share-thumbnails/esft.php', // Easy Facebook Share Thumbnail. + 'facebook/facebook.php', // Facebook (official plugin). + 'facebook-awd/AWD_facebook.php', // Facebook AWD All in one. + 'facebook-featured-image-and-open-graph-meta-tags/fb-featured-image.php', + // Facebook Featured Image & OG Meta Tags. + 'facebook-meta-tags/facebook-metatags.php', // Facebook Meta Tags. + 'wonderm00ns-simple-facebook-open-graph-tags/wonderm00n-open-graph.php', + // Facebook Open Graph Meta Tags for WordPress. + 'facebook-revised-open-graph-meta-tag/index.php', // Facebook Revised Open Graph Meta Tag. + 'facebook-thumb-fixer/_facebook-thumb-fixer.php', // Facebook Thumb Fixer. + 'facebook-and-digg-thumbnail-generator/facebook-and-digg-thumbnail-generator.php', + // Fedmich's Facebook Open Graph Meta. + 'header-footer/plugin.php', // Header and Footer. + 'network-publisher/networkpub.php', // Network Publisher. + 'nextgen-facebook/nextgen-facebook.php', // NextGEN Facebook OG. + 'opengraph/opengraph.php', // Open Graph. + 'open-graph-protocol-framework/open-graph-protocol-framework.php', + // Open Graph Protocol Framework. + 'seo-facebook-comments/seofacebook.php', // SEO Facebook Comments. + 'seo-ultimate/seo-ultimate.php', // SEO Ultimate. + 'sexybookmarks/sexy-bookmarks.php', // Shareaholic. + 'shareaholic/sexy-bookmarks.php', // Shareaholic. + 'sharepress/sharepress.php', // SharePress. + 'simple-facebook-connect/sfc.php', // Simple Facebook Connect. + 'social-discussions/social-discussions.php', // Social Discussions. + 'social-sharing-toolkit/social_sharing_toolkit.php', // Social Sharing Toolkit. + 'socialize/socialize.php', // Socialize. + 'only-tweet-like-share-and-google-1/tweet-like-plusone.php', + // Tweet, Like, Google +1 and Share. + 'wordbooker/wordbooker.php', // Wordbooker. + 'wpsso/wpsso.php', // WordPress Social Sharing Optimization. + 'wp-caregiver/wp-caregiver.php', // WP Caregiver. + 'wp-facebook-like-send-open-graph-meta/wp-facebook-like-send-open-graph-meta.php', + // WP Facebook Like Send & Open Graph Meta. + 'wp-facebook-open-graph-protocol/wp-facebook-ogp.php', // WP Facebook Open Graph protocol. + 'wp-ogp/wp-ogp.php', // WP-OGP. + 'zoltonorg-social-plugin/zosp.php', // Zolton.org Social Plugin. + ), + 'xml_sitemaps' => array( + 'google-sitemap-plugin/google-sitemap-plugin.php', + // Google Sitemap (BestWebSoft). + 'xml-sitemaps/xml-sitemaps.php', + // XML Sitemaps (Denis de Bernardy and Mike Koepke). + 'bwp-google-xml-sitemaps/bwp-simple-gxs.php', + // Better WordPress Google XML Sitemaps (Khang Minh). + 'google-sitemap-generator/sitemap.php', + // Google XML Sitemaps (Arne Brachhold). + 'xml-sitemap-feed/xml-sitemap.php', + // XML Sitemap & Google News feeds (RavanH). + 'google-monthly-xml-sitemap/monthly-xml-sitemap.php', + // Google Monthly XML Sitemap (Andrea Pernici). + 'simple-google-sitemap-xml/simple-google-sitemap-xml.php', + // Simple Google Sitemap XML (iTx Technologies). + 'another-simple-xml-sitemap/another-simple-xml-sitemap.php', + // Another Simple XML Sitemap. + 'xml-maps/google-sitemap.php', + // Xml Sitemap (Jason Martens). + 'google-xml-sitemap-generator-by-anton-dachauer/adachauer-google-xml-sitemap.php', + // Google XML Sitemap Generator by Anton Dachauer (Anton Dachauer). + 'wp-xml-sitemap/wp-xml-sitemap.php', + // WP XML Sitemap (Team Vivacity). + 'sitemap-generator-for-webmasters/sitemap.php', + // Sitemap Generator for Webmasters (iwebslogtech). + 'xml-sitemap-xml-sitemapcouk/xmls.php', + // XML Sitemap - XML-Sitemap.co.uk (Simon Hancox). + 'sewn-in-xml-sitemap/sewn-xml-sitemap.php', + // Sewn In XML Sitemap (jcow). + 'rps-sitemap-generator/rps-sitemap-generator.php', + // RPS Sitemap Generator (redpixelstudios). + ), + ); + + /** + * Overrides instance to set with this class as class + * + * @param string $class_name Optional class name. + * + * @return Yoast_Plugin_Conflict + */ + public static function get_instance( $class_name = __CLASS__ ) { + return parent::get_instance( $class_name ); + } + + /** + * After activating any plugin, this method will be executed by a hook. + * + * If the activated plugin is conflicting with ours a notice will be shown. + * + * @param string|bool $plugin Optional plugin basename to check. + */ + public static function hook_check_for_plugin_conflicts( $plugin = false ) { + + // The instance of itself. + $instance = self::get_instance(); + + // Only add plugin as active plugin if $plugin isn't false. + if ( $plugin && is_string( $plugin ) ) { + // Because it's just activated. + $instance->add_active_plugin( $instance->find_plugin_category( $plugin ), $plugin ); + } + + $plugin_sections = array(); + + // Only check for open graph problems when they are enabled. + $social_options = WPSEO_Options::get_option( 'wpseo_social' ); + if ( $social_options['opengraph'] ) { + /* translators: %1$s expands to Yoast SEO, %2%s: 'Facebook' plugin name of possibly conflicting plugin with regard to creating OpenGraph output*/ + $plugin_sections['open_graph'] = __( 'Both %1$s and %2$s create OpenGraph output, which might make Facebook, Twitter, LinkedIn and other social networks use the wrong texts and images when your pages are being shared.', 'wordpress-seo' ) + . '

' + . '' + /* translators: %1$s expands to Yoast SEO */ + . sprintf( __( 'Configure %1$s\'s OpenGraph settings', 'wordpress-seo' ), 'Yoast SEO' ) + . ''; + } + + // Only check for XML conflicts if sitemaps are enabled. + $xml_sitemap_options = WPSEO_Options::get_option( 'wpseo_xml' ); + if ( $xml_sitemap_options['enablexmlsitemap'] ) { + /* translators: %1$s expands to Yoast SEO, %2$s: 'Google XML Sitemaps' plugin name of possibly conflicting plugin with regard to the creation of sitemaps*/ + $plugin_sections['xml_sitemaps'] = __( 'Both %1$s and %2$s can create XML sitemaps. Having two XML sitemaps is not beneficial for search engines, yet might slow down your site.', 'wordpress-seo' ) + . '

' + . '' + /* translators: %1$s expands to Yoast SEO */ + . sprintf( __( 'Configure %1$s\'s XML Sitemap settings', 'wordpress-seo' ), 'Yoast SEO' ) + . ''; + } + + $instance->check_plugin_conflicts( $plugin_sections ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-premium-popup.php b/wp-content/plugins/wordpress-seo/admin/class-premium-popup.php new file mode 100644 index 0000000..302e39e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-premium-popup.php @@ -0,0 +1,87 @@ +identifier = $identifier; + $this->heading_level = $heading_level; + $this->title = $title; + $this->content = $content; + } + + /** + * Returns the premium popup as an HTML string. + * + * @param bool $popup Show this message as a popup show it straight away. + * + * @return string + */ + public function get_premium_message( $popup = true ) { + // Don't show in Premium. + if ( defined( 'WPSEO_PREMIUM_FILE' ) ) { + return ''; + } + + $assets_uri = trailingslashit( plugin_dir_url( WPSEO_FILE ) ); + $premium_uri = 'https://yoast.com/wordpress/plugins/seo-premium/#utm_source=wordpress-seo-metabox&utm_medium=popup&utm_campaign=help-center-contact-support'; + + /* translators: %s expands to Yoast SEO Premium */ + $cta_text = sprintf( __( 'Buy %s', 'wordpress-seo' ), 'Yoast SEO Premium' ); + $classes = ''; + if ( $popup ) { + $classes = ' hidden'; + } + + $popup = << + Yoast SEO + <{$this->heading_level} id="wpseo-contact-support-popup-title" class="wpseo-premium-popup-title">{$this->title}heading_level}> +

{$this->content}

+ {$cta_text} + +EO_POPUP; + + return $popup; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-primary-term-admin.php b/wp-content/plugins/wordpress-seo/admin/class-primary-term-admin.php new file mode 100644 index 0000000..2d21231 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-primary-term-admin.php @@ -0,0 +1,226 @@ +register_hooks(); + } + + /** + * Get the current post ID. + * + * @return integer The post ID. + */ + protected function get_current_id() { + return filter_input( INPUT_GET, 'post', FILTER_SANITIZE_NUMBER_INT ); + } + + /** + * Add primary term templates + */ + public function wp_footer() { + $taxonomies = $this->get_primary_term_taxonomies(); + + if ( ! empty( $taxonomies ) ) { + $this->include_js_templates(); + } + } + + /** + * Enqueues all the assets needed for the primary term interface + * + * @return void + */ + public function enqueue_assets() { + global $pagenow; + + if ( ! WPSEO_Metabox::is_post_edit( $pagenow ) ) { + return; + } + + $taxonomies = $this->get_primary_term_taxonomies(); + + // Only enqueue if there are taxonomies that need a primary term. + if ( empty( $taxonomies ) ) { + return; + } + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_style( 'primary-category' ); + $asset_manager->enqueue_script( 'primary-category' ); + + $taxonomies = array_map( array( $this, 'map_taxonomies_for_js' ), $taxonomies ); + + $data = array( + 'taxonomies' => $taxonomies, + ); + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'primary-category', 'wpseoPrimaryCategoryL10n', $data ); + } + + /** + * Saves all selected primary terms + * + * @param int $post_ID Post ID to save primary terms for. + */ + public function save_primary_terms( $post_ID ) { + // Bail if this is a multisite installation and the site has been switched. + if ( is_multisite() && ms_is_switched() ) { + return; + } + + $taxonomies = $this->get_primary_term_taxonomies( $post_ID ); + + foreach ( $taxonomies as $taxonomy ) { + $this->save_primary_term( $post_ID, $taxonomy ); + } + } + + /** + * /** + * Get the id of the primary term + * + * @param string $taxonomy_name Taxonomy name for the term. + * + * @return int primary term id + */ + protected function get_primary_term( $taxonomy_name ) { + $primary_term = new WPSEO_Primary_Term( $taxonomy_name, $this->get_current_id() ); + + return $primary_term->get_primary_term(); + } + + /** + * Returns all the taxonomies for which the primary term selection is enabled + * + * @param int $post_ID Default current post ID. + * @return array + */ + protected function get_primary_term_taxonomies( $post_ID = null ) { + + if ( null === $post_ID ) { + $post_ID = $this->get_current_id(); + } + + if ( false !== ( $taxonomies = wp_cache_get( 'primary_term_taxonomies_' . $post_ID, 'wpseo' ) ) ) { + return $taxonomies; + } + + $taxonomies = $this->generate_primary_term_taxonomies( $post_ID ); + + wp_cache_set( 'primary_term_taxonomies_' . $post_ID, $taxonomies, 'wpseo' ); + + return $taxonomies; + } + + /** + * Include templates file + */ + protected function include_js_templates() { + include_once WPSEO_PATH . '/admin/views/js-templates-primary-term.php'; + } + + /** + * Save the primary term for a specific taxonomy + * + * @param int $post_ID Post ID to save primary term for. + * @param WP_Term $taxonomy Taxonomy to save primary term for. + */ + protected function save_primary_term( $post_ID, $taxonomy ) { + $primary_term = filter_input( INPUT_POST, WPSEO_Meta::$form_prefix . 'primary_' . $taxonomy->name . '_term', FILTER_SANITIZE_NUMBER_INT ); + + // We accept an empty string here because we need to save that if no terms are selected. + if ( null !== $primary_term && check_admin_referer( 'save-primary-term', WPSEO_Meta::$form_prefix . 'primary_' . $taxonomy->name . '_nonce' ) ) { + $primary_term_object = new WPSEO_Primary_Term( $taxonomy->name, $post_ID ); + $primary_term_object->set_primary_term( $primary_term ); + } + } + + /** + * Generate the primary term taxonomies. + * + * @param int $post_ID ID of the post. + * + * @return array + */ + protected function generate_primary_term_taxonomies( $post_ID ) { + $post_type = get_post_type( $post_ID ); + $all_taxonomies = get_object_taxonomies( $post_type, 'objects' ); + $all_taxonomies = array_filter( $all_taxonomies, array( $this, 'filter_hierarchical_taxonomies' ) ); + + /** + * Filters which taxonomies for which the user can choose the primary term. + * + * @api array $taxonomies An array of taxonomy objects that are primary_term enabled. + * + * @param string $post_type The post type for which to filter the taxonomies. + * @param array $all_taxonomies All taxonomies for this post types, even ones that don't have primary term + * enabled. + */ + $taxonomies = (array) apply_filters( 'wpseo_primary_term_taxonomies', $all_taxonomies, $post_type, $all_taxonomies ); + + return $taxonomies; + } + + /** + * Returns an array suitable for use in the javascript + * + * @param stdClass $taxonomy The taxonomy to map. + * + * @return array + */ + private function map_taxonomies_for_js( $taxonomy ) { + $primary_term = $this->get_primary_term( $taxonomy->name ); + + if ( empty( $primary_term ) ) { + $primary_term = ''; + } + + return array( + 'title' => $taxonomy->labels->singular_name, + 'name' => $taxonomy->name, + 'primary' => $primary_term, + 'terms' => array_map( array( $this, 'map_terms_for_js' ), get_terms( $taxonomy->name ) ), + ); + } + + /** + * Returns an array suitable for use in the javascript + * + * @param stdClass $term The term to map. + * + * @return array + */ + private function map_terms_for_js( $term ) { + return array( + 'id' => $term->term_id, + 'name' => $term->name, + ); + } + + /** + * Returns whether or not a taxonomy is hierarchical + * + * @param stdClass $taxonomy Taxonomy object. + * + * @return bool + */ + private function filter_hierarchical_taxonomies( $taxonomy ) { + return (bool) $taxonomy->hierarchical; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-product-upsell-notice.php b/wp-content/plugins/wordpress-seo/admin/class-product-upsell-notice.php new file mode 100644 index 0000000..fe00692 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-product-upsell-notice.php @@ -0,0 +1,201 @@ +options = $this->get_options(); + } + + /** + * Checks if the notice should be added or removed. + */ + public function initialize() { + if ( $this->is_notice_dismissed() ) { + $this->remove_notification(); + + return; + } + + if ( $this->should_add_notification() ) { + $this->add_notification(); + } + } + + /** + * Sets the upgrade notice. + */ + public function set_upgrade_notice() { + + if ( $this->has_first_activated_on() ) { + return; + } + + $this->set_first_activated_on(); + $this->add_notification(); + } + + /** + * Listener for the upsell notice. + */ + public function dismiss_notice_listener() { + if ( filter_input( INPUT_GET, 'yoast_dismiss' ) !== 'upsell' ) { + return; + } + + $this->dismiss_notice(); + + wp_redirect( admin_url( 'admin.php?page=wpseo_dashboard' ) ); + exit; + } + + /** + * When the notice should be shown. + * + * @return bool + */ + protected function should_add_notification() { + return ( $this->options['first_activated_on'] < strtotime( '-2weeks' ) ); + } + + /** + * Checks if the options has a first activated on date value. + */ + protected function has_first_activated_on() { + return $this->options['first_activated_on'] !== false; + } + + /** + * Sets the first activated on. + */ + protected function set_first_activated_on() { + $this->options['first_activated_on'] = strtotime( '-2weeks' ); + + $this->save_options(); + } + + /** + * Adds a notification to the notification center. + */ + protected function add_notification() { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->add_notification( $this->get_notification() ); + } + + /** + * Adds a notification to the notification center. + */ + protected function remove_notification() { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->remove_notification( $this->get_notification() ); + } + + /** + * Returns a premium upsell section if using the free plugin. + * + * @return string + */ + protected function get_premium_upsell_section() { + $features = new WPSEO_Features(); + if ( $features->is_free() ) { + /* translators: %1$s expands anchor to premium plugin page, %2$s expands to */ + return sprintf( + __( 'By the way, did you know we also have a %1$sPremium plugin%2$s? It offers advanced features, like a redirect manager and support for multiple keywords. It also comes with 24/7 personal support.' , 'wordpress-seo' ), + "", + '' + ); + } + + return ''; + } + + /** + * Gets the notification value. + * + * @return Yoast_Notification + */ + protected function get_notification() { + /* translators: %1$s expands to Yoast SEO, %2$s is a link start tag to the plugin page on WordPress.org, %3$s is the link closing tag. */ + $message = sprintf( + __( 'We\'ve noticed you\'ve been using %1$s for some time now; we hope you love it! We\'d be thrilled if you could %2$sgive us a 5 stars rating on WordPress.org%3$s!', 'wordpress-seo' ), + 'Yoast SEO', + '', + '' + ) . "\n\n"; + + $message .= sprintf( + /* translators: %1$s is a link start tag to the bugreport guidelines on the Yoast knowledge base, %2$s is the link closing tag. */ + __( 'If you are experiencing issues, %1$splease file a bug report%2$s and we\'ll do our best to help you out.', 'wordpress-seo' ), + '', + '' + ) . "\n\n"; + + $message .= $this->get_premium_upsell_section() . "\n\n"; + + $message .= sprintf( + /* translators: %1$s is the notification dismissal link start tag, %2$s is the link closing tag. */ + __( '%1$sPlease don\'t show me this notification anymore%2$s', 'wordpress-seo' ), + '', + '' + ); + + $notification = new Yoast_Notification( + $message, + array( + 'type' => Yoast_Notification::WARNING, + 'id' => 'wpseo-upsell-notice', + 'capabilities' => 'manage_options', + 'priority' => 0.8, + ) + ); + + return $notification; + } + + /** + * Dismisses the notice. + * + * @return string + */ + protected function is_notice_dismissed() { + return get_user_meta( get_current_user_id(), self::USER_META_DISMISSED, true ) === '1'; + } + + /** + * Dismisses the notice. + */ + protected function dismiss_notice() { + update_user_meta( get_current_user_id(), self::USER_META_DISMISSED, true ); + } + + /** + * Returns the set options + * + * @return mixed|void + */ + protected function get_options() { + return get_option( self::OPTION_NAME ); + } + + /** + * Saves the options to the database. + */ + protected function save_options() { + update_option( self::OPTION_NAME, $this->options ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-recalculate-scores.php b/wp-content/plugins/wordpress-seo/admin/class-recalculate-scores.php new file mode 100644 index 0000000..4e1a72f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-recalculate-scores.php @@ -0,0 +1,52 @@ +enqueue_script( 'recalculate' ); + } + + /** + * Initialize the modal box to be displayed when needed. + */ + public function modal_box() { + // Adding the thickbox. + add_thickbox(); + + $progress = sprintf( + /* translators: 1: expands to a containing the number of posts recalculated. 2: expands to a containing the total number of posts. */ + __( '%1$s of %2$s done.', 'wordpress-seo' ), + '0', + '0' + ); + + ?> + + options = WPSEO_Options::get_option( 'wpseo_social' ); + self::translate_meta_boxes(); + add_filter( 'wpseo_save_metaboxes', array( $this, 'save_meta_boxes' ), 10, 1 ); + add_action( 'wpseo_save_compare_data', array( $this, 'og_data_compare' ), 10, 1 ); + } + + /** + * Translate text strings for use in the meta box + * + * IMPORTANT: if you want to add a new string (option) somewhere, make sure you add that array key to + * the main meta box definition array in the class WPSEO_Meta() as well!!!! + */ + public static function translate_meta_boxes() { + /* translators: %s expands to the social network's name */ + $title_text = __( 'If you don\'t want to use the post title for sharing the post on %s but instead want another title there, write it here.', 'wordpress-seo' ); + /* translators: %s expands to the social network's name */ + $description_text = __( 'If you don\'t want to use the meta description for sharing the post on %s but want another description there, write it here.', 'wordpress-seo' ); + /* translators: %s expands to the social network's name */ + $image_text = __( 'If you want to override the image used on %s for this post, upload / choose an image or add the URL here.', 'wordpress-seo' ); + /* translators: %1$s expands to the social network, %2$s to the recommended image size */ + $image_size_text = __( 'The recommended image size for %1$s is %2$s pixels.', 'wordpress-seo' ); + + $options = WPSEO_Options::get_option( 'wpseo_social' ); + + $social_networks = array( + 'opengraph' => __( 'Facebook', 'wordpress-seo' ), + 'twitter' => __( 'Twitter', 'wordpress-seo' ), + ); + + // Source: https://blog.bufferapp.com/ideal-image-sizes-social-media-posts. + $recommended_image_sizes = array( + /* translators: %1$s expands to the image recommended width, %2$s to its height. */ + 'opengraph' => sprintf( __( '%1$s by %2$s', 'wordpress-seo' ), '1200', '630' ), // Source: https://developers.facebook.com/docs/sharing/best-practices#images. + /* translators: %1$s expands to the image recommended width, %2$s to its height. */ + 'twitter' => sprintf( __( '%1$s by %2$s', 'wordpress-seo' ), '1024', '512' ), + ); + + foreach ( $social_networks as $network => $label ) { + if ( true === $options[ $network ] ) { + + self::$meta_fields['social'][ $network . '-title' ]['title'] = sprintf( __( '%s Title', 'wordpress-seo' ), $label ); + self::$meta_fields['social'][ $network . '-title' ]['description'] = sprintf( $title_text, $label ); + + self::$meta_fields['social'][ $network . '-description' ]['title'] = sprintf( __( '%s Description', 'wordpress-seo' ), $label ); + self::$meta_fields['social'][ $network . '-description' ]['description'] = sprintf( $description_text, $label ); + + self::$meta_fields['social'][ $network . '-image' ]['title'] = sprintf( __( '%s Image', 'wordpress-seo' ), $label ); + self::$meta_fields['social'][ $network . '-image' ]['description'] = sprintf( $image_text, $label ) . ' ' . sprintf( $image_size_text, $label, $recommended_image_sizes[ $network ] ); + } + } + } + + /** + * Returns the metabox section for the social settings. + * + * @return WPSEO_Metabox_Tab_Section + */ + public function get_meta_section() { + $tabs = array(); + $social_meta_fields = $this->get_meta_field_defs( 'social' ); + $single = true; + + if ( $this->options['opengraph'] === true && $this->options['twitter'] === true ) { + $single = null; + } + + if ( $this->options['opengraph'] === true ) { + $tabs[] = new WPSEO_Metabox_Form_Tab( + 'facebook', + $this->get_social_tab_content( 'opengraph', $social_meta_fields ), + '' . __( 'Facebook / Open Graph metadata', 'wordpress-seo' ) . '', + array( + 'link_aria_label' => __( 'Facebook / Open Graph metadata', 'wordpress-seo' ), + 'link_class' => 'yoast-tooltip yoast-tooltip-se', + 'single' => $single, + ) + ); + } + + if ( $this->options['twitter'] === true ) { + $tabs[] = new WPSEO_Metabox_Form_Tab( + 'twitter', + $this->get_social_tab_content( 'twitter', $social_meta_fields ), + '' . __( 'Twitter metadata', 'wordpress-seo' ) . '', + array( + 'link_aria_label' => __( 'Twitter metadata', 'wordpress-seo' ), + 'link_class' => 'yoast-tooltip yoast-tooltip-se', + 'single' => $single, + ) + ); + } + + return new WPSEO_Metabox_Tab_Section( + 'social', + '' . __( 'Social', 'wordpress-seo' ) . '', + $tabs, + array( + 'link_aria_label' => __( 'Social', 'wordpress-seo' ), + 'link_class' => 'yoast-tooltip yoast-tooltip-e', + ) + ); + } + + /** + * Generates the html for a social settings tab for one of the supported social media. + * + * @param string $medium can be 'opengraph' or 'twitter'. + * @param array $meta_field_defs The social meta field definitions. + * + * @return string + */ + private function get_social_tab_content( $medium, $meta_field_defs ) { + $field_names = array( + $medium . '-title', + $medium . '-description', + $medium . '-image', + ); + + $tab_content = ''; + + foreach ( $field_names as $field_name ) { + $tab_content .= $this->do_meta_box( $meta_field_defs[ $field_name ], $field_name ); + } + + return $tab_content; + } + + /** + * Filter over the meta boxes to save, this function adds the Social meta boxes. + * + * @param array $field_defs Array of metaboxes to save. + * + * @return array + */ + public function save_meta_boxes( $field_defs ) { + return array_merge( $field_defs, $this->get_meta_field_defs( 'social' ) ); + } + + /** + * This method will compare opengraph fields with the posted values. + * + * When fields are changed, the facebook cache will be purge. + * + * @param WP_Post $post Post instance. + */ + public function og_data_compare( $post ) { + + // Check if post data is available, if post_id is set and if original post_status is publish. + if ( + ! empty( $_POST ) && ! empty( $post->ID ) && $post->post_status == 'publish' && + isset( $_POST['original_post_status'] ) && $_POST['original_post_status'] === 'publish' + ) { + + $fields_to_compare = array( + 'opengraph-title', + 'opengraph-description', + 'opengraph-image', + ); + + $reset_facebook_cache = false; + + foreach ( $fields_to_compare as $field_to_compare ) { + $old_value = self::get_value( $field_to_compare, $post->ID ); + $new_value = self::get_post_value( self::$form_prefix . $field_to_compare ); + + if ( $old_value !== $new_value ) { + $reset_facebook_cache = true; + break; + } + } + unset( $field_to_compare, $old_value, $new_value ); + + if ( $reset_facebook_cache ) { + wp_remote_get( + 'https://graph.facebook.com/?id=' . get_permalink( $post->ID ) . '&scrape=true&method=post' + ); + } + } + } + + + /********************** DEPRECATED METHODS **********************/ + + /** + * Define the meta boxes for the Social tab + * + * @deprecated 1.5.0 + * @deprecated use WPSEO_Meta::get_meta_field_defs() + * @see WPSEO_Meta::get_meta_field_defs() + * + * @param string $post_type Optional post type string. + * + * @return array Array containing the meta boxes + */ + public function get_meta_boxes( $post_type = 'post' ) { + _deprecated_function( __METHOD__, 'WPSEO 1.5.0', 'WPSEO_Meta::get_meta_field_defs()' ); + + return $this->get_meta_field_defs( 'social' ); + } + + /** + * @deprecated 3.0 Removed. + * + * @return string + */ + public function tab_header() { + _deprecated_function( 'WPSEO_Social_Admin::tab_header', 'WPSEO 3.0' ); + + return ''; + } + + /** + * @deprecated 3.0 Removed. + * + * @return string + */ + public function tab_content() { + _deprecated_function( 'WPSEO_Social_Admin::tab_content', 'WPSEO 3.0' ); + + return ''; + } +} /* End of class */ diff --git a/wp-content/plugins/wordpress-seo/admin/class-social-facebook.php b/wp-content/plugins/wordpress-seo/admin/class-social-facebook.php new file mode 100644 index 0000000..84748a4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-social-facebook.php @@ -0,0 +1,480 @@ +options = get_option( 'wpseo_social' ); + + $this->get_listener(); + + $this->form = new Yoast_Social_Facebook_Form(); + } + + /** + * Returns the output from the form class + */ + public function show_form() { + $this->form->show_form(); + } + + /** + * Adding a new admin + * + * @param string $admin_name Name string. + * @param string $admin_id ID string. + * + * @return string + */ + public function add_admin( $admin_name, $admin_id ) { + $success = 0; + + // If one of the fields is empty. + if ( empty( $admin_name ) || empty( $admin_id ) ) { + $response_body = $this->get_response_body( 'not_present' ); + } + else { + $admin_id = $this->parse_admin_id( $admin_id ); + + if ( ! isset( $this->options['fb_admins'][ $admin_id ] ) ) { + $name = sanitize_text_field( urldecode( $admin_name ) ); + $admin_id = sanitize_text_field( $admin_id ); + + if ( preg_match( '/[0-9]+?/', $admin_id ) && preg_match( '/[\w\s]+?/', $name ) ) { + $this->options['fb_admins'][ $admin_id ]['name'] = $name; + $this->options['fb_admins'][ $admin_id ]['link'] = urldecode( 'http://www.facebook.com/' . $admin_id ); + + $this->save_options(); + + $success = 1; + $response_body = $this->form->get_admin_link( $admin_id, $this->options['fb_admins'][ $admin_id ] ); + } + else { + $response_body = $this->get_response_body( 'invalid_format' ); + } + } + else { + $response_body = $this->get_response_body( 'already_exists' ); + } + } + + return wp_json_encode( + array( + 'success' => $success, + 'html' => $response_body, + ) + ); + } + + /** + * Fetches the id if the full meta tag or a full url was given + * + * @param string $admin_id Admin ID input string to process. + * + * @return string + */ + private function parse_admin_id( $admin_id ) { + if ( preg_match( '/^\

'; + break; + case 'invalid_format': + $return = "

" . __( 'Your input contains invalid characters. Please make sure both fields are filled in correctly.', 'wordpress-seo' ) . '

'; + break; + case 'already_exists': + $return = "

" . __( 'This Facebook user has already been added as an admin.', 'wordpress-seo' ) . '

'; + break; + default: + $return = ''; + break; + } + + return $return; + } + + /** + * This method will hook into the defined get params + */ + private function get_listener() { + if ( $delfbadmin = filter_input( INPUT_GET, 'delfbadmin' ) ) { + $this->delete_admin( $delfbadmin ); + } + elseif ( filter_input( INPUT_GET, 'fbclearall' ) ) { + $this->clear_all(); + } + } + + /** + * Deletes the admin from the options + * + * @param string $delfbadmin Facebook admin ID. + */ + private function delete_admin( $delfbadmin ) { + $this->verify_nonce( 'delfbadmin' ); + + $admin_id = sanitize_text_field( $delfbadmin ); + if ( isset( $this->options['fb_admins'][ $admin_id ] ) ) { + $fbadmin = $this->options['fb_admins'][ $admin_id ]['name']; + unset( $this->options['fb_admins'][ $admin_id ] ); + + $this->save_options(); + $this->success_notice( sprintf( __( 'Successfully removed admin %s', 'wordpress-seo' ), $fbadmin ) ); + + unset( $fbadmin ); + } + + unset( $admin_id ); + + // Clean up the referrer url for later use. + if ( ! empty( $_SERVER['REQUEST_URI'] ) ) { + $this->cleanup_referrer_url( 'nonce', 'delfbadmin' ); + } + } + + /** + * Clear all the facebook that has been set already + */ + private function clear_all() { + $this->verify_nonce( 'fbclearall' ); + + // Reset to defaults, don't unset as otherwise the old values will be retained. + $this->options['fb_admins'] = WPSEO_Options::get_default( 'wpseo_social', 'fb_admins' ); + + $this->save_options(); + $this->success_notice( __( 'Successfully cleared all Facebook Data', 'wordpress-seo' ) ); + + // Clean up the referrer url for later use. + if ( ! empty( $_SERVER['REQUEST_URI'] ) ) { + $this->cleanup_referrer_url( 'nonce', 'fbclearall' ); + } + } + + /** + * Clean up the request_uri. The given params are the params that will be removed from the URL + */ + private function cleanup_referrer_url() { + $_SERVER['REQUEST_URI'] = remove_query_arg( + func_get_args(), + sanitize_text_field( $_SERVER['REQUEST_URI'] ) + ); + } + + /** + * When something is going well, show a success notice + * + * @param string $notice_text Message string. + */ + private function success_notice( $notice_text ) { + add_settings_error( 'yoast_wpseo_social_options', 'success', $notice_text, 'updated' ); + } + + /** + * Verify the nonce from the URL with the saved nonce + * + * @param string $nonce_name Nonce name string. + */ + private function verify_nonce( $nonce_name ) { + if ( wp_verify_nonce( filter_input( INPUT_GET, 'nonce' ), $nonce_name ) != 1 ) { + die( "I don't think that's really nice of you!." ); + } + } + + /** + * Saving the options + */ + private function save_options() { + update_option( 'wpseo_social', $this->options ); + } +} + +/** + * This will display the HTML for the facebook insights part + */ +class Yoast_Social_Facebook_Form { + + /** + * @var array - The options for social + */ + private $options; + + /** + * @var array - The repository for the buttons that will be shown + */ + private $buttons = array(); + + /** + * @var string - The URL to link to + */ + private $admin_url = 'admin.php?page=wpseo_social'; + + /** + * Setting the options and call the methods to display everything + */ + public function __construct() { + $this->options = get_option( 'wpseo_social' ); + } + + /** + * Returns the output-property + */ + public function show_form() { + $this + ->form_head() + ->manage_user_admin() + ->form_thickbox() + ->show_buttons() + ->manage_app_as_admin(); + } + + /** + * Parses the admin_link + * + * @param string $admin_id Facebook admin ID string. + * @param array $admin Admin data array. + * @param string|bool $nonce Optional nonce string. + * + * @return string + */ + public function get_admin_link( $admin_id, $admin, $nonce = false ) { + if ( $nonce === false ) { + $nonce = $this->get_delete_nonce(); + } + + $return = '
  • ' . esc_html( $admin['name'] ) . ''; + $return .= ' - X
  • '; + + return $return; + } + + /** + * SHow the top of the social insights part of the page + * + * @return $this + */ + private function form_head() { + echo '

    ' . esc_html__( 'Facebook Insights and Admins', 'wordpress-seo' ) . '

    '; + echo '

    ', sprintf( + /* translators: %1$s and %2$s expand to a link to Facebook Insights */ + esc_html__( 'To be able to access %1$sFacebook Insights%2$s for your site, you need to specify a Facebook Admin. This can be a user. If you have an app for your site, you could use that as well.', 'wordpress-seo' ), + '', + '' + ); + echo ' '; + /* translators: %1$s and %2$s expand to a link to the Yoast Knowledge Base */ + printf( __( 'More info can be found %1$son our knowledge base%2$s.', 'wordpress-seo' ), '', '' ); + echo '

    '; + + return $this; + } + + /** + * Show the form inside the thickbox + */ + private function form_thickbox() { + // Adding the thickbox. + add_thickbox(); + + echo ''; + + return $this; + } + + /** + * Display the buttons to add an admin or add another admin from Facebook and display the admin that has been added already. + * + * @return $this + */ + private function manage_user_admin() { + $button_text = __( 'Add Facebook admin', 'wordpress-seo' ); + $nonce = false; + $class_attr = ' class="hidden"'; + + if ( is_array( $this->options['fb_admins'] ) && $this->options['fb_admins'] !== array() ) { + $nonce = $this->get_delete_nonce(); + $button_text = __( 'Add Another Facebook Admin', 'wordpress-seo' ); + $class_attr = ''; + } + + echo "
    "; + echo '

    ' . __( 'Currently connected Facebook admins:', 'wordpress-seo' ) . '

    '; + echo '
      '; + $this->show_user_admins( $nonce ); + echo '
    '; + echo '
    '; + + unset( $nonce ); + + $this->add_button( + array( + 'url' => '#TB_inline?width=600&height=350&inlineId=add_facebook_admin', + 'value' => $button_text, + 'class' => 'thickbox', + 'title' => $button_text, + ) + ); + + return $this; + } + + /** + * Show input field to set a facebook apps as an admin + * + * @return $this + */ + private function manage_app_as_admin() { + echo '

    '; + Yoast_Form::get_instance()->textinput( 'fbadminapp', __( 'Facebook App ID', 'wordpress-seo' ) ); + + return $this; + } + + /** + * Loop through the fb-admins to parse the output for them + * + * @param string $nonce Nonce string. + */ + private function show_user_admins( $nonce ) { + foreach ( $this->options['fb_admins'] as $admin_id => $admin ) { + echo $this->get_admin_link( $admin_id, $admin, $nonce ); + } + } + + /** + * Parsing the link that directs to the admin removal + * + * @param string $admin_id Facebook admin ID. + * @param string $nonce Nonce string. + * + * @return string + */ + private function admin_delete_link( $admin_id, $nonce ) { + return esc_url( + add_query_arg( + array( + 'delfbadmin' => esc_attr( $admin_id ), + 'nonce' => $nonce, + ), + admin_url( $this->admin_url . '#top#facebook' ) + ) + ); + } + + /** + * Adding a button to the button property + * + * @param array $args Arguments data array. + */ + private function add_button( $args ) { + $args = wp_parse_args( + $args, + array( + 'url' => '', + 'value' => '', + 'class' => '', + 'id' => '', + 'title' => '', + + ) + ); + + $this->buttons[] = '' . esc_html( $args['value'] ) . ''; + } + + /** + * Showing the buttons + */ + private function show_buttons() { + if ( $this->get_clearall() ) { + $this->add_button( + array( + 'url' => add_query_arg( array( + 'nonce' => wp_create_nonce( 'fbclearall' ), + 'fbclearall' => 'true', + ), admin_url( $this->admin_url . '#top#facebook' ) ), + 'value' => __( 'Clear all Facebook Data', 'wordpress-seo' ), + ) + ); + } + + if ( is_array( $this->buttons ) && $this->buttons !== array() ) { + echo '

    ' . implode( '', $this->buttons ) . '

    '; + } + + return $this; + } + + /** + * Check if the clear button should be displayed. This is based on the set options. + * + * @return bool + */ + private function get_clearall() { + return is_array( $this->options['fb_admins'] ) && $this->options['fb_admins'] !== array(); + } + + /** + * Creates nonce for removal link + * + * @return mixed + */ + private function get_delete_nonce() { + return wp_create_nonce( 'delfbadmin' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-stop-words.php b/wp-content/plugins/wordpress-seo/admin/class-stop-words.php new file mode 100644 index 0000000..ca0ef00 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-stop-words.php @@ -0,0 +1,52 @@ +list_stop_words() ); + + // Don't change the slug if there are less than 3 words left. + if ( count( $new_slug_parts ) < 3 ) { + return $original_slug; + } + + // Turn the sanitized array into a string. + $new_slug = join( '-', $new_slug_parts ); + + return $new_slug; + } + + /** + * Returns a translated, filtered list of stop words + * + * @return array An array of stop words. + */ + public function list_stop_words() { + /* translators: this should be an array of stop words for your language, separated by comma's. */ + $stopwords = explode( ',', __( "a,about,above,after,again,against,all,am,an,and,any,are,as,at,be,because,been,before,being,below,between,both,but,by,could,did,do,does,doing,down,during,each,few,for,from,further,had,has,have,having,he,he'd,he'll,he's,her,here,here's,hers,herself,him,himself,his,how,how's,i,i'd,i'll,i'm,i've,if,in,into,is,it,it's,its,itself,let's,me,more,most,my,myself,nor,of,on,once,only,or,other,ought,our,ours,ourselves,out,over,own,same,she,she'd,she'll,she's,should,so,some,such,than,that,that's,the,their,theirs,them,themselves,then,there,there's,these,they,they'd,they'll,they're,they've,this,those,through,to,too,under,until,up,very,was,we,we'd,we'll,we're,we've,were,what,what's,when,when's,where,where's,which,while,who,who's,whom,why,why's,with,would,you,you'd,you'll,you're,you've,your,yours,yourself,yourselves", 'wordpress-seo' ) ); + + /** + * Allows filtering of the stop words list + * Especially useful for users on a language in which WPSEO is not available yet + * and/or users who want to turn off stop word filtering + * + * @api array $stopwords Array of all lowercase stop words to check and/or remove from slug + */ + $stopwords = apply_filters( 'wpseo_stopwords', $stopwords ); + + return $stopwords; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-yoast-alerts.php b/wp-content/plugins/wordpress-seo/admin/class-yoast-alerts.php new file mode 100644 index 0000000..317d466 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-yoast-alerts.php @@ -0,0 +1,258 @@ +add_hooks(); + } + + /** + * Add hooks + */ + private function add_hooks() { + + $page = filter_input( INPUT_GET, 'page' ); + if ( self::ADMIN_PAGE === $page ) { + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) ); + } + + // Needed for adminbar and Alerts page. + add_action( 'admin_init', array( __CLASS__, 'collect_alerts' ), 99 ); + + // Add AJAX hooks. + add_action( 'wp_ajax_yoast_dismiss_alert', array( $this, 'ajax_dismiss_alert' ) ); + add_action( 'wp_ajax_yoast_restore_alert', array( $this, 'ajax_restore_alert' ) ); + } + + /** + * Enqueue assets + */ + public function enqueue_assets() { + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_style( 'alerts' ); + } + + /** + * Handle ajax request to dismiss an alert + */ + public function ajax_dismiss_alert() { + + $notification = $this->get_notification_from_ajax_request(); + if ( $notification ) { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->maybe_dismiss_notification( $notification ); + + $this->output_ajax_response( $notification->get_type() ); + } + + wp_die(); + } + + /** + * Handle ajax request to restore an alert + */ + public function ajax_restore_alert() { + + $notification = $this->get_notification_from_ajax_request(); + if ( $notification ) { + delete_user_meta( get_current_user_id(), $notification->get_dismissal_key() ); + + $this->output_ajax_response( $notification->get_type() ); + } + + wp_die(); + } + + /** + * Create AJAX response data + * + * @param string $type Alert type. + */ + private function output_ajax_response( $type ) { + + $html = $this->get_view_html( $type ); + echo wp_json_encode( + array( + 'html' => $html, + 'total' => self::get_active_alert_count(), + ) + ); + } + + /** + * Get the HTML to return in the AJAX request + * + * @param string $type Alert type. + * + * @return bool|string + */ + private function get_view_html( $type ) { + + switch ( $type ) { + case 'error': + $view = 'errors'; + break; + + case 'warning': + default: + $view = 'warnings'; + break; + } + + // Re-collect alerts. + self::collect_alerts(); + + /** @noinspection PhpUnusedLocalVariableInspection */ + $alerts_data = self::get_template_variables(); + + ob_start(); + include WPSEO_PATH . 'admin/views/partial-alerts-' . $view . '.php'; + $html = ob_get_clean(); + + return $html; + } + + /** + * Extract the Yoast Notification from the AJAX request + * + * @return null|Yoast_Notification + */ + private function get_notification_from_ajax_request() { + + $notification_center = Yoast_Notification_Center::get(); + $notification_id = filter_input( INPUT_POST, 'notification' ); + + return $notification_center->get_notification_by_id( $notification_id ); + } + + /** + * Show the alerts overview page + */ + public static function show_overview_page() { + + /** @noinspection PhpUnusedLocalVariableInspection */ + $alerts_data = self::get_template_variables(); + + include WPSEO_PATH . 'admin/views/alerts-dashboard.php'; + } + + /** + * Collect the alerts and group them together + */ + public static function collect_alerts() { + + $notification_center = Yoast_Notification_Center::get(); + + $notifications = $notification_center->get_sorted_notifications(); + self::$notification_count = count( $notifications ); + + self::$errors = array_filter( $notifications, array( __CLASS__, 'filter_error_alerts' ) ); + self::$dismissed_errors = array_filter( self::$errors, array( __CLASS__, 'filter_dismissed_alerts' ) ); + self::$active_errors = array_diff( self::$errors, self::$dismissed_errors ); + + self::$warnings = array_filter( $notifications, array( __CLASS__, 'filter_warning_alerts' ) ); + self::$dismissed_warnings = array_filter( self::$warnings, array( __CLASS__, 'filter_dismissed_alerts' ) ); + self::$active_warnings = array_diff( self::$warnings, self::$dismissed_warnings ); + } + + /** + * Get the variables needed in the views + * + * @return array + */ + public static function get_template_variables() { + + return array( + 'metrics' => array( + 'total' => self::$notification_count, + 'active' => self::get_active_alert_count(), + 'errors' => count( self::$errors ), + 'warnings' => count( self::$warnings ), + ), + 'errors' => array( + 'dismissed' => self::$dismissed_errors, + 'active' => self::$active_errors, + ), + 'warnings' => array( + 'dismissed' => self::$dismissed_warnings, + 'active' => self::$active_warnings, + ), + ); + } + + /** + * Get the number of active alerts + * + * @return int + */ + public static function get_active_alert_count() { + + return ( count( self::$active_errors ) + count( self::$active_warnings ) ); + } + + /** + * Filter out any non-errors + * + * @param Yoast_Notification $notification Notification to test. + * + * @return bool + */ + private static function filter_error_alerts( Yoast_Notification $notification ) { + + return $notification->get_type() === 'error'; + } + + /** + * Filter out any non-warnings + * + * @param Yoast_Notification $notification Notification to test. + * + * @return bool + */ + private static function filter_warning_alerts( Yoast_Notification $notification ) { + + return $notification->get_type() !== 'error'; + } + + /** + * Filter out any dismissed notifications + * + * @param Yoast_Notification $notification Notification to test. + * + * @return bool + */ + private static function filter_dismissed_alerts( Yoast_Notification $notification ) { + + return Yoast_Notification_Center::is_notification_dismissed( $notification ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-yoast-dashboard-widget.php b/wp-content/plugins/wordpress-seo/admin/class-yoast-dashboard-widget.php new file mode 100644 index 0000000..a65eaf2 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-yoast-dashboard-widget.php @@ -0,0 +1,204 @@ +statistics = $statistics; + + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_dashboard_stylesheet' ) ); + add_action( 'wp_insert_post', array( $this, 'clear_cache' ) ); + add_action( 'delete_post', array( $this, 'clear_cache' ) ); + + if ( $this->show_widget() ) { + add_action( 'wp_dashboard_setup', array( $this, 'add_dashboard_widget' ) ); + } + } + + /** + * Adds dashboard widget to WordPress + */ + public function add_dashboard_widget() { + add_filter( 'postbox_classes_dashboard_wpseo-dashboard-overview', array( $this, 'wpseo_dashboard_overview_class' ) ); + wp_add_dashboard_widget( + 'wpseo-dashboard-overview', + /* translators: %s is the plugin name */ + sprintf( __( '%s Posts Overview', 'wordpress-seo' ), 'Yoast SEO' ), + array( $this, 'display_dashboard_widget' ) + ); + } + + /** + * Adds CSS classes to the dashboard widget. + * + * @param array $classes An array of postbox CSS classes. + * + * @return array + */ + public function wpseo_dashboard_overview_class( $classes ) { + $classes[] = 'yoast wpseo-dashboard-overview'; + return $classes; + } + + /** + * Display the dashboard widget + */ + public function display_dashboard_widget() { + $statistics = $this->statistic_items(); + + $onpage_option = new WPSEO_OnPage_Option(); + $onpage = false; + if ( $onpage_option->is_enabled() ) { + $onpage = array( + 'indexable' => $onpage_option->get_status(), + 'can_fetch' => $onpage_option->should_be_fetched(), + ); + } + + include WPSEO_PATH . '/admin/views/dashboard-widget.php'; + } + + /** + * Enqueue's stylesheet for the dashboard if the current page is the dashboard + */ + public function enqueue_dashboard_stylesheet() { + $current_screen = get_current_screen(); + + if ( $current_screen instanceof WP_Screen && 'dashboard' === $current_screen->id ) { + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_style( 'wp-dashboard' ); + } + } + + /** + * Clears the dashboard widget items cache + */ + public function clear_cache() { + delete_transient( self::CACHE_TRANSIENT_KEY ); + } + + /** + * An array representing items to be added to the At a Glance dashboard widget + * + * @return array + */ + private function statistic_items() { + $transient = get_transient( self::CACHE_TRANSIENT_KEY ); + $user_id = get_current_user_id(); + + if ( isset( $transient[ $user_id ] ) ) { + return $transient[ $user_id ]; + } + + return $this->set_statistic_items_for_this_user( $transient ); + } + + /** + * Set the cache for a specific user + * + * @param array|boolean $transient The current stored transient with the cached data. + * + * @return mixed + */ + private function set_statistic_items_for_this_user( $transient ) { + if ( $transient === false ) { + $transient = array(); + } + + $user_id = get_current_user_id(); + $transient[ $user_id ] = array_filter( $this->get_seo_scores_with_post_count(), array( $this, 'filter_items' ) ); + + set_transient( self::CACHE_TRANSIENT_KEY, $transient, DAY_IN_SECONDS ); + + return $transient[ $user_id ]; + } + + /** + * Set the SEO scores belonging to their SEO score result + * + * @return array + */ + private function get_seo_scores_with_post_count() { + $ranks = WPSEO_Rank::get_all_ranks(); + + return array_map( array( $this, 'map_rank_to_widget' ), $ranks ); + } + + /** + * Converts a rank to data usable in the dashboard widget + * + * @param WPSEO_Rank $rank The rank to map. + * + * @return array + */ + private function map_rank_to_widget( WPSEO_Rank $rank ) { + return array( + 'seo_rank' => $rank->get_rank(), + 'title' => $this->get_title_for_rank( $rank ), + 'class' => 'wpseo-glance-' . $rank->get_css_class(), + 'icon_class' => $rank->get_css_class(), + 'count' => $this->statistics->get_post_count( $rank ), + ); + } + + /** + * Returns a dashboard widget label to use for a certain rank + * + * @param WPSEO_Rank $rank The rank to return a label for. + * + * @return string + */ + private function get_title_for_rank( WPSEO_Rank $rank ) { + $labels = array( + WPSEO_Rank::NO_FOCUS => __( 'Posts without focus keyword', 'wordpress-seo' ), + WPSEO_Rank::BAD => __( 'Posts with bad SEO score', 'wordpress-seo' ), + WPSEO_Rank::OK => __( 'Posts with OK SEO score', 'wordpress-seo' ), + WPSEO_Rank::GOOD => __( 'Posts with good SEO score', 'wordpress-seo' ), + /* translators: %s expands to noindex */ + WPSEO_Rank::NO_INDEX => sprintf( __( 'Posts that are set to “%s”', 'wordpress-seo' ), 'noindex' ), + ); + + return $labels[ $rank->get_rank() ]; + } + + /** + * Filter items if they have a count of zero + * + * @param array $item Data array. + * + * @return bool + */ + private function filter_items( $item ) { + return 0 !== $item['count']; + } + + /** + * Returns true when the dashboard widget should be shown. + * + * @return bool + */ + private function show_widget() { + $analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + + return $analysis_seo->is_enabled() && current_user_can( 'edit_posts' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-yoast-form.php b/wp-content/plugins/wordpress-seo/admin/class-yoast-form.php new file mode 100644 index 0000000..f680ead --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-yoast-form.php @@ -0,0 +1,685 @@ + +
    + +

    +
    +
    + '; + settings_fields( $option_long_name ); + } + $this->set_option( $option ); + } + + /** + * Set the option used in output for form elements + * + * @param string $option_name Option key. + */ + public function set_option( $option_name ) { + $this->option_name = $option_name; + $this->options = $this->get_option(); + } + + /** + * Retrieve options based on whether we're on multisite or not. + * + * @since 1.2.4 + * + * @return array + */ + private function get_option() { + if ( is_network_admin() ) { + return get_site_option( $this->option_name ); + } + + return get_option( $this->option_name ); + } + + /** + * Generates the footer for admin pages + * + * @param bool $submit Whether or not a submit button and form end tag should be shown. + * @param bool $show_sidebar Whether or not to show the banner sidebar - used by premium plugins to disable it. + */ + public function admin_footer( $submit = true, $show_sidebar = true ) { + if ( $submit ) { + submit_button(); + + echo ' + '; + } + + /** + * Apply general admin_footer hooks + */ + do_action( 'wpseo_admin_footer' ); + + /** + * Run possibly set actions to add for example an i18n box + */ + do_action( 'wpseo_admin_promo_footer' ); + + echo ' +
    '; + + if ( $show_sidebar ) { + $this->admin_sidebar(); + } + + echo '
    '; + + + if ( ( defined( 'WP_DEBUG' ) && WP_DEBUG === true ) ) { + $xdebug = ( extension_loaded( 'xdebug' ) ? true : false ); + echo ' +
    +
    + +

    ' . __( 'Debug Information', 'wordpress-seo' ) . '

    +
    +

    ' . esc_html( __( 'Current option:', 'wordpress-seo' ) ) . ' ' . esc_html( $this->option_name ) . '

    + ' . ( ( $xdebug ) ? '' : '
    ' );
    +			var_dump( $this->get_option() );
    +			echo '
    +					' . ( ( $xdebug ) ? '' : '
    ' ) . ' +
    +
    +
    '; + } + + echo ' +
    '; + } + + /** + * Generates the sidebar for admin pages. + */ + public function admin_sidebar() { + + // No banners in Premium. + if ( class_exists( 'WPSEO_Product_Premium' ) ) { + $license_manager = new Yoast_Plugin_License_Manager( new WPSEO_Product_Premium() ); + if ( $license_manager->license_is_valid() ) { + return; + } + } + + $sidebar_renderer = new WPSEO_Admin_Banner_Sidebar_Renderer( new WPSEO_Admin_Banner_Spot_Renderer() ); + + $banner_renderer = new WPSEO_Admin_Banner_Renderer; + $banner_renderer->set_base_path( plugins_url( 'images/banner/', WPSEO_FILE ) ); + + $sidebar = new WPSEO_Admin_Banner_Sidebar( sprintf( '%1s recommendations', 'Yoast' ), $banner_renderer ); + $sidebar->initialize( new WPSEO_Features() ); + + echo $sidebar_renderer->render( $sidebar ); + + } + + /** + * Output a label element + * + * @param string $text Label text string. + * @param array $attr HTML attributes set. + */ + public function label( $text, $attr ) { + $attr = wp_parse_args( $attr, array( + 'class' => 'checkbox', + 'close' => true, + 'for' => '', + ) + ); + echo "'; + } + } + + /** + * Output a legend element. + * + * @param string $text Legend text string. + * @param array $attr HTML attributes set. + */ + public function legend( $text, $attr ) { + $attr = wp_parse_args( $attr, array( + 'id' => '', + 'class' => '', + ) + ); + $id = ( '' === $attr['id'] ) ? '' : ' id="' . esc_attr( $attr['id'] ) . '"'; + echo '' . $text . ''; + } + + /** + * Create a Checkbox input field. + * + * @param string $var The variable within the option to create the checkbox for. + * @param string $label The label to show for the variable. + * @param bool $label_left Whether the label should be left (true) or right (false). + */ + public function checkbox( $var, $label, $label_left = false ) { + if ( ! isset( $this->options[ $var ] ) ) { + $this->options[ $var ] = false; + } + + if ( $this->options[ $var ] === true ) { + $this->options[ $var ] = 'on'; + } + + $class = ''; + if ( $label_left !== false ) { + if ( ! empty( $label_left ) ) { + $label_left .= ':'; + } + $this->label( $label_left, array( 'for' => $var ) ); + } + else { + $class = 'double'; + } + + echo 'options[ $var ], 'on', false ), '/>'; + + if ( ! empty( $label ) ) { + $this->label( $label, array( 'for' => $var ) ); + } + + echo '
    '; + } + + /** + * Create a light switch input field. + * + * @param string $var The variable within the option to create the checkbox for. + * @param string $label The label to show for the variable. + * @param array $buttons Array of two labels for the buttons (defaults Off/On). + * @param boolean $reverse Reverse order of buttons (default true). + */ + public function light_switch( $var, $label, $buttons = array(), $reverse = true ) { + + if ( ! isset( $this->options[ $var ] ) ) { + $this->options[ $var ] = false; + } + + if ( $this->options[ $var ] === true ) { + $this->options[ $var ] = 'on'; + } + + $class = 'switch-light switch-candy switch-yoast-seo'; + $aria_labelledby = esc_attr( $var ) . '-label'; + + if ( $reverse ) { + $class .= ' switch-yoast-seo-reverse'; + } + + if ( empty( $buttons ) ) { + $buttons = array( __( 'Disabled', 'wordpress-seo' ), __( 'Enabled', 'wordpress-seo' ) ); + } + + list( $off_button, $on_button ) = $buttons; + + echo '
    ', + '
    '; + } + + /** + * Create a Text input field. + * + * @param string $var The variable within the option to create the text input field for. + * @param string $label The label to show for the variable. + * @param array|string $attr Extra class to add to the input field. + */ + public function textinput( $var, $label, $attr = array() ) { + if ( ! is_array( $attr ) ) { + $attr = array( + 'class' => $attr, + ); + } + $attr = wp_parse_args( $attr, array( + 'placeholder' => '', + 'class' => '', + ) ); + $val = ( isset( $this->options[ $var ] ) ) ? $this->options[ $var ] : ''; + + $this->label( $label . ':', array( 'for' => $var ) ); + echo '', '
    '; + } + + /** + * Create a textarea. + * + * @param string $var The variable within the option to create the textarea for. + * @param string $label The label to show for the variable. + * @param array $attr The CSS class to assign to the textarea. + */ + public function textarea( $var, $label, $attr = array() ) { + if ( ! is_array( $attr ) ) { + $attr = array( + 'class' => $attr, + ); + } + $attr = wp_parse_args( $attr, array( + 'cols' => '', + 'rows' => '', + 'class' => '', + ) ); + $val = ( isset( $this->options[ $var ] ) ) ? $this->options[ $var ] : ''; + + $this->label( $label . ':', array( 'for' => $var, 'class' => 'textinput' ) ); + echo '' . '
    '; + } + + /** + * Create a hidden input field. + * + * @param string $var The variable within the option to create the hidden input for. + * @param string $id The ID of the element. + */ + public function hidden( $var, $id = '' ) { + $val = ( isset( $this->options[ $var ] ) ) ? $this->options[ $var ] : ''; + if ( is_bool( $val ) ) { + $val = ( $val === true ) ? 'true' : 'false'; + } + + if ( '' === $id ) { + $id = 'hidden_' . $var; + } + + echo ''; + } + + /** + * Create a Select Box. + * + * @param string $field_name The variable within the option to create the select for. + * @param string $label The label to show for the variable. + * @param array $select_options The select options to choose from. + */ + public function select( $field_name, $label, array $select_options ) { + + if ( empty( $select_options ) ) { + return; + } + + $this->label( $label . ':', array( 'for' => $field_name, 'class' => 'select' ) ); + + $select_name = esc_attr( $this->option_name ) . '[' . esc_attr( $field_name ) . ']'; + $active_option = ( isset( $this->options[ $field_name ] ) ) ? $this->options[ $field_name ] : ''; + + $select = new Yoast_Input_Select( $field_name, $select_name, $select_options, $active_option ); + $select->add_attribute( 'class', 'select' ); + $select->output_html(); + + echo '
    '; + } + + /** + * Create a File upload field. + * + * @param string $var The variable within the option to create the file upload field for. + * @param string $label The label to show for the variable. + */ + public function file_upload( $var, $label ) { + $val = ''; + if ( isset( $this->options[ $var ] ) && is_array( $this->options[ $var ] ) ) { + $val = $this->options[ $var ]['url']; + } + + $var_esc = esc_attr( $var ); + $this->label( $label . ':', array( 'for' => $var, 'class' => 'select' ) ); + echo ''; + + // Need to save separate array items in hidden inputs, because empty file inputs type will be deleted by settings API. + if ( ! empty( $this->options[ $var ] ) ) { + $this->hidden( 'file', $this->option_name . '_file' ); + $this->hidden( 'url', $this->option_name . '_url' ); + $this->hidden( 'type', $this->option_name . '_type' ); + } + echo '
    '; + } + + /** + * Media input + * + * @param string $var Option name. + * @param string $label Label message. + */ + public function media_input( $var, $label ) { + $val = ''; + if ( isset( $this->options[ $var ] ) ) { + $val = $this->options[ $var ]; + } + + $var_esc = esc_attr( $var ); + + $this->label( $label . ':', array( 'for' => 'wpseo_' . $var, 'class' => 'select' ) ); + echo ''; + echo ''; + echo '
    '; + } + + /** + * Create a Radio input field. + * + * @param string $var The variable within the option to create the radio button for. + * @param array $values The radio options to choose from. + * @param string $legend Optional. The legend to show for the field set, if any. + * @param array $legend_attr Optional. The attributes for the legend, if any. + */ + public function radio( $var, $values, $legend = '', $legend_attr = array() ) { + if ( ! is_array( $values ) || $values === array() ) { + return; + } + if ( ! isset( $this->options[ $var ] ) ) { + $this->options[ $var ] = false; + } + + $var_esc = esc_attr( $var ); + + echo '
    '; + + if ( is_string( $legend ) && '' !== $legend ) { + + $legend_attr = wp_parse_args( $legend_attr, array( + 'id' => '', + 'class' => 'radiogroup', + ) ); + + $this->legend( $legend, $legend_attr ); + } + + foreach ( $values as $key => $value ) { + $key_esc = esc_attr( $key ); + echo 'options[ $var ], $key_esc, false ) . ' />'; + $this->label( $value, array( 'for' => $var_esc . '-' . $key_esc, 'class' => 'radio' ) ); + } + echo '
    '; + } + + + /** + * Create a toggle switch input field. + * + * @param string $var The variable within the option to create the file upload field for. + * @param array $values The radio options to choose from. + * @param string $label The label to show for the variable. + */ + public function toggle_switch( $var, $values, $label ) { + if ( ! is_array( $values ) || $values === array() ) { + return; + } + if ( ! isset( $this->options[ $var ] ) ) { + $this->options[ $var ] = false; + } + if ( $this->options[ $var ] === true ) { + $this->options[ $var ] = 'on'; + } + if ( $this->options[ $var ] === false ) { + $this->options[ $var ] = 'off'; + } + + $var_esc = esc_attr( $var ); + + echo '
    '; + echo '
    ', $label, ' +
    '; + + foreach ( $values as $key => $value ) { + $key_esc = esc_attr( $key ); + $for = $var_esc . '-' . $key_esc; + echo 'options[ $var ], $key_esc, false ) . ' />', + ''; + } + + echo '
    ' . "\n\n"; + } + + /** + * Returns two random selected service banners. + * + * @return WPSEO_Admin_Banner_Spot + */ + private function get_service_banners() { + + $service_banner_spot = new WPSEO_Admin_Banner_Spot( + __( 'Services', 'wordpress-seo' ), + sprintf( + /* translators: %1$s expands to a link start tag to the Yoast Services page, %2$s to Yoast, %3$s is the link closing tag. */ + __( 'Don\'t want to dive into SEO yourself? %1$sLet team %2$s help you!%3$s', 'wordpress-seo' ), + '', + 'Yoast', + '' + ) + ); + + $service_banner_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoast.com/hire-us/website-review/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=website-review-banner', + 'banner-website-review.png', + 261, + 190, + __( 'Order a Website Review and we will tell you what to improve to attract more visitors!', 'wordpress-seo' ) + ) + ); + + $service_banner_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoast.com/hire-us/yoast-seo-configuration/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=configuration-service-banner', + 'banner-configuration-service.png', + 261, + 190, + sprintf( + /* translators: %1$s expands to Yoast SEO Premium. */ + __( 'Let our experts set up your %1$s plugin!', 'wordpress-seo' ), + 'Yoast SEO Premium' + ) + ) + ); + + $service_banner_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoast.com/academy/course/seo-copywriting-training/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=seo-copywriting-training-banner', + 'banner-seo-copywriting-training.png', + 261, + 190, + __( 'Take the online SEO Copywriting Training course and learn how to write awesome copy that ranks!', 'wordpress-seo' ) + ) + ); + + $service_banner_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoast.com/academy/course/basic-seo-training/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=basic-seo-training-banner', + 'banner-basic-seo-training.png', + 261, + 190, + __( 'Take the online Basic SEO Training course and learn the fundamentals of SEO!', 'wordpress-seo' ) + ) + ); + + $service_banner_spot->add_banner( + new WPSEO_Admin_Banner( + 'https://yoast.com/academy/course/yoast-seo-wordpress-training/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=yoast-seo-plugin-training-banner', + 'banner-yoast-seo-for-wordpress-training.png', + 261, + 190, + /* translators: %1$s expands to Yoast SEO for WordPress Training, %2$s to Yoast SEO for WordPress. */ + sprintf( + __( 'Take the %s course and become a certified %2$s expert!', 'wordpress-seo' ), + 'Yoast SEO for WordPress Training', + 'Yoast SEO for WordPress' + ) + ) + ); + + return $service_banner_spot; + } + + /** + * Returns two random selected plugin banners. + * + * @return WPSEO_Admin_Banner_Spot + */ + private function get_plugin_banners() { + + $plugin_banners = new WPSEO_Admin_Banner_Spot( + __( 'Extensions', 'wordpress-seo' ), + sprintf( + /* translators: %1$s expands to Yoast SEO, %2$s to a link start tag to the Yoast plugin page, %3$s is the link closing tag. */ + __( 'Extend your %1$s plugin with our %2$sSEO plugins%3$s.', 'wordpress-seo' ), + 'Yoast SEO', + '', + '' + ) + ); + + + $plugin_banners->add_banner( + new WPSEO_Admin_Banner( + 'https://yoast.com/wordpress/plugins/seo-premium/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=premium-seo-banner', + 'banner-premium-seo.png', + 261, + 152, + sprintf( + /* translators: %1$s expands to Yoast SEO Premium. */ + __( 'Buy the %1$s plugin now and get access to extra features and 24/7 support!', 'wordpress-seo' ), + 'Yoast SEO Premium' + ) + ) + ); + + if ( ! class_exists( 'wpseo_Video_Sitemap' ) ) { + $plugin_banners->add_banner( + new WPSEO_Admin_Banner( + 'https://yoast.com/wordpress/plugins/video-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=video-seo-banner', + 'banner-video-seo.png', + 261, + 152, + sprintf( + /* translators: %1$s expands to Yoast Video SEO. */ + __( 'Buy the %1$s plugin now and optimize your videos for video search results and social media!', 'wordpress-seo' ), + 'Yoast Video SEO' + ) + ) + ); + } + + if ( class_exists( 'Woocommerce' ) && ! class_exists( 'Yoast_WooCommerce_SEO' ) ) { + $plugin_banners->add_banner( + new WPSEO_Admin_Banner( + 'https://yoast.com/wordpress/plugins/yoast-woocommerce-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=woocommerce-seo-banner', + 'banner-woocommerce-seo.png', + 261, + 152, + sprintf( + /* translators: %1$s expands to Yoast WooCommerce SEO. */ + __( 'Buy the %1$s plugin now and optimize your shop today to improve your product promotion!', 'wordpress-seo' ), + 'Yoast WooCommerce SEO' + ) + ) + ); + } + + if ( ! defined( 'WPSEO_LOCAL_VERSION' ) ) { + $plugin_banners->add_banner( + new WPSEO_Admin_Banner( + 'https://yoast.com/wordpress/plugins/local-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=local-seo-banner', + 'banner-local-seo.png', + 261, + 152, + sprintf( + /* translators: %1$s expands to Yoast Local SEO. */ + __( 'Buy the %1$s plugin now to improve your site’s Local SEO and ranking in Google Maps!', 'wordpress-seo' ), + 'Yoast Local SEO' + ) + ) + ); + } + + if ( ! class_exists( 'WPSEO_News' ) ) { + $plugin_banners->add_banner( + new WPSEO_Admin_Banner( + 'https://yoast.com/wordpress/plugins/news-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=news-seo-banner', + 'banner-news-seo.png', + 261, + 152, + sprintf( + /* translators: %1$s expands to Yoast News SEO. */ + __( 'Buy the %1$s plugin now and start optimizing to get your site featured in Google News!', 'wordpress-seo' ), + 'Yoast News SEO' + ) + ) + ); + } + + return $plugin_banners; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-yoast-notification-center.php b/wp-content/plugins/wordpress-seo/admin/class-yoast-notification-center.php new file mode 100644 index 0000000..7d59899 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-yoast-notification-center.php @@ -0,0 +1,568 @@ +retrieve_notifications_from_storage(); + + add_action( 'all_admin_notices', array( $this, 'display_notifications' ) ); + + add_action( 'wp_ajax_yoast_get_notifications', array( $this, 'ajax_get_notifications' ) ); + + add_action( 'wpseo_deactivate', array( $this, 'deactivate_hook' ) ); + add_action( 'shutdown', array( $this, 'update_storage' ) ); + } + + /** + * Singleton getter + * + * @return Yoast_Notification_Center + */ + public static function get() { + + if ( null === self::$instance ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Dismiss a notification + */ + public static function ajax_dismiss_notification() { + + $notification_center = self::get(); + + $notification_id = filter_input( INPUT_POST, 'notification' ); + if ( empty( $notification_id ) ) { + die( '-1' ); + } + + $notification = $notification_center->get_notification_by_id( $notification_id ); + if ( false === ( $notification instanceof Yoast_Notification ) ) { + + // Permit legacy. + $notification = new Yoast_Notification( '', array( + 'id' => $notification_id, + 'dismissal_key' => $notification_id, + ) ); + } + + if ( $notification_center->maybe_dismiss_notification( $notification ) ) { + die( '1' ); + } + + die( '-1' ); + } + + /** + * Check if the user has dismissed a notification + * + * @param Yoast_Notification $notification The notification to check for dismissal. + * @param null|int $user_id User ID to check on. + * + * @return bool + */ + public static function is_notification_dismissed( Yoast_Notification $notification, $user_id = null ) { + + $user_id = ( ! is_null( $user_id ) ? $user_id : get_current_user_id() ); + $dismissal_key = $notification->get_dismissal_key(); + + $current_value = get_user_meta( $user_id, $dismissal_key, $single = true ); + + return ! empty( $current_value ); + } + + /** + * Check if the nofitication is being dismissed + * + * @param string|Yoast_Notification $notification Notification to check dismissal of. + * @param string $meta_value Value to set the meta value to if dismissed. + * + * @return bool True if dismissed. + */ + public static function maybe_dismiss_notification( Yoast_Notification $notification, $meta_value = 'seen' ) { + + // Only persistent notifications are dismissible. + if ( ! $notification->is_persistent() ) { + return false; + } + + // If notification is already dismissed, we're done. + if ( self::is_notification_dismissed( $notification ) ) { + return true; + } + + $dismissal_key = $notification->get_dismissal_key(); + $notification_id = $notification->get_id(); + + $is_dismissing = ( $dismissal_key === self::get_user_input( 'notification' ) ); + if ( ! $is_dismissing ) { + $is_dismissing = ( $notification_id === self::get_user_input( 'notification' ) ); + } + + // Fallback to ?dismissal_key=1&nonce=bla when JavaScript fails. + if ( ! $is_dismissing ) { + $is_dismissing = ( '1' === self::get_user_input( $dismissal_key ) ); + } + + if ( ! $is_dismissing ) { + return false; + } + + $user_nonce = self::get_user_input( 'nonce' ); + if ( false === wp_verify_nonce( $user_nonce, $notification_id ) ) { + return false; + } + + return self::dismiss_notification( $notification, $meta_value ); + } + + /** + * Clear dismissal information for the specified Notification + * + * When a cause is resolved, the next time it is present we want to show + * the message again. + * + * @param string|Yoast_Notification $notification Notification to clear the dismissal of. + * + * @return bool + */ + public function clear_dismissal( $notification ) { + + if ( $notification instanceof Yoast_Notification ) { + $dismissal_key = $notification->get_dismissal_key(); + } + + if ( is_string( $notification ) ) { + $dismissal_key = $notification; + } + + if ( empty( $dismissal_key ) ) { + return false; + } + + // Remove notification dismissal for all users. + $deleted = delete_metadata( 'user', $user_id = 0, $dismissal_key, $meta_value = '', $delete_all = true ); + + return $deleted; + } + + /** + * Add notification to the cookie + * + * @param Yoast_Notification $notification Notification object instance. + */ + public function add_notification( Yoast_Notification $notification ) { + + // Don't add if the user can't see it. + if ( ! $notification->display_for_current_user() ) { + return; + } + + $notification_id = $notification->get_id(); + + // Empty notifications are always added. + if ( $notification_id !== '' ) { + + // If notification ID exists in notifications, don't add again. + $present_notification = $this->get_notification_by_id( $notification_id ); + if ( ! is_null( $present_notification ) ) { + $this->remove_notification( $present_notification, false ); + } + + if ( is_null( $present_notification ) ) { + $this->new[] = $notification_id; + } + } + + // Add to list. + $this->notifications[] = $notification; + } + + /** + * Get the notification by ID + * + * @param string $notification_id The ID of the notification to search for. + * + * @return null|Yoast_Notification + */ + public function get_notification_by_id( $notification_id ) { + + foreach ( $this->notifications as & $notification ) { + if ( $notification_id === $notification->get_id() ) { + return $notification; + } + } + + return null; + } + + /** + * Display the notifications + */ + public function display_notifications() { + + // Never display notifications for network admin. + if ( function_exists( 'is_network_admin' ) && is_network_admin() ) { + return; + } + + $sorted_notifications = $this->get_sorted_notifications(); + foreach ( $sorted_notifications as $notification ) { + if ( ! $notification->is_persistent() ) { + echo $notification; + $this->remove_notification( $notification ); + } + } + } + + /** + * Remove notification after it has been displayed + * + * @param Yoast_Notification $notification Notification to remove. + * @param bool $resolve Resolve as fixed. + */ + public function remove_notification( Yoast_Notification $notification, $resolve = true ) { + + $index = false; + + // Match persistent Notifications by ID, non persistent by item in the array. + if ( $notification->is_persistent() ) { + foreach ( $this->notifications as $current_index => $present_notification ) { + if ( $present_notification->get_id() === $notification->get_id() ) { + $index = $current_index; + break; + } + } + } + else { + $index = array_search( $notification, $this->notifications, true ); + } + + if ( false === $index ) { + return; + } + + if ( $notification->is_persistent() && $resolve ) { + $this->resolved++; + $this->clear_dismissal( $notification ); + } + + unset( $this->notifications[ $index ] ); + $this->notifications = array_values( $this->notifications ); + } + + /** + * Get the notification count + * + * @param bool $dismissed Count dismissed notifications. + * + * @return int Number of notifications + */ + public function get_notification_count( $dismissed = false ) { + + $notifications = $this->get_notifications(); + $notifications = array_filter( $notifications, array( $this, 'filter_persistent_notifications' ) ); + + if ( ! $dismissed ) { + $notifications = array_filter( $notifications, array( $this, 'filter_dismissed_notifications' ) ); + } + + return count( $notifications ); + } + + /** + * Get the number of notifications resolved this execution + * + * These notifications have been resolved and should be counted when active again. + * + * @return int + */ + public function get_resolved_notification_count() { + + return $this->resolved; + } + + /** + * Return the notifications sorted on type and priority + * + * @return array|Yoast_Notification[] Sorted Notifications + */ + public function get_sorted_notifications() { + + $notifications = $this->get_notifications(); + if ( empty( $notifications ) ) { + return array(); + } + + // Sort by severity, error first. + usort( $notifications, array( $this, 'sort_notifications' ) ); + + return $notifications; + } + + /** + * AJAX display notifications + */ + public function ajax_get_notifications() { + + // Display the notices. + $this->display_notifications(); + + // AJAX die. + exit; + } + + /** + * Remove storage when the plugin is deactivated + */ + public function deactivate_hook() { + + $this->clear_notifications(); + } + + /** + * Save persistent notifications to storage + * + * We need to be able to retrieve these so they can be dismissed at any time during the execution. + * + * @since 3.2 + * + * @return void + */ + public function update_storage() { + + $notifications = $this->get_notifications(); + + // No notifications to store, clear storage. + if ( empty( $notifications ) ) { + $this->remove_storage(); + + return; + } + + $notifications = array_map( array( $this, 'notification_to_array' ), $notifications ); + + // Save the notifications to the storage. + update_user_option( get_current_user_id(), self::STORAGE_KEY, $notifications ); + } + + /** + * Provide a way to verify present notifications + * + * @return array|Yoast_Notification[] Registered notifications. + */ + public function get_notifications() { + + return $this->notifications; + } + + /** + * Get newly added notifications + * + * @return array + */ + public function get_new_notifications() { + + return array_map( array( $this, 'get_notification_by_id' ), $this->new ); + } + + /** + * Get information from the User input + * + * @param string $key Key to retrieve. + * + * @return mixed value of key if set. + */ + private static function get_user_input( $key ) { + + $filter_input_type = INPUT_GET; + if ( 'POST' === strtoupper( $_SERVER['REQUEST_METHOD'] ) ) { + $filter_input_type = INPUT_POST; + } + + return filter_input( $filter_input_type, $key ); + } + + /** + * Retrieve the notifications from storage + * + * @return array Yoast_Notification[] Notifications + */ + private function retrieve_notifications_from_storage() { + + $stored_notifications = get_user_option( self::STORAGE_KEY, get_current_user_id() ); + + // Check if notifications are stored. + if ( empty( $stored_notifications ) ) { + return; + } + + if ( is_array( $stored_notifications ) ) { + $notifications = array_map( array( $this, 'array_to_notification' ), $stored_notifications ); + $notifications = array_filter( $notifications, array( $this, 'filter_notification_current_user' ) ); + + $this->notifications = $notifications; + } + } + + /** + * Sort on type then priority + * + * @param Yoast_Notification $a Compare with B. + * @param Yoast_Notification $b Compare with A. + * + * @return int 1, 0 or -1 for sorting offset. + */ + private function sort_notifications( Yoast_Notification $a, Yoast_Notification $b ) { + + $a_type = $a->get_type(); + $b_type = $b->get_type(); + + if ( $a_type === $b_type ) { + return WPSEO_Utils::calc( $b->get_priority(), 'compare', $a->get_priority() ); + } + + if ( 'error' === $a_type ) { + return -1; + } + + if ( 'error' === $b_type ) { + return 1; + } + + return 0; + } + + /** + * Dismiss the notification + * + * @param Yoast_Notification $notification Notification to dismiss. + * @param string $meta_value Value to save in the dismissal. + * + * @return bool + */ + private static function dismiss_notification( Yoast_Notification $notification, $meta_value = 'seen' ) { + // Dismiss notification. + return ( false !== update_user_meta( get_current_user_id(), $notification->get_dismissal_key(), $meta_value ) ); + } + + /** + * Remove all notifications from storage + */ + private function remove_storage() { + + delete_user_option( get_current_user_id(), self::STORAGE_KEY ); + } + + /** + * Clear local stored notifications + */ + private function clear_notifications() { + + $this->notifications = array(); + } + + /** + * Filter out non-persistent notifications. + * + * @param Yoast_Notification $notification Notification to test for persistent. + * + * @since 3.2 + * + * @return bool + */ + private function filter_persistent_notifications( Yoast_Notification $notification ) { + + return $notification->is_persistent(); + } + + /** + * Filter out dismissed notifications + * + * @param Yoast_Notification $notification Notification to check. + * + * @return bool + */ + private function filter_dismissed_notifications( Yoast_Notification $notification ) { + + return ! $this->maybe_dismiss_notification( $notification ); + } + + /** + * Convert Notification to array representation + * + * @param Yoast_Notification $notification Notification to convert. + * + * @since 3.2 + * + * @return array + */ + private function notification_to_array( Yoast_Notification $notification ) { + + return $notification->to_array(); + } + + /** + * Convert stored array to Notification. + * + * @param array $notification_data Array to convert to Notification. + * + * @return Yoast_Notification + */ + private function array_to_notification( $notification_data ) { + + return new Yoast_Notification( + $notification_data['message'], + $notification_data['options'] + ); + } + + /** + * Filter notifications that should not be displayed for the current user + * + * @param Yoast_Notification $notification Notification to test. + * + * @return bool + */ + private function filter_notification_current_user( Yoast_Notification $notification ) { + return $notification->display_for_current_user(); + } + + /** + * Write the notifications to a cookie (hooked on shutdown) + * + * Function renamed to 'update_storage'. + * + * @deprecated 3.2 remove in 3.5 + */ + public function set_transient() { + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-yoast-notification.php b/wp-content/plugins/wordpress-seo/admin/class-yoast-notification.php new file mode 100644 index 0000000..ef1f7a8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-yoast-notification.php @@ -0,0 +1,303 @@ + self::UPDATED, + 'id' => '', + 'nonce' => null, + 'priority' => 0.5, + 'data_json' => array(), + 'dismissal_key' => null, + 'capabilities' => array(), + 'capability_check' => self::MATCH_ALL, + ); + + /** + * Notification class constructor. + * + * @param string $message Message string. + * @param array $options Set of options. + */ + public function __construct( $message, $options = array() ) { + $this->message = $message; + $this->options = $this->normalize_options( $options ); + } + + /** + * Retrieve notification ID string. + * + * @return string + */ + public function get_id() { + return $this->options['id']; + } + + /** + * Retrieve nonce identifier. + * + * @return null|string Nonce for this Notification. + */ + public function get_nonce() { + if ( $this->options['id'] && empty( $this->options['nonce'] ) ) { + $this->options['nonce'] = wp_create_nonce( $this->options['id'] ); + } + + return $this->options['nonce']; + } + + /** + * Make sure the nonce is up to date + */ + public function refresh_nonce() { + if ( $this->options['id'] ) { + $this->options['nonce'] = wp_create_nonce( $this->options['id'] ); + } + } + + /** + * Get the type of the notification + * + * @return string + */ + public function get_type() { + return $this->options['type']; + } + + /** + * Priority of the notification + * + * Relative to the type. + * + * @return float Returns the priority between 0 and 1. + */ + public function get_priority() { + return $this->options['priority']; + } + + /** + * Get the User Meta key to check for dismissal of notification + * + * @return string User Meta Option key that registers dismissal. + */ + public function get_dismissal_key() { + if ( empty( $this->options['dismissal_key'] ) ) { + return $this->options['id']; + } + + return $this->options['dismissal_key']; + } + + /** + * Is this Notification persistent + * + * @return bool True if persistent, False if fire and forget. + */ + public function is_persistent() { + $id = $this->get_id(); + + return ! empty( $id ); + } + + /** + * Check if the notification is relevant for the current user + * + * @return bool True if a user needs to see this Notification, False if not. + */ + public function display_for_current_user() { + // If the notification is for the current page only, always show. + if ( ! $this->is_persistent() ) { + return true; + } + + // If the current user doesn't match capabilities. + return $this->match_capabilities(); + } + + /** + * Does the current user match required capabilities + * + * @return bool + */ + public function match_capabilities() { + // Super Admin can do anything. + if ( is_multisite() && is_super_admin() ) { + return true; + } + + /** + * Filter capabilities that enable the displaying of this notification. + * + * @since 3.2 + * + * @param array $capabilities The capabilities that must be present for this Notification. + * @param Yoast_Notification $notification The notification object. + * + * @return array of capabilities or empty for no restrictions. + */ + $capabilities = apply_filters( 'wpseo_notification_capabilities', $this->options['capabilities'], $this ); + + // Should be an array. + if ( ! is_array( $capabilities ) ) { + $capabilities = (array) $capabilities; + } + + /** + * Filter capability check to enable all or any capabilities. + * + * @since 3.2 + * + * @param string $capability_check The type of check that will be used to determine if an capability is present. + * @param Yoast_Notification $notification The notification object. + * + * @return string self::MATCH_ALL or self::MATCH_ANY. + */ + $capability_check = apply_filters( 'wpseo_notification_capability_check', $this->options['capability_check'], $this ); + + if ( ! in_array( $capability_check, array( self::MATCH_ALL, self::MATCH_ANY ), true ) ) { + $capability_check = self::MATCH_ALL; + } + + if ( ! empty( $capabilities ) ) { + + $has_capabilities = array_filter( $capabilities, array( $this, 'has_capability' ) ); + + switch ( $capability_check ) { + case self::MATCH_ALL: + return $has_capabilities === $capabilities; + case self::MATCH_ANY: + return ! empty( $has_capabilities ); + } + } + + return true; + } + + /** + * Array filter function to find matched capabilities + * + * @param string $capability Capability to test. + * + * @return bool + */ + private function has_capability( $capability ) { + return current_user_can( $capability ); + } + + /** + * Return the object properties as an array + * + * @return array + */ + public function to_array() { + return array( + 'message' => $this->message, + 'options' => $this->options, + ); + } + + /** + * Adds string (view) behaviour to the Notification + * + * @return string + */ + public function __toString() { + $attributes = array(); + + // Default notification classes. + $classes = array( + 'yoast-alert', + ); + + // Maintain WordPress visualisation of alerts when they are not persistent. + if ( ! $this->is_persistent() ) { + $classes[] = 'notice'; + $classes[] = $this->get_type(); + } + + if ( ! empty( $classes ) ) { + $attributes['class'] = implode( ' ', $classes ); + } + + // Combined attribute key and value into a string. + array_walk( $attributes, array( $this, 'parse_attributes' ) ); + + // Build the output DIV. + return '
    ' . wpautop( $this->message ) . '
    ' . PHP_EOL; + } + + /** + * Get the JSON if provided + * + * @return false|string + */ + public function get_json() { + if ( empty( $this->options['data_json'] ) ) { + return ''; + } + + return wp_json_encode( $this->options['data_json'] ); + } + + /** + * Make sure we only have values that we can work with + * + * @param array $options Options to normalize. + * + * @return array + */ + private function normalize_options( $options ) { + $options = wp_parse_args( $options, $this->defaults ); + + // Should not exceed 0 or 1. + $options['priority'] = min( 1, max( 0, $options['priority'] ) ); + + // Set default capabilities when not supplied. + if ( empty( $options['capabilities'] ) || array() === $options['capabilities'] ) { + $options['capabilities'] = array( 'manage_options' ); + } + + return $options; + } + + /** + * Format HTML element attributes + * + * @param string $value Attribute value. + * @param string $key Attribute name. + */ + private function parse_attributes( & $value, $key ) { + $value = sprintf( '%s="%s"', $key, esc_attr( $value ) ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/class-yoast-plugin-conflict.php b/wp-content/plugins/wordpress-seo/admin/class-yoast-plugin-conflict.php new file mode 100644 index 0000000..5dde1d2 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/class-yoast-plugin-conflict.php @@ -0,0 +1,333 @@ +plugins the active plugins will be stored in this + * property + * + * @var array + */ + protected $active_plugins = array(); + + /** + * Property for holding instance of itself + * + * @var Yoast_Plugin_Conflict + */ + protected static $instance; + + /** + * For the use of singleton pattern. Create instance of itself and return his instance + * + * @param string $class_name Give the classname to initialize. If classname is false (empty) it will use it's own __CLASS__. + * + * @return Yoast_Plugin_Conflict + */ + public static function get_instance( $class_name = '' ) { + + if ( is_null( self::$instance ) ) { + if ( ! is_string( $class_name ) || $class_name === '' ) { + $class_name = __CLASS__; + } + + self::$instance = new $class_name(); + } + + return self::$instance; + } + + /** + * Setting instance, all active plugins and search for active plugins + * + * Protected constructor to prevent creating a new instance of the + * *Singleton* via the `new` operator from outside of this class. + */ + protected function __construct() { + // Set active plugins. + $this->all_active_plugins = get_option( 'active_plugins' ); + + if ( filter_input( INPUT_GET, 'action' ) === 'deactivate' ) { + $this->remove_deactivated_plugin(); + } + + // Search for active plugins. + $this->search_active_plugins(); + } + + /** + * Check if there are conflicting plugins for given $plugin_section + * + * @param string $plugin_section Type of plugin conflict (such as Open Graph or sitemap). + * + * @return bool + */ + public function check_for_conflicts( $plugin_section ) { + + static $sections_checked; + + if ( $sections_checked === null ) { + $sections_checked = array(); + } + + if ( ! in_array( $plugin_section, $sections_checked ) ) { + $sections_checked[] = $plugin_section; + $has_conflicts = ( ! empty( $this->active_plugins[ $plugin_section ] ) ); + + return $has_conflicts; + } + + return false; + } + + /** + * Getting all the conflicting plugins and return them as a string. + * + * This method will loop through all conflicting plugins to get the details of each plugin. The plugin name + * will be taken from the details to parse a comma separated string, which can be use for by example a notice + * + * @param string $plugin_section Plugin conflict type (such as Open Graph or sitemap). + * + * @return string + */ + public function get_conflicting_plugins_as_string( $plugin_section ) { + if ( ! function_exists( 'get_plugin_data' ) ) { + require_once( ABSPATH . '/wp-admin/includes/plugin.php' ); + } + + // Getting the active plugins by given section. + $plugins = $this->active_plugins[ $plugin_section ]; + + $plugin_names = array(); + foreach ( $plugins as $plugin ) { + if ( $name = WPSEO_Utils::get_plugin_name( $plugin ) ) { + $plugin_names[] = '' . $name . ''; + } + } + unset( $plugins, $plugin ); + + if ( ! empty( $plugin_names ) ) { + return implode( ' & ', $plugin_names ); + } + } + + /** + * Checks for given $plugin_sections for conflicts + * + * @param array $plugin_sections Set of sections. + */ + public function check_plugin_conflicts( $plugin_sections ) { + foreach ( $plugin_sections as $plugin_section => $readable_plugin_section ) { + // Check for conflicting plugins and show error if there are conflicts. + if ( $this->check_for_conflicts( $plugin_section ) ) { + $this->set_error( $plugin_section, $readable_plugin_section ); + } + } + + // List of all active sections. + $sections = array_keys( $plugin_sections ); + // List of all sections. + $all_plugin_sections = array_keys( $this->plugins ); + + /* + * Get all sections that are inactive. + * These plugins need to be cleared. + * + * This happens when Sitemaps or OpenGraph implementations toggle active/disabled. + */ + $inactive_sections = array_diff( $all_plugin_sections, $sections ); + if ( ! empty( $inactive_sections ) ) { + foreach ( $inactive_sections as $section ) { + array_walk( $this->plugins[ $section ], array( $this, 'clear_error' ) ); + } + } + + // For active sections clear errors for inactive plugins. + foreach ( $sections as $section ) { + // By default clear errors for all plugins of the section. + $inactive_plugins = $this->plugins[ $section ]; + + // If there are active plugins, filter them from being cleared. + if ( isset( $this->active_plugins[ $section ] ) ) { + $inactive_plugins = array_diff( $this->plugins[ $section ], $this->active_plugins[ $section ] ); + } + + array_walk( $inactive_plugins, array( $this, 'clear_error' ) ); + } + } + + /** + * Setting an error on the screen + * + * @param string $plugin_section Type of conflict group (such as Open Graph or sitemap). + * @param string $readable_plugin_section This is the value for the translation. + */ + protected function set_error( $plugin_section, $readable_plugin_section ) { + + $notification_center = Yoast_Notification_Center::get(); + + foreach ( $this->active_plugins[ $plugin_section ] as $plugin_file ) { + + $plugin_name = WPSEO_Utils::get_plugin_name( $plugin_file ); + + $error_message = ''; + /* translators: %1$s: 'Facebook & Open Graph' plugin name(s) of possibly conflicting plugin(s), %2$s to Yoast SEO */ + $error_message .= '

    ' . sprintf( __( 'The %1$s plugin might cause issues when used in conjunction with %2$s.', 'wordpress-seo' ), '' . $plugin_name . '', 'Yoast SEO' ) . '

    '; + $error_message .= '

    ' . sprintf( $readable_plugin_section, 'Yoast SEO', $plugin_name ) . '

    '; + + /* translators: %s: 'Facebook' plugin name of possibly conflicting plugin */ + $error_message .= '' . sprintf( __( 'Deactivate %s', 'wordpress-seo' ), WPSEO_Utils::get_plugin_name( $plugin_file ) ) . ' '; + + $identifier = $this->get_notification_identifier( $plugin_file ); + + // Add the message to the notifications center. + $notification_center->add_notification( + new Yoast_Notification( + $error_message, + array( + 'type' => Yoast_Notification::ERROR, + 'id' => 'wpseo-conflict-' . $identifier, + ) + ) + ); + } + } + + /** + * Clear the notification for a plugin + * + * @param string $plugin_file Clear the optional notification for this plugin. + */ + protected function clear_error( $plugin_file ) { + $identifier = $this->get_notification_identifier( $plugin_file ); + + $notification_center = Yoast_Notification_Center::get(); + $notification = $notification_center->get_notification_by_id( 'wpseo-conflict-' . $identifier ); + + if ( $notification ) { + $notification_center->remove_notification( $notification ); + } + } + + /** + * Loop through the $this->plugins to check if one of the plugins is active. + * + * This method will store the active plugins in $this->active_plugins. + */ + protected function search_active_plugins() { + foreach ( $this->plugins as $plugin_section => $plugins ) { + $this->check_plugins_active( $plugins, $plugin_section ); + } + } + + /** + * Loop through plugins and check if each plugin is active + * + * @param array $plugins Set of plugins. + * @param string $plugin_section Type of conflict group (such as Open Graph or sitemap). + */ + protected function check_plugins_active( $plugins, $plugin_section ) { + foreach ( $plugins as $plugin ) { + if ( $this->check_plugin_is_active( $plugin ) ) { + $this->add_active_plugin( $plugin_section, $plugin ); + } + } + } + + + /** + * Check if given plugin exists in array with all_active_plugins + * + * @param string $plugin Plugin basename string. + * + * @return bool + */ + protected function check_plugin_is_active( $plugin ) { + return in_array( $plugin, $this->all_active_plugins ); + } + + /** + * Add plugin to the list of active plugins. + * + * This method will check first if key $plugin_section exists, if not it will create an empty array + * If $plugin itself doesn't exist it will be added. + * + * @param string $plugin_section Type of conflict group (such as Open Graph or sitemap). + * @param string $plugin Plugin basename string. + */ + protected function add_active_plugin( $plugin_section, $plugin ) { + + if ( ! array_key_exists( $plugin_section, $this->active_plugins ) ) { + $this->active_plugins[ $plugin_section ] = array(); + } + + if ( ! in_array( $plugin, $this->active_plugins[ $plugin_section ] ) ) { + $this->active_plugins[ $plugin_section ][] = $plugin; + } + } + + /** + * Search in $this->plugins for the given $plugin + * + * If there is a result it will return the plugin category + * + * @param string $plugin Plugin basename string. + * + * @return int|string + */ + protected function find_plugin_category( $plugin ) { + + foreach ( $this->plugins as $plugin_section => $plugins ) { + if ( in_array( $plugin, $plugins ) ) { + return $plugin_section; + } + } + + } + + /** + * When being in the deactivation process the currently deactivated plugin has to be removed. + */ + private function remove_deactivated_plugin() { + $deactivated_plugin = filter_input( INPUT_GET, 'plugin' ); + $key_to_remove = array_search( $deactivated_plugin, $this->all_active_plugins ); + + if ( $key_to_remove !== false ) { + unset( $this->all_active_plugins[ $key_to_remove ] ); + } + } + + /** + * Get the identifier from the plugin file + * + * @param string $plugin_file Plugin file to get Identifier from. + * + * @return string + */ + private function get_notification_identifier( $plugin_file ) { + return md5( $plugin_file ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-components.php b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-components.php new file mode 100644 index 0000000..7c08788 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-components.php @@ -0,0 +1,69 @@ +add_component( new WPSEO_Config_Component_Connect_Google_Search_Console() ); + $this->add_component( new WPSEO_Config_Component_Mailchimp_Signup() ); + } + + /** + * Add a component + * + * @param WPSEO_Config_Component $component Component to add. + */ + public function add_component( WPSEO_Config_Component $component ) { + $this->components[] = $component; + } + + /** + * Sets the storage to use. + * + * @param WPSEO_Configuration_Storage $storage Storage to use. + */ + public function set_storage( WPSEO_Configuration_Storage $storage ) { + $this->set_adapter( $storage->get_adapter() ); + + foreach ( $this->components as $component ) { + $storage->add_field( $component->get_field() ); + } + } + + /** + * Sets the adapter to use. + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to use. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $this->adapter = $adapter; + + foreach ( $this->components as $component ) { + $adapter->add_custom_lookup( + $component->get_field()->get_identifier(), + array( + $component, + 'get_data', + ), + array( + $component, + 'set_data', + ) + ); + } + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-endpoint.php b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-endpoint.php new file mode 100644 index 0000000..203dfe1 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-endpoint.php @@ -0,0 +1,78 @@ +service = $service; + } + + /** + * Register REST routes. + */ + public function register() { + // Register fetch config. + register_rest_route( self::REST_NAMESPACE, self::ENDPOINT_RETRIEVE, array( + 'methods' => 'GET', + 'callback' => array( + $this->service, + 'get_configuration', + ), + 'permission_callback' => array( + $this, + 'can_retrieve_data', + ), + ) ); + + // Register save changes. + register_rest_route( self::REST_NAMESPACE, self::ENDPOINT_STORE, array( + 'methods' => 'POST', + 'callback' => array( + $this->service, + 'set_configuration', + ), + 'permission_callback' => array( + $this, + 'can_save_data', + ), + ) ); + } + + /** + * Permission callback implementation + * + * @return bool + */ + public function can_retrieve_data() { + return current_user_can( self::CAPABILITY_RETRIEVE ); + } + + /** + * Permission callback implementation + * + * @return bool + */ + public function can_save_data() { + return current_user_can( self::CAPABILITY_STORE ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-options-adapter.php b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-options-adapter.php new file mode 100644 index 0000000..8e0242b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-options-adapter.php @@ -0,0 +1,194 @@ +add_lookup( $class_name, self::OPTION_TYPE_WORDPRESS, $option ); + } + + /** + * Add a lookup for a Yoast option + * + * @param string $class_name Class to bind to the lookup. + * @param string $option Option group to use. + * @param string $key Key in the option group to bind to. + * + * @throws InvalidArgumentException Thrown when invalid input is provided. + */ + public function add_yoast_lookup( $class_name, $option, $key ) { + + $test = WPSEO_Options::get_option( $option ); + if ( is_null( $test ) ) { + /* translators: %1$s resolves to the option name passed to the lookup registration */ + throw new InvalidArgumentException( sprintf( __( 'Yoast option %1$s not found.', 'wordpress-seo' ), $option ) ); + } + + $this->add_lookup( $class_name, self::OPTION_TYPE_YOAST, array( + $option, + $key, + ) ); + } + + /** + * Add a lookup for a custom implementation + * + * @param string $class_name Class to bind to the lookup. + * @param callable $callback_get Callback to retrieve data. + * @param callable $callback_set Callback to save data. + * + * @throws InvalidArgumentException Thrown when invalid input is provided. + */ + public function add_custom_lookup( $class_name, $callback_get, $callback_set ) { + + if ( ! is_callable( $callback_get ) || ! is_callable( $callback_set ) ) { + throw new InvalidArgumentException( 'Custom option must be callable.' ); + } + + $this->add_lookup( $class_name, self::OPTION_TYPE_CUSTOM, array( + $callback_get, + $callback_set, + ) ); + } + + /** + * Add a field lookup. + * + * @param string $class_name Class to add lookup for. + * @param string $type Type of lookup. + * @param string|array $option Implementation of the lookup. + * + * @throws Exception Thrown when invalid input is provided. + */ + protected function add_lookup( $class_name, $type, $option ) { + $this->lookup[ $class_name ] = array( + 'type' => $type, + 'option' => $option, + ); + } + + /** + * Get the data for the provided field + * + * @param WPSEO_Config_Field $field Field to get data for. + * + * @return mixed + */ + public function get( WPSEO_Config_Field $field ) { + $identifier = $field->get_identifier(); + + // Lookup option and retrieve value. + $type = $this->get_option_type( $identifier ); + $option = $this->get_option( $identifier ); + + switch ( $type ) { + case self::OPTION_TYPE_WORDPRESS: + return get_option( $option ); + + case self::OPTION_TYPE_YOAST: + $group = WPSEO_Options::get_option( $option[0] ); + + return $group[ $option[1] ]; + + case self::OPTION_TYPE_CUSTOM: + return call_user_func( $option[0] ); + } + + return null; + } + + /** + * Save data from a field + * + * @param WPSEO_Config_Field $field Field to use for lookup. + * @param mixed $value Value to save to the lookup of the field. + * + * @return bool + */ + public function set( WPSEO_Config_Field $field, $value ) { + $identifier = $field->get_identifier(); + + // Lookup option and retrieve value. + $type = $this->get_option_type( $identifier ); + $option = $this->get_option( $identifier ); + + switch ( $type ) { + case self::OPTION_TYPE_WORDPRESS: + return update_option( $option, $value ); + + case self::OPTION_TYPE_YOAST: + $group = WPSEO_Options::get_option( $option[0] ); + + $group[ $option[1] ] = $value; + update_option( $option[0], $group ); + + $saved = WPSEO_Options::get_option( $option[0] ); + + return $saved[ $option[1] ] === $value; + + case self::OPTION_TYPE_CUSTOM: + return call_user_func( $option[1], $value ); + } + + return false; + } + + /** + * Get the lookup type for a specific class + * + * @param string $class_name Class to get the type of. + * + * @return null|string + */ + protected function get_option_type( $class_name ) { + if ( ! isset( $this->lookup[ $class_name ] ) ) { + return null; + } + + return $this->lookup[ $class_name ]['type']; + } + + /** + * Get the option for a specific class + * + * @param string $class_name Class to get the option of. + * + * @return null|string|array + */ + protected function get_option( $class_name ) { + if ( ! isset( $this->lookup[ $class_name ] ) ) { + return null; + } + + return $this->lookup[ $class_name ]['option']; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-page.php b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-page.php new file mode 100644 index 0000000..92ab586 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-page.php @@ -0,0 +1,268 @@ +should_add_notification() ) { + $this->add_notification(); + } + + if ( filter_input( INPUT_GET, 'page' ) !== self::PAGE_IDENTIFIER ) { + return; + } + + // Register the page for the wizard. + add_action( 'admin_menu', array( $this, 'add_wizard_page' ) ); + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) ); + add_action( 'admin_init', array( $this, 'render_wizard_page' ) ); + } + + /** + * Check if the configuration is finished. If so, just remove the notification. + */ + public function catch_configuration_request() { + $configuration_page = filter_input( INPUT_GET, 'configuration' ); + $page = filter_input( INPUT_GET, 'page' ); + + if ( ! ( $configuration_page === 'finished' && ( $page === WPSEO_Admin::PAGE_IDENTIFIER ) ) ) { + return; + } + + $this->remove_notification(); + $this->remove_notification_option(); + + wp_redirect( admin_url( 'admin.php?page=' . WPSEO_Admin::PAGE_IDENTIFIER ) ); + exit; + } + + + /** + * Registers the page for the wizard. + */ + public function add_wizard_page() { + add_dashboard_page( '', '', 'manage_options', self::PAGE_IDENTIFIER, '' ); + } + + /** + * Renders the wizard page and exits to prevent the wordpress UI from loading. + */ + public function render_wizard_page() { + $this->show_wizard(); + exit; + } + + /** + * Enqueues the assets needed for the wizard. + */ + public function enqueue_assets() { + wp_enqueue_media(); + + /* + * Print the `forms.css` WP stylesheet before any Yoast style, this way + * it's easier to override selectors with the same specificity later. + */ + wp_enqueue_style( 'forms' ); + $assetManager = new WPSEO_Admin_Asset_Manager(); + $assetManager->register_assets(); + $assetManager->enqueue_script( 'configuration-wizard' ); + $assetManager->enqueue_style( 'yoast-components' ); + + $config = $this->get_config(); + + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'configuration-wizard', 'yoastWizardConfig', $config ); + } + + /** + * Setup Wizard Header. + */ + public function show_wizard() { + $this->enqueue_assets(); + $dashboard_url = admin_url( '/admin.php?page=wpseo_dashboard' ); + ?> + + + + > + + + + + <?php + printf( + /* translators: %s expands to Yoast SEO. */ + __( '%s › Configuration Wizard', 'wordpress-seo' ), + 'Yoast SEO' + ); + ?> + tag in the Yoast Configuration wizard. + * + * Allows users to add their own scripts or styles. + * + * @since 4.0 + */ + do_action( 'wpseo_configuration_wizard_head' ); + ?> + + +
    + + + + tag in the Yoast Configuration wizard. + * + * Allows users to add their own scripts or content. + * + * @since 4.0 + */ + do_action( 'wpseo_configuration_wizard_footer' ); + + wp_print_scripts( 'yoast-seo-configuration-wizard' ); + ?> + + + get_translations(); + $service = new WPSEO_GSC_Service(); + $config = array( + 'namespace' => WPSEO_Configuration_Endpoint::REST_NAMESPACE, + 'endpoint_retrieve' => WPSEO_Configuration_Endpoint::ENDPOINT_RETRIEVE, + 'endpoint_store' => WPSEO_Configuration_Endpoint::ENDPOINT_STORE, + 'nonce' => wp_create_nonce( 'wp_rest' ), + 'root' => esc_url_raw( rest_url() ), + 'ajaxurl' => admin_url( 'admin-ajax.php' ), + 'finishUrl' => admin_url( 'admin.php?page=wpseo_dashboard&configuration=finished' ), + 'gscAuthURL' => $service->get_client()->createAuthUrl(), + 'gscProfiles' => $service->get_sites(), + 'gscNonce' => wp_create_nonce( 'wpseo-gsc-ajax-security' ), + 'translations' => $translations, + ); + + return $config; + } + + /** + * Returns the translations necessary for the configuration wizard. + * + * @returns array The translations for the configuration wizard. + */ + public function get_translations() { + $file = plugin_dir_path( WPSEO_FILE ) . 'languages/yoast-components-' . WPSEO_Utils::get_user_locale() . '.json'; + if ( file_exists( $file ) && $file = file_get_contents( $file ) ) { + return json_decode( $file, true ); + } + + return array(); + } + + /** + * Adds a notification to the notification center. + */ + private function add_notification() { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->add_notification( self::get_notification() ); + } + + /** + * Removes the notification from the notification center. + */ + private function remove_notification() { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->remove_notification( self::get_notification() ); + } + + /** + * Gets the notification. + * + * @return Yoast_Notification + */ + private static function get_notification() { + $message = sprintf( + __( 'Since you are new to %1$s you can configure the %2$splugin%3$s', 'wordpress-seo' ), + 'Yoast SEO', + '', + '' + ); + + $notification = new Yoast_Notification( + $message, + array( + 'type' => Yoast_Notification::WARNING, + 'id' => 'wpseo-dismiss-onboarding-notice', + 'capabilities' => 'manage_options', + 'priority' => 0.8, + ) + ); + + return $notification; + } + + /** + * When the notice should be shown. + * + * @return bool + */ + private function should_add_notification() { + $options = $this->get_options(); + + return $options['show_onboarding_notice'] === true; + } + + /** + * Remove the options that triggers the notice for the configuration wizard. + */ + private function remove_notification_option() { + $options = $this->get_options(); + + $options['show_onboarding_notice'] = false; + + update_option( 'wpseo', $options ); + } + + /** + * Returns the set options + * + * @return mixed|void + */ + private function get_options() { + return get_option( 'wpseo' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-service.php b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-service.php new file mode 100644 index 0000000..09d135a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-service.php @@ -0,0 +1,143 @@ +set_default_providers(); + $this->populate_configuration(); + $this->endpoint->register(); + + // @todo: check if this is really needed, since the switch happens only in the API. + if ( function_exists( 'restore_current_locale' ) ) { + restore_current_locale(); + } + } + + /** + * Set default handlers + */ + public function set_default_providers() { + $this->set_storage( new WPSEO_Configuration_Storage() ); + $this->set_options_adapter( new WPSEO_Configuration_Options_Adapter() ); + $this->set_components( new WPSEO_Configuration_Components() ); + $this->set_endpoint( new WPSEO_Configuration_Endpoint() ); + $this->set_structure( new WPSEO_Configuration_Structure() ); + } + + /** + * Set storage handler + * + * @param WPSEO_Configuration_Storage $storage Storage handler to use. + */ + public function set_storage( WPSEO_Configuration_Storage $storage ) { + $this->storage = $storage; + } + + /** + * Set endpoint handler + * + * @param WPSEO_Configuration_Endpoint $endpoint Endpoint implementation to use. + */ + public function set_endpoint( WPSEO_Configuration_Endpoint $endpoint ) { + $this->endpoint = $endpoint; + $this->endpoint->set_service( $this ); + } + + /** + * Set the options adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to use. + */ + public function set_options_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $this->adapter = $adapter; + } + + /** + * Set components provider + * + * @param WPSEO_Configuration_Components $components Component provider to use. + */ + public function set_components( WPSEO_Configuration_Components $components ) { + $this->components = $components; + } + + /** + * Set structure provider + * + * @param WPSEO_Configuration_Structure $structure Structure provider to use. + */ + public function set_structure( WPSEO_Configuration_Structure $structure ) { + $this->structure = $structure; + } + + /** + * Populate the configuration + */ + protected function populate_configuration() { + $this->storage->set_adapter( $this->adapter ); + $this->storage->add_default_fields(); + + $this->components->initialize(); + $this->components->set_storage( $this->storage ); + } + + /** + * Used by endpoint to retrieve configuration + * + * @return array List of settings. + */ + public function get_configuration() { + $fields = $this->storage->retrieve(); + $steps = $this->structure->retrieve(); + + return array( + 'fields' => $fields, + 'steps' => $steps, + ); + } + + /** + * Used by endpoint to store changes + * + * @param WP_REST_Request $request Request from the REST API. + * + * @return array List of feedback per option if saving succeeded. + */ + public function set_configuration( WP_REST_Request $request ) { + $this->populate_configuration(); + + return $this->storage->store( $request->get_json_params() ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-storage.php b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-storage.php new file mode 100644 index 0000000..4343544 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-storage.php @@ -0,0 +1,196 @@ +get_fields() ); + + foreach ( $fields as $field ) { + $this->add_field( $field ); + } + } + + /** + * Allow for field injections + * + * @param WPSEO_Config_Field $field Field to add to the stack. + */ + public function add_field( WPSEO_Config_Field $field ) { + $this->fields[] = $field; + + if ( isset( $this->adapter ) ) { + $field->set_adapter( $this->adapter ); + } + } + + /** + * Set the adapter to use + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to use. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $this->adapter = $adapter; + + foreach ( $this->fields as $field ) { + $field->set_adapter( $this->adapter ); + } + } + + /** + * Retrieve the current adapter + * + * @return WPSEO_Configuration_Options_Adapter + */ + public function get_adapter() { + return $this->adapter; + } + + /** + * Retrieve the registered fields + * + * @returns array List of settings. + */ + public function retrieve() { + $output = array(); + + /** @var WPSEO_Config_Field $field */ + foreach ( $this->fields as $field ) { + + $build = $field->to_array(); + + $data = $this->get_field_data( $field ); + if ( ! is_null( $data ) ) { + $build['data'] = $data; + } + + $output[ $field->get_identifier() ] = $build; + } + + return $output; + } + + /** + * Save the data + * + * @param array $data_to_store Data provided by the API which needs to be processed for saving. + * + * @return string Results + */ + public function store( $data_to_store ) { + $output = array(); + + /** @var WPSEO_Config_Field $field */ + foreach ( $this->fields as $field ) { + + $field_identifier = $field->get_identifier(); + + if ( ! array_key_exists( $field_identifier, $data_to_store ) ) { + continue; + } + + $field_data = array(); + if ( isset( $data_to_store[ $field_identifier ] ) ) { + $field_data = $data_to_store[ $field_identifier ]; + } + + $result = $this->adapter->set( $field, $field_data ); + + $build = array( + 'result' => $result, + ); + + // Set current data to object to be displayed. + $data = $this->get_field_data( $field ); + if ( ! is_null( $data ) ) { + $build['data'] = $data; + } + + $output[ $field_identifier ] = $build; + } + + return $output; + } + + /** + * Filter out null input values + * + * @param mixed $input Input to test against. + * + * @return bool + */ + protected function is_not_null( $input ) { + return ! is_null( $input ); + } + + /** + * Get data from a specific field + * + * @param WPSEO_Config_Field $field Field to get data for. + * + * @return array|mixed + */ + protected function get_field_data( WPSEO_Config_Field $field ) { + $data = $this->adapter->get( $field ); + + if ( is_array( $data ) ) { + $defaults = $field->get_data(); + + // Remove 'null' values from input. + $data = array_filter( $data, array( $this, 'is_not_null' ) ); + + // Merge defaults with data. + $data = array_merge( $defaults, $data ); + } + + if ( is_null( $data ) ) { + // Get default if no data was set. + $data = $field->get_data(); + + return $data; + } + + return $data; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-structure.php b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-structure.php new file mode 100644 index 0000000..e08598f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/class-configuration-structure.php @@ -0,0 +1,87 @@ +add_step( 'intro', __( 'Welcome!', 'wordpress-seo' ), array( + 'upsellConfigurationService', + 'mailchimpSignup', + ) ); + $this->add_step( 'environment_type', __( 'Environment', 'wordpress-seo' ), array( 'environment_type' ) ); + $this->add_step( 'siteType', __( 'Site type', 'wordpress-seo' ), array( 'siteType' ) ); + $this->add_step( 'publishingEntity', __( 'Company or person', 'wordpress-seo' ), array( + 'publishingEntity', + 'publishingEntityType', + 'publishingEntityCompanyName', + 'publishingEntityCompanyLogo', + 'publishingEntityPersonName', + ) ); + $this->add_step( 'profileUrls', __( 'Social profiles', 'wordpress-seo' ), array( + 'socialProfilesIntro', + 'profileUrlFacebook', + 'profileUrlTwitter', + 'profileUrlInstagram', + 'profileUrlLinkedIn', + 'profileUrlMySpace', + 'profileUrlPinterest', + 'profileUrlYouTube', + 'profileUrlGooglePlus', + ) ); + + $fields = array( 'postTypeVisibility' ); + + $post_type_factory = new WPSEO_Config_Factory_Post_Type(); + foreach ( $post_type_factory->get_fields() as $post_type_field ) { + $fields[] = $post_type_field->get_identifier(); + } + $this->add_step( 'postTypeVisibility', __( 'Post type visibility', 'wordpress-seo' ), $fields ); + + $this->add_step( 'multipleAuthors', __( 'Multiple authors', 'wordpress-seo' ), array( 'multipleAuthors' ) ); + $this->add_step( 'connectGoogleSearchConsole', __( 'Google Search Console', 'wordpress-seo' ), array( 'connectGoogleSearchConsole' ) ); + $this->add_step( 'titleTemplate', __( 'Title settings', 'wordpress-seo' ), array( + 'siteName', + 'separator', + ) ); + $this->add_step( 'success', __( 'Success!', 'wordpress-seo' ), array( + 'successMessage', + 'upsellSiteReview', + 'mailchimpSignup', + ) ); + } + + /** + * Add a step to the structure + * + * @param string $identifier Identifier for this step. + * @param string $title Title to display for this step. + * @param array $fields Fields to use on the step. + */ + protected function add_step( $identifier, $title, $fields ) { + $this->steps[ $identifier ] = array( + 'title' => $title, + 'fields' => $fields, + ); + } + + /** + * Retrieve the registered steps + * + * @return array + */ + public function retrieve() { + return $this->steps; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/components/class-component-connect-google-search-console.php b/wp-content/plugins/wordpress-seo/admin/config-ui/components/class-component-connect-google-search-console.php new file mode 100644 index 0000000..bff581c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/components/class-component-connect-google-search-console.php @@ -0,0 +1,149 @@ +gsc_service = new WPSEO_GSC_Service( $this->get_profile() ); + } + + /** + * Set the Google Search Console service. + * + * @param WPSEO_GSC_Service $service Set service to use. + */ + public function set_gsc_service( WPSEO_GSC_Service $service ) { + $this->gsc_service = $service; + } + + /** + * Gets the component identifier. + * + * @return string + */ + public function get_identifier() { + return 'ConnectGoogleSearchConsole'; + } + + /** + * Gets the field. + * + * @return WPSEO_Config_Field + */ + public function get_field() { + return new WPSEO_Config_Field_Connect_Google_Search_Console(); + } + + /** + * Get the data for the field. + * + * @return mixed + */ + public function get_data() { + + $data = array( + 'profileList' => $this->get_profilelist(), + 'profile' => $this->get_profile(), + 'hasAccessToken' => $this->hasAccessToken(), + ); + + return $data; + } + + /** + * Save data + * + * @param array $data Data containing changes. + * + * @return mixed + */ + public function set_data( $data ) { + + $current_data = $this->get_data(); + + $this->handle_profile_change( $current_data, $data ); + + // Save profile. + $has_saved = update_option( + WPSEO_GSC::OPTION_WPSEO_GSC, + array( 'profile' => $data['profile'] ) + ); + + // Collect results to return to the configurator. + $results = array( + 'profile' => $has_saved, + ); + + return $results; + } + + /** + * Remove issues when the profile has changed + * + * @param array $current_data Saved data before changes. + * @param array $data Data after changes. + */ + protected function handle_profile_change( $current_data, $data ) { + // If the profile has been changed, remove issues. + if ( $current_data['profile'] === $data['profile'] ) { + return; + } + + $this->reload_issues(); + } + + /** + * Get the current GSC profile + * + * @return string + */ + protected function get_profile() { + return WPSEO_GSC_Settings::get_profile(); + } + + /** + * Reload GSC issues + */ + protected function reload_issues() { + WPSEO_GSC_Settings::reload_issues(); + } + + /** + * Gets a list with the profiles. + * + * @return array + */ + protected function get_profilelist() { + $profiles = array(); + $sites = $this->gsc_service->get_sites(); + foreach ( $sites as $siteKey => $siteValue ) { + $profiles[ untrailingslashit( $siteKey ) ] = untrailingslashit( $siteValue ); + } + + return $profiles; + } + + /** + * Checks if there is an access token. If so, there is a connection. + * + * @return bool + */ + private function hasAccessToken() { + return ( null !== $this->gsc_service->get_client()->getAccessToken() ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/components/class-component-mailchimp-signup.php b/wp-content/plugins/wordpress-seo/admin/config-ui/components/class-component-mailchimp-signup.php new file mode 100644 index 0000000..a6ab920 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/components/class-component-mailchimp-signup.php @@ -0,0 +1,79 @@ + $this->has_mailchimp_signup(), + ); + + return $data; + } + + /** + * Save data + * + * @param array $data Data containing changes. + * + * @return mixed + */ + public function set_data( $data ) { + + $has_saved = false; + if ( ! empty( $data['hasSignup'] ) ) { + // Saves the user meta. + update_user_meta( get_current_user_id(), self::META_NAME, true ); + + $has_saved = ( $data['hasSignup'] === $this->has_mailchimp_signup() ); + } + + // Collect results to return to the configurator. + $results = array( + 'hasSignup' => $has_saved, + ); + + return $results; + } + + /** + * Checks if the user has entered his email for mailchimp already. + * + * @return bool + */ + protected function has_mailchimp_signup() { + $user_meta = get_user_meta( get_current_user_id(), self::META_NAME, true ); + + return ( ! empty( $user_meta ) ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/components/interface-component.php b/wp-content/plugins/wordpress-seo/admin/config-ui/components/interface-component.php new file mode 100644 index 0000000..0bae3af --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/components/interface-component.php @@ -0,0 +1,30 @@ + true ), 'objects' ); + if ( ! empty( $post_types ) ) { + foreach ( $post_types as $post_type => $post_type_object ) { + $label = $this->decode_html_entities( $post_type_object->label ); + $field = new WPSEO_Config_Field_Choice_Post_Type( $post_type, $label ); + + $this->add_custom_properties( $post_type, $field ); + + $fields[] = $field; + } + } + + self::$fields = $fields; + } + + return self::$fields; + } + + /** + * Add custom properties for specific post types + * + * @param string $post_type Post type of field that is being added. + * @param WPSEO_Config_Field $field Field that corresponds to the post type. + */ + private function add_custom_properties( $post_type, $field ) { + if ( 'attachment' === $post_type ) { + $field->set_property( 'explanation', __( 'WordPress automatically generates an URL for each media item in the library. Enabling this will allow for google to index the generated URL.', 'wordpress-seo' ) ); + } + } + + /** + * Replaces the HTML entity with it's actual symbol. + * + * Because we do not not know what consequences it will have if we convert every HTML entity, + * we will only replace the characters that we have known problems with in text's. + * + * @param string $text The text to decode. + * + * @return string String with decoded HTML entities. + */ + private function decode_html_entities( $text ) { + return str_replace( ''', '’', $text ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-choice-post-type.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-choice-post-type.php new file mode 100644 index 0000000..ce66749 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-choice-post-type.php @@ -0,0 +1,92 @@ +post_type = $post_type; + + /* Translators: %1$s expands to the name of the post type. The options given to the user are "visible" and "hidden" */ + $this->set_property( 'label', sprintf( __( 'The post type "%1$s" should be', 'wordpress-seo' ), $label ) ); + + $this->add_choice( 'true', __( 'Visible', 'wordpress-seo' ) ); + $this->add_choice( 'false', __( 'Hidden', 'wordpress-seo' ) ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_custom_lookup( + $this->get_identifier(), + array( $this, 'get_data' ), + array( $this, 'set_data' ) + ); + } + + /** + * Get the post type of this field. + * + * @return string Post type. + */ + public function get_post_type() { + return $this->post_type; + } + + /** + * @return bool + */ + public function get_data() { + $option = WPSEO_Options::get_option( 'wpseo_xml' ); + + $key = 'post_types-' . $this->get_post_type() . '-not_in_sitemap'; + + $storedData = ! isset( $option[ $key ] ) || false === $option[ $key ]; + + if ( $storedData ) { + return 'true'; + } + + return 'false'; + } + + /** + * Set new data + * + * @param string $visible Visible (true) or hidden (false). + * + * @return bool + */ + public function set_data( $visible ) { + $post_type = $this->get_post_type(); + + $option = WPSEO_Options::get_option( 'wpseo_xml' ); + + $option[ 'post_types-' . $post_type . '-not_in_sitemap' ] = ( $visible === 'false' ); + + update_option( 'wpseo_xml', $option ); + + // Check if everything got saved properly. + $saved_option = WPSEO_Options::get_option( 'wpseo_xml' ); + + return ( ( $visible === 'false' ) && $saved_option[ 'post_types-' . $post_type . '-not_in_sitemap' ] === true ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-choice.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-choice.php new file mode 100644 index 0000000..e9fe970 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-choice.php @@ -0,0 +1,40 @@ +properties['choices'] = array(); + } + + /** + * Add a choice to the properties + * + * @param string $value Value op the option. + * @param string $label Label to display for the value. + * @param string $screen_reader_text Optional. Screenreader text to use. + */ + public function add_choice( $value, $label, $screen_reader_text = '' ) { + $choice = array( + 'label' => $label, + ); + + if ( $screen_reader_text ) { + $choice['screenReaderText'] = $screen_reader_text; + } + + $this->properties['choices'][ $value ] = $choice; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-company-logo.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-company-logo.php new file mode 100644 index 0000000..8092d61 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-company-logo.php @@ -0,0 +1,28 @@ +set_property( 'label', __( 'Provide an image of the company logo', 'wordpress-seo' ) ); + + $this->set_requires( 'publishingEntityType', 'company' ); + } + + /** + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo', 'company_logo' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-company-name.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-company-name.php new file mode 100644 index 0000000..1247dab --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-company-name.php @@ -0,0 +1,28 @@ +set_property( 'label', __( 'The name of the company', 'wordpress-seo' ) ); + + $this->set_requires( 'publishingEntityType', 'company' ); + } + + /** + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo', 'company_name' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-company-or-person.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-company-or-person.php new file mode 100644 index 0000000..857bdbb --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-company-or-person.php @@ -0,0 +1,29 @@ +set_property( 'label', __( 'This data is shown as metadata in your site. It is intended to appear in Google\'s Knowledge Graph. You can be either a company, or a person, choose either:', 'wordpress-seo' ) ); + + $this->add_choice( 'company', __( 'Company', 'wordpress-seo' ) ); + $this->add_choice( 'person', __( 'Person', 'wordpress-seo' ) ); + } + + /** + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo', 'company_or_person' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-connect-google-search-console.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-connect-google-search-console.php new file mode 100644 index 0000000..f22910c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-connect-google-search-console.php @@ -0,0 +1,28 @@ + '', + 'profileList' => '', + ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-environment.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-environment.php new file mode 100644 index 0000000..92df2f0 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-environment.php @@ -0,0 +1,95 @@ +set_property( 'label', sprintf( __( 'Please specify the environment in which this site - %1$s - is running.', 'wordpress-seo' ), get_home_url() ) ); + + $this->add_choice( 'production', __( 'Production (this is a live site with real traffic)', 'wordpress-seo' ) ); + $this->add_choice( 'staging', __( 'Staging (this is a copy of a live site used for testing purposes only)', 'wordpress-seo' ) ); + $this->add_choice( 'development', __( 'Development (this site is running locally for development purposes)', 'wordpress-seo' ) ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_custom_lookup( + $this->get_identifier(), + array( $this, 'get_data' ), + array( $this, 'set_data' ) + ); + } + + /** + * Gets the option that is set for this field. + * + * @return string The value for the environment_type wpseo option. + */ + public function get_data() { + $option = WPSEO_Options::get_option( 'wpseo' ); + + return $option['environment_type']; + } + + /** + * Set new data. + * + * @param string $environment_type The site's environment type. + * + * @return bool Returns whether the value is successfully set. + */ + public function set_data( $environment_type ) { + $option = WPSEO_Options::get_option( 'wpseo' ); + + if ( $option['environment_type'] !== $environment_type ) { + $option['environment_type'] = $environment_type; + update_option( 'wpseo', $option ); + if ( ! $this->set_indexation( $environment_type ) ) { + return false; + } + } + + $saved_environment_option = WPSEO_Options::get_option( 'wpseo' ); + + return ( $saved_environment_option['environment_type'] === $option['environment_type'] ); + } + + /** + * Set the WordPress Search Engine Visibility option based on the environment type. + * + * @param string $environment_type The environment the site is running in. + * + * @return bool Returns if the options is set successfully. + */ + protected function set_indexation( $environment_type ) { + $new_blog_public_value = 0; + $current_blog_public_value = get_option( 'blog_public' ); + + if ( $environment_type === 'production' ) { + $new_blog_public_value = 1; + } + + if ( $current_blog_public_value !== $new_blog_public_value ) { + update_option( 'blog_public', $new_blog_public_value ); + + return true; + } + $saved_blog_public_value = get_option( 'blog_public' ); + + return ( $saved_blog_public_value === $new_blog_public_value ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-mailchimp-signup.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-mailchimp-signup.php new file mode 100644 index 0000000..c990fa8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-mailchimp-signup.php @@ -0,0 +1,56 @@ +ID > 0 ) ? $current_user->user_email : ''; + + $this->set_property( 'title' , __( 'Newsletter signup', 'wordpress-seo' ) ); + $this->set_property( + 'label', + sprintf( + /* translators: %s expands to Yoast SEO. */ + __( 'If you would like us to keep you up-to-date regarding %s, other plugins by Yoast and major news in the world of SEO, subscribe to our newsletter:', 'wordpress-seo' ), + 'Yoast SEO' + ) + ); + + $this->set_property( 'mailchimpActionUrl', 'https://yoast.us1.list-manage.com/subscribe/post-json?u=ffa93edfe21752c921f860358&id=972f1c9122' ); + $this->set_property( 'currentUserEmail', $user_email ); + $this->set_property( 'userName', trim( $current_user->user_firstname . ' ' . $current_user->user_lastname ) ); + } + + /** + * Get the data + * + * @return array + */ + public function get_data() { + return array( + 'hasSignup' => $this->has_mailchimp_signup(), + ); + + } + + /** + * Checks if the user has entered his email for mailchimp already. + * + * @return bool + */ + protected function has_mailchimp_signup() { + $user_meta = get_user_meta( get_current_user_id(), WPSEO_Config_Component_Mailchimp_Signup::META_NAME, true ); + return ( ! empty( $user_meta ) ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-multiple-authors.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-multiple-authors.php new file mode 100644 index 0000000..297e33a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-multiple-authors.php @@ -0,0 +1,81 @@ +set_property( 'label', __( 'Does, or will, your site have multiple authors?', 'wordpress-seo' ) ); + + $this->add_choice( 'yes', __( 'Yes', 'wordpress-seo' ) ); + $this->add_choice( 'no', __( 'No', 'wordpress-seo' ) ); + } + + /** + * Set adapter. + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_custom_lookup( + $this->get_identifier(), + array( $this, 'get_data' ), + array( $this, 'set_data' ) + ); + } + + /** + * Get the data from the stored options. + * + * @return null|string + */ + public function get_data() { + + $option = WPSEO_Options::get_option( 'wpseo' ); + if ( isset( $option['has_multiple_authors'] ) ) { + $value = $option['has_multiple_authors']; + } + + if ( ! isset( $value ) || is_null( $value ) ) { + // If there are more than one users with level > 1 default to multiple authors. + $users = get_users( array( + 'fields' => 'IDs', + 'who' => 'authors', + ) ); + + $value = count( $users ) > 1; + } + + return ( $value ) ? 'yes' : 'no'; + } + + /** + * Set the data in the options. + * + * @param {string} $data The data to set for the field. + * + * @return bool Returns true or false for successful storing the data. + */ + public function set_data( $data ) { + $value = ( $data === 'yes' ); + + // Set multiple authors option. + $result_multiple_authors = WPSEO_Options::save_option( 'wpseo', 'has_multiple_authors', $value ); + + /* + * Set disable author archives option. When multiple authors is set to true, + * the disable author option has to be false. Because of this the $value is inversed. + */ + $result_author_archives = WPSEO_Options::save_option( 'wpseo_titles', 'disable-author', ! $value ); + + return ( $result_multiple_authors === true && $result_author_archives === true ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-person-name.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-person-name.php new file mode 100644 index 0000000..5f0cc4f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-person-name.php @@ -0,0 +1,28 @@ +set_property( 'label', __( 'The name of the person', 'wordpress-seo' ) ); + + $this->set_requires( 'publishingEntityType', 'person' ); + } + + /** + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo', 'person_name' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-post-type-visibility.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-post-type-visibility.php new file mode 100644 index 0000000..3503fb8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-post-type-visibility.php @@ -0,0 +1,23 @@ +' . $copy . '


    '; + + $this->set_property( 'html', $html ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-facebook.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-facebook.php new file mode 100644 index 0000000..ed84a88 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-facebook.php @@ -0,0 +1,29 @@ +set_property( 'label', __( 'Facebook Page URL', 'wordpress-seo' ) ); + $this->set_property( 'pattern', '^https:\/\/www\.facebook\.com\/([^/]+)\/$' ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo_social', 'facebook_site' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-googleplus.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-googleplus.php new file mode 100644 index 0000000..65a1a3c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-googleplus.php @@ -0,0 +1,29 @@ +set_property( 'label', __( 'Google+ URL', 'wordpress-seo' ) ); + $this->set_property( 'pattern', '^https:\/\/plus\.google\.com\/([^/]+)$' ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo_social', 'google_plus_url' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-instagram.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-instagram.php new file mode 100644 index 0000000..6a33b51 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-instagram.php @@ -0,0 +1,29 @@ +set_property( 'label', __( 'Instagram URL', 'wordpress-seo' ) ); + $this->set_property( 'pattern', '^https:\/\/www\.instagram\.com\/([^/]+)\/$' ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo_social', 'instagram_url' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-linkedin.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-linkedin.php new file mode 100644 index 0000000..b58c96f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-linkedin.php @@ -0,0 +1,29 @@ +set_property( 'label', __( 'LinkedIn URL', 'wordpress-seo' ) ); + $this->set_property( 'pattern', '^https:\/\/www\.linkedin\.com\/in\/([^/]+)$' ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo_social', 'linkedin_url' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-myspace.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-myspace.php new file mode 100644 index 0000000..42168ed --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-myspace.php @@ -0,0 +1,29 @@ +set_property( 'label', __( 'MySpace URL', 'wordpress-seo' ) ); + $this->set_property( 'pattern', '^https:\/\/myspace\.com\/([^/]+)\/$' ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo_social', 'myspace_url' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-pinterest.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-pinterest.php new file mode 100644 index 0000000..544bb64 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-pinterest.php @@ -0,0 +1,29 @@ +set_property( 'label', __( 'Pinterest URL', 'wordpress-seo' ) ); + $this->set_property( 'pattern', '^https:\/\/www\.pinterest\.com\/([^/]+)\/$' ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo_social', 'pinterest_url' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-twitter.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-twitter.php new file mode 100644 index 0000000..223be1b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-twitter.php @@ -0,0 +1,28 @@ +set_property( 'label', __( 'Twitter Username', 'wordpress-seo' ) ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo_social', 'twitter_site' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-youtube.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-youtube.php new file mode 100644 index 0000000..5a53b81 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-profile-url-youtube.php @@ -0,0 +1,29 @@ +set_property( 'label', __( 'YouTube URL', 'wordpress-seo' ) ); + $this->set_property( 'pattern', '^https:\/\/www\.youtube\.com\/([^/]+)$' ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo_social', 'youtube_url' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-separator.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-separator.php new file mode 100644 index 0000000..297a6c3 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-separator.php @@ -0,0 +1,43 @@ +set_property( 'label', __( 'Title Separator', 'wordpress-seo' ) ); + $this->set_property( 'explanation', __( 'Choose the symbol to use as your title separator. This will display, for instance, between your post title and site name. Symbols are shown in the size they\'ll appear in the search results.', 'wordpress-seo' ) ); + + $this->add_choice( 'sc-dash', '-', __( 'Dash', 'wordpress-seo' ) ); + $this->add_choice( 'sc-ndash', '–', __( 'En dash', 'wordpress-seo' ) ); + $this->add_choice( 'sc-mdash', '—', __( 'Em dash', 'wordpress-seo' ) ); + $this->add_choice( 'sc-middot', '·', __( 'Middle dot', 'wordpress-seo' ) ); + $this->add_choice( 'sc-bull', '•', __( 'Bullet', 'wordpress-seo' ) ); + $this->add_choice( 'sc-star', '*', __( 'Asterisk', 'wordpress-seo' ) ); + $this->add_choice( 'sc-smstar', '⋆', __( 'Low asterisk', 'wordpress-seo' ) ); + $this->add_choice( 'sc-pipe', '|', __( 'Vertical bar', 'wordpress-seo' ) ); + $this->add_choice( 'sc-tilde', '~', __( 'Small tilde', 'wordpress-seo' ) ); + $this->add_choice( 'sc-laquo', '«', __( 'Left angle quotation mark', 'wordpress-seo' ) ); + $this->add_choice( 'sc-raquo', '»', __( 'Right angle quotation mark', 'wordpress-seo' ) ); + $this->add_choice( 'sc-lt', '<', __( 'Less than sign', 'wordpress-seo' ) ); + $this->add_choice( 'sc-gt', '>', __( 'Greater than sign', 'wordpress-seo' ) ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo_titles', 'separator' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-site-name.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-site-name.php new file mode 100644 index 0000000..318d9c8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-site-name.php @@ -0,0 +1,67 @@ +set_property( 'label', __( 'Website name', 'wordpress-seo' ) ); + $this->set_property( 'explanation', __( 'Google shows your website\'s name in the search results, if you want to change it, you can do that here.', 'wordpress-seo' ) ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_custom_lookup( + $this->get_identifier(), + array( $this, 'get_data' ), + array( $this, 'set_data' ) + ); } + + /** + * Get the data from the stored options. + * + * @return null|string + */ + public function get_data() { + $option = WPSEO_Options::get_option( 'wpseo' ); + if ( ! empty( $option['website_name'] ) ) { + return $option['website_name']; + } + + return get_bloginfo( 'name' ); + } + + /** + * Set the data in the options. + * + * @param {string} $data The data to set for the field. + * + * @return bool Returns true or false for successful storing the data. + */ + public function set_data( $data ) { + $value = $data; + + $option = WPSEO_Options::get_option( 'wpseo' ); + $option['website_name'] = $value; + + update_option( 'wpseo', $option ); + + // Check if everything got saved properly. + $saved_option = WPSEO_Options::get_option( 'wpseo' ); + + return ( $saved_option['website_name'] === $option['website_name'] ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-site-type.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-site-type.php new file mode 100644 index 0000000..08f1a4e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-site-type.php @@ -0,0 +1,36 @@ +set_property( 'label', sprintf( __( 'What kind of site is %1$s?', 'wordpress-seo' ), get_home_url() ) ); + + $this->add_choice( 'blog', __( 'Blog', 'wordpress-seo' ) ); + $this->add_choice( 'shop', __( 'Webshop', 'wordpress-seo' ) ); + $this->add_choice( 'news', __( 'News site', 'wordpress-seo' ) ); + $this->add_choice( 'smallBusiness', __( 'Small business site', 'wordpress-seo' ) ); + $this->add_choice( 'corporateOther', __( 'Other corporate site', 'wordpress-seo' ) ); + $this->add_choice( 'personalOther', __( 'Other personal site', 'wordpress-seo' ) ); + } + + /** + * Set adapter + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + $adapter->add_yoast_lookup( $this->get_identifier(), 'wpseo', 'site_type' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-social-profiles-intro.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-social-profiles-intro.php new file mode 100644 index 0000000..8403e52 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-social-profiles-intro.php @@ -0,0 +1,23 @@ +' . $intro_text . '

    '; + + $this->set_property( 'html', $html ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-success-message.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-success-message.php new file mode 100644 index 0000000..229e822 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-success-message.php @@ -0,0 +1,42 @@ +', + sprintf( + /* translators: %1$s expands to Yoast SEO. */ + __( '%1$s video tutorial', 'wordpress-seo' ), + 'Yoast SEO' + ) + ); + + $html = '

    ' . $success_message . '

    '; + $html .= '

    ' . $onpage_seo . '

    '; + $html .= '
    ' . $content_analysis_video . '
    '; + + $this->set_property( 'html', $html ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-upsell-configuration-service.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-upsell-configuration-service.php new file mode 100644 index 0000000..ae49842 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-upsell-configuration-service.php @@ -0,0 +1,38 @@ +', + '' + ); + + $html = '

    ' . $intro_text . '

    '; + $html .= '

    ' . $upsell_text . '

    '; + + + $this->set_property( 'html', $html ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-upsell-site-review.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-upsell-site-review.php new file mode 100644 index 0000000..10ca7e4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field-upsell-site-review.php @@ -0,0 +1,30 @@ +', + '', + '', + '' + ); + + $html = '

    ' . $upsell_text . '

    '; + + $this->set_property( 'html', $html ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field.php b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field.php new file mode 100644 index 0000000..f4b3c2e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/config-ui/fields/class-field.php @@ -0,0 +1,134 @@ +field = $field; + $this->component = $component; + } + + /** + * Get the identifier + * + * @return string + */ + public function get_identifier() { + return $this->field; + } + + /** + * Get the component + * + * @return string + */ + public function get_component() { + return $this->component; + } + + /** + * Set a property value + * + * @param string $name Property to set. + * @param mixed $value Value to apply. + */ + public function set_property( $name, $value ) { + $this->properties[ $name ] = $value; + } + + /** + * Get all the properties + * + * @return array + */ + public function get_properties() { + return $this->properties; + } + + /** + * Get the data + * + * @return mixed + */ + public function get_data() { + return $this->data; + } + + /** + * Array representation of this object. + * + * @return array + */ + public function to_array() { + $output = array( + 'componentName' => $this->get_component(), + ); + + $properties = $this->get_properties(); + if ( $properties ) { + $output['properties'] = $properties; + } + + $requires = $this->get_requires(); + if ( ! empty( $requires ) ) { + $output['requires'] = $requires; + } + + return $output; + } + + /** + * Set the adapter to use + * + * @param WPSEO_Configuration_Options_Adapter $adapter Adapter to register lookup on. + */ + public function set_adapter( WPSEO_Configuration_Options_Adapter $adapter ) { + } + + /** + * Requires another field to have a certain value. + * + * @param string $field Field to check for a certain value. + * @param mixed $value Value of the field. + */ + public function set_requires( $field, $value ) { + $this->requires = array( + 'field' => $field, + 'value' => $value, + ); + } + + /** + * Get the required field settings (if present) + * + * @return array + */ + public function get_requires() { + return $this->requires; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/formatter/class-metabox-formatter.php b/wp-content/plugins/wordpress-seo/admin/formatter/class-metabox-formatter.php new file mode 100644 index 0000000..ed7a477 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/formatter/class-metabox-formatter.php @@ -0,0 +1,99 @@ +formatter = $formatter; + } + + /** + * Returns the values + * + * @return array + */ + public function get_values() { + $defaults = $this->get_defaults(); + $values = $this->formatter->get_values(); + + return ( $values + $defaults ); + } + + /** + * Returns array with all the values always needed by a scraper object + * + * @return array + */ + private function get_defaults() { + $analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + $analysis_readability = new WPSEO_Metabox_Analysis_Readability(); + + return array( + 'search_url' => '', + 'post_edit_url' => '', + 'base_url' => '', + 'contentTab' => __( 'Readability', 'wordpress-seo' ), + 'keywordTab' => __( 'Keyword:', 'wordpress-seo' ), + 'enterFocusKeyword' => __( 'Enter your focus keyword', 'wordpress-seo' ), + 'removeKeyword' => __( 'Remove keyword', 'wordpress-seo' ), + 'locale' => WPSEO_Utils::get_user_locale(), + 'translations' => $this->get_translations(), + 'keyword_usage' => array(), + 'title_template' => '', + 'metadesc_template' => '', + 'contentAnalysisActive' => $analysis_readability->is_enabled() ? 1 : 0, + 'keywordAnalysisActive' => $analysis_seo->is_enabled() ? 1 : 0, + + /** + * Filter to determine if the markers should be enabled or not. + * + * @param bool $showMarkers Should the markers being enabled. Default = true. + */ + 'show_markers' => apply_filters( 'wpseo_enable_assessment_markers', true ), + 'publish_box' => array( + 'labels' => array( + 'content' => __( 'Readability', 'wordpress-seo' ), + 'keyword' => __( 'SEO', 'wordpress-seo' ), + ), + 'statuses' => array( + 'na' => __( 'Not available', 'wordpress-seo' ), + 'bad' => __( 'Needs improvement', 'wordpress-seo' ), + 'ok' => __( 'OK', 'wordpress-seo' ), + 'good' => __( 'Good', 'wordpress-seo' ), + ), + ), + ); + + } + + /** + * Returns Jed compatible YoastSEO.js translations. + * + * @return array + */ + private function get_translations() { + $locale = WPSEO_Utils::get_user_locale(); + + $file = plugin_dir_path( WPSEO_FILE ) . 'languages/wordpress-seo-' . $locale . '.json'; + if ( file_exists( $file ) && $file = file_get_contents( $file ) ) { + return json_decode( $file, true ); + } + + return array(); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/formatter/class-post-metabox-formatter.php b/wp-content/plugins/wordpress-seo/admin/formatter/class-post-metabox-formatter.php new file mode 100644 index 0000000..697d09c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/formatter/class-post-metabox-formatter.php @@ -0,0 +1,181 @@ +post = $post; + $this->options = $options; + $this->permalink = $structure; + } + + /** + * Returns the translated values. + * + * @return array + */ + public function get_values() { + $values = array( + 'search_url' => $this->search_url(), + 'post_edit_url' => $this->edit_url(), + 'base_url' => $this->base_url_for_js(), + 'metaDescriptionDate' => '', + ); + + if ( $this->post instanceof WP_Post ) { + $values_to_set = array( + 'keyword_usage' => $this->get_focus_keyword_usage(), + 'title_template' => $this->get_title_template(), + 'metadesc_template' => $this->get_metadesc_template(), + 'metaDescriptionDate' => $this->get_metadesc_date(), + ); + + $values = ( $values_to_set + $values ); + } + + return $values; + } + + /** + * Returns the url to search for keyword for the post + * + * @return string + */ + private function search_url() { + return admin_url( 'edit.php?seo_kw_filter={keyword}' ); + } + + /** + * Returns the url to edit the taxonomy + * + * @return string + */ + private function edit_url() { + return admin_url( 'post.php?post={id}&action=edit' ); + } + + /** + * Returns a base URL for use in the JS, takes permalink structure into account + * + * @return string + */ + private function base_url_for_js() { + global $pagenow; + + // The default base is the home_url. + $base_url = home_url( '/', null ); + + if ( 'post-new.php' === $pagenow ) { + return $base_url; + } + + // If %postname% is the last tag, just strip it and use that as a base. + if ( 1 === preg_match( '#%postname%/?$#', $this->permalink ) ) { + $base_url = preg_replace( '#%postname%/?$#', '', $this->permalink ); + } + + return $base_url; + } + + /** + * Counting the number of given keyword used for other posts than given post_id + * + * @return array + */ + private function get_focus_keyword_usage() { + $keyword = WPSEO_Meta::get_value( 'focuskw', $this->post->ID ); + + return array( + $keyword => WPSEO_Meta::keyword_usage( $keyword, $this->post->ID ), + ); + } + + /** + * Retrieves the title template. + * + * @return string + */ + private function get_title_template() { + return $this->get_template( 'title' ); + } + + /** + * Retrieves the metadesc template. + * + * @return string + */ + private function get_metadesc_template() { + return $this->get_template( 'metadesc' ); + } + + /** + * Retrieves a template. + * + * @param String $template_option_name The name of the option in which the template you want to get is saved. + * + * @return string + */ + private function get_template( $template_option_name ) { + $needed_option = $template_option_name . '-' . $this->post->post_type; + + if ( isset( $this->options[ $needed_option ] ) && $this->options[ $needed_option ] !== '' ) { + return $this->options[ $needed_option ]; + } + + return ''; + } + + /** + * Determines the date to be displayed in the snippet preview + * + * @return string + */ + private function get_metadesc_date() { + $date = ''; + + if ( $this->is_show_date_enabled() ) { + $date = date_i18n( 'M j, Y', mysql2date( 'U', $this->post->post_date ) ); + } + + return $date; + } + + /** + * Returns whether or not showing the date in the snippet preview is enabled. + * + * @return bool + */ + private function is_show_date_enabled() { + $post_type = $this->post->post_type; + $key = sprintf( 'showdate-%s', $post_type ); + + return isset( $this->options[ $key ] ) && true === $this->options[ $key ]; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/formatter/class-term-metabox-formatter.php b/wp-content/plugins/wordpress-seo/admin/formatter/class-term-metabox-formatter.php new file mode 100644 index 0000000..a99839f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/formatter/class-term-metabox-formatter.php @@ -0,0 +1,143 @@ +term = $term; + $this->taxonomy = $taxonomy; + $this->options = $options; + } + + /** + * Returns the translated values. + * + * @return array + */ + public function get_values() { + $values = array(); + + // Todo: a column needs to be added on the termpages to add a filter for the keyword, so this can be used in the focus kw doubles. + if ( is_object( $this->term ) && property_exists( $this->term, 'taxonomy' ) ) { + $values = array( + 'search_url' => $this->search_url(), + 'post_edit_url' => $this->edit_url(), + 'base_url' => $this->base_url_for_js(), + 'taxonomy' => $this->term->taxonomy, + 'keyword_usage' => $this->get_focus_keyword_usage(), + 'title_template' => $this->get_title_template(), + 'metadesc_template' => $this->get_metadesc_template(), + ); + } + + return $values; + } + + /** + * Returns the url to search for keyword for the taxonomy + * + * @return string + */ + private function search_url() { + return admin_url( 'edit-tags.php?taxonomy=' . $this->term->taxonomy . '&seo_kw_filter={keyword}' ); + } + + /** + * Returns the url to edit the taxonomy + * + * @return string + */ + private function edit_url() { + global $wp_version; + $script_filename = version_compare( $wp_version, '4.5', '<' ) ? 'edit-tags' : 'term'; + return admin_url( $script_filename . '.php?action=edit&taxonomy=' . $this->term->taxonomy . '&tag_ID={id}' ); + } + + /** + * Returns a base URL for use in the JS, takes permalink structure into account + * + * @return string + */ + private function base_url_for_js() { + + $base_url = home_url( '/', null ); + $options = WPSEO_Options::get_option( 'wpseo_permalinks' ); + if ( ! $options['stripcategorybase'] ) { + $base_url = trailingslashit( $base_url . $this->taxonomy->rewrite['slug'] ); + } + + return $base_url; + } + + /** + * Counting the number of given keyword used for other term than given term_id + * + * @return array + */ + private function get_focus_keyword_usage() { + $focuskw = WPSEO_Taxonomy_Meta::get_term_meta( $this->term, $this->term->taxonomy, 'focuskw' ); + + return WPSEO_Taxonomy_Meta::get_keyword_usage( $focuskw, $this->term->term_id, $this->term->taxonomy ); + } + + /** + * Retrieves the title template. + * + * @return string + */ + private function get_title_template() { + return $this->get_template( 'title' ); + } + + /** + * Retrieves the metadesc template. + * + * @return string + */ + private function get_metadesc_template() { + return $this->get_template( 'metadesc' ); + } + + /** + * Retrieves a template. + * + * @param String $template_option_name The name of the option in which the template you want to get is saved. + * + * @return string + */ + private function get_template( $template_option_name ) { + $needed_option = $template_option_name . '-tax-' . $this->term->taxonomy; + if ( isset( $this->options[ $needed_option ] ) && $this->options[ $needed_option ] !== '' ) { + return $this->options[ $needed_option ]; + } + + return ''; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/formatter/interface-metabox-formatter.php b/wp-content/plugins/wordpress-seo/admin/formatter/interface-metabox-formatter.php new file mode 100644 index 0000000..f3be154 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/formatter/interface-metabox-formatter.php @@ -0,0 +1,18 @@ +valid_nonce() ) { + $marker = new WPSEO_GSC_Marker( filter_input( INPUT_POST, 'url' ) ); + + wp_die( $marker->get_response() ); + } + + wp_die( 'false' ); + } + + /** + * Handling the request to create a new redirect from the issued URL + */ + public function ajax_create_redirect() { + if ( $this->valid_nonce() && class_exists( 'WPSEO_Redirect_Manager' ) && defined( 'WPSEO_PREMIUM_PATH' ) ) { + $redirect_manager = new WPSEO_Redirect_Manager(); + + $old_url = filter_input( INPUT_POST, 'old_url' ); + + // Creates the redirect. + $redirect = new WPSEO_Redirect( $old_url, filter_input( INPUT_POST, 'new_url' ), filter_input( INPUT_POST, 'type' ) ); + + if ( $redirect_manager->create_redirect( $redirect ) ) { + if ( filter_input( INPUT_POST, 'mark_as_fixed' ) === 'true' ) { + new WPSEO_GSC_Marker( $old_url ); + } + + wp_die( 'true' ); + } + } + + wp_die( 'false' ); + } + + /** + * Handle the AJAX request and dismiss the GSC notice + */ + public function dismiss_notice() { + check_ajax_referer( 'dismiss-gsc-notice' ); + + update_user_meta( get_current_user_id(), 'wpseo_dismissed_gsc_notice', true ); + + wp_die( 'true' ); + } + + /** + * Saves the authorization code. + */ + public function save_auth_code() { + if ( ! $this->valid_nonce() ) { + wp_die( '0' ); + } + + // Validate the authorization. + $service = $this->get_service(); + $authorization_code = filter_input( INPUT_POST, 'authorization' ); + $is_authorization_valid = WPSEO_GSC_Settings::validate_authorization( $authorization_code, $service->get_client() ); + if ( ! $is_authorization_valid ) { + wp_die( '0' ); + } + + $this->get_profiles(); + } + + /** + * Clears all authorization data. + */ + public function clear_auth_code() { + if ( ! $this->valid_nonce() ) { + wp_die( '0' ); + } + + $service = $this->get_service(); + + WPSEO_GSC_Settings::clear_data( $service ); + + $this->get_profiles(); + } + + /** + * Check if posted nonce is valid and return true if it is + * + * @return mixed + */ + private function valid_nonce() { + return wp_verify_nonce( filter_input( INPUT_POST, 'ajax_nonce' ), 'wpseo-gsc-ajax-security' ); + } + + /** + * Returns an instance of the Google Search Console service. + * + * @return WPSEO_GSC_Service + */ + private function get_service() { + return new WPSEO_GSC_Service(); + } + + /** + * Prints a JSON encoded string with the current profile config. + */ + private function get_profiles() { + $component = new WPSEO_Config_Component_Connect_Google_Search_Console(); + + wp_die( wp_json_encode( $component->get_data() ) ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-bulk-action.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-bulk-action.php new file mode 100644 index 0000000..02a5c16 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-bulk-action.php @@ -0,0 +1,92 @@ +handle_bulk_action(); + } + } + + /** + * Handles the bulk action when there is an action posted + */ + private function handle_bulk_action() { + if ( $bulk_action = $this->determine_bulk_action() ) { + $this->run_bulk_action( $bulk_action, $this->posted_issues() ); + + wp_redirect( filter_input( INPUT_POST, '_wp_http_referer' ) ); + exit; + } + } + + /** + * Determine which bulk action is selected and return that value + * + * @return string|bool + */ + private function determine_bulk_action() { + // If posted action is the selected one above the table, return that value. + if ( ( $action = filter_input( INPUT_POST, 'action' ) ) && $action !== '-1' ) { + return $action; + } + + // If posted action is the selected one below the table, return that value. + if ( ( $action = filter_input( INPUT_POST, 'action2' ) ) && $action !== '-1' ) { + return $action; + } + + return false; + } + + /** + * Get the posted issues and return them + * + * @return array + */ + private function posted_issues() { + if ( $issues = filter_input( INPUT_POST, 'wpseo_crawl_issues', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ) ) { + return $issues; + } + + // Fallback if issues are empty. + return array(); + } + + /** + * Runs the bulk action + * + * @param string $bulk_action Action type. + * @param array $issues Set of issues to apply to. + */ + private function run_bulk_action( $bulk_action, $issues ) { + switch ( $bulk_action ) { + case 'mark_as_fixed' : + array_map( array( $this, 'action_mark_as_fixed' ), $issues ); + + break; + } + } + + /** + * Marks the issue as fixed + * + * @param string $issue Issue URL. + * + * @return string + */ + private function action_mark_as_fixed( $issue ) { + new WPSEO_GSC_Marker( $issue ); + + return $issue; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-category-filters.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-category-filters.php new file mode 100644 index 0000000..f172a81 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-category-filters.php @@ -0,0 +1,192 @@ +set_counts( $platform_counts ); + } + + // Setting the filter values. + $this->set_filter_values(); + + $this->category = $this->get_current_category(); + } + + /** + * Returns the value of the current category + * + * @return mixed|string + */ + public function get_category() { + return $this->category; + } + + /** + * Returns the current filters as an array + * + * Only return categories with more than 0 issues + * + * @return array + */ + public function as_array() { + $new_views = array(); + + foreach ( $this->category_counts as $category_name => $category ) { + $new_views[] = $this->create_view_link( $category_name, $category['count'] ); + } + + return $new_views; + } + + /** + * Getting the current view + */ + private function get_current_category() { + if ( $current_category = filter_input( INPUT_GET, 'category' ) ) { + return $current_category; + } + + // Just prevent redirect loops. + if ( ! empty( $this->category_counts ) ) { + $current_category = 'not_found'; + if ( empty( $this->category_counts[ $current_category ] ) ) { + $current_category = key( $this->category_counts ); + } + + // Just redirect to set the category. + wp_redirect( add_query_arg( 'category', $current_category ) ); + exit; + } + } + + /** + * Setting the view counts based on the saved data. The info will be used to display the category filters + * + * @param array $platform_counts Set of counts by platform. + */ + private function set_counts( array $platform_counts ) { + $this->category_counts = $this->parse_counts( $platform_counts ); + } + + /** + * Setting the values for the filter + */ + private function set_filter_values() { + $this->set_filter_value( 'access_denied', __( 'Access denied', 'wordpress-seo' ), __( 'Server requires authentication or is blocking Googlebot from accessing the site.', 'wordpress-seo' ), __( 'Show information about errors in category \'Access Denied\'', 'wordpress-seo' ) ); + $this->set_filter_value( 'faulty_redirects', __( 'Faulty redirects', 'wordpress-seo' ) ); + $this->set_filter_value( 'not_followed',__( 'Not followed', 'wordpress-seo' ) ); + $this->set_filter_value( 'not_found', __( 'Not found', 'wordpress-seo' ), __( 'URL points to a non-existent page.', 'wordpress-seo' ), __( 'Show information about errors in category \'Not Found\'', 'wordpress-seo' ) ); + $this->set_filter_value( 'other', __( 'Other', 'wordpress-seo' ), __( 'Google was unable to crawl this URL due to an undetermined issue.', 'wordpress-seo' ), __( 'Show information about errors in category \'Other\'', 'wordpress-seo' ) ); + /* Translators: %1$s: expands to 'robots.txt'. */ + $this->set_filter_value( 'roboted', __( 'Blocked', 'wordpress-seo' ), sprintf( __( 'Googlebot could access your site, but certain URLs are blocked for Googlebot in your %1$s file. This block could either be for all Googlebots or even specifically for Googlebot-mobile.', 'wordpress-seo' ), 'robots.txt' ), __( 'Show information about errors in category \'Blocked\'', 'wordpress-seo' ) ); + $this->set_filter_value( 'server_error', __( 'Server Error', 'wordpress-seo' ), __( 'Request timed out or site is blocking Google.', 'wordpress-seo' ), __( 'Show information about errors in category \'Server\'', 'wordpress-seo' ) ); + $this->set_filter_value( 'soft_404', __( 'Soft 404', 'wordpress-seo' ), __( "The target URL doesn't exist, but your server is not returning a 404 (file not found) error.", 'wordpress-seo' ), __( 'Show information about errors in category \'Soft 404\'', 'wordpress-seo' ) ); + } + + /** + * Add new filter value to the filter_values + * + * @param string $key Filter key. + * @param string $value Filter value. + * @param string $description Optional description string. + * @param string $help_button_text Optional help button text. + */ + private function set_filter_value( $key, $value, $description = '', $help_button_text = '' ) { + $this->filter_values[ $key ] = array( + 'value' => $value, + 'description' => $description, + 'help-button' => $help_button_text, + ); + } + + /** + * Creates a filter link + * + * @param string $category Issue type. + * @param integer $count Count for the type. + * + * @return string + */ + private function create_view_link( $category, $count ) { + $href = add_query_arg( array( 'category' => $category, 'paged' => 1 ) ); + + $class = 'gsc_category'; + + if ( $this->category === $category ) { + $class .= ' current'; + } + + $help_button = $help_panel = ''; + if ( $this->filter_values[ $category ]['description'] !== '' ) { + $help = new WPSEO_Admin_Help_Panel( $category, $this->filter_values[ $category ]['help-button'], $this->filter_values[ $category ]['description'], 'has-wrapper' ); + $help_button = $help->get_button_html(); + $help_panel = $help->get_panel_html(); + } + + return sprintf( + '%3$s (%5$s) %6$s %7$s', + esc_attr( $href ), + $class, + $this->filter_values[ $category ]['value'], + $category, + $count, + $help_button, + $help_panel + ); + } + + /** + * Parsing the category counts. When there are 0 issues for a specific category, just remove that one from the array + * + * @param array $category_counts Set of counts for categories. + * + * @return mixed + */ + private function parse_counts( $category_counts ) { + foreach ( $category_counts as $category_name => $category ) { + if ( $category['count'] === '0' ) { + unset( $category_counts[ $category_name ] ); + } + } + + return $category_counts; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-config.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-config.php new file mode 100644 index 0000000..9b39644 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-config.php @@ -0,0 +1,22 @@ + 'Yoast SEO', + 'client_id' => '395430892738-ushj8aced0cji2j4bkq6bda6felaigb9.apps.googleusercontent.com', + 'client_secret' => 'c2kYgOwMhk1emWxQ3NaA8wOi', + 'redirect_uri' => 'urn:ietf:wg:oauth:2.0:oob', + 'scopes' => array( 'https://www.googleapis.com/auth/webmasters' ), + ); + +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-count.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-count.php new file mode 100644 index 0000000..653433d --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-count.php @@ -0,0 +1,221 @@ +service = $service; + } + + /** + * Getting the counts for given platform and return them as an array + * + * @param string $platform Platform (desktop, mobile, feature phone). + * + * @return array + */ + public function get_platform_counts( $platform ) { + $counts = $this->get_counts(); + if ( array_key_exists( $platform, $counts ) ) { + return $counts[ $platform ]; + } + + return array(); + } + + /** + * Return the fetched issues + * + * @return array + */ + public function get_issues() { + return $this->issues; + } + + /** + * Listing the issues an gives them back as fetched issues + * + * @param string $platform Platform (desktop, mobile, feature phone). + * @param string $category Issue category. + */ + public function list_issues( $platform, $category ) { + $counts = $this->get_counts(); + + if ( array_key_exists( $platform, $counts ) ) { + $counts[ $platform ] = $this->list_category_issues( $counts[ $platform ], $platform, $category ); + + // Write the new counts value. + $this->set_counts( $counts ); + } + } + + /** + * Getting the counts for given platform and category. + * + * @param string $platform Platform (desktop, mobile, feature phone). + * @param string $category Issue type. + * + * @return integer + */ + public function get_issue_count( $platform, $category ) { + $counts = $this->get_counts(); + + if ( ! empty( $counts[ $platform ][ $category ]['count'] ) ) { + return $counts[ $platform ][ $category ]['count']; + } + + return 0; + } + + /** + * Update the count of the issues + * + * @param string $platform Platform (desktop, mobile, feature phone). + * @param string $category Issue type. + * @param integer $new_count Updated count. + */ + public function update_issue_count( $platform, $category, $new_count ) { + $counts = $this->get_counts(); + + if ( ! empty( $counts[ $platform ][ $category ] ) && is_array( $counts[ $platform ][ $category ] ) ) { + $counts[ $platform ][ $category ]['count'] = $new_count; + } + + $this->set_counts( $counts ); + } + + /** + * Fetching the counts from the GSC API + */ + public function fetch_counts() { + if ( WPSEO_GSC_Settings::get_profile() && $this->get_last_fetch() <= strtotime( '-12 hours' ) ) { + // Remove the timestamp. + $this->remove_last_fetch(); + + // Getting the counts and parse them. + $counts = $this->parse_counts( $this->service->get_crawl_issue_counts() ); + + // Fetching the counts by setting an option. + $this->set_counts( $counts ); + + // Saving the current timestamp. + $this->save_last_fetch(); + } + } + + /** + * Parsing the received counts from the API and map the keys to plugin friendly values + * + * @param array $fetched_counts Set of retrieved counts. + * + * @return array + */ + private function parse_counts( array $fetched_counts ) { + $counts = array(); + foreach ( $fetched_counts as $platform_name => $categories ) { + $new_platform = WPSEO_GSC_Mapper::platform_from_api( $platform_name ); + + foreach ( $categories as $category_name => $category ) { + $new_category = WPSEO_GSC_Mapper::category_from_api( $category_name ); + $counts[ $new_platform ][ $new_category ] = $category; + } + } + + return $counts; + } + + /** + * Listing the issues for current category. + * + * @param array $counts Set of counts. + * @param string $platform Platform (desktop, mobile, feature phone). + * @param string $category Issue type. + * + * @return array + */ + private function list_category_issues( array $counts, $platform, $category ) { + // When the issues have to be fetched. + if ( array_key_exists( $category, $counts ) && $counts[ $category ]['count'] > 0 && $counts[ $category ]['last_fetch'] <= strtotime( '-12 hours' ) ) { + if ( $issues = $this->service->fetch_category_issues( WPSEO_GSC_Mapper::platform_to_api( $platform ), WPSEO_GSC_Mapper::category_to_api( $category ) ) ) { + $this->issues = $issues; + } + + // Be sure the total count is correct. + $counts[ $category ]['count'] = count( $this->issues ); + + // Set last fetch. + $counts[ $category ]['last_fetch'] = time(); + } + + return $counts; + } + + /** + * Getting the counts from the options + * + * @return array + */ + private function get_counts() { + return get_option( self::OPTION_CI_COUNTS, array() ); + } + + /** + * Fetching the counts from the service and store them in an option + * + * @param array $counts Set of counts. + */ + private function set_counts( array $counts ) { + update_option( self::OPTION_CI_COUNTS, $counts ); + } + + /** + * Store the timestamp of when crawl errors were saved the last time. + */ + private function save_last_fetch() { + add_option( self::OPTION_CI_LAST_FETCH, time(), '', 'no' ); + } + + /** + * Remove the last checked option + */ + private function remove_last_fetch() { + delete_option( self::OPTION_CI_LAST_FETCH ); + } + + /** + * Get the timestamp of when the crawl errors were last saved + * + * @return int + */ + private function get_last_fetch() { + return get_option( self::OPTION_CI_LAST_FETCH, 0 ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-issue.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-issue.php new file mode 100644 index 0000000..b6ea06d --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-issue.php @@ -0,0 +1,89 @@ +url = $url; + $this->first_detected = $first_detected; + $this->last_crawled = $last_crawled; + $this->response_code = $response_code; + } + + /** + * Put the class properties in array + * + * @return array + */ + public function to_array() { + return array( + 'url' => $this->url, + 'first_detected' => $this->to_date_format( $this->first_detected ), + 'first_detected_raw' => $this->to_timestamp( $this->first_detected ), + 'last_crawled' => $this->to_date_format( $this->last_crawled ), + 'last_crawled_raw' => $this->to_timestamp( $this->last_crawled ), + 'response_code' => $this->response_code, + ); + } + + /** + * Converting the date to a date format + * + * @param DateTime $date_to_convert Date instance. + * @param string $format Format string. + * + * @return string + */ + private function to_date_format( DateTime $date_to_convert, $format = '' ) { + + if ( empty( $format ) ) { + $format = get_option( 'date_format' ); + } + + return date_i18n( $format, $date_to_convert->format( 'U' ) ); + } + + /** + * Converting the date to a timestamp + * + * @param DateTime $date_to_convert Date object instance. + * + * @return string + */ + private function to_timestamp( DateTime $date_to_convert ) { + return $date_to_convert->format( 'U' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-issues.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-issues.php new file mode 100644 index 0000000..40a3d4e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-issues.php @@ -0,0 +1,175 @@ +option_name = strtolower( 'wpseo-gsc-issues-' . $platform . '-' . $category ); + $this->issues = $this->get_issues(); + + if ( ! empty( $fetched_issues ) && is_array( $fetched_issues ) ) { + $this->save_fetched_issues( $fetched_issues ); + } + } + /** + * Getting the issues from the options. + * + * @return array + */ + public function get_issues() { + return get_option( $this->option_name, array() ); + } + + /** + * Deleting the issue from the issues + * + * @param string $url URL to delete issues for. + * + * @return bool + */ + public function delete_issue( $url ) { + $target_issue = $this->get_issue_by_url( $url ); + if ( $target_issue !== false ) { + unset( $this->issues[ $target_issue ] ); + + $this->save_issues( $this->issues ); + + return true; + } + + return false; + } + + /** + * Fetching the issues for current category and compare them with the already existing issues. + * + * @param array $fetched_issues Set of retrieved issues. + */ + private function save_fetched_issues( array $fetched_issues ) { + $this->set_current_issues(); + + $crawl_issues = $this->get_issues(); + + // Walk through the issues to do the comparison. + foreach ( $fetched_issues as $issue ) { + $this->issue_compare( $crawl_issues, $issue ); + } + + $this->save_issues( $crawl_issues ); + + // Refresh the value of $this->issues. + $this->issues = $this->get_issues(); + } + + /** + * Comparing the issue with the list of current existing issues + * + * @param array $crawl_issues Set of issues by reference. + * @param stdClass $issue Issue object to check against the list. + */ + private function issue_compare( &$crawl_issues, $issue ) { + $issue->pageUrl = WPSEO_Utils::format_url( (string) $issue->pageUrl ); + + if ( ! in_array( $issue->pageUrl, $this->current_issues ) ) { + array_push( + $crawl_issues, + $this->get_issue( $this->create_issue( $issue ) ) + ); + } + } + + /** + * The fetched issue from the API will be parsed as an WPSEO_Crawl_Issue object. After initializing the issue as an + * object, the object will be returned + * + * @param stdClass $issue Issue data object. + * + * @return WPSEO_GSC_Issue + */ + private function create_issue( $issue ) { + return new WPSEO_GSC_Issue( + $issue->pageUrl, + new DateTime( (string) $issue->first_detected ), + new DateTime( (string) $issue->last_crawled ), + (string) ( ! empty( $issue->responseCode ) ) ? $issue->responseCode : null + ); + } + + /** + * Returns the crawl issue as an array. + * + * @param WPSEO_GSC_Issue $crawl_issue Issue object instance. + * + * @return array() + */ + private function get_issue( WPSEO_GSC_Issue $crawl_issue ) { + return $crawl_issue->to_array(); + } + + /** + * Saving the issues to the options. The target option is base on current platform and category. + * + * @param array $issues Set of issues. + */ + private function save_issues( array $issues ) { + update_option( $this->option_name, $issues, false ); + } + + /** + * Getting the issues from the options and get only the URL out of it. This is because there will be a comparison + * with the issues from the API. + */ + private function set_current_issues() { + if ( ! empty( $this->issues ) ) { + $this->current_issues = wp_list_pluck( $this->issues, 'url' ); + } + } + + /** + * Search in the issues for the given $url + * + * @param string $url Issue URL to search for. + * + * @return int|string + */ + private function get_issue_by_url( $url ) { + foreach ( $this->issues as $key => $issue ) { + if ( $url === $issue['url'] ) { + return $key; + } + } + + return false; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-mapper.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-mapper.php new file mode 100644 index 0000000..afaa104 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-mapper.php @@ -0,0 +1,112 @@ + 'web', + 'mobile' => 'mobile', + 'smartphone_only' => 'smartphoneOnly', + 'settings' => 'settings', // This one is basicly not a platform, but a tab. + ); + + /** + * The categories which can be mapped + * + * @var array + */ + private static $categories = array( + 'access_denied' => 'authPermissions', + 'faulty_redirects' => 'manyToOneRedirect', + 'not_followed' => 'notFollowed', + 'not_found' => 'notFound', + 'other' => 'other', + 'roboted' => 'roboted', + 'server_error' => 'serverError', + 'soft_404' => 'soft404', + ); + + /** + * If there is no platform, just get the first key out of the array and redirect to it. + * + * @param string $platform Platform (desktop, mobile, feature phone). + * + * @return mixed + */ + public static function get_current_platform( $platform ) { + if ( $current_platform = filter_input( INPUT_GET, $platform ) ) { + return $current_platform; + } + + wp_redirect( add_query_arg( $platform, key( self::$platforms ) ) ); + exit; + } + + /** + * Mapping the platform + * + * @param string $platform Platform (desktop, mobile, feature phone). + * + * @return mixed + */ + public static function platform_to_api( $platform ) { + if ( ! empty( $platform ) && array_key_exists( $platform, self::$platforms ) ) { + return self::$platforms[ $platform ]; + } + } + + /** + * Mapping the given platform by value and return its key + * + * @param string $platform Platform (desktop, mobile, feature phone). + * + * @return string + */ + public static function platform_from_api( $platform ) { + if ( ! empty( $platform ) && $platform = array_search( $platform, self::$platforms ) ) { + return $platform; + } + + return $platform; + } + + /** + * Mapping the given category by searching for its key. + * + * @param string $category Issue type. + * + * @return mixed + */ + public static function category_to_api( $category ) { + if ( ! empty( $category ) && array_key_exists( $category, self::$categories ) ) { + return self::$categories[ $category ]; + } + + return $category; + } + + /** + * Mapping the given category by value and return its key + * + * @param string $category Issue type. + * + * @return string + */ + public static function category_from_api( $category ) { + if ( ! empty( $category ) && $category = array_search( $category, self::$categories ) ) { + return $category; + } + + return $category; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-marker.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-marker.php new file mode 100644 index 0000000..f8ae147 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-marker.php @@ -0,0 +1,143 @@ +url = $url; + $this->result = $this->get_result(); + } + + /** + * Getting the response for the AJAX request + * + * @return string + */ + public function get_response() { + return $this->result; + } + + /** + * Setting the result, this method will check if current + * + * @return string + */ + private function get_result() { + if ( $this->can_be_marked_as_fixed() ) { + $service = new WPSEO_GSC_Service( WPSEO_GSC_Settings::get_profile() ); + + if ( $this->set_crawl_issues() && $this->send_mark_as_fixed( $service ) && $this->delete_crawl_issue() ) { + $this->update_issue_count( $service ); + + return 'true'; + } + } + + return 'false'; + } + + /** + * Check if request is valid by verifying the posted nonce and return the URL if this one is set + * + * @return bool|string + */ + private function can_be_marked_as_fixed() { + if ( $this->url !== '' ) { + return $this->url; + } + + return false; + } + + /** + * Storing the data belonging to the current issue, this data is needed in the 'mark as fixed' flow + * + * @return bool + */ + private function set_crawl_issues() { + $this->platform = filter_input( INPUT_POST, 'platform' ); + $this->category = filter_input( INPUT_POST, 'category' ); + if ( $this->platform && $this->category ) { + $this->crawl_issues = new WPSEO_GSC_Issues( $this->platform, $this->category ); + + return true; + } + + return false; + } + + /** + * Sending a request to the Google Search Console API to let them know we marked an issue as fixed. + * + * @param WPSEO_GSC_Service $service Service object instance. + * + * @return bool + */ + private function send_mark_as_fixed( WPSEO_GSC_Service $service ) { + return $service->mark_as_fixed( $this->url, $this->platform, $this->category ); + } + + /** + * Delete the crawl issue from the database + * + * @return bool + */ + private function delete_crawl_issue() { + return $this->crawl_issues->delete_issue( $this->url ); + } + + /** + * Getting the counts for current platform - category combination and update the score of it. + * + * @param WPSEO_GSC_Service $service Service object instance. + */ + private function update_issue_count( WPSEO_GSC_Service $service ) { + $counts = new WPSEO_GSC_Count( $service ); + + // Get the issues. + $total_issues = $counts->get_issue_count( $this->platform, $this->category ); + + // Lower the current count with 1. + $total_issues = ( $total_issues - 1 ); + + // And update the count. + $counts->update_issue_count( $this->platform, $this->category, $total_issues ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-platform-tabs.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-platform-tabs.php new file mode 100644 index 0000000..30a988e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-platform-tabs.php @@ -0,0 +1,94 @@ +platform_tabs(); + } + + /** + * Getting the current_tab + * + * @return string + */ + public function current_tab() { + return $this->current_tab; + } + + /** + * Loops through the array with all the platforms and convert it into an array + * + * @return string + */ + private function platform_tabs() { + $tabs = array( 'settings' => __( 'Settings', 'wordpress-seo' ) ); + + $platforms = array( + 'web' => __( 'Desktop', 'wordpress-seo' ), + 'smartphone_only' => __( 'Smartphone', 'wordpress-seo' ), + 'mobile' => __( 'Feature phone', 'wordpress-seo' ), + ); + + if ( WPSEO_GSC_Settings::get_profile() !== '' ) { + $tabs = array_merge( $platforms, $tabs ); + } + + $admin_link = admin_url( 'admin.php?page=wpseo_search_console&tab=' ); + + $this->set_current_tab( $tabs ); + + $return = ''; + + foreach ( $tabs as $platform_target => $platform_value ) { + $return .= $this->platform_tab( $platform_target, $platform_value, $admin_link ); + } + + return $return; + } + + /** + * Setting the current tab + * + * @param array $platforms Set of platforms (desktop, mobile, feature phone). + */ + private function set_current_tab( array $platforms ) { + $this->current_tab = key( $platforms ); + if ( $current_platform = filter_input( INPUT_GET, 'tab' ) ) { + $this->current_tab = $current_platform; + } + } + + /** + * Parses the tab + * + * @param string $platform_target Platform (desktop, mobile, feature phone). + * @param string $platform_value Link anchor. + * @param string $admin_link Link URL admin base. + * + * @return string + */ + private function platform_tab( $platform_target, $platform_value, $admin_link ) { + $active = ''; + if ( $this->current_tab === $platform_target ) { + $active = ' nav-tab-active'; + } + + return '' . $platform_value . ''; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-service.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-service.php new file mode 100644 index 0000000..57e3897 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-service.php @@ -0,0 +1,192 @@ +profile = $profile; + + $this->set_client(); + } + + /** + * Returns the client + * + * @return Yoast_Api_Google_Client + */ + public function get_client() { + return $this->client; + } + + /** + * Removes the option and calls the clients clear_data method to clear that one as well + */ + public function clear_data() { + // Clear client data. + $this->client->clear_data(); + } + + /** + * Get all sites that are registered in the GSC panel + * + * @return array + */ + public function get_sites() { + $sites = array(); + + $response_json = $this->client->do_request( 'sites', true ); + + // Do list sites request. + if ( ! empty( $response_json->siteEntry ) ) { + foreach ( $response_json->siteEntry as $entry ) { + $sites[ str_ireplace( 'sites/', '', (string) $entry->siteUrl ) ] = (string) $entry->siteUrl; + } + + // Sorting the retrieved sites. + asort( $sites ); + } + + return $sites; + } + + /** + * Get crawl issues + * + * @return array + */ + public function get_crawl_issue_counts() { + // Setup crawl error list. + $crawl_error_counts = $this->get_crawl_error_counts( $this->profile ); + + $return = array(); + if ( ! empty( $crawl_error_counts->countPerTypes ) ) { + foreach ( $crawl_error_counts->countPerTypes as $category ) { + $return[ $category->platform ][ $category->category ] = array( + 'count' => $category->entries[0]->count, + 'last_fetch' => null, + ); + } + } + + return $return; + } + + /** + * Sending request to mark issue as fixed + * + * @param string $url Issue URL. + * @param string $platform Platform (desktop, mobile, feature phone). + * @param string $category Issue type. + * + * @return bool + */ + public function mark_as_fixed( $url, $platform, $category ) { + $response = $this->client->do_request( 'sites/' . urlencode( $this->profile ) . '/urlCrawlErrorsSamples/' . urlencode( ltrim( $url, '/' ) ) . '?category=' . WPSEO_GSC_Mapper::category_to_api( $category ) . '&platform=' . WPSEO_GSC_Mapper::platform_to_api( $platform ) . '', false, 'DELETE' ); + return ( $response->getResponseHttpCode() === 204 ); + } + + /** + * Fetching the issues from the GSC API + * + * @param string $platform Platform (desktop, mobile, feature phone). + * @param string $category Issue type. + * + * @return mixed + */ + public function fetch_category_issues( $platform, $category ) { + $issues = $this->client->do_request( + 'sites/' . urlencode( $this->profile ) . '/urlCrawlErrorsSamples?category=' . $category . '&platform=' . $platform, + true + ); + + if ( ! empty( $issues->urlCrawlErrorSample ) ) { + return $issues->urlCrawlErrorSample; + } + } + + /** + * Setting the GSC client + */ + private function set_client() { + try { + new Yoast_Api_Libs( '2.0' ); + } + catch ( Exception $exception ) { + if ( $exception->getMessage() === 'required_version' ) { + $this->incompatible_api_libs( + __( 'Yoast plugins share some code between them to make your site faster. As a result of that, we need all Yoast plugins to be up to date. We\'ve detected this isn\'t the case, so please update the Yoast plugins that aren\'t up to date yet.', 'wordpress-seo' ) + ); + } + } + + if ( class_exists( 'Yoast_Api_Google_Client' ) === false ) { + $this->incompatible_api_libs( + /* translators: %1$s expands to Yoast SEO, %2$s expands to Google Analytics by Yoast */ + sprintf( + __( + '%1$s detected you’re using a version of %2$s which is not compatible with %1$s. Please update %2$s to the latest version to use this feature.', + 'wordpress-seo' + ), + 'Yoast SEO', + 'Google Analytics by Yoast' + ) + ); + + wp_redirect( admin_url( 'admin.php?page=' . WPSEO_Admin::PAGE_IDENTIFIER ) ); + exit; + } + + $this->client = new Yoast_Api_Google_Client( WPSEO_GSC_Config::$gsc, 'wpseo-gsc', 'https://www.googleapis.com/webmasters/v3/' ); + } + + /** + * Adding notice that the api libs has the wrong version + * + * @param string $notice Message string. + */ + private function incompatible_api_libs( $notice ) { + Yoast_Notification_Center::get()->add_notification( + new Yoast_Notification( $notice, array( 'type' => Yoast_Notification::ERROR ) ) + ); + } + + /** + * Getting the crawl error counts + * + * @param string $profile Profile name string. + * + * @return object|bool + */ + private function get_crawl_error_counts( $profile ) { + $crawl_error_counts = $this->client->do_request( + 'sites/' . urlencode( $profile ) . '/urlCrawlErrorsCounts/query', + true + ); + + if ( ! empty( $crawl_error_counts ) ) { + return $crawl_error_counts; + } + + return false; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-settings.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-settings.php new file mode 100644 index 0000000..1a3f343 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-settings.php @@ -0,0 +1,102 @@ +clear_data(); + } + + /** + * Reloading all the issues + */ + public static function reload_issues() { + // Remove issue and issue counts. + self::remove(); + } + + /** + * When authorization is successful return true, otherwise false + * + * @param string $authorization_code Code to validate. + * @param Yoast_Api_Google_Client $client Client object instance. + * + * @return bool + */ + public static function validate_authorization( $authorization_code, Yoast_Api_Google_Client $client ) { + return ( $authorization_code !== '' && $client->authenticate_client( $authorization_code ) ); + } + + /** + * Get the GSC profile + * + * @return string + */ + public static function get_profile() { + // Get option. + $option = get_option( WPSEO_GSC::OPTION_WPSEO_GSC, array( 'profile' => '' ) ); + + // Set the profile. + $profile = ''; + if ( ! empty( $option['profile'] ) ) { + $profile = $option['profile']; + } + + // Return the profile. + return trim( $profile, '/' ); + } + + /** + * Removes the issue counts and all the issues from the options + */ + private static function remove() { + // Remove the issue counts from the options. + self::remove_issue_counts(); + + // Removing all issues from the database. + self::remove_issues(); + } + + /** + * Remove the issue counts + */ + private static function remove_issue_counts() { + // Remove the options which are holding the counts. + delete_option( WPSEO_GSC_Count::OPTION_CI_COUNTS ); + delete_option( WPSEO_GSC_Count::OPTION_CI_LAST_FETCH ); + } + + /** + * Delete the issues and their meta data from the database + */ + private static function remove_issues() { + global $wpdb; + + // Remove local crawl issues by running a delete query. + $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE 'wpseo-gsc-issues-%'" ); + } + + /** + * Removes the options for GSC + */ + private static function remove_gsc_option() { + delete_option( WPSEO_GSC::OPTION_WPSEO_GSC ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-table.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-table.php new file mode 100644 index 0000000..01ae5c2 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc-table.php @@ -0,0 +1,385 @@ + 300, + 'no_premium' => 140, + 'already_exists' => 160, + ); + + /** + * Search Console table class constructor (subclasses list table). + * + * @param string $platform Platform (desktop, mobile, feature phone). + * @param string $category Type of the issues. + * @param array $items Set of the issues to display. + */ + public function __construct( $platform, $category, array $items ) { + parent::__construct(); + + // Adding the thickbox. + add_thickbox(); + + // Set search string. + if ( ( $search_string = filter_input( INPUT_GET, 's' ) ) != '' ) { + $this->search_string = $search_string; + } + + $this->current_view = $category; + + // Set the crawl issue source. + $this->show_fields( $platform ); + + $this->items = $items; + } + + /** + * Getting the screen id from this table + * + * @return string + */ + public function get_screen_id() { + return $this->screen->id; + } + + /** + * Setup the table variables, fetch the items from the database, search, sort and format the items. + */ + public function prepare_items() { + // Get variables needed for pagination. + $this->per_page = $this->get_items_per_page( 'errors_per_page', $this->per_page ); + $this->current_page = intval( ( $paged = filter_input( INPUT_GET, 'paged' ) ) ? $paged : 1 ); + + $this->setup_columns(); + $this->views(); + $this->parse_items(); + } + + /** + * Set the table columns + * + * @return array + */ + public function get_columns() { + $columns = array( + 'cb' => '', + 'url' => __( 'URL', 'wordpress-seo' ), + 'last_crawled' => __( 'Last crawled', 'wordpress-seo' ), + 'first_detected' => __( 'First detected', 'wordpress-seo' ), + 'response_code' => __( 'Response code', 'wordpress-seo' ), + ); + + return $columns; + } + + /** + * Return the columns that are sortable + * + * @return array + */ + protected function get_sortable_columns() { + $sortable_columns = array( + 'url' => array( 'url', false ), + 'last_crawled' => array( 'last_crawled', false ), + 'first_detected' => array( 'first_detected', false ), + 'response_code' => array( 'response_code', false ), + ); + + return $sortable_columns; + } + + /** + * Return available bulk actions + * + * @return array + */ + protected function get_bulk_actions() { + return array( + 'mark_as_fixed' => __( 'Mark as fixed', 'wordpress-seo' ), + ); + } + + /** + * Default method to display a column + * + * @param array $item Data array. + * @param string $column_name Column name key. + * + * @return mixed + */ + protected function column_default( $item, $column_name ) { + return $item[ $column_name ]; + } + + /** + * Checkbox column + * + * @param array $item Item data array. + * + * @return string + */ + protected function column_cb( $item ) { + return sprintf( + '', $item['url'] + ); + } + + /** + * Formatting the output of the column last crawled into a dateformat + * + * @param array $item Item data array. + * + * @return string + */ + protected function column_last_crawled( $item ) { + return date_i18n( get_option( 'date_format' ), strtotime( $item['last_crawled'] ) ); + } + + /** + * Formatting the output of the column first detected into a dateformat + * + * @param array $item Item data array. + * + * @return string + */ + protected function column_first_detected( $item ) { + return date_i18n( get_option( 'date_format' ), strtotime( $item['first_detected'] ) ); + } + + /** + * URL column + * + * @param array $item Item data array. + * + * @return string + */ + protected function column_url( $item ) { + $actions = array(); + + if ( $this->can_create_redirect() ) { + /** + * Modal box + */ + $modal_height = $this->modal_box( $item['url'] ); + + $actions['create_redirect'] = '' . __( 'Create redirect', 'wordpress-seo' ) . ''; + } + + $actions['view'] = '' . __( 'View', 'wordpress-seo' ) . ''; + $actions['markasfixed'] = '' . __( 'Mark as fixed', 'wordpress-seo' ) . ''; + + return sprintf( + '%1$s %2$s', + $item['url'], + $this->row_actions( $actions ) + ); + } + + /** + * Running the setup of the columns + */ + private function setup_columns() { + $this->_column_headers = array( $this->get_columns(), array(), $this->get_sortable_columns() ); + } + + /** + * Check if the current category allow creating redirects + * + * @return bool + */ + private function can_create_redirect() { + return in_array( $this->current_view, array( 'soft_404', 'not_found', 'access_denied' ) ); + } + + /** + * Setting the table navigation + * + * @param int $total_items Total number of items. + * @param int $posts_per_page Number of items per page. + */ + private function set_pagination( $total_items, $posts_per_page ) { + $this->set_pagination_args( array( + 'total_items' => $total_items, + 'total_pages' => ceil( ( $total_items / $posts_per_page ) ), + 'per_page' => $posts_per_page, + ) ); + } + + /** + * Setting the items + */ + private function parse_items() { + if ( is_array( $this->items ) && count( $this->items ) > 0 ) { + if ( ! empty( $this->search_string ) ) { + $this->do_search(); + } + + $this->set_pagination( count( $this->items ), $this->per_page ); + + $this->sort_items(); + $this->paginate_items(); + } + } + + /** + * Search through the items + */ + private function do_search() { + $results = array(); + + foreach ( $this->items as $item ) { + foreach ( $item as $value ) { + if ( stristr( $value, $this->search_string ) !== false ) { + $results[] = $item; + continue; + } + } + } + + $this->items = $results; + } + + /** + * Running the pagination + */ + private function paginate_items() { + // Setting the starting point. If starting point is below 1, overwrite it with value 0, otherwise it will be sliced of at the back. + $slice_start = ( $this->current_page - 1 ); + if ( $slice_start < 0 ) { + $slice_start = 0; + } + + // Apply 'pagination'. + $this->items = array_slice( $this->items, ( $slice_start * $this->per_page ), $this->per_page ); + } + + /** + * Sort the items by callback + */ + private function sort_items() { + // Sort the results. + usort( $this->items, array( $this, 'do_reorder' ) ); + } + + /** + * Doing the sorting of the issues + * + * @param array $a First data set for comparison. + * @param array $b Second data set for comparison. + * + * @return int + */ + private function do_reorder( $a, $b ) { + // If no sort, default to title. + $orderby = ( $orderby = filter_input( INPUT_GET, 'orderby' ) ) ? $orderby : 'url'; + + // If no order, default to asc. + $order = ( $order = filter_input( INPUT_GET, 'order' ) ) ? $order : 'asc'; + + // When there is a raw field of it, sort by this field. + if ( array_key_exists( $orderby . '_raw', $a ) && array_key_exists( $orderby . '_raw', $b ) ) { + $orderby = $orderby . '_raw'; + } + + // Determine sort order. + $result = strcmp( $a[ $orderby ], $b[ $orderby ] ); + + // Send final sort direction to usort. + return ( $order === 'asc' ) ? $result : ( - $result ); + } + + /** + * Modal box + * + * @param string $url URL string. + * + * @return string + */ + private function modal_box( $url ) { + $current_redirect = false; + $view_type = $this->modal_box_type( $url, $current_redirect ); + + require WPSEO_PATH . '/admin/google_search_console/views/gsc-create-redirect.php'; + + return $view_type; + } + + /** + * Determine which model box type should be rendered + * + * @param string $url URL string. + * @param string $current_redirect Current redirect by reference. + * + * @return string + */ + private function modal_box_type( $url, &$current_redirect ) { + if ( defined( 'WPSEO_PREMIUM_FILE' ) && class_exists( 'WPSEO_Redirect_Manager' ) ) { + static $redirect_manager; + + if ( ! $redirect_manager ) { + $redirect_manager = new WPSEO_Redirect_Manager(); + } + + if ( $current_redirect = $redirect_manager->get_redirect( $url ) ) { + return 'already_exists'; + } + + return 'create'; + } + + return 'no_premium'; + } + + + /** + * Showing the hidden fields used by the AJAX requests + * + * @param string $platform Platform (desktop, mobile, feature phone). + */ + private function show_fields( $platform ) { + echo ""; + echo ""; + echo ""; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc.php new file mode 100644 index 0000000..b3979f5 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc.php @@ -0,0 +1,310 @@ +set_hooks(); + $this->set_dependencies(); + $this->request_handler(); + } + + add_action( 'admin_init', array( $this, 'register_gsc_notification' ) ); + add_action( 'admin_init', array( $this, 'register_settings' ) ); + } + + /** + * If the Google Search Console has no credentials, add a notification for the user to give him a heads up. This message is dismissable. + */ + public function register_gsc_notification() { + + $notification = $this->get_profile_notification(); + $notification_center = Yoast_Notification_Center::get(); + + if ( WPSEO_GSC_Settings::get_profile() === '' ) { + $notification_center->add_notification( $notification ); + } + else { + $notification_center->remove_notification( $notification ); + } + } + + /** + * Builds the notification used when GSC is not connected to a profile + * + * @return Yoast_Notification + */ + private function get_profile_notification() { + return new Yoast_Notification( + sprintf( + __( 'Don\'t miss your crawl errors: %1$sconnect with Google Search Console here%2$s.', 'wordpress-seo' ), + '', + '' + ), + array( + 'type' => Yoast_Notification::WARNING, + 'id' => 'wpseo-dismiss-gsc', + 'capabilities' => 'manage_options', + ) + ); + } + + /** + * Be sure the settings will be registered, so data can be stored + */ + public function register_settings() { + register_setting( 'yoast_wpseo_gsc_options', self::OPTION_WPSEO_GSC ); + } + + /** + * Function that outputs the redirect page + */ + public function display() { + require_once WPSEO_PATH . '/admin/google_search_console/views/gsc-display.php'; + } + + /** + * Display the table + */ + public function display_table() { + // The list table. + $list_table = new WPSEO_GSC_Table( $this->platform, $this->category, $this->issue_fetch->get_issues() ); + + // Adding filter to display the category filters. + add_filter( 'views_' . $list_table->get_screen_id(), array( $this->category_filter, 'as_array' ) ); + + // Preparing and displaying the table. + $list_table->prepare_items(); + $list_table->search_box( __( 'Search', 'wordpress-seo' ), 'wpseo-crawl-issues-search' ); + $list_table->display(); + } + + /** + * Load the admin redirects scripts + */ + public function page_scripts() { + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_script( 'admin-gsc' ); + $asset_manager->enqueue_style( 'metabox-css' ); + add_screen_option( 'per_page', array( + 'label' => __( 'Crawl errors per page', 'wordpress-seo' ), + 'default' => 50, + 'option' => 'errors_per_page', + ) ); + } + + /** + * Set the screen options + * + * @param string $status Status string. + * @param string $option Option key. + * @param string $value Value to return. + * + * @return mixed + */ + public function set_screen_option( $status, $option, $value ) { + if ( 'errors_per_page' == $option ) { + return $value; + } + } + + /** + * Setting the hooks to be load on page request + */ + private function set_hooks() { + add_action( 'admin_enqueue_scripts', array( $this, 'page_scripts' ) ); + add_filter( 'set-screen-option', array( $this, 'set_screen_option' ), 11, 3 ); + } + + /** + * Handles the POST and GET requests + */ + private function request_handler() { + + // List the table search post to a get. + $this->list_table_search_post_to_get(); + + // Catch the authorization code POST. + $this->catch_authentication_post(); + + // Is there a reset post than we will remove the posts and data. + if ( filter_input( INPUT_GET, 'gsc_reset' ) ) { + // Clear the google data. + WPSEO_GSC_Settings::clear_data( $this->service ); + + // Adding notification to the notification center. + /* Translators: %1$s: expands to Google Search Console. */ + $this->add_notification( sprintf( __( 'The %1$s data has been removed. You will have to reauthenticate if you want to retrieve the data again.', 'wordpress-seo' ), 'Google Search Console' ), Yoast_Notification::UPDATED ); + + // Directly output the notifications. + wp_redirect( remove_query_arg( 'gsc_reset' ) ); + exit; + } + + // Reloads al the issues. + if ( wp_verify_nonce( filter_input( INPUT_POST, 'reload-crawl-issues-nonce' ), 'reload-crawl-issues' ) && filter_input( INPUT_POST, 'reload-crawl-issues' ) ) { + // Reloading all the issues. + WPSEO_GSC_Settings::reload_issues(); + + // Adding the notification. + $this->add_notification( __( 'The issues have been successfully reloaded!', 'wordpress-seo' ), Yoast_Notification::UPDATED ); + + // Directly output the notifications. + Yoast_Notification_Center::get()->display_notifications(); + } + + // Catch bulk action request. + new WPSEO_GSC_Bulk_Action(); + } + + /** + * Catch the redirects search post and redirect it to a search get + */ + private function list_table_search_post_to_get() { + $search_string = filter_input( INPUT_POST, 's' ); + + if ( $search_string === null ) { + return; + } + + // When there is nothing being search and there is no search param in the url, break this method. + if ( $search_string === '' && filter_input( INPUT_GET, 's' ) === null ) { + return; + } + + $url = ( $search_string !== '' ) ? add_query_arg( 's', $search_string ) : remove_query_arg( 's' ); + + // Do the redirect. + wp_redirect( $url ); + exit; + + } + + /** + * Catch the authentication post + */ + private function catch_authentication_post() { + $gsc_values = filter_input( INPUT_POST, 'gsc', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ); + // Catch the authorization code POST. + if ( ! empty( $gsc_values['authorization_code'] ) && wp_verify_nonce( $gsc_values['gsc_nonce'], 'wpseo-gsc_nonce' ) ) { + if ( ! WPSEO_GSC_Settings::validate_authorization( trim( $gsc_values['authorization_code'] ), $this->service->get_client() ) ) { + $this->add_notification( __( 'Incorrect Google Authorization Code.', 'wordpress-seo' ), Yoast_Notification::ERROR ); + } + + // Redirect user to prevent a post resubmission which causes an oauth error. + wp_redirect( admin_url( 'admin.php' ) . '?page=' . esc_attr( filter_input( INPUT_GET, 'page' ) ) . '&tab=settings' ); + exit; + } + } + + /** + * Adding notification to the yoast notification center + * + * @param string $message Message string. + * @param string $type Message type. + */ + private function add_notification( $message, $type ) { + Yoast_Notification_Center::get()->add_notification( + new Yoast_Notification( $message, array( 'type' => $type ) ) + ); + } + + /** + * Setting dependencies which will be used one this page + */ + private function set_dependencies() { + // Setting the service object. + $this->service = new WPSEO_GSC_Service( WPSEO_GSC_Settings::get_profile() ); + + // Setting the platform. + $this->platform = WPSEO_GSC_Mapper::get_current_platform( 'tab' ); + + // Loading the issue counter. + $issue_count = new WPSEO_GSC_Count( $this->service ); + $issue_count->fetch_counts(); + + // Loading the category filters. + $this->category_filter = new WPSEO_GSC_Category_Filters( $issue_count->get_platform_counts( $this->platform ) ); + + // Setting the current category. + $this->category = $this->category_filter->get_category(); + + // Listing the issues. + $issue_count->list_issues( $this->platform, $this->category ); + + // Fetching the issues. + $this->issue_fetch = new WPSEO_GSC_Issues( $this->platform, $this->category, $issue_count->get_issues() ); + } + + /** + * Setting the tab help on top of the screen + */ + public function set_help() { + $screen = get_current_screen(); + + $screen->add_help_tab( + array( + 'id' => 'basic-help', + 'title' => __( 'Issue categories', 'wordpress-seo' ), + 'content' => '

    ' . __( 'Desktop', 'wordpress-seo' ) . '
    ' . __( 'Errors that occurred when your site was crawled by Googlebot.', 'wordpress-seo' ) . '

    ' + . '

    ' . __( 'Smartphone', 'wordpress-seo' ) . '
    ' . __( 'Errors that occurred only when your site was crawled by Googlebot-Mobile (errors didn\'t appear for desktop).', 'wordpress-seo' ) . '

    ' + . '

    ' . __( 'Feature phone', 'wordpress-seo' ) . '
    ' . __( 'Errors that only occurred when your site was crawled by Googlebot for feature phones (errors didn\'t appear for desktop).', 'wordpress-seo' ) . '

    ', + ) + ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/views/gsc-create-redirect.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/views/gsc-create-redirect.php new file mode 100644 index 0000000..393711a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/views/gsc-create-redirect.php @@ -0,0 +1,76 @@ + + diff --git a/wp-content/plugins/wordpress-seo/admin/google_search_console/views/gsc-display.php b/wp-content/plugins/wordpress-seo/admin/google_search_console/views/gsc-display.php new file mode 100644 index 0000000..31cbd5d --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/google_search_console/views/gsc-display.php @@ -0,0 +1,124 @@ +admin_header( false, 'wpseo-gsc', false, 'yoast_wpseo_gsc_options' ); + +if ( defined( 'WP_DEBUG' ) && WP_DEBUG && WPSEO_GSC_Settings::get_profile() !== '' ) { ?> +
    + ' /> + +
    + + + + +service->get_client()->getAccessToken() ) { + $video_url = 'https://yoa.st/screencast-search-console'; +} +else { + $video_url = 'https://yoa.st/screencast-connect-search-console'; +} + +$tab = new WPSEO_Option_Tab( 'GSC', __( 'Google Search Console' ), array( 'video_url' => $video_url ) ); +$GSCHelpCenter = new WPSEO_Help_Center( 'google-search-console', $tab ); +$GSCHelpCenter->output_help_center(); + +switch ( $platform_tabs->current_tab() ) { + case 'settings' : + // Check if there is an access token. + if ( null === $this->service->get_client()->getAccessToken() ) { + // Print auth screen. + echo '

    '; + /* Translators: %1$s: expands to Yoast SEO, %2$s expands to Google Search Console. */ + echo sprintf( __( 'To allow %1$s to fetch your %2$s information, please enter your Google Authorization Code. Clicking the button below will open a new window.', 'wordpress-seo' ), 'Yoast SEO', 'Google Search Console' ); + echo "

    \n"; + echo ''; + echo "\n"; + + echo '

    ' . __( 'Enter your Google Authorization Code and press the Authenticate button.', 'wordpress-seo' ) . "

    \n"; + echo "
    \n"; + echo ""; + echo ""; + echo ""; + echo "
    \n"; + } + else { + $reset_button = '' . __( 'Reauthenticate with Google ', 'wordpress-seo' ) . ''; + echo '

    ', __( 'Current profile', 'wordpress-seo' ), '

    '; + if ( ($profile = WPSEO_GSC_Settings::get_profile() ) !== '' ) { + echo '

    '; + echo $profile; + echo '

    '; + + echo '

    '; + echo $reset_button; + echo '

    '; + + } + else { + echo "
    "; + + settings_fields( 'yoast_wpseo_gsc_options' ); + Yoast_Form::get_instance()->set_option( 'wpseo-gsc' ); + + echo '

    '; + if ( $profiles = $this->service->get_sites() ) { + $show_save = true; + echo Yoast_Form::get_instance()->select( 'profile', __( 'Profile', 'wordpress-seo' ), $profiles ); + } + else { + $show_save = false; + echo __( 'There were no profiles found', 'wordpress-seo' ); + } + echo '

    '; + + echo '

    '; + + if ( $show_save ) { + echo ' ' . __( 'or', 'wordpress-seo' ) , ' '; + } + echo $reset_button; + echo '

    '; + echo '
    '; + } + } + break; + + default : + $form_action_url = add_query_arg( 'page', esc_attr( filter_input( INPUT_GET, 'page' ) ) ); + + get_current_screen()->set_screen_reader_content( array( + // There are no views links in this screen, so no need for the views heading. + 'heading_views' => null, + 'heading_pagination' => __( 'Crawl issues list navigation', 'wordpress-seo' ), + 'heading_list' => __( 'Crawl issues list', 'wordpress-seo' ), + ) ); + + // Open
    . + echo "\n"; + + // AJAX nonce. + echo "\n"; + + $this->display_table(); + + // Close . + echo "
    \n"; + + break; +} +?> +
    +admin_footer( false ); diff --git a/wp-content/plugins/wordpress-seo/admin/import/class-import-aioseo-hooks.php b/wp-content/plugins/wordpress-seo/admin/import/class-import-aioseo-hooks.php new file mode 100644 index 0000000..739eccf --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/import/class-import-aioseo-hooks.php @@ -0,0 +1,39 @@ + wp_create_nonce( 'wpseo-import' ) ), admin_url( 'admin.php?page=wpseo_tools&tool=import-export&import=1&importaioseo=1#top#import-seo' ) ); + echo '

    ', sprintf( esc_html__( 'The plugin All-In-One-SEO has been detected. Do you want to %simport its settings%s?', 'wordpress-seo' ), sprintf( '', esc_url( $url ) ), '' ), '

    '; + } + + /** + * Throw a notice to inform the user that the plugin has been deactivated + * + * @since 3.0 + */ + public function show_deactivate_notice() { + echo '

    ', esc_html__( 'All-In-One-SEO has been deactivated', 'wordpress-seo' ), '

    '; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/import/class-import-hooks.php b/wp-content/plugins/wordpress-seo/admin/import/class-import-hooks.php new file mode 100644 index 0000000..7c59f32 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/import/class-import-hooks.php @@ -0,0 +1,89 @@ +is_active() ) { + $this->show_import_message(); + $this->show_deactivate_message(); + } + } + + /** + * Handle deactivation & import of the data data + * + * @since 3.0 + */ + public function show_import_message() { + if ( filter_input( INPUT_GET, 'tool' ) !== 'import-export' ) { + add_action( 'admin_notices', array( $this, 'show_import_settings_notice' ) ); + } + } + + /** + * Handle deactivation of the plugin + * + * @since 3.0 + */ + public function show_deactivate_message() { + if ( filter_input( INPUT_GET, $this->deactivation_listener ) === '1' ) { + // Deactivate AIO. + deactivate_plugins( $this->plugin_file ); + + // Show notice that aioseo has been deactivated. + add_action( 'admin_notices', array( $this, 'show_deactivate_notice' ) ); + + // Clean up the referrer url for later use. + if ( isset( $_SERVER['REQUEST_URI'] ) ) { + $_SERVER['REQUEST_URI'] = remove_query_arg( array( $this->deactivation_listener ), sanitize_text_field( $_SERVER['REQUEST_URI'] ) ); + } + } + } + + /** + * Check if the plugin is active. + * + * @return bool + */ + protected function is_active() { + return is_plugin_active( $this->plugin_file ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/import/class-import-wpseo-hooks.php b/wp-content/plugins/wordpress-seo/admin/import/class-import-wpseo-hooks.php new file mode 100644 index 0000000..a37ba99 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/import/class-import-wpseo-hooks.php @@ -0,0 +1,39 @@ + wp_create_nonce( 'wpseo-import' ) ), admin_url( 'admin.php?page=wpseo_tools&tool=import-export&import=1&importwpseo=1#top#import-seo' ) ); + echo '

    ', sprintf( esc_html__( 'The plugin wpSEO has been detected. Do you want to %simport its settings%s?', 'wordpress-seo' ), sprintf( '', esc_url( $url ) ), '' ), '

    '; + } + + /** + * Throw a notice to inform the user wpSEO has been deactivated + * + * @since 3.0 + */ + public function show_deactivate_notice() { + echo '

    ', esc_html__( 'wpSEO has been deactivated', 'wordpress-seo' ), '

    '; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/index.php b/wp-content/plugins/wordpress-seo/admin/index.php new file mode 100644 index 0000000..e94d9a4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/index.php @@ -0,0 +1,4 @@ + +
  • + +
  • + + Yoast SEO Premium', + 'yoast.com' ); + $premium_popup = new WPSEO_Premium_Popup( 'add-keyword', 'h1', $popup_title, $popup_content ); + echo $premium_popup->get_premium_message(); + + return ob_get_clean(); + } + + /** + * Returns an empty string because this tab has no content + * + * @return string + */ + public function content() { + return ''; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-addon-section.php b/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-addon-section.php new file mode 100644 index 0000000..3f783c9 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-addon-section.php @@ -0,0 +1,37 @@ + +
    +
    +
      + +
    +
    + +
    + is_globally_enabled() && $this->is_user_enabled(); + } + + /** + * Whether or not this analysis is enabled by the user. + * + * @return bool Whether or not this analysis is enabled by the user. + */ + public function is_user_enabled() { + return ! get_the_author_meta( 'wpseo_content_analysis_disable', get_current_user_id() ); + } + + /** + * Whether or not this analysis is enabled globally. + * + * @return bool Whether or not this analysis is enabled globally. + */ + public function is_globally_enabled() { + $options = WPSEO_Options::get_option( 'wpseo_titles' ); + + return (bool) $options['content-analysis-active']; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-seo.php b/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-seo.php new file mode 100644 index 0000000..45b91ca --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-seo.php @@ -0,0 +1,39 @@ +is_globally_enabled() && $this->is_user_enabled(); + } + + /** + * Whether or not this analysis is enabled by the user. + * + * @return bool Whether or not this analysis is enabled by the user. + */ + public function is_user_enabled() { + return ! get_the_author_meta( 'wpseo_keyword_analysis_disable', get_current_user_id() ); + } + + /** + * Whether or not this analysis is enabled globally. + * + * @return bool Whether or not this analysis is enabled globally. + */ + public function is_globally_enabled() { + $options = WPSEO_Options::get_option( 'wpseo_titles' ); + + return (bool) $options['keyword-analysis-active']; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-editor.php b/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-editor.php new file mode 100644 index 0000000..1c2bdb9 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-editor.php @@ -0,0 +1,64 @@ +special_styles(); + /** @var WPSEO_Admin_Asset $inside_editor */ + $inside_editor = $styles['inside-editor']; + + $url = $inside_editor->get_url( WPSEO_Admin_Asset::TYPE_CSS, WPSEO_FILE ); + + if ( '' === $css_files ) { + $css_files = $url; + } + else { + $css_files .= ',' . $url; + } + + return $css_files; + } + + /** + * Adds a custom element to the tinyMCE editor that we need for marking the content. + * + * @param array $tinymce_config The tinyMCE config as configured by WordPress. + * + * @return array The new tinyMCE config with our added custom elements. + */ + public function add_custom_element( $tinymce_config ) { + if ( ! empty( $tinymce_config['custom_elements'] ) ) { + $custom_elements = $tinymce_config['custom_elements']; + + $custom_elements .= ',' . '~yoastmark'; + } + else { + $custom_elements = '~yoastmark'; + } + + $tinymce_config['custom_elements'] = $custom_elements; + + return $tinymce_config; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-form-tab.php b/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-form-tab.php new file mode 100644 index 0000000..0578379 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-form-tab.php @@ -0,0 +1,115 @@ + '', + 'link_class' => '', + 'link_title' => '', + 'link_aria_label' => '', + 'single' => false, + ); + $options = array_merge( $default_options, $options ); + + $this->name = $name; + $this->content = $content; + $this->link_content = $link_content; + $this->tab_class = $options['tab_class']; + $this->link_class = $options['link_class']; + $this->link_title = $options['link_title']; + $this->link_aria_label = $options['link_aria_label']; + $this->single = $options['single']; + } + + /** + * Returns the html for the tab link. + * + * @return string + */ + public function link() { + + $html = '
  • %6$s
  • '; + + if ( $this->single ) { + $html = '
  • %6$s
  • '; + } + + return sprintf( + $html, + esc_attr( $this->name ), + ( '' !== $this->tab_class ) ? ' ' . esc_attr( $this->tab_class ) : '', + ( '' !== $this->link_class ) ? ' ' . esc_attr( $this->link_class ) : '', + ( '' !== $this->link_title ) ? ' title="' . esc_attr( $this->link_title ) . '"' : '', + ( '' !== $this->link_aria_label ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '', + $this->link_content + ); + } + + /** + * Returns the html for the tab content. + * + * @return string + */ + public function content() { + return sprintf( + '
    %2$s
    ', + esc_attr( $this->name ), + $this->content + ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-tab-section.php b/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-tab-section.php new file mode 100644 index 0000000..e49e97a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-tab-section.php @@ -0,0 +1,140 @@ + '', + 'link_class' => '', + 'link_aria_label' => '', + ); + $options = array_merge( $default_options, $options ); + + $this->name = $name; + foreach ( $tabs as $tab ) { + $this->add_tab( $tab ); + } + $this->link_content = $link_content; + $this->link_title = $options['link_title']; + $this->link_class = $options['link_class']; + $this->link_aria_label = $options['link_aria_label']; + } + + /** + * Outputs the section link if any tab has been added. + */ + public function display_link() { + if ( $this->has_tabs() ) { + printf( + '
  • %5$s
  • ', + esc_attr( $this->name ), + esc_attr( $this->link_class ), + ( '' !== $this->link_title ) ? ' title="' . esc_attr( $this->link_title ) . '"' : '', + ( '' !== $this->link_aria_label ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '', + $this->link_content + ); + } + } + + /** + * Outputs the section content if any tab has been added. + */ + public function display_content() { + if ( $this->has_tabs() ) { + $html = '
    '; + $html .= '
    '; + $html .= '
      %2$s
    %3$s'; + $html .= '
    '; + + printf( $html, esc_attr( $this->name ), $this->tab_links(), $this->tab_content() ); + } + } + + /** + * Add a `WPSEO_Metabox_Tab` object to the tabs. + * + * @param WPSEO_Metabox_Tab $tab Tab to add. + */ + public function add_tab( WPSEO_Metabox_Tab $tab ) { + $this->tabs[] = $tab; + } + + /** + * Checks if any tabs have been added to the section. + * + * @return bool + */ + protected function has_tabs() { + return ! empty( $this->tabs ); + } + + /** + * Concatenates all tabs' links into one html string. + * + * @return string + */ + private function tab_links() { + $links = ''; + foreach ( $this->tabs as $tab ) { + $links .= $tab->link(); + } + return $links; + } + + /** + * Concatenates all tabs' content into one html string. + * + * @return string + */ + private function tab_content() { + $content = ''; + foreach ( $this->tabs as $tab ) { + $content .= $tab->content(); + } + return $content; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox.php b/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox.php new file mode 100644 index 0000000..7ab67c2 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox.php @@ -0,0 +1,1682 @@ +options = WPSEO_Options::get_options( array( 'wpseo', 'wpseo_social' ) ); + + // Check if one of the social settings is checked in the options, if so, initialize the social_admin object. + if ( $this->options['opengraph'] === true || $this->options['twitter'] === true ) { + $this->social_admin = new WPSEO_Social_Admin( $this->options ); + } + + $this->editor = new WPSEO_Metabox_Editor(); + $this->editor->register_hooks(); + + $this->analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + $this->analysis_readability = new WPSEO_Metabox_Analysis_Readability(); + } + + /** + * Translate text strings for use in the meta box + * + * IMPORTANT: if you want to add a new string (option) somewhere, make sure you add that array key to + * the main meta box definition array in the class WPSEO_Meta() as well!!!! + */ + public static function translate_meta_boxes() { + self::$meta_fields['general']['snippetpreview']['title'] = __( 'Snippet editor', 'wordpress-seo' ); + self::$meta_fields['general']['snippetpreview']['help'] = sprintf( __( 'This is a rendering of what this post might look like in Google\'s search results. %sLearn more about the Snippet Preview%s.', 'wordpress-seo' ), '', '' ); + self::$meta_fields['general']['snippetpreview']['help-button'] = __( 'Show information about the snippet editor', 'wordpress-seo' ); + + self::$meta_fields['general']['pageanalysis']['title'] = __( 'Analysis', 'wordpress-seo' ); + self::$meta_fields['general']['pageanalysis']['help'] = sprintf( __( 'This is the content analysis, a collection of content checks that analyze the content of your page. %sLearn more about the Content Analysis Tool%s.', 'wordpress-seo' ), '', '' ); + self::$meta_fields['general']['pageanalysis']['help-button'] = __( 'Show information about the content analysis', 'wordpress-seo' ); + + self::$meta_fields['general']['focuskw_text_input']['title'] = __( 'Focus keyword', 'wordpress-seo' ); + self::$meta_fields['general']['focuskw_text_input']['label'] = __( 'Enter a focus keyword', 'wordpress-seo' ); + self::$meta_fields['general']['focuskw_text_input']['help'] = sprintf( __( 'Pick the main keyword or keyphrase that this post/page is about. %sLearn more about the Focus Keyword%s.', 'wordpress-seo' ), '', '' ); + self::$meta_fields['general']['focuskw_text_input']['help-button'] = __( 'Show information about the focus keyword', 'wordpress-seo' ); + + self::$meta_fields['general']['title']['title'] = __( 'SEO title', 'wordpress-seo' ); + + self::$meta_fields['general']['metadesc']['title'] = __( 'Meta description', 'wordpress-seo' ); + + self::$meta_fields['general']['metakeywords']['title'] = __( 'Meta keywords', 'wordpress-seo' ); + self::$meta_fields['general']['metakeywords']['label'] = __( 'Enter the meta keywords', 'wordpress-seo' ); + self::$meta_fields['general']['metakeywords']['description'] = __( 'If you type something above it will override your %smeta keywords template%s.', 'wordpress-seo' ); + + + self::$meta_fields['advanced']['meta-robots-noindex']['title'] = __( 'Meta robots index', 'wordpress-seo' ); + if ( '0' == get_option( 'blog_public' ) ) { + self::$meta_fields['advanced']['meta-robots-noindex']['description'] = '

    ' . __( 'Warning: even though you can set the meta robots setting here, the entire site is set to noindex in the sitewide privacy settings, so these settings won\'t have an effect.', 'wordpress-seo' ) . '

    '; + } + self::$meta_fields['advanced']['meta-robots-noindex']['options']['0'] = __( 'Default for this post type, currently: %s', 'wordpress-seo' ); + self::$meta_fields['advanced']['meta-robots-noindex']['options']['2'] = 'index'; + self::$meta_fields['advanced']['meta-robots-noindex']['options']['1'] = 'noindex'; + + self::$meta_fields['advanced']['meta-robots-nofollow']['title'] = __( 'Meta robots follow', 'wordpress-seo' ); + self::$meta_fields['advanced']['meta-robots-nofollow']['options']['0'] = 'follow'; + self::$meta_fields['advanced']['meta-robots-nofollow']['options']['1'] = 'nofollow'; + + self::$meta_fields['advanced']['meta-robots-adv']['title'] = __( 'Meta robots advanced', 'wordpress-seo' ); + self::$meta_fields['advanced']['meta-robots-adv']['description'] = __( 'Advanced meta robots settings for this page.', 'wordpress-seo' ); + self::$meta_fields['advanced']['meta-robots-adv']['options']['-'] = __( 'Site-wide default: %s', 'wordpress-seo' ); + self::$meta_fields['advanced']['meta-robots-adv']['options']['none'] = __( 'None', 'wordpress-seo' ); + self::$meta_fields['advanced']['meta-robots-adv']['options']['noodp'] = __( 'NO ODP', 'wordpress-seo' ); + self::$meta_fields['advanced']['meta-robots-adv']['options']['noimageindex'] = __( 'No Image Index', 'wordpress-seo' ); + self::$meta_fields['advanced']['meta-robots-adv']['options']['noarchive'] = __( 'No Archive', 'wordpress-seo' ); + self::$meta_fields['advanced']['meta-robots-adv']['options']['nosnippet'] = __( 'No Snippet', 'wordpress-seo' ); + + self::$meta_fields['advanced']['bctitle']['title'] = __( 'Breadcrumbs Title', 'wordpress-seo' ); + self::$meta_fields['advanced']['bctitle']['description'] = __( 'Title to use for this page in breadcrumb paths', 'wordpress-seo' ); + + self::$meta_fields['advanced']['canonical']['title'] = __( 'Canonical URL', 'wordpress-seo' ); + self::$meta_fields['advanced']['canonical']['description'] = sprintf( __( 'The canonical URL that this page should point to, leave empty to default to permalink. %sCross domain canonical%s supported too.', 'wordpress-seo' ), '', '' ); + + self::$meta_fields['advanced']['redirect']['title'] = __( '301 Redirect', 'wordpress-seo' ); + self::$meta_fields['advanced']['redirect']['description'] = __( 'The URL that this page should redirect to.', 'wordpress-seo' ); + + do_action( 'wpseo_tab_translate' ); + } + + /** + * Test whether the metabox should be hidden either by choice of the admin or because + * the post type is not a public post type + * + * @since 1.5.0 + * + * @param string $post_type (optional) The post type to test, defaults to the current post post_type. + * + * @return bool Whether or not the meta box (and associated columns etc) should be hidden + */ + function is_metabox_hidden( $post_type = null ) { + if ( ! isset( $post_type ) && ( isset( $GLOBALS['post'] ) && ( is_object( $GLOBALS['post'] ) && isset( $GLOBALS['post']->post_type ) ) ) ) { + $post_type = $GLOBALS['post']->post_type; + } + + if ( isset( $post_type ) ) { + // Don't make static as post_types may still be added during the run. + $cpts = get_post_types( array( 'public' => true ), 'names' ); + $options = get_option( 'wpseo_titles' ); + + return ( ( isset( $options[ 'hideeditbox-' . $post_type ] ) && $options[ 'hideeditbox-' . $post_type ] === true ) || in_array( $post_type, $cpts ) === false ); + } + return false; + } + + /** + * Sets up all the functionality related to the prominence of the page analysis functionality. + */ + public function setup_page_analysis() { + if ( apply_filters( 'wpseo_use_page_analysis', true ) === true ) { + add_action( 'post_submitbox_start', array( $this, 'publish_box' ) ); + } + } + + /** + * Outputs the page analysis score in the Publish Box. + */ + public function publish_box() { + if ( $this->is_metabox_hidden() === true ) { + return; + } + + $post = $this->get_metabox_post(); + if ( self::get_value( 'meta-robots-noindex', $post->ID ) === '1' ) { + $score_label = 'noindex'; + $title = __( 'Post is set to noindex.', 'wordpress-seo' ); + $score_title = $title; + } + else { + $score = self::get_value( 'linkdex', $post->ID ); + if ( $score === '' ) { + $score_label = 'na'; + $title = __( 'No focus keyword set.', 'wordpress-seo' ); + } + else { + $score_label = WPSEO_Utils::translate_score( $score ); + } + + $score_title = WPSEO_Utils::translate_score( $score, false ); + if ( ! isset( $title ) ) { + $title = $score_title; + } + } + } + + /** + * Adds the Yoast SEO meta box to the edit boxes in the edit post, page, + * attachment, and custom post types pages. + */ + public function add_meta_box() { + $post_types = get_post_types( array( 'public' => true ) ); + + if ( is_array( $post_types ) && $post_types !== array() ) { + foreach ( $post_types as $post_type ) { + if ( $this->is_metabox_hidden( $post_type ) === false ) { + $product_title = 'Yoast SEO'; + if ( file_exists( WPSEO_PATH . 'premium/' ) ) { + $product_title .= ' Premium'; + } + + if ( null !== get_current_screen() ) { + $screen_id = get_current_screen()->id; + add_filter( "postbox_classes_{$screen_id}_wpseo_meta", array( $this, 'wpseo_metabox_class' ) ); + } + + add_meta_box( 'wpseo_meta', $product_title, array( + $this, + 'meta_box', + ), $post_type, 'normal', apply_filters( 'wpseo_metabox_prio', 'high' ) ); + } + } + } + } + + /** + * Adds CSS classes to the meta box. + * + * @param array $classes An array of postbox CSS classes. + * + * @return array + */ + public function wpseo_metabox_class( $classes ) { + $classes[] = 'yoast wpseo-metabox'; + return $classes; + } + + /** + * Pass variables to js for use with the post-scraper + * + * @return array + */ + public function localize_post_scraper_script() { + $post = $this->get_metabox_post(); + $permalink = ''; + + if ( is_object( $post ) ) { + $permalink = get_sample_permalink( $post->ID ); + $permalink = $permalink[0]; + } + + $post_formatter = new WPSEO_Metabox_Formatter( + new WPSEO_Post_Metabox_Formatter( $post, WPSEO_Options::get_option( 'wpseo_titles' ), $permalink ) + ); + + return $post_formatter->get_values(); + } + + /** + * Pass some variables to js for replacing variables. + */ + public function localize_replace_vars_script() { + return array( + 'no_parent_text' => __( '(no parent)', 'wordpress-seo' ), + 'replace_vars' => $this->get_replace_vars(), + 'scope' => $this->determine_scope(), + ); + } + + /** + * Determines the scope based on the post type. + * This can be used by the replacevar plugin to determine if a replacement needs to be executed. + * + * @return string String decribing the current scope. + */ + private function determine_scope() { + $post_type = get_post_type( $this->get_metabox_post() ); + + if ( $post_type === 'page' ) { + return 'page'; + } + + return 'post'; + } + + /** + * Pass some variables to js for the edit / post page overview, snippet preview, etc. + * + * @return array + */ + public function localize_shortcode_plugin_script() { + return array( + 'wpseo_filter_shortcodes_nonce' => wp_create_nonce( 'wpseo-filter-shortcodes' ), + 'wpseo_shortcode_tags' => $this->get_valid_shortcode_tags(), + ); + } + + /** + * Output a tab in the Yoast SEO Metabox + * + * @param string $id CSS ID of the tab. + * @param string $heading Heading for the tab. + * @param string $content Content of the tab. This content should be escaped. + */ + public function do_tab( $id, $heading, $content ) { + ?> +
    +

    + + +
    +
    + get_content_sections(); + + $helpcenter_tab = new WPSEO_Option_Tab( 'metabox', 'Meta box', + array( 'video_url' => 'https://yoa.st/metabox-screencast' ) ); + + $helpcenter = new WPSEO_Help_Center( 'metabox', $helpcenter_tab ); + $helpcenter->output_help_center(); + + if ( ! defined( 'WPSEO_PREMIUM_FILE' ) ) { + echo $this->get_buy_premium_link(); + } + + echo '
      '; + + foreach ( $content_sections as $content_section ) { + if ( $content_section->name === 'premium' ) { + continue; + } + + $content_section->display_link(); + } + + echo '
    '; + + foreach ( $content_sections as $content_section ) { + $content_section->display_content(); + } + } + + /** + * Returns the relevant metabox sections for the current view. + * + * @return WPSEO_Metabox_Section[] + */ + private function get_content_sections() { + $content_sections = array( $this->get_content_meta_section() ); + + // Check if social_admin is an instance of WPSEO_Social_Admin. + if ( $this->social_admin instanceof WPSEO_Social_Admin ) { + $content_sections[] = $this->social_admin->get_meta_section(); + } + + if ( current_user_can( 'manage_options' ) || $this->options['disableadvanced_meta'] === false ) { + $content_sections[] = $this->get_advanced_meta_section(); + } + + if ( ! defined( 'WPSEO_PREMIUM_FILE' ) ) { + $content_sections[] = $this->get_buy_premium_section(); + } + + if ( has_action( 'wpseo_tab_header' ) || has_action( 'wpseo_tab_content' ) ) { + $content_sections[] = $this->get_addons_meta_section(); + } + + return $content_sections; + } + + /** + * Returns the metabox section for the content analysis. + * + * @return WPSEO_Metabox_Section + */ + private function get_content_meta_section() { + $content = $this->get_tab_content( 'general' ); + + $tabs = array(); + + $tabs[] = new WPSEO_Metabox_Form_Tab( + 'content', + $content, + __( '', 'wordpress-seo' ), + array( + 'tab_class' => 'yoast-seo__remove-tab', + ) + ); + + $tabs[] = new Metabox_Add_Keyword_Tab(); + + return new WPSEO_Metabox_Tab_Section( + 'content', + '' . __( 'Content optimization', 'wordpress-seo' ) . '' . $this->traffic_light_svg() . '', + $tabs, + array( + 'link_aria_label' => __( 'Content optimization', 'wordpress-seo' ), + 'link_class' => 'yoast-tooltip yoast-tooltip-e', + ) + ); + } + + /** + * Returns the metabox section for the advanced settings. + * + * @return WPSEO_Metabox_Section + */ + private function get_advanced_meta_section() { + $content = $this->get_tab_content( 'advanced' ); + + $tab = new WPSEO_Metabox_Form_Tab( + 'advanced', + $content, + __( 'Advanced', 'wordpress-seo' ), + array( + 'single' => true, + ) + ); + + return new WPSEO_Metabox_Tab_Section( + 'advanced', + '' . __( 'Advanced', 'wordpress-seo' ) . '', + array( $tab ), + array( + 'link_aria_label' => __( 'Advanced', 'wordpress-seo' ), + 'link_class' => 'yoast-tooltip yoast-tooltip-e', + ) + ); + } + + /** + * Returns a link to activate the Buy Premium tab. + * + * @return string + */ + private function get_buy_premium_link() { + return sprintf( "", + 'wpseo-metabox-buy-premium', + __( 'Go Premium', 'wordpress-seo' ) + ); + } + + /** + * Returns the metabox section for the Premium section. + * + * @return WPSEO_Metabox_Section + */ + private function get_buy_premium_section() { + $content = sprintf( "
    + %s +
      +
    • + %s - %s +
    • +
    • + %s - %s +
    • +
    • + %s - %s +
    • +
    • + %s - %s +
    • +
    + + + %s + + +

    %s

    +
    ", + /* translators: %1$s expands to Yoast SEO Premium. */ + sprintf( __( 'You\'re not getting the benefits of %1$s yet. If you had %1$s, you could use its awesome features:', 'wordpress-seo' ), 'Yoast SEO Premium' ), + __( 'Redirect manager', 'wordpress-seo' ), + __( 'Create and manage redirects within your WordPress install.', 'wordpress-seo' ), + __( 'Multiple focus keywords', 'wordpress-seo' ), + __( 'Optimize a single post for up to 5 keywords.', 'wordpress-seo' ), + __( 'Social Previews', 'wordpress-seo' ), + __( 'Check what your Facebook or Twitter post will look like.', 'wordpress-seo' ), + __( 'Premium support', 'wordpress-seo' ), + __( 'Gain access to our 24/7 support team.', 'wordpress-seo' ), + 'https://yoa.st/pe-buy-premium', + /* translators: %s expands to Yoast SEO Premium. */ + sprintf( __( 'Get %s now!', 'wordpress-seo' ), 'Yoast SEO Premium' ), + 'https://yoa.st/pe-premium-page', + __( 'More info', 'wordpress-seo' ) + ); + + $tab = new WPSEO_Metabox_Form_Tab( + 'premium', + $content, + 'Yoast SEO Premium', + array( + 'single' => true, + ) + ); + + return new WPSEO_Metabox_Tab_Section( + 'premium', + '', + array( $tab ), + array( + 'link_aria_label' => 'Yoast SEO Premium', + 'link_class' => 'yoast-tooltip yoast-tooltip-e', + ) + ); + } + + /** + * Returns a metabox section dedicated to hosting metabox tabs that have been added by other plugins through the + * `wpseo_tab_header` and `wpseo_tab_content` actions. + * + * @return WPSEO_Metabox_Section + */ + private function get_addons_meta_section() { + return new WPSEO_Metabox_Addon_Tab_Section( + 'addons', + '' . __( 'Add-ons', 'wordpress-seo' ) . '', + array(), + array( + 'link_aria_label' => __( 'Add-ons', 'wordpress-seo' ), + 'link_class' => 'yoast-tooltip yoast-tooltip-e', + ) + ); + } + + /** + * Gets the table contents for the metabox tab. + * + * @param string $tab_name Tab for which to retrieve the field definitions. + * + * @return string + */ + private function get_tab_content( $tab_name ) { + $content = ''; + foreach ( $this->get_meta_field_defs( $tab_name ) as $key => $meta_field ) { + $content .= $this->do_meta_box( $meta_field, $key ); + } + unset( $key, $meta_field ); + + return $content; + } + + /** + * Adds a line in the meta box + * + * @todo [JRF] check if $class is added appropriately everywhere + * + * @param array $meta_field_def Contains the vars based on which output is generated. + * @param string $key Internal key (without prefix). + * + * @return string + */ + function do_meta_box( $meta_field_def, $key = '' ) { + $content = ''; + $esc_form_key = esc_attr( self::$form_prefix . $key ); + $meta_value = self::get_value( $key, $this->get_metabox_post()->ID ); + + $class = ''; + if ( isset( $meta_field_def['class'] ) && $meta_field_def['class'] !== '' ) { + $class = ' ' . $meta_field_def['class']; + } + + $placeholder = ''; + if ( isset( $meta_field_def['placeholder'] ) && $meta_field_def['placeholder'] !== '' ) { + $placeholder = $meta_field_def['placeholder']; + } + + $aria_describedby = $description = ''; + if ( isset( $meta_field_def['description'] ) ) { + $aria_describedby = ' aria-describedby="' . $esc_form_key . '-desc"'; + $description = '

    ' . $meta_field_def['description'] . '

    '; + } + + switch ( $meta_field_def['type'] ) { + case 'pageanalysis': + $content .= '
    '; + $content .= '
    '; + $content .= '

    '. __( 'Analysis', 'wordpress-seo' ) .'

    '; + $content .= '
    '; + $content .= '
    '; + $content .= '
    '; + $content .= '
    '; + break; + case 'snippetpreview': + $content .= '
    '; + break; + case 'focuskeyword': + if ( $placeholder !== '' ) { + $placeholder = ' placeholder="' . esc_attr( $placeholder ) . '"'; + } + + $content .= '
    '; + $content .= '
    '; + $content .= '

    ' . esc_html( $meta_field_def['title'] ) . '

    '; + $content .= ''; + $content .= '
    '; + $content .= '
    '; + $content .= '
    '; + break; + case 'metakeywords': + $content .= '
    '; + $content .= '
    '; + $content .= '

    ' . esc_html( $meta_field_def['title'] ) . '

    '; + $content .= ''; + $content .= '
    '; + $content .= $description; + $content .= '
    '; + $content .= '
    '; + break; + case 'text': + $ac = ''; + if ( isset( $meta_field_def['autocomplete'] ) && $meta_field_def['autocomplete'] === false ) { + $ac = 'autocomplete="off" '; + } + if ( $placeholder !== '' ) { + $placeholder = ' placeholder="' . esc_attr( $placeholder ) . '"'; + } + $content .= '
    '; + break; + + case 'textarea': + $rows = 3; + if ( isset( $meta_field_def['rows'] ) && $meta_field_def['rows'] > 0 ) { + $rows = $meta_field_def['rows']; + } + $content .= ''; + break; + + case 'hidden': + $content .= '
    '; + break; + case 'select': + if ( isset( $meta_field_def['options'] ) && is_array( $meta_field_def['options'] ) && $meta_field_def['options'] !== array() ) { + $content .= ''; + } + break; + + case 'multiselect': + if ( isset( $meta_field_def['options'] ) && is_array( $meta_field_def['options'] ) && $meta_field_def['options'] !== array() ) { + + // Set $meta_value as $selected_arr. + $selected_arr = $meta_value; + + // If the multiselect field is 'meta-robots-adv' we should explode on ,. + if ( 'meta-robots-adv' === $key ) { + $selected_arr = explode( ',', $meta_value ); + } + + if ( ! is_array( $selected_arr ) ) { + $selected_arr = (array) $selected_arr; + } + + $options_count = count( $meta_field_def['options'] ); + + // This select now uses Select2. + $content .= ''; + unset( $val, $option, $selected, $selected_arr, $options_count ); + } + break; + + case 'checkbox': + $checked = checked( $meta_value, 'on', false ); + $expl = ( isset( $meta_field_def['expl'] ) ) ? esc_html( $meta_field_def['expl'] ) : ''; + $content .= '
    '; + unset( $checked, $expl ); + break; + + case 'radio': + if ( isset( $meta_field_def['options'] ) && is_array( $meta_field_def['options'] ) && $meta_field_def['options'] !== array() ) { + foreach ( $meta_field_def['options'] as $val => $option ) { + $checked = checked( $meta_value, $val, false ); + $content .= ' '; + } + unset( $val, $option, $checked ); + } + break; + + case 'upload': + $content .= ''; + $content .= ''; + break; + } + + + $html = ''; + if ( $content === '' ) { + $content = apply_filters( 'wpseo_do_meta_box_field_' . $key, $content, $meta_value, $esc_form_key, $meta_field_def, $key ); + } + + if ( $content !== '' ) { + + $label = esc_html( $meta_field_def['title'] ); + if ( in_array( $meta_field_def['type'], array( + 'radio', + 'checkbox', + ), true ) === false + ) { + $label = ''; + } + + $help_button = $help_panel = ''; + if ( isset( $meta_field_def['help'] ) && $meta_field_def['help'] !== '' ) { + $help = new WPSEO_Admin_Help_Panel( $key, $meta_field_def['help-button'], $meta_field_def['help'] ); + $help_button = $help->get_button_html(); + $help_panel = $help->get_panel_html(); + } + if ( in_array( $meta_field_def['type'], array( + 'snippetpreview', + 'pageanalysis', + 'focuskeyword', + 'metakeywords', + ), true ) + ) { + return $this->create_content_box( $content, $meta_field_def['type'], $help_button, $help_panel ); + } + + if ( $meta_field_def['type'] === 'hidden' ) { + $html = '' . $content . ''; + } + else { + $html = ' + + ' . $label . $help_button . ' + ' . $help_panel; + + $html .= $content . $description; + + $html .= ' + + '; + } + } + + return $html; + } + + /** + * Creates a sections specific row. + * + * @param string $content The content to show. + * @param string $hidden_help_name Escaped form key name. + * @param string $help_button The help button. + * @param string $help_panel The help text. + * + * @return string + */ + private function create_content_box( $content, $hidden_help_name, $help_button, $help_panel ) { + $html = ''; + $html .= $content; + $html .= '
    ' . $help_button . $help_panel . '
    '; + $html .= ''; + return $html; + } + + /** + * Save the WP SEO metadata for posts. + * + * @internal $_POST parameters are validated via sanitize_post_meta() + * + * @param int $post_id Post ID. + * + * @return bool|void Boolean false if invalid save post request + */ + function save_postdata( $post_id ) { + // Bail if this is a multisite installation and the site has been switched. + if ( is_multisite() && ms_is_switched() ) { + return false; + } + + if ( $post_id === null ) { + return false; + } + + if ( wp_is_post_revision( $post_id ) ) { + $post_id = wp_is_post_revision( $post_id ); + } + + /** + * Determine we're not accidentally updating a different post. + * We can't use filter_input here as the ID isn't available at this point, other than in the $_POST data. + */ + if ( ! isset( $_POST['ID'] ) || $post_id !== (int) $_POST['ID'] ) { + return false; + } + + clean_post_cache( $post_id ); + $post = get_post( $post_id ); + + if ( ! is_object( $post ) ) { + // Non-existent post. + return false; + } + + do_action( 'wpseo_save_compare_data', $post ); + + $meta_boxes = apply_filters( 'wpseo_save_metaboxes', array() ); + $meta_boxes = array_merge( $meta_boxes, $this->get_meta_field_defs( 'general', $post->post_type ), $this->get_meta_field_defs( 'advanced' ) ); + + foreach ( $meta_boxes as $key => $meta_box ) { + + // If analysis is disabled remove that analysis score value from the DB. + if ( $this->is_meta_value_disabled( $key ) ) { + self::delete( $key, $post_id ); + continue; + } + + $data = null; + if ( 'checkbox' === $meta_box['type'] ) { + $data = isset( $_POST[ self::$form_prefix . $key ] ) ? 'on' : 'off'; + } + else { + if ( isset( $_POST[ self::$form_prefix . $key ] ) ) { + $data = $_POST[ self::$form_prefix . $key ]; + } + } + if ( isset( $data ) ) { + self::set_value( $key, $data, $post_id ); + } + } + + do_action( 'wpseo_saved_postdata' ); + } + + /** + * Determines if the given meta value key is disabled + * + * @param string $key The key of the meta value. + * @return bool Whether the given meta value key is disabled. + */ + public function is_meta_value_disabled( $key ) { + if ( 'linkdex' === $key && ! $this->analysis_seo->is_enabled() ) { + return true; + } + + if ( 'content_score' === $key && ! $this->analysis_readability->is_enabled() ) { + return true; + } + + return false; + } + + /** + * Enqueues all the needed JS and CSS. + * + * @todo [JRF => whomever] create css/metabox-mp6.css file and add it to the below allowed colors array when done + */ + public function enqueue() { + global $pagenow; + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + + $is_editor = self::is_post_overview( $pagenow ) || self::is_post_edit( $pagenow ); + + /* Filter 'wpseo_always_register_metaboxes_on_admin' documented in wpseo-main.php */ + if ( ( ! $is_editor && apply_filters( 'wpseo_always_register_metaboxes_on_admin', false ) === false ) || $this->is_metabox_hidden() === true + ) { + return; + } + + if ( self::is_post_overview( $pagenow ) ) { + $asset_manager->enqueue_style( 'edit-page' ); + } + else { + + if ( 0 != get_queried_object_id() ) { + wp_enqueue_media( array( 'post' => get_queried_object_id() ) ); // Enqueue files needed for upload functionality. + } + + $asset_manager->enqueue_style( 'metabox-css' ); + $asset_manager->enqueue_style( 'scoring' ); + $asset_manager->enqueue_style( 'snippet' ); + $asset_manager->enqueue_style( 'select2' ); + $asset_manager->enqueue_style( 'kb-search' ); + + $asset_manager->enqueue_script( 'metabox' ); + $asset_manager->enqueue_script( 'admin-media' ); + + $asset_manager->enqueue_script( 'post-scraper' ); + $asset_manager->enqueue_script( 'replacevar-plugin' ); + $asset_manager->enqueue_script( 'shortcode-plugin' ); + + wp_enqueue_script( 'jquery-ui-autocomplete' ); + + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'admin-media', 'wpseoMediaL10n', $this->localize_media_script() ); + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'post-scraper', 'wpseoPostScraperL10n', $this->localize_post_scraper_script() ); + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'replacevar-plugin', 'wpseoReplaceVarsL10n', $this->localize_replace_vars_script() ); + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'shortcode-plugin', 'wpseoShortcodePluginL10n', $this->localize_shortcode_plugin_script() ); + + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoAdminL10n', WPSEO_Help_Center::get_translated_texts() ); + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoSelect2Locale', WPSEO_Utils::get_language( WPSEO_Utils::get_user_locale() ) ); + + if ( post_type_supports( get_post_type(), 'thumbnail' ) ) { + $asset_manager->enqueue_style( 'featured-image' ); + + $asset_manager->enqueue_script( 'featured-image' ); + + $featured_image_l10 = array( 'featured_image_notice' => __( 'The featured image should be at least 200x200 pixels to be picked up by Facebook and other social media sites.', 'wordpress-seo' ) ); + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoFeaturedImageL10n', $featured_image_l10 ); + } + } + } + + /** + * Pass some variables to js for upload module. + * + * @return array + */ + public function localize_media_script() { + return array( + 'choose_image' => __( 'Use Image', 'wordpress-seo' ), + ); + } + + /** + * Returns post in metabox context + * + * @returns WP_Post|array + */ + protected function get_metabox_post() { + if ( $post = filter_input( INPUT_GET, 'post' ) ) { + $post_id = (int) WPSEO_Utils::validate_int( $post ); + + return get_post( $post_id ); + } + + + if ( isset( $GLOBALS['post'] ) ) { + return $GLOBALS['post']; + } + + return array(); + } + + + + /** + * Returns an array with shortcode tags for all registered shortcodes. + * + * @return array + */ + private function get_valid_shortcode_tags() { + $shortcode_tags = array(); + + foreach ( $GLOBALS['shortcode_tags'] as $tag => $description ) { + array_push( $shortcode_tags, $tag ); + } + + return $shortcode_tags; + } + + /** + * Prepares the replace vars for localization. + * + * @return array replace vars + */ + private function get_replace_vars() { + $post = $this->get_metabox_post(); + + $cached_replacement_vars = array(); + + $vars_to_cache = array( + 'date', + 'id', + 'sitename', + 'sitedesc', + 'sep', + 'page', + 'currenttime', + 'currentdate', + 'currentday', + 'currentmonth', + 'currentyear', + ); + + foreach ( $vars_to_cache as $var ) { + $cached_replacement_vars[ $var ] = wpseo_replace_vars( '%%' . $var . '%%', $post ); + } + + // Merge custom replace variables with the WordPress ones. + return array_merge( $cached_replacement_vars, $this->get_custom_replace_vars( $post ) ); + } + + /** + * Gets the custom replace variables for custom taxonomies and fields. + * + * @param WP_Post $post The post to check for custom taxonomies and fields. + * + * @return array Array containing all the replacement variables. + */ + private function get_custom_replace_vars( $post ) { + return array( + 'custom_fields' => $this->get_custom_fields_replace_vars( $post ), + 'custom_taxonomies' => $this->get_custom_taxonomies_replace_vars( $post ), + ); + } + + /** + * Gets the custom replace variables for custom taxonomies. + * + * @param WP_Post $post The post to check for custom taxonomies. + * + * @return array Array containing all the replacement variables. + */ + private function get_custom_taxonomies_replace_vars( $post ) { + $taxonomies = get_object_taxonomies( $post, 'objects' ); + $custom_replace_vars = array(); + + foreach ( $taxonomies as $taxonomy_name => $taxonomy ) { + + if ( is_string( $taxonomy ) ) { // If attachment, see https://core.trac.wordpress.org/ticket/37368 . + $taxonomy_name = $taxonomy; + $taxonomy = get_taxonomy( $taxonomy_name ); + } + + if ( $taxonomy->_builtin && $taxonomy->public ) { + continue; + } + + $custom_replace_vars[ $taxonomy_name ] = array( + 'name' => $taxonomy->name, + 'description' => $taxonomy->description, + ); + } + + return $custom_replace_vars; + } + + /** + * Gets the custom replace variables for custom fields. + * + * @param WP_Post $post The post to check for custom fields. + * + * @return array Array containing all the replacement variables. + */ + private function get_custom_fields_replace_vars( $post ) { + $custom_replace_vars = array(); + + // If no post object is passed, return the empty custom_replace_vars array. + if ( ! is_object( $post ) ) { + return $custom_replace_vars; + } + + $custom_fields = get_post_custom( $post->ID ); + + foreach ( $custom_fields as $custom_field_name => $custom_field ) { + if ( substr( $custom_field_name, 0, 1 ) === '_' ) { + continue; + } + + $custom_replace_vars[ $custom_field_name ] = $custom_field[0]; + } + + return $custom_replace_vars; + } + + + /** + * Return the SVG for the traffic light in the metabox. + */ + public function traffic_light_svg() { + return << + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SVG; + + } + + /** + * Generic tab. + */ + public function template_generic_tab() { + // This template belongs to the post scraper so don't echo it if it isn't enqueued. + if ( ! wp_script_is( WPSEO_Admin_Asset_Manager::PREFIX . 'post-scraper' ) ) { + return; + } + + echo ''; + } + + /** + * Keyword tab for enabling analysis of multiple keywords. + */ + public function template_keyword_tab() { + // This template belongs to the post scraper so don't echo it if it isn't enqueued. + if ( ! wp_script_is( WPSEO_Admin_Asset_Manager::PREFIX . 'post-scraper' ) ) { + return; + } + + echo ''; + } + + /** + * @param string $page The page to check for the post overview page. + * + * @return bool Whether or not the given page is the post overview page. + */ + public static function is_post_overview( $page ) { + return 'edit.php' === $page; + } + + /** + * @param string $page The page to check for the post edit page. + * + * @return bool Whether or not the given page is the post edit page. + */ + public static function is_post_edit( $page ) { + return 'post.php' === $page + || 'post-new.php' === $page; + } + + /********************** DEPRECATED METHODS **********************/ + + /** + * Adds the Yoast SEO box + * + * @deprecated 1.4.24 + * @deprecated use WPSEO_Metabox::add_meta_box() + * @see WPSEO_Meta::add_meta_box() + */ + public function add_custom_box() { + _deprecated_function( __METHOD__, 'WPSEO 1.4.24', 'WPSEO_Metabox::add_meta_box()' ); + $this->add_meta_box(); + } + + /** + * Retrieve the meta boxes for the given post type. + * + * @deprecated 1.5.0 + * @deprecated use WPSEO_Meta::get_meta_field_defs() + * @see WPSEO_Meta::get_meta_field_defs() + * + * @param string $post_type The post type for which to get the meta fields. + * + * @return array + */ + public function get_meta_boxes( $post_type = 'post' ) { + _deprecated_function( __METHOD__, 'WPSEO 1.5.0', 'WPSEO_Meta::get_meta_field_defs()' ); + + return $this->get_meta_field_defs( 'general', $post_type ); + } + + /** + * Pass some variables to js + * + * @deprecated 1.5.0 + * @deprecated use WPSEO_Meta::localize_script() + * @see WPSEO_Meta::localize_script() + */ + public function script() { + _deprecated_function( __METHOD__, 'WPSEO 1.5.0', 'WPSEO_Meta::localize_script()' ); + + return $this->localize_script(); + } + + /** + * @deprecated 3.0 Removed, use javascript functions instead + * + * @param string $string Deprecated. + * + * @return string + */ + public function strtolower_utf8( $string ) { + _deprecated_function( 'WPSEO_Metabox::strtolower_utf8', 'WPSEO 3.0', 'use javascript instead' ); + + return $string; + } + + /** + * @deprecated 3.0 Removed. + * + * @return array + */ + public function localize_script() { + _deprecated_function( 'WPSEO_Metabox::localize_script', 'WPSEO 3.0' ); + + return array(); + } + + /** + * @deprecated 3.0 Removed, use javascript functions instead. + * + * @return string + */ + public function snippet() { + _deprecated_function( 'WPSEO_Metabox::snippet', 'WPSEO 3.0', 'use javascript instead' ); + + return ''; + } + + /** + * @deprecated 3.0 Use WPSEO_Meta_Columns::posts_filter_dropdown instead. + */ + public function posts_filter_dropdown() { + _deprecated_function( 'WPSEO_Metabox::posts_filter_dropdown', 'WPSEO 3.0', 'WPSEO_Metabox_Columns::posts_filter_dropdown' ); + + /** @var WPSEO_Meta_Columns $meta_columns */ + $meta_columns = $GLOBALS['wpseo_meta_columns']; + $meta_columns->posts_filter_dropdown(); + } + + /** + * @deprecated 3.0 Use WPSEO_Meta_Columns::column_heading instead. + * + * @param array $columns Already existing columns. + * + * @return array + */ + public function column_heading( $columns ) { + _deprecated_function( 'WPSEO_Metabox::column_heading', 'WPSEO 3.0', 'WPSEO_Metabox_Columns::column_heading' ); + + /** @var WPSEO_Meta_Columns $meta_columns */ + $meta_columns = $GLOBALS['wpseo_meta_columns']; + return $meta_columns->column_heading( $columns ); + } + + /** + * @deprecated 3.0 Use WPSEO_Meta_Columns::column_content instead. + * + * @param string $column_name Column to display the content for. + * @param int $post_id Post to display the column content for. + */ + public function column_content( $column_name, $post_id ) { + _deprecated_function( 'WPSEO_Metabox::column_content', 'WPSEO 3.0', 'WPSEO_Metabox_Columns::column_content' ); + + /** @var WPSEO_Meta_Columns $meta_columns */ + $meta_columns = $GLOBALS['wpseo_meta_columns']; + $meta_columns->column_content( $column_name, $post_id ); + } + + /** + * @deprecated 3.0 Use WPSEO_Meta_Columns::column_sort instead. + * + * @param array $columns appended with their orderby variable. + * + * @return array + */ + public function column_sort( $columns ) { + _deprecated_function( 'WPSEO_Metabox::column_sort', 'WPSEO 3.0', 'WPSEO_Metabox_Columns::column_sort' ); + + /** @var WPSEO_Meta_Columns $meta_columns */ + $meta_columns = $GLOBALS['wpseo_meta_columns']; + return $meta_columns->column_sort( $columns ); + } + + /** + * @deprecated 3.0 Use WPSEO_Meta_Columns::column_sort_orderby instead. + * + * @param array $vars Query variables. + * + * @return array + */ + public function column_sort_orderby( $vars ) { + _deprecated_function( 'WPSEO_Metabox::column_sort_orderby', 'WPSEO 3.0', 'WPSEO_Metabox_Columns::column_sort_orderby' ); + + /** @var WPSEO_Meta_Columns $meta_columns */ + $meta_columns = $GLOBALS['wpseo_meta_columns']; + return $meta_columns->column_sort_orderby( $vars ); + } + + /** + * @deprecated 3.0 Use WPSEO_Meta_Columns::column_hidden instead. + * + * @param array|false $result The hidden columns. + * @param string $option The option name used to set which columns should be hidden. + * @param WP_User $user The User. + * + * @return array|false $result + */ + public function column_hidden( $result, $option, $user ) { + _deprecated_function( 'WPSEO_Metabox::column_hidden', 'WPSEO 3.0', 'WPSEO_Metabox_Columns::column_hidden' ); + + /** @var WPSEO_Meta_Columns $meta_columns */ + $meta_columns = $GLOBALS['wpseo_meta_columns']; + return $meta_columns->column_hidden( $result, $option, $user ); + } + + /** + * @deprecated 3.0 Use WPSEO_Meta_Columns::seo_score_posts_where instead. + * + * @param string $where Where clause. + * + * @return string + */ + public function seo_score_posts_where( $where ) { + _deprecated_function( 'WPSEO_Metabox::seo_score_posts_where', 'WPSEO 3.0', 'WPSEO_Metabox_Columns::seo_score_posts_where' ); + + /** @var WPSEO_Meta_Columns $meta_columns */ + $meta_columns = $GLOBALS['wpseo_meta_columns']; + return $meta_columns->seo_score_posts_where( $where ); + } + + /** + * @deprecated 3.0 Removed. + * + * @param int $post_id Post to retrieve the title for. + * + * @return string + */ + public function page_title( $post_id ) { + _deprecated_function( 'WPSEO_Metabox::page_title', 'WPSEO 3.0' ); + + return ''; + } + + /** + * @deprecated 3.0 + * + * @param array $array Array to sort, array is returned sorted. + * @param string $key Key to sort array by. + */ + public function aasort( &$array, $key ) { + _deprecated_function( 'WPSEO_Metabox::aasort', 'WPSEO 3.0' ); + + } + + /** + * @deprecated 3.0 + * + * @param object $post Post to output the page analysis results for. + * + * @return string + */ + public function linkdex_output( $post ) { + _deprecated_function( 'WPSEO_Metabox::linkdex_output', 'WPSEO 3.0' ); + + return ''; + + } + + /** + * @deprecated 3.0 + * + * @param object $post Post to calculate the results for. + * + * @return array|WP_Error + */ + public function calculate_results( $post ) { + _deprecated_function( 'WPSEO_Metabox::calculate_results', 'WPSEO 3.0' ); + + return array(); + + } + + /** + * @deprecated 3.0 + * + * @param WP_Post $post Post object instance. + * + * @return array + */ + public function get_sample_permalink( $post ) { + _deprecated_function( 'WPSEO_Metabox::get_sample_permalink', 'WPSEO 3.0' ); + + return array(); + } + + /** + * @deprecated 3.0 + * + * @param array $results The results array used to store results. + * @param int $scoreValue The score value. + * @param string $scoreMessage The score message. + * @param string $scoreLabel The label of the score to use in the results array. + * @param string $rawScore The raw score, to be used by other filters. + */ + public function save_score_result( &$results, $scoreValue, $scoreMessage, $scoreLabel, $rawScore = null ) { + + _deprecated_function( 'WPSEO_Metabox::save_score_result', 'WPSEO 3.0' ); + } + + /** + * @deprecated 3.0 + * + * @param string $inputString String to clean up. + * @param bool $removeOptionalCharacters Whether or not to do a cleanup of optional chars too. + * + * @return string + */ + public function strip_separators_and_fold( $inputString, $removeOptionalCharacters ) { + _deprecated_function( 'WPSEO_Metabox::strip_separators_and_f', 'WPSEO 3.0' ); + + return ''; + } + + /** + * @deprecated 3.0 + * + * @param array $job Job data array. + * @param array $results Results set by reference. + */ + public function check_double_focus_keyword( $job, &$results ) { + _deprecated_function( 'WPSEO_Metabox::check_double_focus_key', 'WPSEO 3.0' ); + + } + + /** + * @deprecated 3.0 + * + * @param string $keyword The keyword to check for stopwords. + * @param array $results The results array. + */ + public function score_keyword( $keyword, &$results ) { + _deprecated_function( 'WPSEO_Metabox::score_keyword', 'WPSEO 3.0' ); + } + + /** + * @deprecated 3.0 + * + * @param array $job The job array holding both the keyword and the URLs. + * @param array $results The results array. + */ + public function score_url( $job, &$results ) { + _deprecated_function( 'WPSEO_Metabox::score_url', 'WPSEO 3.0' ); + } + + /** + * @deprecated 3.0 + * + * @param array $job The job array holding both the keyword versions. + * @param array $results The results array. + */ + public function score_title( $job, &$results ) { + _deprecated_function( 'WPSEO_Metabox::score_title', 'WPSEO 3.0' ); + } + + /** + * @deprecated 3.0 + * + * @param array $job The job array holding both the keyword versions. + * @param array $results The results array. + * @param array $anchor_texts The array holding all anchors in the document. + * @param array $count The number of anchors in the document, grouped by type. + */ + public function score_anchor_texts( $job, &$results, $anchor_texts, $count ) { + _deprecated_function( 'WPSEO_Metabox::score_anchor_texts', 'WPSEO 3.0' ); + } + + /** + * @deprecated 3.0 + * + * @param object $xpath An XPATH object of the current document. + * + * @return array + */ + public function get_anchor_texts( &$xpath ) { + _deprecated_function( 'WPSEO_Metabox::get_anchor_texts', 'WPSEO 3.0' ); + + return array(); + } + + /** + * @deprecated 3.0 + * + * @param object $xpath An XPATH object of the current document. + * + * @return array + */ + public function get_anchor_count( &$xpath ) { + _deprecated_function( 'WPSEO_Metabox::get_anchor_count', 'WPSEO 3.0' ); + + return array(); + } + + /** + * @deprecated 3.0 + * + * @param array $job The job array holding both the keyword versions. + * @param array $results The results array. + * @param array $imgs The array with images alt texts. + */ + public function score_images_alt_text( $job, &$results, $imgs ) { + _deprecated_function( 'WPSEO_Metabox::score_images_alt_text', 'WPSEO 3.0' ); + } + + /** + * @deprecated 3.0 + * + * @param int $post_id The post to find images in. + * @param string $body The post content to find images in. + * @param array $imgs The array holding the image information. + * + * @return array The updated images array. + */ + public function get_images_alt_text( $post_id, $body, $imgs ) { + _deprecated_function( 'WPSEO_Metabox::get_images_alt_text', 'WPSEO 3.0' ); + + return array(); + } + + /** + * @deprecated 3.0 + * + * @param array $job The array holding the keywords. + * @param array $results The results array. + * @param array $headings The headings found in the document. + */ + public function score_headings( $job, &$results, $headings ) { + _deprecated_function( 'WPSEO_Metabox::score_headings', 'WPSEO 3.0' ); + } + + /** + * @deprecated 3.0 + * + * @param string $postcontent Post content to find headings in. + * + * @return array Array of heading texts. + */ + public function get_headings( $postcontent ) { + _deprecated_function( 'WPSEO_Metabox::get_headings', 'WPSEO 3.0' ); + + return array(); + } + + /** + * @deprecated 3.0 + * + * @param array $job The array holding the keywords. + * @param array $results The results array. + * @param string $description The meta description. + * @param int $maxlength The maximum length of the meta description. + */ + public function score_description( $job, &$results, $description, $maxlength = 155 ) { + _deprecated_function( 'WPSEO_Metabox::score_description', 'WPSEO 3.0' ); + } + + /** + * @deprecated 3.0 + * + * @param array $job The array holding the keywords. + * @param array $results The results array. + * @param string $body The body. + * @param string $firstp The first paragraph. + */ + public function score_body( $job, &$results, $body, $firstp ) { + _deprecated_function( 'WPSEO_Metabox::score_body', 'WPSEO 3.0' ); + } + + /** + * @deprecated 3.0 + * + * @param object $post The post object. + * + * @return string The post content. + */ + public function get_body( $post ) { + _deprecated_function( 'WPSEO_Metabox::get_body', 'WPSEO 3.0' ); + + return ''; + } + + /** + * @deprecated 3.0 + * + * @param string $body The post content to retrieve the first paragraph from. + * + * @return string + */ + public function get_first_paragraph( $body ) { + _deprecated_function( 'WPSEO_Metabox::get_first_paragraph', 'WPSEO 3.0' ); + + return ''; + } + + /** + * @deprecated 3.2 + * + * Retrieves the title template. + * + * @param object $post metabox post. + * + * @return string + */ + public static function get_title_template( $post ) { + _deprecated_function( 'WPSEO_Metabox::get_title_template', 'WPSEO 3.2', 'WPSEO_Post_Scraper::get_title_template' ); + + return ''; + } + + /** + * @deprecated 3.2 + * + * Retrieves the metadesc template. + * + * @param object $post metabox post. + * + * @return string + */ + public static function get_metadesc_template( $post ) { + _deprecated_function( 'WPSEO_Metabox::get_metadesc_template', 'WPSEO 3.2', 'WPSEO_Post_Scraper::get_metadesc_template' ); + return ''; + } + + /** + * @deprecated 3.2 + * Retrieve a post date when post is published, or return current date when it's not. + * + * @param WP_Post $post The post for which to retrieve the post date. + * + * @return string + */ + public function get_post_date( $post ) { + _deprecated_function( 'WPSEO_Metabox::get_post_date', 'WPSEO 3.2', 'WPSEO_Post_Scraper::get_post_date' ); + _deprecated_function( 'WPSEO_Metabox::get_post_date', 'WPSEO 3.2', 'WPSEO_Post_Scraper::get_post_date' ); + + return ''; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/metabox/interface-metabox-analysis.php b/wp-content/plugins/wordpress-seo/admin/metabox/interface-metabox-analysis.php new file mode 100644 index 0000000..1006078 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/metabox/interface-metabox-analysis.php @@ -0,0 +1,31 @@ +onpage_option = $this->get_option(); + } + + /** + * Getting the status from the option. + * + * @return string + */ + public function get_status() { + if ( array_key_exists( self::STATUS, $this->onpage_option ) ) { + return $this->onpage_option[ self::STATUS ]; + } + + return self::CANNOT_FETCH; + } + + /** + * Saving the status to the options. + * + * @param string $status The status to save. + */ + public function set_status( $status ) { + $this->onpage_option[ self::STATUS ] = $status; + } + + /** + * Saving the last fetch timestamp to the options. + * + * @param integer $timestamp Timestamp with the new value. + */ + public function set_last_fetch( $timestamp ) { + $this->onpage_option[ self::LAST_FETCH ] = $timestamp; + } + + /** + * Check if the last fetch is within the time of 60 minutes + * + * @return bool + */ + public function should_be_fetched() { + return ( ( time() - $this->onpage_option[ self::LAST_FETCH ] ) > self::FETCH_LIMIT ); + } + + /** + * Saving the option with the current data + */ + public function save_option() { + update_option( self::OPTION_NAME, $this->onpage_option ); + } + + /** + * Returns the value of the onpage_enabled status + * + * @return bool + */ + public function is_enabled() { + $options = get_option( 'wpseo' ); + + return ! empty( $options['onpage_indexability'] ); + } + + /** + * Getting the option with the OnPage.org data + * + * @return array + */ + private function get_option() { + return get_option( self::OPTION_NAME, array( self::STATUS => self::NOT_FETCHED, self::LAST_FETCH => 0 ) ); + } + + /** + * @deprecated 3.0.2 + * + * Returns the indexable status of the website. + * + * @return bool + */ + public function is_indexable() { + _deprecated_function( 'WPSEO_OnPage_Option::is_indexable', 'WPSEO 3.0.2' ); + + return self::IS_INDEXABLE === $this->get_status(); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/onpage/class-onpage-request.php b/wp-content/plugins/wordpress-seo/admin/onpage/class-onpage-request.php new file mode 100644 index 0000000..3d6ba8e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/onpage/class-onpage-request.php @@ -0,0 +1,76 @@ + $target_url, + 'wp_version' => $GLOBALS['wp_version'], + 'yseo_version' => WPSEO_VERSION, + ), $parameters ); + + $url = add_query_arg( $parameters, $this->onpage_endpoint ); + + $response = wp_remote_get( $url ); + $response_code = wp_remote_retrieve_response_code( $response ); + + // When the request is successful, the response code will be 200. + if ( $response_code === 200 ) { + $response_body = wp_remote_retrieve_body( $response ); + + return json_decode( $response_body, true ); + } + } + + /** + * Sending a request to OnPage to check if the $home_url is indexable + * + * @param string $target_url The URL that will be send to the API. + * @param array $parameters Array of extra parameters to send to OnPage. + * + * @return array + */ + public function do_request( $target_url, $parameters = array() ) { + $json_body = $this->get_remote( $target_url, $parameters ); + + // OnPage.org recognized a redirect, fetch the data of that URL by calling this method with the value from OnPage.org. + if ( ! empty( $json_body['passes_juice_to'] ) ) { + return $this->do_request( $json_body['passes_juice_to'], $parameters ); + } + + return $json_body; + } + + /** + * Returns the fetched response + * + * @deprecated 3.1.2 + * @return array + */ + public function get_response() { + _deprecated_function( 'WPSEO_OnPage_Request::get_response', 'WPSEO 3.1.2', 'WPSEO_OnPage_Request::do_request' ); + + return array(); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/onpage/class-onpage.php b/wp-content/plugins/wordpress-seo/admin/onpage/class-onpage.php new file mode 100644 index 0000000..dcbc965 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/onpage/class-onpage.php @@ -0,0 +1,230 @@ +onpage_option = new WPSEO_OnPage_Option(); + + if ( $this->onpage_option->is_enabled() ) { + $this->set_hooks(); + $this->catch_redo_listener(); + } + } + } + + /** + * The hooks to run on plugin activation + */ + public function activate_hooks() { + $this->set_cron(); + } + + /** + * Adding a weekly schedule to the schedules array + * + * @param array $schedules Array with schedules. + * + * @return array + */ + public function add_weekly_schedule( array $schedules ) { + $schedules['weekly'] = array( 'interval' => WEEK_IN_SECONDS, 'display' => __( 'Once Weekly' ) ); + + return $schedules; + } + + /** + * Fetching the data from onpage. + * + * @return bool + */ + public function fetch_from_onpage() { + if ( $this->onpage_option->should_be_fetched() && false !== ( $new_status = $this->request_indexability() ) ) { + + // Updates the timestamp in the option. + $this->onpage_option->set_last_fetch( time() ); + + // The currently indexability status. + $old_status = $this->onpage_option->get_status(); + + // Saving the new status. + $this->onpage_option->set_status( $new_status ); + + // Saving the option. + $this->onpage_option->save_option(); + + // Check if the status has been changed. + if ( $old_status !== $new_status && $new_status !== WPSEO_OnPage_Option::CANNOT_FETCH ) { + $this->notify_admins(); + } + + return true; + } + + return false; + } + + /** + * Show a notice when the website is not indexable + */ + public function show_notice() { + + $notification = $this->get_indexability_notification(); + $notification_center = Yoast_Notification_Center::get(); + + if ( $this->should_show_notice() ) { + $notification_center->add_notification( $notification ); + } + else { + $notification_center->remove_notification( $notification ); + } + } + + /** + * Builds the indexability notification + * + * @return Yoast_Notification + */ + private function get_indexability_notification() { + $notice = sprintf( + /* translators: 1: opens a link to a related knowledge base article. 2: closes the link */ + __( '%1$sYour homepage cannot be indexed by search engines%2$s. This is very bad for SEO and should be fixed.', 'wordpress-seo' ), + '', + '' + ); + + return new Yoast_Notification( + $notice, + array( + 'type' => Yoast_Notification::ERROR, + 'id' => 'wpseo-dismiss-onpageorg', + 'capabilities' => 'manage_options', + ) + ); + } + + /** + * Send a request to OnPage.org to get the indexability + * + * @return int(0)|int(1)|false + */ + protected function request_indexability() { + $parameters = array(); + if ( $this->wordfence_protection_enabled() ) { + $parameters['wf_strict'] = 1; + } + + $request = new WPSEO_OnPage_Request(); + $response = $request->do_request( get_option( 'home' ), $parameters ); + + if ( isset( $response['is_indexable'] ) ) { + return (int) $response['is_indexable']; + } + + return WPSEO_OnPage_Option::CANNOT_FETCH; + } + + /** + * Should the notice being given? + * + * @return bool + */ + protected function should_show_notice() { + // If development mode is on or the blog is not public, just don't show this notice. + if ( WPSEO_Utils::is_development_mode() || ( '0' === get_option( 'blog_public' ) ) ) { + return false; + } + + return $this->onpage_option->get_status() === WPSEO_OnPage_Option::IS_NOT_INDEXABLE; + } + + /** + * Notify the admins + */ + protected function notify_admins() { + /* + * Let's start showing the notices to all admins by removing the hide-notice meta data for each admin resulting + * in popping up the notice again. + */ + delete_metadata( 'user', 0, WPSEO_OnPage::USER_META_KEY, '', true ); + } + + /** + * Setting up the hooks. + */ + private function set_hooks() { + // Schedule cronjob when it doesn't exists on activation. + register_activation_hook( WPSEO_FILE, array( $this, 'activate_hooks' ) ); + + // Add weekly schedule to the cron job schedules. + add_filter( 'cron_schedules', array( $this, 'add_weekly_schedule' ) ); + + // Adding admin notice if necessary. + add_filter( 'admin_init', array( $this, 'show_notice' ) ); + + // Setting the action for the OnPage fetch. + add_action( 'wpseo_onpage_fetch', array( $this, 'fetch_from_onpage' ) ); + } + + /** + * Setting the cronjob to get the new indexibility status. + */ + private function set_cron() { + if ( ! wp_next_scheduled( 'wpseo_onpage_fetch' ) ) { + wp_schedule_event( time(), 'weekly', 'wpseo_onpage_fetch' ); + } + } + + /** + * Redo the fetch request for onpage + */ + private function catch_redo_listener() { + if ( filter_input( INPUT_GET, 'wpseo-redo-onpage' ) === '1' ) { + $this->is_manual_request = true; + + add_action( 'admin_init', array( $this, 'fetch_from_onpage' ) ); + } + } + + /** + * Checks if WordFence protects the site against 'fake' Google crawlers. + * + * @return boolean + */ + private function wordfence_protection_enabled() { + if ( ! class_exists( 'wfConfig' ) ) { + return false; + } + + if ( ! method_exists( 'wfConfig', 'get' ) ) { + return false; + } + + return (bool) wfConfig::get( 'blockFakeBots' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/pages/advanced.php b/wp-content/plugins/wordpress-seo/admin/pages/advanced.php new file mode 100644 index 0000000..26898e0 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/pages/advanced.php @@ -0,0 +1,61 @@ +add_tab( + new WPSEO_Option_Tab( + 'breadcrumbs', + __( 'Breadcrumbs', 'wordpress-seo' ), + array( + 'video_url' => 'https://yoa.st/screencast-breadcrumbs', + 'opt_group' => 'wpseo_internallinks', + ) + ) +); +$tabs->add_tab( + new WPSEO_Option_Tab( + 'permalinks', + __( 'Permalinks', 'wordpress-seo' ), + array( + 'video_url' => 'https://yoa.st/screencast-permalinks', + 'opt_group' => 'wpseo_permalinks', + ) + ) +); +$tabs->add_tab( + new WPSEO_Option_Tab( + 'rss', + __( 'RSS', 'wordpress-seo' ), + array( + 'video_url' => 'https://yoa.st/screencast-rss', + 'opt_group' => 'wpseo_rss', + ) + ) +); + +$active_tab = $tabs->get_active_tab(); +Yoast_Form::get_instance()->admin_header( true, $active_tab->get_opt_group() ); + +echo ''; + +$help_center = new WPSEO_Help_Center( 'advanced', $active_tab ); +$help_center->output_help_center(); + +require_once WPSEO_PATH . 'admin/views/tabs/advanced/' . $active_tab->get_name() . '.php'; + +Yoast_Form::get_instance()->admin_footer(); diff --git a/wp-content/plugins/wordpress-seo/admin/pages/dashboard.php b/wp-content/plugins/wordpress-seo/admin/pages/dashboard.php new file mode 100644 index 0000000..cf6cbe0 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/pages/dashboard.php @@ -0,0 +1,72 @@ +admin_header( true, 'wpseo' ); + +do_action( 'wpseo_all_admin_notices' ); + +if ( is_array( $options['blocking_files'] ) && count( $options['blocking_files'] ) > 0 ) { + + $xml_sitemap_options = WPSEO_Options::get_option( 'wpseo_xml' ); + if ( $xml_sitemap_options['enablexmlsitemap'] ) { + + echo '

    '; + printf( + /* translators: %1$s expands to Yoast SEO */ + _n( 'The following file is blocking your XML sitemaps from working properly. Either delete it (this can be done with the "Fix it" button) or disable %1$s XML sitemaps.', 'The following files are blocking your XML sitemaps from working properly. Either delete them (this can be done with the "Fix it" button) or disable %1$s XML sitemaps.', count( $options['blocking_files'] ), 'wordpress-seo' ), + 'Yoast SEO' + ); + foreach ( $options['blocking_files'] as $file ) { + echo '
    ', '', esc_html( $file ), ''; + } + unset( $file ); + echo '
    '; + echo '

    '; + } +} + +$tabs = new WPSEO_Option_Tabs( 'dashboard' ); +$tabs->add_tab( new WPSEO_Option_Tab( 'dashboard', __( 'Dashboard', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-notification-center' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'general', __( 'General', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-general' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'features', __( 'Features', 'wordpress-seo' ) ) ); +$knowledge_graph_label = ( 'company' === $options['company_or_person'] ) ? __( 'Company Info', 'wordpress-seo' ) : __( 'Your Info', 'wordpress-seo' ); +$tabs->add_tab( new WPSEO_Option_Tab( 'knowledge-graph', __( $knowledge_graph_label, 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-knowledge-graph' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'webmaster-tools', __( 'Webmaster Tools', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-general-search-console' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'security', __( 'Security', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-security' ) ) ); + +do_action( 'wpseo_settings_tabs_dashboard', $tabs ); + +$tabs->display( $yform, $options ); + +do_action( 'wpseo_dashboard' ); + +$yform->admin_footer(); diff --git a/wp-content/plugins/wordpress-seo/admin/pages/licenses.php b/wp-content/plugins/wordpress-seo/admin/pages/licenses.php new file mode 100644 index 0000000..26b688e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/pages/licenses.php @@ -0,0 +1,239 @@ + (object) array( + 'url' => 'https://yoast.com/wordpress/plugins/seo-premium/', + 'title' => 'Yoast SEO Premium', + /* translators: %1$s expands to Yoast SEO */ + 'desc' => sprintf( __( 'The premium version of %1$s with more features & support.', 'wordpress-seo' ), 'Yoast SEO' ), + 'installed' => false, + 'image' => plugins_url( 'images/extensions-premium-ribbon.png', WPSEO_FILE ), + 'benefits' => array(), + ), + 'video-seo' => (object) array( + 'url' => 'https://yoast.com/wordpress/plugins/video-seo/', + 'title' => 'Video SEO', + 'desc' => __( 'Optimize your videos to show them off in search results and get more clicks!', 'wordpress-seo' ), + 'installed' => false, + 'image' => plugins_url( 'images/extensions-video.png', WPSEO_FILE ), + 'benefits' => array( + __( 'Show your videos in Google Videos', 'wordpress-seo' ), + __( 'Enhance the experience of sharing posts with videos', 'wordpress-seo' ), + __( 'Make videos responsive through enabling fitvids.js', 'wordpress-seo' ), + ), + ), + 'news-seo' => (object) array( + 'url' => 'https://yoast.com/wordpress/plugins/news-seo/', + 'title' => 'News SEO', + 'desc' => __( 'Are you in Google News? Increase your traffic from Google News by optimizing for it!', 'wordpress-seo' ), + 'installed' => false, + 'image' => plugins_url( 'images/extensions-news.png', WPSEO_FILE ), + 'benefits' => array( + __( 'Optimize your site for Google News', 'wordpress-seo' ), + __( 'Immediately pings Google on the publication of a new post', 'wordpress-seo' ), + __( 'Creates XML News Sitemaps', 'wordpress-seo' ), + ), + ), + 'local-seo' => (object) array( + 'url' => 'https://yoast.com/wordpress/plugins/local-seo/', + 'title' => 'Local SEO', + 'desc' => __( 'Rank better locally and in Google Maps, without breaking a sweat!', 'wordpress-seo' ), + 'installed' => false, + 'image' => plugins_url( 'images/extensions-local.png', WPSEO_FILE ), + 'benefits' => array( + __( 'Get found by potential clients', 'wordpress-seo' ), + __( 'Easily insert Google Maps, a store locator, opening hours and more', 'wordpress-seo' ), + __( 'Improve the usability of your contact page', 'wordpress-seo' ), + ), + ), + 'woocommerce-seo' => (object) array( + 'url' => 'https://yoast.com/wordpress/plugins/yoast-woocommerce-seo/', + 'title' => 'Yoast WooCommerce SEO', + /* translators: %1$s expands to Yoast SEO */ + 'desc' => sprintf( __( 'Seamlessly integrate WooCommerce with %1$s and get extra features!', 'wordpress-seo' ), 'Yoast SEO' ), + 'installed' => false, + 'image' => plugins_url( 'images/extensions-woo.png', WPSEO_FILE ), + 'benefits' => array( + /* %1$s expands to Pinterest */ + sprintf( __( 'Improve sharing on Pinterest', 'wordpress-seo' ) ), + + /* %1$s expands to Yoast, %2$s expands to WooCommerce */ + sprintf( __( 'Use %1$s breadcrumbs instead of %2$s ones', 'wordpress-seo' ), 'Yoast', 'WooCommerce' ), + + /* %1$s expands to Yoast SEO, %2$s expands to WooCommerce */ + sprintf( __( 'A seamless integration between %1$s and %2$s', 'wordpress-seo' ), 'Yoast SEO', 'WooCommerce' ), + ), + 'buy_button' => 'WooCommerce SEO', + ), +); + +if ( class_exists( 'WPSEO_Premium' ) ) { + $extensions['seo-premium']->installed = true; +} +if ( class_exists( 'wpseo_Video_Sitemap' ) ) { + $extensions['video-seo']->installed = true; +} +if ( class_exists( 'WPSEO_News' ) ) { + $extensions['news-seo']->installed = true; +} +if ( defined( 'WPSEO_LOCAL_VERSION' ) ) { + $extensions['local-seo']->installed = true; +} +if ( ! class_exists( 'Woocommerce' ) ) { + unset( $extensions['woocommerce-seo'] ); +} +elseif ( class_exists( 'Yoast_WooCommerce_SEO' ) ) { + $extensions['woocommerce-seo']->installed = true; +} + +$utm_buy = '#utm_source=wordpress-seo-config&utm_medium=button-buy&utm_campaign=extension-page-banners'; +$utm_info = '#utm_source=wordpress-seo-config&utm_medium=button-info&utm_campaign=extension-page-banners'; + +?> + +
    + +

    + + + +
    +
    +
    + url; + ?> +

    ' . $extension->title . '' ); + ?>

    + +
      +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • +
    + + installed ) : ?> +
    + + title ); + ?> + + + ', + '', + $extension->title + ); + ?> + +

    +
    + + + +
    +

    ' . $yoast_seo_extensions . ''; + + /* translators: %1$s expands to Yoast SEO extensions */ + printf( __( '%1$s to optimize your site even further', 'wordpress-seo' ), $yoast_seo_extensions ); + ?>

    + + + + $extension ) : ?> + url; ?> + +
    + +

    title ); ?>

    + +
      + benefits as $benefit ) : ?> +
    • + +
    + + + installed ) : ?> +
    + + + buy_button ) ? $extension->buy_button : $extension->title; ?> + + + + + + ', + '', + $extension->title + ); + ?> +
    + +
    +
    + +
    +

    ', __( 'This is where you would enter the license keys for one of our premium plugins, should you activate one.', 'wordpress-seo' ), '

    '; + } + else { + do_action( 'wpseo_licenses_forms' ); + } + ?> +
    +
    + + diff --git a/wp-content/plugins/wordpress-seo/admin/pages/metas.php b/wp-content/plugins/wordpress-seo/admin/pages/metas.php new file mode 100644 index 0000000..5d474cb --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/pages/metas.php @@ -0,0 +1,63 @@ +admin_header( true, 'wpseo_titles' ); + +$tabs = new WPSEO_Option_Tabs( 'metas' ); +$tabs->add_tab( new WPSEO_Option_Tab( 'general', __( 'General', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-metas' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'home', __( 'Homepage', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-metas-homepage' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'post-types', __( 'Post Types', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-metas-post-types' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'taxonomies', __( 'Taxonomies', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-metas-taxonomies' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'archives', __( 'Archives', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-metas-archives' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'other', __( 'Other', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-metas-other' ) ) ); +$tabs->display( $yform, $options ); + +$yform->admin_footer(); + +/** + * Add help tabs + * + * @param array $tabs Current help center tabs. + * + * @return array + */ +function yoast_add_meta_options_help_center_tabs( $tabs ) { + $tabs[] = new WPSEO_Help_Center_Item( + 'basic-help', + __( 'Template explanation', 'wordpress-seo' ), + array( + 'content' => '

    ' . sprintf( __( 'The title & metas settings for %1$s are made up of variables that are replaced by specific values from the page when the page is displayed. The tabs on the left explain the available variables.', 'wordpress-seo' ), 'Yoast SEO' ) . '

    ' . '

    ' . __( 'Note that not all variables can be used in every template.', 'wordpress-seo' ) . '

    ', + ) + ); + + $tabs[] = new WPSEO_Help_Center_Item( + 'title-vars', + __( 'Basic Variables', 'wordpress-seo' ), + array( + 'content' => '

    ' . __( 'Basic Variables', 'wordpress-seo' ) . '

    ' . WPSEO_Replace_Vars::get_basic_help_texts(), + ) + ); + + $tabs[] = new WPSEO_Help_Center_Item( + 'title-vars-advanced', + __( 'Advanced Variables', 'wordpress-seo' ), + array( + 'content' => '

    ' . __( 'Advanced Variables', 'wordpress-seo' ) . '

    ' . WPSEO_Replace_Vars::get_advanced_help_texts(), + ) + ); + + return $tabs; +} diff --git a/wp-content/plugins/wordpress-seo/admin/pages/network.php b/wp-content/plugins/wordpress-seo/admin/pages/network.php new file mode 100644 index 0000000..5377190 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/pages/network.php @@ -0,0 +1,149 @@ +blogname ) ), 'updated' ); + } + else { + add_settings_error( 'wpseo_ms', 'settings_updated', sprintf( __( 'Blog %s not found.', 'wordpress-seo' ), esc_html( $restoreblog ) ), 'error' ); + } + unset( $restoreblog, $blog ); + } +} + +/* Set up selectbox dropdowns for smaller networks (usability) */ +$use_dropdown = true; +if ( get_blog_count() > 100 ) { + $use_dropdown = false; +} +else { + + if ( function_exists( 'get_sites' ) ) { // WP 4.6+. + $sites = array_map( 'get_object_vars', get_sites( array( 'deleted' => 0 ) ) ); + } + else { + $sites = wp_get_sites( array( 'deleted' => 0 ) ); + } + + if ( is_array( $sites ) && $sites !== array() ) { + $dropdown_input = array( + '-' => __( 'None', 'wordpress-seo' ), + ); + + foreach ( $sites as $site ) { + $dropdown_input[ $site['blog_id'] ] = $site['blog_id'] . ': ' . $site['domain']; + + $blog_states = array(); + if ( $site['public'] === '1' ) { + $blog_states[] = __( 'public', 'wordpress-seo' ); + } + if ( $site['archived'] === '1' ) { + $blog_states[] = __( 'archived', 'wordpress-seo' ); + } + if ( $site['mature'] === '1' ) { + $blog_states[] = __( 'mature', 'wordpress-seo' ); + } + if ( $site['spam'] === '1' ) { + $blog_states[] = __( 'spam', 'wordpress-seo' ); + } + if ( $blog_states !== array() ) { + $dropdown_input[ $site['blog_id'] ] .= ' [' . implode( ', ', $blog_states ) . ']'; + } + } + unset( $site, $blog_states ); + } + else { + $use_dropdown = false; + } + unset( $sites ); +} + +$yform->admin_header( false, 'wpseo_ms' ); + +echo '

    ', __( 'MultiSite Settings', 'wordpress-seo' ), '

    '; +echo '
    '; +wp_nonce_field( 'wpseo-network-settings', '_wpnonce', true, true ); + +/* @internal Important: Make sure the options added to the array here are in line with the options set in the WPSEO_Option_MS::$allowed_access_options property */ +$yform->select( + 'access', + /* translators: %1$s expands to Yoast SEO */ + sprintf( __( 'Who should have access to the %1$s settings', 'wordpress-seo' ), 'Yoast SEO' ), + array( + 'admin' => __( 'Site Admins (default)', 'wordpress-seo' ), + 'superadmin' => __( 'Super Admins only', 'wordpress-seo' ), + ), + 'wpseo_ms' +); + +if ( $use_dropdown === true ) { + $yform->select( + 'defaultblog', + __( 'New sites in the network inherit their SEO settings from this site', 'wordpress-seo' ), + $dropdown_input, + 'wpseo_ms' + ); + echo '

    ' . __( 'Choose the site whose settings you want to use as default for all sites that are added to your network. If you choose \'None\', the normal plugin defaults will be used.', 'wordpress-seo' ) . '

    '; +} +else { + $yform->textinput( 'defaultblog', __( 'New sites in the network inherit their SEO settings from this site', 'wordpress-seo' ), 'wpseo_ms' ); + echo '

    ' . sprintf( __( 'Enter the %sSite ID%s for the site whose settings you want to use as default for all sites that are added to your network. Leave empty for none (i.e. the normal plugin defaults will be used).', 'wordpress-seo' ), '', '' ) . '

    '; +} + echo '

    ' . __( 'Take note:', 'wordpress-seo' ) . ' ' . __( 'Privacy sensitive (FB admins and such), theme specific (title rewrite) and a few very site specific settings will not be imported to new blogs.', 'wordpress-seo' ) . '

    '; + + +echo ''; +echo '
    '; + +echo '

    ' . __( 'Restore site to default settings', 'wordpress-seo' ) . '

    '; +echo '
    '; +wp_nonce_field( 'wpseo-network-restore', '_wpnonce', true, true ); +echo '

    ' . __( 'Using this form you can reset a site to the default SEO settings.', 'wordpress-seo' ) . '

    '; + +if ( $use_dropdown === true ) { + unset( $dropdown_input['-'] ); + $yform->select( + 'restoreblog', + __( 'Site ID', 'wordpress-seo' ), + $dropdown_input, + 'wpseo_ms' + ); +} +else { + $yform->textinput( 'restoreblog', __( 'Blog ID', 'wordpress-seo' ), 'wpseo_ms' ); +} + +echo ''; +echo '
    '; + +$yform->admin_footer( false ); diff --git a/wp-content/plugins/wordpress-seo/admin/pages/social.php b/wp-content/plugins/wordpress-seo/admin/pages/social.php new file mode 100644 index 0000000..0890d45 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/pages/social.php @@ -0,0 +1,23 @@ +admin_header( true, 'wpseo_social' ); + +$tabs = new WPSEO_Option_Tabs( 'social' ); +$tabs->add_tab( new WPSEO_Option_Tab( 'accounts', __( 'Accounts', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-social-accounts' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'facebook', __( 'Facebook', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-social-facebook' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'twitterbox', __( 'Twitter', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-social-twitter' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'pinterest', __( 'Pinterest', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-social-pinterest' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'google', __( 'Google+', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-social-google' ) ) ); +$tabs->display( $yform ); + +$yform->admin_footer(); diff --git a/wp-content/plugins/wordpress-seo/admin/pages/tools.php b/wp-content/plugins/wordpress-seo/admin/pages/tools.php new file mode 100644 index 0000000..dd71799 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/pages/tools.php @@ -0,0 +1,88 @@ +admin_header( false ); + +if ( '' === $tool_page ) { + + $tools = array( + 'bulk-editor' => array( + 'title' => __( 'Bulk editor', 'wordpress-seo' ), + 'desc' => __( 'This tool allows you to quickly change titles and descriptions of your posts and pages without having to go into the editor for each page.', 'wordpress-seo' ), + ), + 'import-export' => array( + 'title' => __( 'Import and Export', 'wordpress-seo' ), + 'desc' => __( 'Import settings from other SEO plugins and export your settings for re-use on (another) blog.', 'wordpress-seo' ), + ), + ); + if ( WPSEO_Utils::allow_system_file_edit() === true && ! is_multisite() ) { + $tools['file-editor'] = array( + 'title' => __( 'File editor', 'wordpress-seo' ), + 'desc' => __( 'This tool allows you to quickly change important files for your SEO, like your robots.txt and, if you have one, your .htaccess file.', 'wordpress-seo' ), + ); + } + + /* + Temporary disabled. See: https://github.com/Yoast/wordpress-seo/issues/4532 + + $tools['recalculate'] = array( + 'href' => '#TB_inline?width=300&height=150&inlineId=wpseo_recalculate', + 'attr' => "id='wpseo_recalculate_link' class='thickbox'", + 'title' => __( 'Recalculate SEO scores', 'wordpress-seo' ), + 'desc' => __( 'Recalculate SEO scores for all pieces of content with a focus keyword.', 'wordpress-seo' ), + ); + + if ( filter_input( INPUT_GET, 'recalculate' ) === '1' ) { + $tools['recalculate']['attr'] .= "data-open='open'"; + } + */ + + /* translators: %1$s expands to Yoast SEO */ + echo '

    ', sprintf( __( '%1$s comes with some very powerful built-in tools:', 'wordpress-seo' ), 'Yoast SEO' ), '

    '; + + asort( $tools ); + + echo '
      '; + + $admin_url = admin_url( 'admin.php?page=wpseo_tools' ); + + foreach ( $tools as $slug => $tool ) { + $href = ( ! empty( $tool['href'] ) ) ? $admin_url . $tool['href'] : add_query_arg( array( 'tool' => $slug ) , $admin_url ); + $attr = ( ! empty( $tool['attr'] ) ) ? $tool['attr'] : ''; + + echo '
    • '; + echo '', esc_html( $tool['title'] ), '
      '; + echo $tool['desc']; + echo '
    • '; + } + echo '
    '; + + echo ''; + +} +else { + echo '', __( '« Back to Tools page', 'wordpress-seo' ), ''; + + $tool_pages = array( 'bulk-editor', 'import-export' ); + + if ( WPSEO_Utils::allow_system_file_edit() === true && ! is_multisite() ) { + $tool_pages[] = 'file-editor'; + } + + if ( in_array( $tool_page, $tool_pages ) ) { + require_once WPSEO_PATH . 'admin/views/tool-' . $tool_page . '.php'; + } +} + +$yform->admin_footer( false ); diff --git a/wp-content/plugins/wordpress-seo/admin/pages/xml-sitemaps.php b/wp-content/plugins/wordpress-seo/admin/pages/xml-sitemaps.php new file mode 100644 index 0000000..192f8e5 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/pages/xml-sitemaps.php @@ -0,0 +1,52 @@ + whomever] check for other sitemap plugins which may conflict ? + * @todo - [JRF => whomever] check for existance of .xls rewrite rule in .htaccess from + * google-sitemaps-plugin/generator and remove as it will cause errors for our sitemaps + * (or inform the user and disallow enabling of sitemaps ) + * @todo - [JRF => whomever] check if anything along these lines is already being done + */ + + +if ( ! defined( 'WPSEO_VERSION' ) ) { + header( 'Status: 403 Forbidden' ); + header( 'HTTP/1.1 403 Forbidden' ); + exit(); +} + +$yform = Yoast_Form::get_instance(); +$yform->admin_header( true, 'wpseo_xml' ); + +$options = get_option( 'wpseo_xml' ); + +echo '
    '; +$yform->light_switch( 'enablexmlsitemap', __( 'XML sitemap functionality', 'wordpress-seo' ) ); + +$tabs = new WPSEO_Option_Tabs( 'sitemaps' ); +$tabs->add_tab( new WPSEO_Option_Tab( 'general', __( 'General', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-sitemaps' ) ) ); + +$title_options = WPSEO_Options::get_option( 'wpseo_titles' ); + +if ( empty( $title_options['disable-author'] ) ) { + $tabs->add_tab( new WPSEO_Option_Tab( 'user-sitemap', __( 'User sitemap', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-sitemaps-user-sitemap' ) ) ); +} + +$tabs->add_tab( new WPSEO_Option_Tab( 'post-types', __( 'Post Types', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-sitemaps-post-types' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'exclude-post', __( 'Excluded Posts', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-sitemaps-exclude-post' ) ) ); +$tabs->add_tab( new WPSEO_Option_Tab( 'taxonomies', __( 'Taxonomies', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-sitemaps-taxonomies' ) ) ); + +echo '
    '; +$tabs->display( $yform, $options ); +echo '
    '; + + +/** + * Fires at the end of XML Sitemaps configuration form. + */ +do_action( 'wpseo_xmlsitemaps_config' ); + +$yform->admin_footer(); diff --git a/wp-content/plugins/wordpress-seo/admin/recalculate/class-recalculate-posts.php b/wp-content/plugins/wordpress-seo/admin/recalculate/class-recalculate-posts.php new file mode 100644 index 0000000..bf7b072 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/recalculate/class-recalculate-posts.php @@ -0,0 +1,149 @@ +save_score( $score ); + } + } + + /** + * Save the score. + * + * @param array $score The score to save. + */ + protected function save_score( array $score ) { + WPSEO_Meta::set_value( 'linkdex', $score['score'], $score['item_id'] ); + } + + /** + * Get the posts from the database by doing a WP_Query. + * + * @param integer $paged The page. + * + * @return string + */ + protected function get_items( $paged ) { + $items_per_page = max( 1, $this->items_per_page ); + $post_query = new WP_Query( + array( + 'post_type' => 'any', + 'meta_key' => '_yoast_wpseo_focuskw', + 'posts_per_page' => $items_per_page, + 'paged' => $paged, + ) + ); + + return $post_query->get_posts(); + } + + /** + * Map the posts to a response array + * + * @param WP_Post $item The post for which to build the analyzer data. + * + * @return array + */ + protected function item_to_response( $item ) { + $focus_keyword = WPSEO_Meta::get_value( 'focuskw', $item->ID ); + + $content = $item->post_content; + + // Check if there's a featured image. + $content .= $this->add_featured_image( $item ); + + /** + * Filter the post content for use in the SEO score recalculation. + * + * @param string $content Content of the post. Modify to reflect front-end content. + * @param WP_Post $item The Post object the content comes from. + */ + $content = apply_filters( 'wpseo_post_content_for_recalculation', $content, $item ); + + // Apply shortcodes. + $content = do_shortcode( $content ); + + return array( + 'post_id' => $item->ID, + 'text' => $content, + 'keyword' => $focus_keyword, + 'url' => urldecode( $item->post_name ), + 'pageTitle' => apply_filters( 'wpseo_title', wpseo_replace_vars( $this->get_title( $item->ID, $item->post_type ), $item ) ), + 'meta' => apply_filters( 'wpseo_metadesc', wpseo_replace_vars( $this->get_meta_description( $item->ID, $item->post_type ), $item ) ), + 'keyword_usage' => array( + $focus_keyword => WPSEO_Meta::keyword_usage( $focus_keyword, $item->ID ), + ), + ); + } + + /** + * Get the title for given post + * + * @param integer $post_id The ID of the post for which to get the title. + * @param string $post_type The post type. + * + * @return mixed|string + */ + private function get_title( $post_id, $post_type ) { + $title = WPSEO_Meta::get_value( 'title', $post_id ); + if ( '' !== $title ) { + return $title; + } + + $default_from_options = $this->default_from_options( 'title-tax', $post_type ); + if ( false !== $default_from_options ) { + return str_replace( ' %%page%% ', ' ', $default_from_options ); + } + + return '%%title%%'; + } + + /** + * Get the meta description for given post + * + * @param integer $post_id The ID of the post for which to get the meta description. + * @param string $post_type The post type. + * + * @return bool|string + */ + private function get_meta_description( $post_id, $post_type ) { + $meta_description = WPSEO_Meta::get_value( 'metadesc', $post_id ); + if ( '' !== $meta_description ) { + return $meta_description; + } + + $default_from_options = $this->default_from_options( 'metadesc', $post_type ); + if ( false !== $default_from_options ) { + return $default_from_options; + } + + return ''; + } + + /** + * Retrieves the associated featured image if there is one present. + * + * @param WP_Post $item The post item to check for a featured image. + * + * @return string The image string. + */ + private function add_featured_image( $item ) { + if ( ! has_post_thumbnail( $item->ID ) ) { + return ''; + } + + return ' ' . get_the_post_thumbnail( $item->ID ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/recalculate/class-recalculate-terms.php b/wp-content/plugins/wordpress-seo/admin/recalculate/class-recalculate-terms.php new file mode 100644 index 0000000..6f3111e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/recalculate/class-recalculate-terms.php @@ -0,0 +1,149 @@ +items_per_page ); + + return get_terms( + get_taxonomies(), + array( + 'hide_empty' => false, + 'number' => $items_per_page, + 'offset' => $items_per_page * abs( $paged - 1 ), + ) + ); + } + + /** + * Convert the given term into a analyzable object. + * + * @param mixed $item The term for which to build the analyzer data. + * + * @return array + */ + protected function item_to_response( $item ) { + $focus_keyword = $this->get_focus_keyword( $item ); + $title = str_replace( ' %%page%% ', ' ', $this->get_title( $item ) ); + $meta = $this->get_meta_description( $item ); + + $description = $item->description; + + /** + * Filter the term description for recalculation. + * + * @param string $description Content of the term. Modify to reflect front-end content. + * @oaram WP_Term $item The term the description comes from. + */ + $description = apply_filters( 'wpseo_term_description_for_recalculation', $description, $item ); + + return array( + 'term_id' => $item->term_id, + 'taxonomy' => $item->taxonomy, + 'text' => $description, + 'keyword' => $focus_keyword, + 'url' => urldecode( $item->slug ), + 'pageTitle' => apply_filters( 'wpseo_title', wpseo_replace_vars( $title, $item, array( 'page' ) ) ), + 'meta' => apply_filters( 'wpseo_metadesc', wpseo_replace_vars( $meta, $item ) ), + 'keyword_usage' => array( + $focus_keyword => WPSEO_Taxonomy_Meta::get_keyword_usage( $focus_keyword, $item->term_id, $item->taxonomy ), + ), + ); + } + + /** + * Gets the focus keyword for the term + * + * @param stdClass|WP_Term $term Term to determine the keyword for. + * + * @return bool|string + */ + private function get_focus_keyword( $term ) { + $focus_keyword = WPSEO_Taxonomy_Meta::get_term_meta( 'focuskw', $term->term_id, $term->taxonomy ); + if ( ! empty( $focus_keyword ) ) { + return $focus_keyword; + } + + return $term->name; + } + + /** + * Get the title for given term + * + * @param stdClass|WP_Term $term The term object. + * + * @return mixed|string + */ + private function get_title( $term ) { + $title = WPSEO_Taxonomy_Meta::get_term_meta( $term->term_id, $term->taxonomy, 'title' ); + if ( '' !== $title ) { + return $title; + } + + $default_from_options = $this->default_from_options( 'title-tax', $term->taxonomy ); + if ( false !== $default_from_options ) { + return $default_from_options; + } + + return '%%title%%'; + } + + /** + * Get the meta description for given post + * + * @param stdClass|WP_Term $term The term object. + * + * @return bool|string + */ + private function get_meta_description( $term ) { + $meta_description = WPSEO_Taxonomy_Meta::get_term_meta( $term->term_id, $term->taxonomy, 'desc' ); + if ( '' !== $meta_description ) { + return $meta_description; + } + + $default_from_options = $this->default_from_options( 'metadesc-tax', $term->taxonomy ); + if ( false !== $default_from_options ) { + return $default_from_options; + } + + return ''; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/recalculate/class-recalculate.php b/wp-content/plugins/wordpress-seo/admin/recalculate/class-recalculate.php new file mode 100644 index 0000000..372d2c0 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/recalculate/class-recalculate.php @@ -0,0 +1,107 @@ +options = WPSEO_Options::get_all(); + + $items = $this->get_items( $paged ); + + $return['items'] = $this->parse_items( $items ); + $return['total_items'] = count( $items ); + + if ( $return['total_items'] >= $this->items_per_page ) { + $return['next_page'] = ( $paged + 1 ); + } + + return $return; + } + + /** + * Parse the posts|terms with the value we need + * + * @param array $items The items to parse. + * + * @return array + */ + protected function parse_items( array $items ) { + $return = array(); + foreach ( $items as $item ) { + $response = $this->item_to_response( $item ); + if ( ! empty( $response ) ) { + $return[] = $response; + } + } + + return $return; + } + + /** + * Get default from the options for given field + * + * @param string $field The field for which to get the default options. + * @param string $suffix The post type. + * + * @return bool|string + */ + protected function default_from_options( $field, $suffix ) { + $target_option_field = $field . '-' . $suffix; + if ( ! empty( $this->options[ $target_option_field ] ) ) { + return $this->options[ $target_option_field ]; + } + + return false; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-columns.php b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-columns.php new file mode 100644 index 0000000..60540f6 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-columns.php @@ -0,0 +1,249 @@ +taxonomy = $this->get_taxonomy(); + + if ( ! empty( $this->taxonomy ) ) { + add_filter( 'manage_edit-' . $this->taxonomy . '_columns', array( $this, 'add_columns' ) ); + add_filter( 'manage_' . $this->taxonomy . '_custom_column', array( $this, 'parse_column' ), 10, 3 ); + } + + $this->analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + $this->analysis_readability = new WPSEO_Metabox_Analysis_Readability(); + } + + /** + * Adds an SEO score column to the terms table, right after the description column. + * + * @param array $columns Current set columns. + * + * @return array + */ + public function add_columns( array $columns ) { + + if ( $this->is_metabox_hidden() === true ) { + return $columns; + } + + $new_columns = array(); + + foreach ( $columns as $column_name => $column_value ) { + $new_columns[ $column_name ] = $column_value; + + if ( $column_name === 'description' && $this->analysis_seo->is_enabled() ) { + $new_columns['wpseo_score'] = __( 'SEO', 'wordpress-seo' ); + } + + if ( $column_name === 'description' && $this->analysis_readability->is_enabled() ) { + $new_columns['wpseo_score_readability'] = __( 'Readability', 'wordpress-seo' ); + } + } + + return $new_columns; + } + + /** + * Parses the column. + * + * @param string $content The current content of the column. + * @param string $column_name The name of the column. + * @param integer $term_id ID of requested taxonomy. + * + * @return string + */ + public function parse_column( $content, $column_name, $term_id ) { + + switch ( $column_name ) { + case 'wpseo_score': + return $this->get_score_value( $term_id ); + + break; + + case 'wpseo_score_readability': + return $this->get_score_readability_value( $term_id ); + break; + } + + return $content; + } + + + /** + * Returns the posted/get taxonomy value if it is set. + * + * @return string|null + */ + private function get_taxonomy() { + if ( defined( 'DOING_AJAX' ) && DOING_AJAX === true ) { + return FILTER_INPUT( INPUT_POST, 'taxonomy' ); + } + + return FILTER_INPUT( INPUT_GET, 'taxonomy' ); + } + + /** + * Parses the value for the score column. + * + * @param integer $term_id ID of requested term. + * + * @return string + */ + private function get_score_value( $term_id ) { + $term = get_term( $term_id, $this->taxonomy ); + + // When the term isn't indexable. + if ( ! $this->is_indexable( $term ) ) { + return $this->create_score_icon( + new WPSEO_Rank( WPSEO_Rank::NO_INDEX ), + __( 'Term is set to noindex.', 'wordpress-seo' ) + ); + } + + // When there is a focus key word. + if ( $focus_keyword = $this->get_focus_keyword( $term ) ) { + $score = (int) WPSEO_Taxonomy_Meta::get_term_meta( $term_id, $this->taxonomy, 'linkdex' ); + $rank = WPSEO_Rank::from_numeric_score( $score ); + + return $this->create_score_icon( $rank, $rank->get_label() ); + } + + // Default icon. + return $this->create_score_icon( + new WPSEO_Rank( WPSEO_Rank::NO_FOCUS ), + __( 'Focus keyword not set.', 'wordpress-seo' ) + ); + } + + /** + * Parses the value for the readability score column. + * + * @param int $term_id ID of the requested term. + * + * @return string The HTML for the readability score indicator. + */ + private function get_score_readability_value( $term_id ) { + $score = (int) WPSEO_Taxonomy_Meta::get_term_meta( $term_id, $this->taxonomy, 'content_score' ); + $rank = WPSEO_Rank::from_numeric_score( $score ); + + return $this->create_score_icon( $rank ); + } + + /** + * Creates an icon by the given values. + * + * @param WPSEO_Rank $rank The ranking object. + * @param string $title Optional. The title to show. Defaults to the rank label. + * + * @return string The HTML for a score icon. + */ + private function create_score_icon( WPSEO_Rank $rank, $title = '' ) { + if ( empty( $title ) ) { + $title = $rank->get_label(); + } + + return '' . $title . ''; + } + + /** + * Check if the taxonomy is indexable. + * + * @param mixed $term The current term. + * + * @return bool + */ + private function is_indexable( $term ) { + static $options; + + // Saving the options once, because it's static. + if ( $options === null ) { + $options = WPSEO_Options::get_all(); + } + + // When the no_index value is not empty and not default, check if its value is index. + $no_index = WPSEO_Taxonomy_Meta::get_term_meta( $term->term_id, $this->taxonomy, 'noindex' ); + if ( ! empty( $no_index ) && $no_index !== 'default' ) { + return ( $no_index === 'index' ); + } + + // Check if the default for taxonomy is empty (this will be index). + $no_index_key = 'noindex-tax-' . $term->taxonomy; + if ( is_object( $term ) && ( isset( $options[ $no_index_key ] ) ) ) { + return ( empty( $options[ $no_index_key ] ) ); + } + + return true; + } + + /** + * Returns the focus keyword if this is set, otherwise it will give the term name. + * + * @param stdClass|WP_Term $term The current term. + * + * @return string + */ + private function get_focus_keyword( $term ) { + if ( $focus_keyword = WPSEO_Taxonomy_Meta::get_term_meta( 'focuskw', $term->term_id, $term->taxonomy ) ) { + return $focus_keyword; + } + + return $term->name; + } + + /** + * Checks if a taxonomy is being added via a POST method. If not, it defaults to a GET request. + * + * @return int + */ + private function get_taxonomy_input_type() { + + if ( ! empty( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) { + return INPUT_POST; + } + + return INPUT_GET; + } + + /** + * Test whether the metabox should be hidden either by choice of the admin + * + * @since 3.1 + * + * @param string $taxonomy (optional) The post type to test, defaults to the current post post_type. + * + * @return bool Whether or not the meta box (and associated columns etc) should be hidden + */ + private function is_metabox_hidden( $taxonomy = null ) { + $get_taxonomy_type = filter_input( $this->get_taxonomy_input_type(), 'taxonomy' ); + + if ( ! isset( $taxonomy ) && $get_taxonomy_type ) { + $taxonomy = sanitize_text_field( $get_taxonomy_type ); + } + + if ( isset( $taxonomy ) ) { + // Don't make static as taxonomies may still be added during the run. + $custom_taxonomies = get_taxonomies( array( 'public' => true ), 'names' ); + $options = get_option( 'wpseo_titles' ); + + return ( ( isset( $options[ 'hideeditbox-tax-' . $taxonomy ] ) && $options[ 'hideeditbox-tax-' . $taxonomy ] === true ) || in_array( $taxonomy, $custom_taxonomies ) === false ); + } + + return false; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-content-fields.php b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-content-fields.php new file mode 100644 index 0000000..7b2ed02 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-content-fields.php @@ -0,0 +1,73 @@ + $this->get_field_config( + __( 'Snippet editor', 'wordpress-seo' ), + '', + 'snippetpreview', + array( + 'help-button' => __( 'Show information about the snippet editor', 'wordpress-seo' ), + 'help' => sprintf( __( 'This is a rendering of what this post might look like in Google\'s search results. %sLearn more about the Snippet Preview%s.', 'wordpress-seo' ), '', '' ), + ) + ), + 'focuskw' => $this->get_field_config( + __( 'Focus keyword', 'wordpress-seo' ), + '', + 'focuskeyword', + array( + 'help-button' => __( 'Show information about the focus keyword', 'wordpress-seo' ), + 'help' => sprintf( __( 'Pick the main keyword or keyphrase that this post/page is about. %sLearn more about the Focus Keyword%s.', 'wordpress-seo' ), '', '' ), + ) + ), + 'analysis' => $this->get_field_config( + __( 'Analysis', 'wordpress-seo' ), + '', + 'pageanalysis', + array( + 'help-button' => __( 'Show information about the content analysis', 'wordpress-seo' ), + 'help' => sprintf( __( 'This is the content analysis, a collection of content checks that analyze the content of your page. %sLearn more about the Content Analysis Tool%s.', 'wordpress-seo' ), '', '' ), + ) + ), + 'title' => $this->get_field_config( + '', + '', + 'hidden', + '' + ), + 'desc' => $this->get_field_config( + '', + '', + 'hidden', + '' + ), + 'linkdex' => $this->get_field_config( + '', + '', + 'hidden', + '' + ), + 'content_score' => $this->get_field_config( + '', + '', + 'hidden', + '' + ), + ); + + return $this->filter_hidden_fields( $fields ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields-presenter.php b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields-presenter.php new file mode 100644 index 0000000..0e07097 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields-presenter.php @@ -0,0 +1,230 @@ +tax_meta = WPSEO_Taxonomy_Meta::get_term_meta( (int) $term->term_id, $term->taxonomy ); + } + + /** + * Displaying the form fields + * + * @param array $fields Array with the fields that will be displayed. + */ + public function html( array $fields ) { + $content = ''; + foreach ( $fields as $field_name => $field_configuration ) { + $content .= $this->form_row( 'wpseo_' . $field_name, $field_configuration ); + } + return $content; + } + + /** + * Create a row in the form table. + * + * @param string $field_name Variable the row controls. + * @param array $field_configuration Array with the field configuration. + */ + private function form_row( $field_name, array $field_configuration ) { + $esc_field_name = esc_attr( $field_name ); + + $options = (array) $field_configuration['options']; + + if ( ! empty( $field_configuration['description'] ) ) { + $options['description'] = $field_configuration['description']; + } + + $label = $this->get_label( $field_configuration['label'], $esc_field_name ); + $field = $this->get_field( $field_configuration['type'], $esc_field_name, $this->get_field_value( $field_name ), $options ); + $help_content = isset( $field_configuration['options']['help'] ) ? $field_configuration['options']['help'] : ''; + $help_button_text = isset( $field_configuration['options']['help-button'] ) ? $field_configuration['options']['help-button'] : ''; + $help = new WPSEO_Admin_Help_Panel( $field_name, $help_button_text, $help_content ); + + if ( in_array( $field_configuration['type'], array( 'focuskeyword', 'pageanalysis', 'snippetpreview' ) ) ) { + return $this->parse_section_row( $field, $field_configuration['type'], $help ); + } + + return $this->parse_row( $label, $help, $field ); + } + + /** + * Generates the html for the given field config. + * + * @param string $field_type The fieldtype, e.g: text, checkbox, etc. + * @param string $field_name The name of the field. + * @param string $field_value The value of the field. + * @param array $options Array with additional options. + * + * @return string + */ + private function get_field( $field_type, $field_name, $field_value, array $options ) { + + $class = $this->get_class( $options ); + $field = $description = $aria_describedby = ''; + + if ( ! empty( $options['description'] ) ) { + $aria_describedby = ' aria-describedby="' . $field_name . '-desc"'; + $description = '

    ' . $options['description'] . '

    '; + } + + switch ( $field_type ) { + case 'div' : + $field .= '
    '; + break; + + case 'snippetpreview': + $field .= '
    '; + break; + case 'pageanalysis' : + $field .= '
    '; + $field .= '
    '; + $field .= '

    ' . __( 'Analysis', 'wordpress-seo' ) .'

    '; + $field .= '
    '; + $field .= '
    '; + $field .= '
    '; + break; + case 'focuskeyword': + $field .= '
    '; + $field .= '
    '; + $field .= '

    ' . __( 'Focus keyword', 'wordpress-seo' ) . '

    '; + $field .= ''; + $field .= '
    '; + $field .= '
    '; + $field .= '
    '; + break; + case 'text' : + $field .= ''; + break; + case 'checkbox' : + $field .= ''; + break; + case 'textarea' : + $rows = 3; + if ( ! empty( $options['rows'] ) ) { + $rows = $options['rows']; + } + $field .= ''; + break; + case 'upload' : + $field .= ''; + $field .= ''; + break; + case 'select' : + if ( is_array( $options ) && $options !== array() ) { + $field .= ''; + } + break; + case 'hidden' : + $field .= ''; + break; + } + + return $field . $description; + } + + /** + * Getting the value for given field_name + * + * @param string $field_name The fieldname to get the value for. + * + * @return string + */ + private function get_field_value( $field_name ) { + if ( isset( $this->tax_meta[ $field_name ] ) && $this->tax_meta[ $field_name ] !== '' ) { + return $this->tax_meta[ $field_name ]; + } + + return ''; + } + + /** + * Getting the class attributes if $options contains a class key + * + * @param array $options The array with field options. + * + * @return string + */ + private function get_class( array $options ) { + if ( ! empty( $options['class'] ) ) { + return ' class="' . esc_attr( $options['class'] ) . '"'; + } + + return ''; + } + + /** + * Getting the label HTML + * + * @param string $label The label value. + * @param string $field_name The target field. + * + * @return string + */ + private function get_label( $label, $field_name ) { + if ( $label !== '' ) { + return ''; + } + + return ''; + } + + /** + * Returns the HTML for the row which contains label, help and the field. + * + * @param string $label The html for the label if there was a label set. + * @param WPSEO_Admin_Help_Panel $help The help panel to render in this row. + * @param string $field The html for the field. + * + * @return string + */ + private function parse_row( $label, WPSEO_Admin_Help_Panel $help, $field ) { + if ( $label !== '' || $help !== '' ) { + return '' . $label . $help->get_button_html() . '' . $help->get_panel_html() . $field . ''; + } + + return $field; + } + + /** + * Creates a sections specific row. + * + * @param string $content The content to show. + * @param string $esc_form_key Escaped form key name. + * @param WPSEO_Admin_Help_Panel $help The help button. + * + * @return string + */ + private function parse_section_row( $content, $esc_form_key, WPSEO_Admin_Help_Panel $help ) { + $html = ''; + $html .= $content; + $html .= '
    ' . $help->get_button_html() . $help->get_panel_html() . '
    '; + $html .= ''; + return $html; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields.php b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields.php new file mode 100644 index 0000000..2fdafbd --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields.php @@ -0,0 +1,91 @@ +term = $term; + if ( $options !== null ) { + $this->options = $options; + } + else { + $this->options = WPSEO_Options::get_options( array( + 'wpseo_titles', + 'wpseo_internallinks', + 'wpseo_social', + ) ); + } + } + + /** + * This method should return the fields + * + * @return array + */ + abstract public function get(); + + /** + * Returns array with the field data + * + * @param string $label The label displayed before the field. + * @param string $description Description which will explain the field. + * @param string $type The field type, for example: input, select. + * @param string|array $options Optional. Array with additional options. + * @param bool $hide Should the field be hidden. + * + * @return array + */ + protected function get_field_config( $label, $description, $type = 'text', $options = '', $hide = false ) { + return array( + 'label' => $label, + 'description' => $description, + 'type' => $type, + 'options' => $options, + 'hide' => $hide, + ); + } + + /** + * Filter the hidden fields. + * + * @param array $fields Array with the form fields that has will be filtered. + * + * @return array + */ + protected function filter_hidden_fields( array $fields ) { + foreach ( $fields as $field_name => $field_options ) { + if ( ! empty( $field_options['hide'] ) ) { + unset( $fields[ $field_name ] ); + } + } + + return $fields; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-metabox.php b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-metabox.php new file mode 100644 index 0000000..23de846 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-metabox.php @@ -0,0 +1,410 @@ +term = $term; + $this->taxonomy = $taxonomy; + $this->taxonomy_tab_content = new WPSEO_Taxonomy_Fields_Presenter( $this->term ); + + add_action( 'admin_footer', array( $this, 'template_generic_tab' ) ); + add_action( 'admin_footer', array( $this, 'template_keyword_tab' ) ); + } + + /** + * Shows the Yoast SEO metabox for the term. + */ + public function display() { + + $content_sections = $this->get_content_sections(); + + $product_title = 'Yoast SEO'; + if ( file_exists( WPSEO_PATH . 'premium/' ) ) { + $product_title .= ' Premium'; + } + + printf( '

    %1$s

    ', $product_title ); + + echo '
    '; + + $helpcenter_tab = new WPSEO_Option_Tab( 'tax-metabox', 'Meta box', + array( 'video_url' => 'https://yoa.st/metabox-taxonomy-screencast' ) ); + + $helpcenter = new WPSEO_Help_Center( 'tax-metabox', $helpcenter_tab ); + $helpcenter->output_help_center(); + + echo '
    '; + + if ( ! defined( 'WPSEO_PREMIUM_FILE' ) ) { + echo $this->get_buy_premium_link(); + } + + echo '
      '; + + foreach ( $content_sections as $content_section ) { + if ( $content_section->name === 'premium' ) { + continue; + } + + $content_section->display_link(); + } + + echo '
    '; + + foreach ( $content_sections as $content_section ) { + $content_section->display_content(); + } + echo '
    '; + } + + /** + * Returns the relevant metabox sections for the current view. + * + * @return WPSEO_Metabox_Section[] + */ + private function get_content_sections() { + $content_sections = array( + $this->get_content_meta_section(), + $this->get_social_meta_section(), + $this->get_settings_meta_section(), + ); + + if ( ! defined( 'WPSEO_PREMIUM_FILE' ) ) { + $content_sections[] = $this->get_buy_premium_section(); + } + + return $content_sections; + } + + /** + * Returns the metabox section for the content analysis. + * + * @return WPSEO_Metabox_Section + */ + private function get_content_meta_section() { + $taxonomy_content_fields = new WPSEO_Taxonomy_Content_Fields( $this->term ); + $content = $this->taxonomy_tab_content->html( $taxonomy_content_fields->get() ); + + $tab = new WPSEO_Metabox_Form_Tab( + 'content', + $content, + __( '', 'wordpress-seo' ), + array( + 'tab_class' => 'yoast-seo__remove-tab', + ) + ); + + return new WPSEO_Metabox_Tab_Section( + 'content', + '' . __( 'Content optimization', 'wordpress-seo' ) . '' . $this->traffic_light_svg() . '', + array( $tab ), + array( + 'link_aria_label' => __( 'Content optimization', 'wordpress-seo' ), + 'link_class' => 'yoast-tooltip yoast-tooltip-e', + ) + ); + } + + /** + * Returns the metabox section for the settings. + * + * @return WPSEO_Metabox_Section + */ + private function get_settings_meta_section() { + $taxonomy_settings_fields = new WPSEO_Taxonomy_Settings_Fields( $this->term ); + $content = $this->taxonomy_tab_content->html( $taxonomy_settings_fields->get() ); + + $tab = new WPSEO_Metabox_Form_Tab( + 'settings', + $content, + __( 'Settings', 'wordpress-seo' ), + array( + 'single' => true, + ) + ); + + return new WPSEO_Metabox_Tab_Section( + 'settings', + '' . __( 'Settings', 'wordpress-seo' ) . '', + array( $tab ), + array( + 'link_aria_label' => __( 'Settings', 'wordpress-seo' ), + 'link_class' => 'yoast-tooltip yoast-tooltip-e', + ) + ); + } + + /** + * Returns the metabox section for the social settings. + * + * @return WPSEO_Metabox_Section + */ + private function get_social_meta_section() { + $options = WPSEO_Options::get_option( 'wpseo_social' ); + $taxonomy_social_fields = new WPSEO_Taxonomy_Social_Fields( $this->term ); + + $tabs = array(); + $single = true; + + if ( $options['opengraph'] === true && $options['twitter'] === true ) { + $single = null; + } + + if ( $options['opengraph'] === true ) { + $facebook_meta_fields = $taxonomy_social_fields->get_by_network( 'opengraph' ); + + $tabs[] = new WPSEO_Metabox_Form_Tab( + 'facebook', + $this->taxonomy_tab_content->html( $facebook_meta_fields ), + '' . __( 'Facebook / Open Graph metadata', 'wordpress-seo' ) . '', + array( + 'link_aria_label' => __( 'Facebook / Open Graph metadata', 'wordpress-seo' ), + 'link_class' => 'yoast-tooltip yoast-tooltip-se', + 'single' => $single, + ) + ); + } + + if ( $options['twitter'] === true ) { + $twitter_meta_fields = $taxonomy_social_fields->get_by_network( 'twitter' ); + + $tabs[] = new WPSEO_Metabox_Form_Tab( + 'twitter', + $this->taxonomy_tab_content->html( $twitter_meta_fields ), + '' . __( 'Twitter metadata', 'wordpress-seo' ) . '', + array( + 'link_aria_label' => __( 'Twitter metadata', 'wordpress-seo' ), + 'link_class' => 'yoast-tooltip yoast-tooltip-se', + 'single' => $single, + ) + ); + } + + return new WPSEO_Metabox_Tab_Section( + 'social', + '' . __( 'Social', 'wordpress-seo' ) . '', + $tabs, + array( + 'link_aria_label' => __( 'Social', 'wordpress-seo' ), + 'link_class' => 'yoast-tooltip yoast-tooltip-e', + ) + ); + } + + /** + * Returns a link to activate the Buy Premium tab. + * + * @return string + */ + private function get_buy_premium_link() { + return sprintf( "", + 'wpseo-metabox-buy-premium', + __( 'Go Premium', 'wordpress-seo' ) + ); + } + + /** + * Returns the metabox section for the Premium section.. + * + * @return WPSEO_Metabox_Section + */ + private function get_buy_premium_section() { + $content = sprintf( "
    + %s +
      +
    • + %s - %s +
    • +
    • + %s - %s +
    • +
    • + %s - %s +
    • +
    • + %s - %s +
    • +
    + + + %s + + +

    %s

    +
    ", + /* translators: %1$s expands to Yoast SEO Premium. */ + sprintf( __( 'You\'re not getting the benefits of %1$s yet. If you had %1$s, you could use its awesome features:', 'wordpress-seo' ), 'Yoast SEO Premium' ), + __( 'Redirect manager', 'wordpress-seo' ), + __( 'Create and manage redirects within your WordPress install.', 'wordpress-seo' ), + __( 'Multiple focus keywords', 'wordpress-seo' ), + __( 'Optimize a single post for up to 5 keywords.', 'wordpress-seo' ), + __( 'Social Previews', 'wordpress-seo' ), + __( 'Check what your Facebook or Twitter post will look like.', 'wordpress-seo' ), + __( 'Premium support', 'wordpress-seo' ), + __( 'Gain access to our 24/7 support team.', 'wordpress-seo' ), + 'https://yoa.st/pe-buy-premium', + /* translators: %s expands to Yoast SEO Premium. */ + sprintf( __( 'Get %s now!', 'wordpress-seo' ), 'Yoast SEO Premium' ), + 'https://yoa.st/pe-premium-page', + __( 'More info', 'wordpress-seo' ) + ); + + $tab = new WPSEO_Metabox_Form_Tab( + 'premium', + $content, + 'Yoast SEO Premium', + array( + 'single' => true, + ) + ); + + return new WPSEO_Metabox_Tab_Section( + 'premium', + '', + array( $tab ), + array( + 'link_aria_label' => 'Yoast SEO Premium', + 'link_class' => 'yoast-tooltip yoast-tooltip-e', + ) + ); + } + + /** + * Test whether we are on a public taxonomy - no metabox actions needed if we are not + * Unfortunately we have to hook most everything in before the point where all taxonomies are registered and + * we know which taxonomy is being requested, so we need to use this check in nearly every hooked in function. + * + * @since 1.5.0 + */ + private function tax_is_public() { + // Don't make static as taxonomies may still be added during the run. + $taxonomy = get_taxonomy( $this->taxonomy ); + + return $taxonomy->public; + } + + /** + * Return the SVG for the traffic light in the metabox. + */ + public function traffic_light_svg() { + return << + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SVG; + } + + /** + * Generic tab. + */ + public function template_generic_tab() { + // This template belongs to the post scraper so don't echo it if it isn't enqueued. + if ( ! wp_script_is( WPSEO_Admin_Asset_Manager::PREFIX . 'term-scraper' ) ) { + return; + } + + echo ''; + } + + /** + * Keyword tab for enabling analysis of multiple keywords. + */ + public function template_keyword_tab() { + // This template belongs to the term scraper so don't echo it if it isn't enqueued. + if ( ! wp_script_is( WPSEO_Admin_Asset_Manager::PREFIX . 'term-scraper' ) ) { + return; + } + + echo ''; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-settings-fields.php b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-settings-fields.php new file mode 100644 index 0000000..c83377f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-settings-fields.php @@ -0,0 +1,121 @@ +translate_meta_options(); + } + + /** + * Returns array with the fields for the general tab + * + * @return array + */ + public function get() { + $fields = array( + 'metakey' => $this->get_field_config( + __( 'Meta keywords', 'wordpress-seo' ), + esc_html__( 'Meta keywords used on the archive page for this term.', 'wordpress-seo' ), + 'text', + '', + $this->options['usemetakeywords'] !== true + ), + 'noindex' => $this->get_field_config( + esc_html__( 'Meta robots index', 'wordpress-seo' ), + esc_html__( 'This taxonomy follows the indexation rules set under Metas and Titles, you can override it here.', 'wordpress-seo' ), + 'select', + $this->get_noindex_options() + ), + 'sitemap_include' => $this->get_field_config( + esc_html__( 'Include in Sitemap?', 'wordpress-seo' ), + '', + 'select', + $this->sitemap_include_options + ), + 'bctitle' => $this->get_field_config( + __( 'Breadcrumbs Title', 'wordpress-seo' ), + esc_html__( 'The Breadcrumbs Title is used in the breadcrumbs where this taxonomy appears.', 'wordpress-seo' ), + 'text', + '', + $this->options['breadcrumbs-enable'] !== true + ), + 'canonical' => $this->get_field_config( + __( 'Canonical URL', 'wordpress-seo' ), + esc_html__( 'The canonical link is shown on the archive page for this term.', 'wordpress-seo' ) + ), + ); + + return $this->filter_hidden_fields( $fields ); + } + + /** + * Translate options text strings for use in the select fields + * + * @internal IMPORTANT: if you want to add a new string (option) somewhere, make sure you add + * that array key to the main options definition array in the class WPSEO_Taxonomy_Meta() as well!!!! + */ + private function translate_meta_options() { + $this->no_index_options = WPSEO_Taxonomy_Meta::$no_index_options; + $this->sitemap_include_options = WPSEO_Taxonomy_Meta::$sitemap_include_options; + + /* translators: %s expands to the current taxonomy index value */ + $this->no_index_options['default'] = __( 'Default for this taxonomy type, currently: %s', 'wordpress-seo' ); + $this->no_index_options['index'] = __( 'Index', 'wordpress-seo' ); + $this->no_index_options['noindex'] = __( 'Noindex', 'wordpress-seo' ); + + $this->sitemap_include_options['-'] = __( 'Auto detect', 'wordpress-seo' ); + $this->sitemap_include_options['always'] = __( 'Always include', 'wordpress-seo' ); + $this->sitemap_include_options['never'] = __( 'Never include', 'wordpress-seo' ); + } + + /** + * Getting the data for the noindex fields + * + * @return array + */ + private function get_noindex_options() { + $noindex_options['options'] = $this->no_index_options; + $noindex_options['options']['default'] = sprintf( $noindex_options['options']['default'], $this->get_robot_index() ); + + if ( get_option( 'blog_public' ) === '0' ) { + $noindex_options['description'] = '
    ' . esc_html__( 'Warning: even though you can set the meta robots setting here, the entire site is set to noindex in the sitewide privacy settings, so these settings won\'t have an effect.', 'wordpress-seo' ) . ''; + } + + return $noindex_options; + } + + /** + * Returns the current robot index value for the taxonomy + * + * @return string + */ + private function get_robot_index() { + $robot_index = 'index'; + $index_option = 'noindex-tax-' . $this->term->taxonomy; + if ( isset( $this->options[ $index_option ] ) && $this->options[ $index_option ] === true ) { + $robot_index = 'noindex'; + } + + return $robot_index; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-social-fields.php b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-social-fields.php new file mode 100644 index 0000000..4b1eeba --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-social-fields.php @@ -0,0 +1,140 @@ +networks = $this->get_social_networks(); + } + + /** + * When this method returns false, the social tab in the meta box will be hidden + * + * @return bool + */ + public function show_social() { + return ( $this->options['opengraph'] === true || $this->options['twitter'] === true ); + } + + /** + * Gets the social meta fields by social network for the taxonomy. + * + * @param string $network The social network for which to fetch the fields. + * + * @return array + */ + public function get_by_network( $network ) { + $settings = $this->networks[ $network ]; + + return array( + $settings['network'] . '-title' => $this->get_field_config( + /* translators: %s expands to the social network name */ + sprintf( __( '%s Title', 'wordpress-seo' ), $settings['label'] ), + /* translators: %1$s expands to the social network name */ + sprintf( esc_html__( 'If you don\'t want to use the title for sharing on %1$s but instead want another title there, write it here.', 'wordpress-seo' ), $settings['label'] ), + 'text', + array( 'class' => 'large-text' ) + ), + $settings['network'] . '-description' => $this->get_field_config( + /* translators: %s expands to the social network name */ + sprintf( __( '%s Description', 'wordpress-seo' ), $settings['label'] ), + /* translators: %1$s expands to the social network name */ + sprintf( esc_html__( 'If you don\'t want to use the meta description for sharing on %1$s but want another description there, write it here.', 'wordpress-seo' ), $settings['label'] ), + 'textarea' + ), + $settings['network'] . '-image' => $this->get_field_config( + /* translators: %s expands to the social network name */ + sprintf( __( '%s Image', 'wordpress-seo' ), $settings['label'] ), + /* translators: %1$s expands to the social network name */ + sprintf( esc_html__( 'If you want to use an image for sharing on %1$s, you can upload / choose an image or add the image URL here.', 'wordpress-seo' ), $settings['label'] ) . '
    ' . + /* translators: %1$s expands to the social network name, %2$s expands to the image size */ + sprintf( __( 'The recommended image size for %1$s is %2$s pixels.', 'wordpress-seo' ), $settings['label'], $settings['size'] ), + 'upload' + ), + ); + } + + /** + * Returning the fields for the social media tab + * + * @return array + */ + public function get() { + $fields = array(); + foreach ( $this->networks as $option => $settings ) { + $fields_to_push = $this->get_by_network( $option ); + + $fields = array_merge( $fields, $fields_to_push ); + } + + return $this->filter_hidden_fields( $fields ); + } + + /** + * Getting array with the social networks + * + * @return array + */ + private function get_social_networks() { + $social_networks = array( + // Source: https://developers.facebook.com/docs/sharing/best-practices#images. + 'opengraph' => $this->social_network( 'opengraph', __( 'Facebook', 'wordpress-seo' ), sprintf( + /* translators: %1$s expands to the image recommended width, %2$s to its height. */ + __( '%1$s by %2$s', 'wordpress-seo' ), '1200', '630' + ) ), + 'twitter' => $this->social_network( 'twitter', __( 'Twitter', 'wordpress-seo' ), sprintf( + /* translators: %1$s expands to the image recommended width, %2$s to its height. */ + __( '%1$s by %2$s', 'wordpress-seo' ), '1024', '512' + ) ), + ); + $social_networks = $this->filter_social_networks( $social_networks ); + + return $social_networks; + } + + /** + * Returns array with the config fields for the social network + * + * @param string $network The name of the social network. + * @param string $label The label for the social network. + * @param string $image_size The image dimensions. + * + * @return array + */ + private function social_network( $network, $label, $image_size ) { + return array( + 'network' => $network, + 'label' => $label, + 'size' => $image_size, + ); + } + + /** + * Filter the social networks which are disabled in the configuration + * + * @param array $social_networks Array with the social networks that have to be filtered. + * + * @return array + */ + private function filter_social_networks( array $social_networks ) { + foreach ( $social_networks as $social_network => $settings ) { + if ( empty( $this->options[ $social_network ] ) ) { + unset( $social_networks[ $social_network ] ); + } + } + + return $social_networks; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy.php b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy.php new file mode 100644 index 0000000..22085ae --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy.php @@ -0,0 +1,390 @@ +taxonomy = $this->get_taxonomy(); + + add_action( 'edit_term', array( $this, 'update_term' ), 99, 3 ); + add_action( 'init', array( $this, 'custom_category_descriptions_allow_html' ) ); + add_action( 'admin_init', array( $this, 'admin_init' ) ); + + $this->insert_description_field_editor(); + + add_filter( 'category_description', array( $this, 'custom_category_descriptions_add_shortcode_support' ) ); + + if ( self::is_term_overview( $GLOBALS['pagenow'] ) ) { + new WPSEO_Taxonomy_Columns(); + } + $this->analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + $this->analysis_readability = new WPSEO_Metabox_Analysis_Readability(); + } + + /** + * Add hooks late enough for taxonomy object to be available for checks. + */ + public function admin_init() { + + $taxonomy = get_taxonomy( $this->taxonomy ); + + if ( empty( $taxonomy ) || empty( $taxonomy->public ) || ! $this->show_metabox() ) { + return; + } + + add_action( sanitize_text_field( $this->taxonomy ) . '_edit_form', array( $this, 'term_metabox' ), 90, 1 ); + add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) ); + } + + /** + * Show the SEO inputs for term. + * + * @param stdClass|WP_Term $term Term to show the edit boxes for. + */ + public function term_metabox( $term ) { + $metabox = new WPSEO_Taxonomy_Metabox( $this->taxonomy, $term ); + $metabox->display(); + } + + /** + * Queue assets for taxonomy screens. + * + * @since 1.5.0 + */ + public function admin_enqueue_scripts() { + $pagenow = $GLOBALS['pagenow']; + + if ( ! ( self::is_term_edit( $pagenow ) || self::is_term_overview( $pagenow ) ) ) { + return; + } + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_style( 'scoring' ); + + + $tag_id = filter_input( INPUT_GET, 'tag_ID' ); + if ( + self::is_term_edit( $pagenow ) && + ! empty( $tag_id ) // After we drop support for <4.5 this can be removed. + ) { + wp_enqueue_media(); // Enqueue files needed for upload functionality. + + $asset_manager->enqueue_style( 'metabox-css' ); + $asset_manager->enqueue_style( 'snippet' ); + $asset_manager->enqueue_style( 'scoring' ); + $asset_manager->enqueue_script( 'metabox' ); + $asset_manager->enqueue_script( 'term-scraper' ); + $asset_manager->enqueue_style( 'kb-search' ); + + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'term-scraper', 'wpseoTermScraperL10n', $this->localize_term_scraper_script() ); + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'replacevar-plugin', 'wpseoReplaceVarsL10n', $this->localize_replace_vars_script() ); + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoSelect2Locale', WPSEO_Utils::get_language( WPSEO_Utils::get_user_locale() ) ); + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoAdminL10n', WPSEO_Help_Center::get_translated_texts() ); + + $asset_manager->enqueue_script( 'admin-media' ); + + wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'admin-media', 'wpseoMediaL10n', array( + 'choose_image' => __( 'Use Image', 'wordpress-seo' ), + ) ); + } + } + + /** + * Update the taxonomy meta data on save. + * + * @param int $term_id ID of the term to save data for. + * @param int $tt_id The taxonomy_term_id for the term. + * @param string $taxonomy The taxonomy the term belongs to. + */ + public function update_term( $term_id, $tt_id, $taxonomy ) { + /* Create post array with only our values */ + $new_meta_data = array(); + foreach ( WPSEO_Taxonomy_Meta::$defaults_per_term as $key => $default ) { + if ( $posted_value = filter_input( INPUT_POST, $key ) ) { + $new_meta_data[ $key ] = $posted_value; + } + + // If analysis is disabled remove that analysis score value from the DB. + if ( $this->is_meta_value_disabled( $key ) ) { + $new_meta_data[ $key ] = ''; + } + } + unset( $key, $default ); + + // Saving the values. + WPSEO_Taxonomy_Meta::set_values( $term_id, $taxonomy, $new_meta_data ); + } + + /** + * Determines if the given meta value key is disabled + * + * @param string $key The key of the meta value. + * @return bool Whether the given meta value key is disabled. + */ + public function is_meta_value_disabled( $key ) { + if ( 'wpseo_linkdex' === $key && ! $this->analysis_seo->is_enabled() ) { + return true; + } + + if ( 'wpseo_content_score' === $key && ! $this->analysis_readability->is_enabled() ) { + return true; + } + + return false; + } + + /** + * Allows HTML in descriptions + */ + public function custom_category_descriptions_allow_html() { + $filters = array( + 'pre_term_description', + 'pre_link_description', + 'pre_link_notes', + 'pre_user_description', + ); + + foreach ( $filters as $filter ) { + remove_filter( $filter, 'wp_filter_kses' ); + } + remove_filter( 'term_description', 'wp_kses_data' ); + } + + /** + * Output the WordPress editor. + */ + public function custom_category_description_editor() { + + if ( ! $this->show_metabox() ) { + return; + } + + wp_editor( '', 'description' ); + } + + /** + * Adds shortcode support to category descriptions. + * + * @param string $desc String to add shortcodes in. + * + * @return string + */ + public function custom_category_descriptions_add_shortcode_support( $desc ) { + // Wrap in output buffering to prevent shortcodes that echo stuff instead of return from breaking things. + ob_start(); + $desc = do_shortcode( $desc ); + ob_end_clean(); + + return $desc; + } + + /** + * Pass variables to js for use with the term-scraper + * + * @return array + */ + public function localize_term_scraper_script() { + $term_id = filter_input( INPUT_GET, 'tag_ID' ); + $term = get_term_by( 'id', $term_id, $this->get_taxonomy() ); + $taxonomy = get_taxonomy( $term->taxonomy ); + + $term_formatter = new WPSEO_Metabox_Formatter( + new WPSEO_Term_Metabox_Formatter( $taxonomy, $term, WPSEO_Options::get_option( 'wpseo_titles' ) ) + ); + + return $term_formatter->get_values(); + } + + /** + * Pass some variables to js for replacing variables. + */ + public function localize_replace_vars_script() { + return array( + 'no_parent_text' => __( '(no parent)', 'wordpress-seo' ), + 'replace_vars' => $this->get_replace_vars(), + 'scope' => $this->determine_scope(), + ); + } + + /** + * Determines the scope based on the current taxonomy. + * This can be used by the replacevar plugin to determine if a replacement needs to be executed. + * + * @return string String decribing the current scope. + */ + private function determine_scope() { + $taxonomy = $this->get_taxonomy(); + + if ( $taxonomy === 'category' ) { + return 'category'; + } + + if ( $taxonomy === 'post_tag' ) { + return 'tag'; + } + + return 'term'; + } + + /** + * @param string $page The string to check for the term overview page. + * + * @return bool + */ + public static function is_term_overview( $page ) { + return 'edit-tags.php' === $page; + } + + /** + * @param string $page The string to check for the term edit page. + * + * @return bool + */ + public static function is_term_edit( $page ) { + return 'term.php' === $page + || 'edit-tags.php' === $page; // After we drop support for <4.5 this can be removed. + } + + /** + * Retrieves a template. + * Check if metabox for current taxonomy should be displayed. + * + * @return bool + */ + private function show_metabox() { + $options = WPSEO_Options::get_option( 'wpseo_titles' ); + $option_key = 'hideeditbox-tax-' . $this->taxonomy; + + return ( empty( $options[ $option_key ] ) ); + } + + /** + * Getting the taxonomy from the URL + * + * @return string + */ + private function get_taxonomy() { + return filter_input( INPUT_GET, 'taxonomy', FILTER_DEFAULT, array( 'options' => array( 'default' => '' ) ) ); + } + + /** + * Prepares the replace vars for localization. + * + * @return array replace vars. + */ + private function get_replace_vars() { + $term_id = filter_input( INPUT_GET, 'tag_ID' ); + $term = get_term_by( 'id', $term_id, $this->get_taxonomy() ); + $cached_replacement_vars = array(); + + $vars_to_cache = array( + 'date', + 'id', + 'sitename', + 'sitedesc', + 'sep', + 'page', + 'currenttime', + 'currentdate', + 'currentday', + 'currentmonth', + 'currentyear', + 'term_title', + 'term_description', + 'category_description', + 'tag_description', + 'searchphrase', + ); + + foreach ( $vars_to_cache as $var ) { + $cached_replacement_vars[ $var ] = wpseo_replace_vars( '%%' . $var . '%%', $term ); + } + + return $cached_replacement_vars; + } + + /** + * Adds custom category description editor. + * Needs a hook that runs before the description field. Prior to WP version 4.5 we need to use edit_form as + * term_edit_form_top was introduced in WP 4.5. This can be removed after <4.5 is no longer supported. + * + * @return {void} + */ + private function insert_description_field_editor() { + if ( version_compare( $GLOBALS['wp_version'], '4.5', '<' ) ) { + add_action( "{$this->taxonomy}_edit_form", array( $this, 'custom_category_description_editor' ) ); + return; + } + + add_action( "{$this->taxonomy}_term_edit_form_top", array( $this, 'custom_category_description_editor' ) ); + } + + /********************** DEPRECATED METHODS **********************/ + + /** + * @deprecated 3.2 + * + * Retrieves the title template. + * + * @param object $term taxonomy term. + * + * @return string + */ + public static function get_title_template( $term ) { + _deprecated_function( 'WPSEO_Taxonomy::get_title_template', 'WPSEO 3.2', 'WPSEO_Term_Scraper::get_title_template' ); + + return ''; + } + + /** + * @deprecated 3.2 + * + * Retrieves the metadesc template. + * + * @param object $term taxonomy term. + * + * @return string + */ + public static function get_metadesc_template( $term ) { + _deprecated_function( 'WPSEO_Taxonomy::get_metadesc_template', 'WPSEO 3.2', 'WPSEO_Term_Scraper::get_metadesc_template' ); + + return ''; + } + + /** + * @deprecated 3.2 + * + * Translate options text strings for use in the select fields + * + * @internal IMPORTANT: if you want to add a new string (option) somewhere, make sure you add + * that array key to the main options definition array in the class WPSEO_Taxonomy_Meta() as well!!!! + */ + public function translate_meta_options() { + _deprecated_function( 'WPSEO_Taxonomy::translate_meta_options', 'WPSEO 3.2', 'WPSEO_Taxonomy_Settings_Fields::translate_meta_options' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/views/about.php b/wp-content/plugins/wordpress-seo/admin/views/about.php new file mode 100644 index 0000000..d0c224a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/about.php @@ -0,0 +1,230 @@ + $dev ) { + echo '
  • '; + echo '', $dev->name, ''; + echo '', $dev->role, "
  • \n"; + } +} + +?> + +
    + +

    + +

    + ', '', 'Yoast SEO' ); + echo ' '; + printf( __( 'Want to help us develop? Read our %1$scontribution guidelines%2$s!', 'wordpress-seo' ), '', '' ); + ?> +

    + +
    + + + +
    +

    + +

    +
      + (object) array( + 'name' => 'Joost de Valk', + 'role' => __( 'Project Lead', 'wordpress-seo' ), + 'gravatar' => 'f08c3c3253bf14b5616b4db53cea6b78', + ), + 'mariekerakt' => (object) array( + 'name' => 'Marieke van de Rakt', + 'role' => __( 'Head R&D', 'wordpress-seo' ), + 'gravatar' => '1d83533e299c379140f9fcc2cb0015cb', + ), + 'irenestr' => (object) array( + 'name' => 'Irene Strikkers', + 'role' => __( 'Linguist', 'wordpress-seo' ), + 'gravatar' => '074d67179d52561e36e57e8e9ea8f8cf', + ), + ); + + wpseo_display_contributors( $people ); + ?> +
    +

    +
      + (object) array( + 'name' => 'Omar Reiss', + 'role' => __( 'CTO', 'wordpress-seo' ), + 'gravatar' => '86aaa606a1904e7e0cf9857a663c376e', + ), + 'atimmer' => (object) array( + 'name' => 'Anton Timmermans', + 'role' => __( 'Architect', 'wordpress-seo' ), + 'gravatar' => 'b3acbabfdd208ecbf950d864b86fe968', + ), + 'moorscode' => (object) array( + 'name' => 'Jip Moors', + 'role' => __( 'Architect', 'wordpress-seo' ), + 'gravatar' => '1751c5afc377ef4ec07a50791db1bc52', + ), + ); + + wpseo_display_contributors( $people ); + ?> +
    +

    +
      + (object) array( + 'name' => 'Andrea Fercia', + 'role' => __( 'Developer', 'wordpress-seo' ), + 'gravatar' => '074af62ea5ff218b6a6eeab89104f616', + ), + 'rarst' => (object) array( + 'name' => 'Andrey Savchenko', + 'role' => __( 'Developer', 'wordpress-seo' ), + 'gravatar' => 'c445c2491f9f55409b2e4dccee357961', + ), + 'andizer' => (object) array( + 'name' => 'Andy Meerwaldt', + 'role' => __( 'Developer', 'wordpress-seo' ), + 'gravatar' => 'a9b43e766915b48031eab78f9916ca8e', + ), + 'boblinthorst' => (object) array( + 'name' => 'Bob Linthorst', + 'role' => __( 'Developer', 'wordpress-seo' ), + 'gravatar' => '8063b1955f54681ef3a2deb21972faa1', + ), + 'CarolineGeven' => (object) array( + 'name' => 'Caroline Geven', + 'role' => __( 'Developer', 'wordpress-seo' ), + 'gravatar' => 'f2596a568c3974e35f051266a63d791f', + ), + 'terw-dan' => (object) array( + 'name' => 'Danny Terwindt', + 'role' => __( 'Developer', 'wordpress-seo' ), + 'gravatar' => '20a04b0736e630e80ce2dbefe3f1d62f', + ), + 'diedexx' => (object) array( + 'name' => 'Diede Exterkate', + 'role' => __( 'Developer', 'wordpress-seo' ), + 'gravatar' => '59908788f406037240ee011388db29f8', + ), + 'irenestr2' => (object) array( + 'name' => 'Irene Strikkers', + 'role' => __( 'Developer', 'wordpress-seo' ), + 'gravatar' => '074d67179d52561e36e57e8e9ea8f8cf', + ), + 'jcomack' => (object) array( + 'name' => 'Jimmy Comack', + 'role' => __( 'Developer', 'wordpress-seo' ), + 'gravatar' => '41073ef9e1f3e01b03cbee75cee33bd4', + ), + ); + + wpseo_display_contributors( $people ); + ?> +
    +

    +
      + (object) array( + 'name' => 'Taco Verdonschot', + 'role' => __( 'QA & Translations Manager', 'wordpress-seo' ), + 'gravatar' => 'd2d3ecb38cacd521926979b5c678297b', + ), + 'monbauza' => (object) array( + 'name' => 'Ramon Bauza', + 'role' => __( 'Tester', 'wordpress-seo' ), + 'gravatar' => 'de09b8491ab1d927e770f7519219cfc9', + ), + 'boblinthorst2' => (object) array( + 'name' => 'Bob Linthorst', + 'role' => __( 'Tester', 'wordpress-seo' ), + 'gravatar' => '8063b1955f54681ef3a2deb21972faa1', + ), + ); + + wpseo_display_contributors( $people ); + ?> +
    + +

    +

    + + +
    + +
    +

    Yoast SEO Integrations

    +

    + Yoast SEO 3.0 brought a way for theme builders and custom field plugins to integrate with Yoast SEO. These + integrations make sure that all the data on your page is used for the content analysis. On this + page, we highlight the frameworks that have nicely working integrations. +

    + +
      +
    1. Yoast ACF + Integration - an integration built by Marcus Forsberg and Team + Yoast +
    2. +
    3. Divi Builder
    4. +
    5. Visual Composer
    6. +
    + +

    Other integrations

    +

    + We've got another integration we'd like to tell you about: +

    + +
      +
    1. Glue for Yoast SEO & + AMP - an integration between the WordPress AMP + plugin and Yoast SEO. +
    2. +
    3. + Instant Articles for WP + - Enable Instant Articles for Facebook on your WordPress site and integrates with Yoast SEO. +
    4. +
    +
    +
    diff --git a/wp-content/plugins/wordpress-seo/admin/views/class-yoast-form-fieldset.php b/wp-content/plugins/wordpress-seo/admin/views/class-yoast-form-fieldset.php new file mode 100644 index 0000000..ba77b93 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/class-yoast-form-fieldset.php @@ -0,0 +1,168 @@ + 'yoast-form-fieldset', + ); + + /** + * @var string The grouped form elements for the fieldset. + */ + private $content; + + /** + * @var array The fieldset legend HTML default attributes. + */ + private $legend_attributes = array( + 'class' => 'yoast-form-legend', + ); + + /** + * @var string A translatable string for the fieldset legend content. + */ + private $legend_content; + + /** + * Constructor. + * + * @param string $id ID for the fieldset. + * @param string $legend_content The translatable legend text. + * @param string $content The grouped form elements for the fieldset. + */ + public function __construct( $id, $legend_content, $content ) { + $this->id = $id; + $this->legend_content = $legend_content; + $this->content = $content; + } + + /** + * Render the view. + */ + public function render_view() { + /* + * Extract because we want values accessible via variables for later use + * in the view instead of accessing them as an array. + */ + extract( $this->get_parts() ); + + require( dirname( WPSEO_FILE ) . '/admin/views/form/fieldset.php' ); + } + + /** + * Start output buffering to catch the form elements to wrap in the fieldset. + */ + public function start() { + ob_start(); + } + + /** + * Return output buffering with the form elements to wrap in the fieldset. + */ + public function end() { + $this->content = ob_get_clean(); + } + + /** + * Return the rendered view. + * + * @return string + */ + public function get_html() { + ob_start(); + $this->render_view(); + return ob_get_clean(); + } + + /** + * Output the rendered view. + */ + public function html() { + echo $this->get_html(); + } + + /** + * Add attributes to the fieldset default attributes. + * + * @param array $attributes Array of attributes names and values to merge with the defaults. + */ + public function add_attributes( $attributes ) { + $this->attributes = wp_parse_args( $attributes, $this->attributes ); + } + + /** + * Add attributes to the fieldset legend default attributes. + * + * @param array $attributes Array of attributes names and values to merge with the defaults. + */ + public function legend_add_attributes( $attributes ) { + $this->legend_attributes = wp_parse_args( $attributes, $this->legend_attributes ); + } + + /** + * Visually hide the fieldset legend but keep it available to assistive technologies. + */ + public function legend_hide() { + $this->legend_attributes = wp_parse_args( + array( 'class' => 'screen-reader-text' ), + $this->legend_attributes + ); + } + + /** + * Return the set of attributes and content for the fieldset. + * + * @return array + */ + private function get_parts() { + return array( + 'id' => $this->id, + 'attributes' => $this->get_attributes_html( $this->attributes ), + 'legend_content' => $this->legend_content, + 'legend_attributes' => $this->get_attributes_html( $this->legend_attributes ), + 'content' => $this->content, + ); + } + + /** + * Return HTML formatted attributes as a string, when there are attributes set. + * + * @param array $attributes Fieldset or legend attributes. + * + * @return string A space separated list of HTML formatted attributes or empty string. + */ + private function get_attributes_html( $attributes ) { + if ( ! empty( $attributes ) ) { + array_walk( $attributes, array( $this, 'parse_attribute' ) ); + + // Use an initial space as `implode()` adds a space only between array elements. + return ' ' . implode( ' ', $attributes ); + } + + return ''; + } + + /** + * Escape and format an attribute as an HTML attribute. + * + * @param string $value The value of the attribute. + * @param string $attribute The attribute to look for. + */ + private function parse_attribute( & $value, $attribute ) { + $value = sprintf( '%s="%s"', esc_html( $attribute ), esc_attr( $value ) ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/views/class-yoast-input-select.php b/wp-content/plugins/wordpress-seo/admin/views/class-yoast-input-select.php new file mode 100644 index 0000000..f0fdd67 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/class-yoast-input-select.php @@ -0,0 +1,128 @@ +select_id = $select_id; + $this->select_name = $select_name; + $this->select_options = $select_options; + $this->selected_option = $selected_option; + } + + /** + * Print the rendered view. + */ + public function output_html() { + // Extract it, because we want each value accessible via a variable instead of accessing it as an array. + extract( $this->get_select_values() ); + + require( dirname( WPSEO_FILE ) . '/admin/views/form/select.php' ); + } + + /** + * Return the rendered view + * + * @return string + */ + public function get_html() { + ob_start(); + + $this->output_html(); + + $rendered_output = ob_get_contents(); + ob_end_clean(); + + return $rendered_output; + } + + /** + * Add an attribute to the attributes property + * + * @param string $attribute The name of the attribute to add. + * @param string $value The value of the attribute. + */ + public function add_attribute( $attribute, $value ) { + $this->select_attributes[ $attribute ] = $value; + } + + /** + * Return the set fields for the select + * + * @return array + */ + private function get_select_values() { + return array( + 'id' => $this->select_id, + 'name' => $this->select_name, + 'attributes' => $this->get_attributes(), + 'options' => $this->select_options, + 'selected' => $this->selected_option, + ); + } + + /** + * Return the attribute string, when there are attributes set. + * + * @return string + */ + private function get_attributes() { + $attributes = $this->select_attributes; + + if ( ! empty( $attributes ) ) { + array_walk( $attributes, array( $this, 'parse_attribute' ) ); + + return implode( ' ', $attributes ) . ' '; + } + + return ''; + } + + /** + * Get an attribute from the attributes. + * + * @param string $value The value of the attribute. + * @param string $attribute The attribute to look for. + */ + private function parse_attribute( & $value, $attribute ) { + $value = sprintf( '%s="%s"', esc_html( $attribute ), esc_attr( $value ) ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/views/dashboard-widget.php b/wp-content/plugins/wordpress-seo/admin/views/dashboard-widget.php new file mode 100644 index 0000000..61363d2 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/dashboard-widget.php @@ -0,0 +1,105 @@ + +

    + + +
    +

    + +

    + '; + _e( 'Your homepage can be indexed by search engines.', 'wordpress-seo' ); + + break; + case WPSEO_OnPage_Option::IS_NOT_INDEXABLE : + echo ''; + printf( + /* translators: 1: opens a link to a related knowledge base article. 2: closes the link */ + __( '%1$sYour homepage cannot be indexed by search engines%2$s. This is very bad for SEO and should be fixed.', 'wordpress-seo' ), + '', + '' + ); + break; + case WPSEO_OnPage_Option::CANNOT_FETCH : + echo ''; + printf( + /* translators: %1$s opens a link to a related knowledge base article, %2$s expands to Yoast SEO, %3$s closes the link. */ + __( '%1$s%2$s has not been able to fetch your site\'s indexability status%3$s from OnPage.org', 'wordpress-seo' ), + '', + 'Yoast SEO', + '' + ); + break; + case WPSEO_OnPage_Option::NOT_FETCHED : + echo ''; + echo esc_html( sprintf( + /* translators: %s expands to Yoast SEO. */ + __( '%s has not fetched your site\'s indexability status yet from OnPage.org', 'wordpress-seo' ), + 'Yoast SEO' + ) ); + break; + endswitch; + ?> +

    + +

    + ' . __( 'Fetch the current status', 'wordpress-seo' ) . ' '; + endif; + + echo '' . __( 'Analyze entire site', 'wordpress-seo' ) . ' '; + ?> +

    +
    + + +
    > + > + +
    diff --git a/wp-content/plugins/wordpress-seo/admin/views/form/select.php b/wp-content/plugins/wordpress-seo/admin/views/form/select.php new file mode 100644 index 0000000..4b42f73 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/form/select.php @@ -0,0 +1,24 @@ + + diff --git a/wp-content/plugins/wordpress-seo/admin/views/interface-yoast-form-element.php b/wp-content/plugins/wordpress-seo/admin/views/interface-yoast-form-element.php new file mode 100644 index 0000000..aeec5f0 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/interface-yoast-form-element.php @@ -0,0 +1,17 @@ + + + + + + + diff --git a/wp-content/plugins/wordpress-seo/admin/views/partial-alerts-errors.php b/wp-content/plugins/wordpress-seo/admin/views/partial-alerts-errors.php new file mode 100644 index 0000000..77b8fab --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/partial-alerts-errors.php @@ -0,0 +1,19 @@ +%1$s', __( 'Dismiss this item.', 'wordpress-seo' ) ); + break; + + case 'dismissed': + $button = sprintf( '', __( 'Restore this item.', 'wordpress-seo' ) ); + break; + } + + printf( '
    %4$s%5$s
    ', $notification->get_id(), $notification->get_nonce(), $notification->get_json(), $notification, $button ); + } + } +} + +if ( ! $active ) { + $dashicon = 'yes'; +} + +?> +

    ()

    + +
    + + +

    + +
    + +
    + + +
    + + +
    + +
    + +
    + + + +

    + + +
    diff --git a/wp-content/plugins/wordpress-seo/admin/views/partial-alerts-warnings.php b/wp-content/plugins/wordpress-seo/admin/views/partial-alerts-warnings.php new file mode 100644 index 0000000..b064036 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/partial-alerts-warnings.php @@ -0,0 +1,19 @@ + + +
    +
    +
    +
    + +
    +

    + +

    + +

    +

    +
    + +
    + +

    + +

    + +

    +

    +
    +
    + +
    + +
    + +
    +
    + currentoption = 'wpseo_internallinks'; + +echo '

    ' . __( 'Breadcrumbs settings', 'wordpress-seo' ) . '

    '; + +if ( ! current_theme_supports( 'yoast-seo-breadcrumbs' ) ) { + $yform->light_switch( 'breadcrumbs-enable', __( 'Enable Breadcrumbs', 'wordpress-seo' ) ); + echo '
    '; +} +echo ' +

    +

    + ', '' ); + ?> +

    diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/advanced/permalinks.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/advanced/permalinks.php new file mode 100644 index 0000000..86bfa04 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/advanced/permalinks.php @@ -0,0 +1,59 @@ +currentoption = 'wpseo_permalinks'; + +echo '

    ', __( 'Change URLs', 'wordpress-seo' ), '

    '; + +$remove_buttons = array( __( 'Keep', 'wordpress-seo' ), __( 'Remove', 'wordpress-seo' ) ); +/* translators: %s expands to /category/ */ +$yform->light_switch( + 'stripcategorybase', + sprintf( __( 'Strip the category base (usually %s) from the category URL.', 'wordpress-seo' ), '/category/' ), + $remove_buttons, + false +); + +$redirect_buttons = array( __( 'No redirect', 'wordpress-seo' ), __( 'Redirect', 'wordpress-seo' ) ); +$yform->light_switch( 'redirectattachment', __( 'Redirect attachment URLs to parent post URL.', 'wordpress-seo' ), $redirect_buttons ); +echo '

    ' . __( 'Attachments to posts are stored in the database as posts, this means they\'re accessible under their own URLs if you do not redirect them, enabling this will redirect them to the post they were attached to.', 'wordpress-seo' ) . '

    '; + +echo '

    ', __( 'Clean up permalinks', 'wordpress-seo' ), '

    '; +$yform->light_switch( 'cleanslugs', __( 'Stop words in slugs.', 'wordpress-seo' ), $remove_buttons, false ); +echo '

    ' . __( 'This helps you to create cleaner URLs by automatically removing the stopwords from them.', 'wordpress-seo' ) . '

    '; + +/* translators: %s expands to ?replytocom */ +$yform->light_switch( 'cleanreplytocom', sprintf( __( 'Remove the %s variables.', 'wordpress-seo' ), '?replytocom' ), $remove_buttons, false ); +echo '

    ' . __( 'This prevents threaded replies from working when the user has JavaScript disabled, but on a large site can mean a huge improvement in crawl efficiency for search engines when you have a lot of comments.', 'wordpress-seo' ) . '

    '; + +$options = WPSEO_Options::get_all(); +if ( substr( get_option( 'permalink_structure' ), -1 ) !== '/' && $options['trailingslash'] ) { + $yform->light_switch( 'trailingslash', __( 'Enforce a trailing slash on all category and tag URLs', 'wordpress-seo' ) ); + echo '

    ' . __( 'Note: this feature has been deprecated, as the SEO value is close to 0 these days. If you disable it you will not be able to put it back on.', 'wordpress-seo' ) . '

    '; + /* translators: %1$s expands to .html, %2$s expands to / */ + echo '

    ' . sprintf( __( 'If you choose a permalink for your posts with %1$s, or anything else but a %2$s at the end, this will force WordPress to add a trailing slash to non-post pages nonetheless.', 'wordpress-seo' ), '.html', '/' ) . '

    '; +} + +$yform->light_switch( 'cleanpermalinks', __( 'Redirect ugly URLs to clean permalinks. (Not recommended in many cases!)', 'wordpress-seo' ), $redirect_buttons ); +echo '

    ' . __( 'People make mistakes in their links towards you sometimes, or unwanted parameters are added to the end of your URLs, this allows you to redirect them all away. Please note that while this is a feature that is actively maintained, it is known to break several plugins, and should for that reason be the first feature you disable when you encounter issues after installing this plugin.', 'wordpress-seo' ) . '

    '; + +echo '
    '; +$yform->light_switch( 'cleanpermalink-googlesitesearch', __( 'Prevent cleaning out Google Site Search URLs.', 'wordpress-seo' ) ); +echo '

    ' . __( 'Google Site Search URLs look weird, and ugly, but if you\'re using Google Site Search, you probably do not want them cleaned out.', 'wordpress-seo' ) . '

    '; + +$yform->light_switch( 'cleanpermalink-googlecampaign', __( 'Prevent cleaning out Google Analytics Campaign & Google AdWords Parameters.', 'wordpress-seo' ) ); +/* translators: %s expands to ?utm_ */ +echo '

    ' . sprintf( __( 'If you use Google Analytics campaign parameters starting with %s, check this box. However, you\'re advised not to use these. Instead, use the version with a hash.', 'wordpress-seo' ), '?utm_' ) . '

    '; + +$yform->textinput( 'cleanpermalink-extravars', __( 'Other variables not to clean', 'wordpress-seo' ) ); +echo '

    ' . __( 'You might have extra variables you want to prevent from cleaning out, add them here, comma separated.', 'wordpress-seo' ) . '

    '; +echo '
    '; diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/advanced/rss.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/advanced/rss.php new file mode 100644 index 0000000..1555efb --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/advanced/rss.php @@ -0,0 +1,45 @@ +set_option( 'wpseo_rss' ); + +echo '

    ' . __( 'RSS feed settings', 'wordpress-seo' ) . '

    '; + +echo '

    ' . __( "This feature is used to automatically add content to your RSS, more specifically, it's meant to add links back to your blog and your blog posts, so dumb scrapers will automatically add these links too, helping search engines identify you as the original source of the content.", 'wordpress-seo' ) . '

    '; + +$textarea_atts = array( + 'cols' => '50', + 'rows' => '5', +); +$yform->textarea( 'rssbefore', __( 'Content to put before each post in the feed', 'wordpress-seo' ), '', $textarea_atts ); +$yform->textarea( 'rssafter', __( 'Content to put after each post in the feed', 'wordpress-seo' ), '', $textarea_atts ); +?> + +

    + + + + + + + + + + + + + + + + + +
    %%AUTHORLINK%%
    %%POSTLINK%%
    %%BLOGLINK%%
    %%BLOGDESCLINK%%
    diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/dashboard.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/dashboard.php new file mode 100644 index 0000000..6a2a05b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/dashboard.php @@ -0,0 +1,24 @@ + +
    + +

    +
    + +
    + +
    + +
    + +
    diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/features.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/features.php new file mode 100644 index 0000000..3365069 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/features.php @@ -0,0 +1,67 @@ + __( 'Advanced settings pages', 'wordpress-seo' ), + 'setting' => 'enable_setting_pages', + 'label' => __( 'The advanced settings include site-wide settings for your titles and meta descriptions, social metadata, sitemaps and much more.', 'wordpress-seo' ), + ), + (object) array( + 'name' => __( 'OnPage.org', 'wordpress-seo' ), + 'setting' => 'onpage_indexability', + /* translators: %1$s expands to OnPage.org */ + 'label' => sprintf( __( 'The %1$s integration checks daily if your site is still indexable by search engines and notifies you when this is not the case.', 'wordpress-seo' ), 'OnPage.org' ), + ), + (object) array( + 'name' => __( 'Admin bar menu', 'wordpress-seo' ), + 'setting' => 'enable_admin_bar_menu', + /* translators: %1$s expands to Yoast SEO*/ + 'label' => sprintf( __( 'The %1$s admin bar menu contains useful links to third-party tools for analyzing pages and makes it easy to see if you have new notifications.', 'wordpress-seo' ), 'Yoast SEO' ), + ), +); + +/** + * Filter to add feature toggles from add-ons. + * + * @param array $feature_toggles Array with feature toggle objects where each object should have a `name`, `setting` and `label` property. + */ +$feature_toggles = apply_filters( 'wpseo_feature_toggles', $feature_toggles ); + +?> +

    Features

    + + + +

    name ); ?>

    +

    + toggle_switch( + $feature->setting, + array( + 'on' => __( 'Enabled', 'wordpress-seo' ), + 'off' => __( 'Disabled', 'wordpress-seo' ), + ), + $feature->label + ); + ?> +

    +
    + + + +hidden( 'show_onboarding_notice', 'wpseo_show_onboarding_notice' ); +?> diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/general.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/general.php new file mode 100644 index 0000000..e7f1472 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/general.php @@ -0,0 +1,58 @@ +' . esc_html__( 'Configuration wizard', 'wordpress-seo' ) . ''; + ?> +

    + +

    +

    + +

    + +
    +' . esc_html__( 'Credits', 'wordpress-seo' ) . ''; +?> +

    + +

    + +

    + +

    +
    +' . esc_html__( 'Restore default settings', 'wordpress-seo' ) . ''; +?> +

    + +

    + +

    + +

    diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/knowledge-graph.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/knowledge-graph.php new file mode 100644 index 0000000..653266a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/knowledge-graph.php @@ -0,0 +1,50 @@ +' . esc_html__( 'Website name', 'wordpress-seo' ) . ''; +?> +

    + +

    +textinput( 'website_name', __( 'Website name', 'wordpress-seo' ), array( 'placeholder' => get_bloginfo( 'name' ) ) ); +$yform->textinput( 'alternate_website_name', __( 'Alternate name', 'wordpress-seo' ) ); + +echo '

    ' . esc_html__( 'Company or person', 'wordpress-seo' ) . '

    '; +?> +

    + +

    +select( 'company_or_person', __( 'Company or person', 'wordpress-seo' ), array( + '' => __( 'Choose whether you\'re a company or person', 'wordpress-seo' ), + 'company' => __( 'Company', 'wordpress-seo' ), + 'person' => __( 'Person', 'wordpress-seo' ), +) ); +?> + +
    +

    + textinput( 'company_name', __( 'Company Name', 'wordpress-seo' ) ); + $yform->media_input( 'company_logo', __( 'Company Logo', 'wordpress-seo' ) ); + ?> +
    + +
    +

    + textinput( 'person_name', __( 'Your name', 'wordpress-seo' ) ); ?> +
    diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/security.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/security.php new file mode 100644 index 0000000..c5dde67 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/security.php @@ -0,0 +1,22 @@ +' . esc_html__( 'Security setting', 'wordpress-seo' ) . ''; + +$yform->toggle_switch( + 'disableadvanced_meta', + array( 'off' => __( 'Enabled', 'wordpress-seo' ), 'on' => __( 'Disabled', 'wordpress-seo' ) ), + /* translators: %1$s expands to Yoast SEO */ + sprintf( __( 'Advanced part of the %1$s meta box', 'wordpress-seo' ), 'Yoast SEO' ) +); + +/* translators: %1$s expands to Yoast SEO */ +echo '

    ', sprintf( __( 'The advanced section of the %1$s meta box allows a user to noindex posts or change the canonical. These are things you might not want if you don\'t trust your authors, so by default, only administrators can do this. Enabling the advanced box allows all users to change these settings.', 'wordpress-seo' ), 'Yoast SEO' ), '

    '; diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/site-analysis.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/site-analysis.php new file mode 100644 index 0000000..66c3dc5 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/site-analysis.php @@ -0,0 +1,19 @@ + diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/webmaster-tools.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/webmaster-tools.php new file mode 100644 index 0000000..34a35f4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/webmaster-tools.php @@ -0,0 +1,17 @@ +' . esc_html__( 'Webmaster Tools verification', 'wordpress-seo' ) . ''; +printf( '

    %s

    ', __( 'You can use the boxes below to verify with the different Webmaster Tools, if your site is already verified, you can just forget about these. Enter the verify meta values for:', 'wordpress-seo' ) ); + +$yform->textinput( 'msverify', '' . __( 'Bing Webmaster Tools', 'wordpress-seo' ) . '' ); +$yform->textinput( 'googleverify', 'Google Search Console' ); +$yform->textinput( 'yandexverify', '' . __( 'Yandex Webmaster Tools', 'wordpress-seo' ) . '' ); diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/archives.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/archives.php new file mode 100644 index 0000000..5e950f9 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/archives.php @@ -0,0 +1,69 @@ +'; +/* translators: %1$s / %2$s: links to an article about duplicate content on yoast.com */ +printf( __( 'If you\'re running a one author blog, the author archive will be exactly the same as your homepage. This is what\'s called a %1$sduplicate content problem%2$s.', 'wordpress-seo' ), '', '' ); +echo ' '; +/* translators: %s expands to noindex, follow */ +printf( __( 'If this is the case on your site, you can choose to either disable it (which makes it redirect to the homepage), or to add %s to it so it doesn\'t show up in the search results.', 'wordpress-seo' ), 'noindex,follow' ); +echo ' '; +echo __( 'Note that links to archives might be still output by your theme and you would need to remove them separately.', 'wordpress-seo' ); +echo ' '; +_e( 'Date-based archives could in some cases also be seen as duplicate content.', 'wordpress-seo' ); +echo '

    '; + +echo "
    "; +echo '

    ' . esc_html__( 'Author archives settings', 'wordpress-seo' ) . '

    '; +$yform->toggle_switch( 'disable-author', array( + 'off' => __( 'Enabled', 'wordpress-seo' ), + 'on' => __( 'Disabled', 'wordpress-seo' ), +), __( 'Author archives', 'wordpress-seo' ) ); + +echo "
    "; +$yform->textinput( 'title-author-wpseo', __( 'Title template', 'wordpress-seo' ), 'template author-template' ); +$yform->textarea( 'metadesc-author-wpseo', __( 'Meta description template', 'wordpress-seo' ), array( 'class' => 'template author-template' ) ); +if ( $options['usemetakeywords'] === true ) { + $yform->textinput( 'metakey-author-wpseo', __( 'Meta keywords template', 'wordpress-seo' ) ); +} +$yform->toggle_switch( 'noindex-author-wpseo', $index_switch_values, __( 'Meta Robots', 'wordpress-seo' ) ); +echo '
    '; +echo '
    '; + +echo '
    '; + +echo "
    "; +echo '

    ' . esc_html__( 'Date archives settings', 'wordpress-seo' ) . '

    '; +$yform->toggle_switch( 'disable-date', array( + 'off' => __( 'Enabled', 'wordpress-seo' ), + 'on' => __( 'Disabled', 'wordpress-seo' ), +), __( 'Date archives', 'wordpress-seo' ) ); + +echo "
    "; +$yform->textinput( 'title-archive-wpseo', __( 'Title template', 'wordpress-seo' ), 'template date-template' ); +$yform->textarea( 'metadesc-archive-wpseo', __( 'Meta description template', 'wordpress-seo' ), array( 'class' => 'template date-template' ) ); +$yform->toggle_switch( 'noindex-archive-wpseo', $index_switch_values, __( 'Meta Robots', 'wordpress-seo' ) ); +echo '
    '; +echo '
    '; + +echo '
    '; + +echo '
    '; +echo '

    ' . esc_html__( 'Special Pages', 'wordpress-seo' ) . '

    '; +/* translators: %s expands to noindex, follow */ +echo '

    ' . sprintf( __( 'These pages will be %s by default, so they will never show up in search results.', 'wordpress-seo' ), 'noindex, follow' ) . '

    '; +echo '

    ' . __( 'Search pages', 'wordpress-seo' ) . '
    '; +$yform->textinput( 'title-search-wpseo', __( 'Title template', 'wordpress-seo' ), 'template search-template' ); +echo '

    '; +echo '

    ' . __( '404 pages', 'wordpress-seo' ) . '
    '; +$yform->textinput( 'title-404-wpseo', __( 'Title template', 'wordpress-seo' ), 'template error404-template' ); +echo '

    '; +echo '
    '; diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/general.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/general.php new file mode 100644 index 0000000..1f22a5e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/general.php @@ -0,0 +1,30 @@ +light_switch( 'forcerewritetitle', __( 'Force rewrite titles', 'wordpress-seo' ) ); + echo '

    ', sprintf( __( '%1$s has auto-detected whether it needs to force rewrite the titles for your pages, if you think it\'s wrong and you know what you\'re doing, you can change the setting here.', 'wordpress-seo' ), 'Yoast SEO' ) . '

    '; +} + +echo '

    ' . esc_html__( 'Title Separator', 'wordpress-seo' ) . '

    '; + +$legend = __( 'Title separator symbol', 'wordpress-seo' ); +$legend_attr = array( 'class' => 'radiogroup screen-reader-text' ); +$yform->radio( 'separator', WPSEO_Option_Titles::get_instance()->get_separator_options(), $legend, $legend_attr ); +echo '

    ', __( 'Choose the symbol to use as your title separator. This will display, for instance, between your post title and site name.', 'wordpress-seo' ), ' ', __( 'Symbols are shown in the size they\'ll appear in the search results.', 'wordpress-seo' ), '

    '; + +echo '

    ' . __( 'Enabled analysis', 'wordpress-seo' ) . '

    '; + +$yform->light_switch( 'content-analysis-active', __( 'Readability analysis', 'wordpress-seo' ) ); +echo '

    ', __( 'Removes the readability tab from the metabox and disables all readability-related suggestions.', 'wordpress-seo' ) . '

    '; + +$yform->light_switch( 'keyword-analysis-active', __( 'Keyword analysis', 'wordpress-seo' ) ); +echo '

    ', __( 'Removes the keyword tab from the metabox and disables all keyword-related suggestions.', 'wordpress-seo' ) . '

    '; diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/home.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/home.php new file mode 100644 index 0000000..da6534e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/home.php @@ -0,0 +1,30 @@ +'; + echo '

    ', esc_html__( 'Homepage', 'wordpress-seo' ), '

    '; + $yform->textinput( 'title-home-wpseo', __( 'Title template', 'wordpress-seo' ), 'template homepage-template' ); + $yform->textarea( 'metadesc-home-wpseo', __( 'Meta description template', 'wordpress-seo' ), array( 'class' => 'template homepage-template' ) ); + if ( $options['usemetakeywords'] === true ) { + $yform->textinput( 'metakey-home-wpseo', __( 'Meta keywords template', 'wordpress-seo' ) ); + } + echo ''; +} +else { + echo '

    ', esc_html__( 'Homepage & Front page', 'wordpress-seo' ), '

    '; + echo '

    '; + printf( __( 'You can determine the title and description for the front page by %sediting the front page itself »%s', 'wordpress-seo' ), '', '' ); + echo '

    '; + if ( get_option( 'page_for_posts' ) > 0 ) { + echo '

    ', sprintf( __( 'You can determine the title and description for the blog page by %sediting the blog page itself »%s', 'wordpress-seo' ), '', '' ), '

    '; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/other.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/other.php new file mode 100644 index 0000000..76abe5c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/other.php @@ -0,0 +1,23 @@ +', esc_html__( 'Sitewide meta settings', 'wordpress-seo' ), ''; + +$yform->toggle_switch( 'noindex-subpages-wpseo', $index_switch_values, __( 'Subpages of archives', 'wordpress-seo' ) ); +echo '

    ', __( 'If you want to prevent /page/2/ and further of any archive to show up in the search results, set this to "noindex".', 'wordpress-seo' ), '

    '; + +$yform->light_switch( 'usemetakeywords', __( 'Use meta keywords tag?', 'wordpress-seo' ) ); +echo '

    ', __( 'I don\'t know why you\'d want to use meta keywords, but if you want to, enable this.', 'wordpress-seo' ), '

    '; + +/* translators: %s expands to noodp */ +$yform->light_switch( 'noodp', sprintf( __( 'Force %s meta robots tag sitewide', 'wordpress-seo' ), 'noodp' ) ); +/* translators: %s expands to noodp */ +echo '

    ', sprintf( __( 'Prevents search engines from using the DMOZ description in the search results for all pages on this site. Note: If you set a custom description for a page or post, it will have the %s tag regardless of this setting.', 'wordpress-seo' ), 'noodp' ), '

    '; diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/post-types.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/post-types.php new file mode 100644 index 0000000..76aa46f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/post-types.php @@ -0,0 +1,80 @@ + true ), 'objects' ); +$index_switch_values = array( + 'off' => 'index', + 'on' => 'noindex', +); + +if ( is_array( $post_types ) && $post_types !== array() ) { + foreach ( $post_types as $post_type ) { + $name = $post_type->name; + echo "
    "; + echo '

    ' . esc_html( ucfirst( $post_type->labels->name ) ) . '

    '; + if ( $options['redirectattachment'] === true && $name === 'attachment' ) { + // The `inline` CSS class prevents the notice from being moved to the top via JavaScript. + echo '

    '; + /* translators: %1$s and %2$s expand to a link to the SEO Permalinks settings page. */ + echo sprintf( __( 'As you are redirecting attachment URLs to parent post URLs, these settings will currently only have an effect on unattached media items! So remember: If you change the %1$sattachment redirection setting%2$s in the future, the below settings will take effect for *all* media items.', 'wordpress-seo' ), '', '' ); + echo '

    '; + } + $yform->textinput( 'title-' . $name, __( 'Title template', 'wordpress-seo' ), 'template posttype-template' ); + $yform->textarea( 'metadesc-' . $name, __( 'Meta description template', 'wordpress-seo' ), array( 'class' => 'template posttype-template' ) ); + if ( $options['usemetakeywords'] === true ) { + $yform->textinput( 'metakey-' . $name, __( 'Meta keywords template', 'wordpress-seo' ) ); + } + $yform->toggle_switch( 'noindex-' . $name, $index_switch_values, __( 'Meta Robots', 'wordpress-seo' ) ); + $yform->toggle_switch( 'showdate-' . $name, array( + 'on' => __( 'Show', 'wordpress-seo' ), + 'off' => __( 'Hide', 'wordpress-seo' ), + ), __( 'Date in Snippet Preview', 'wordpress-seo' ) ); + $yform->toggle_switch( 'hideeditbox-' . $name, array( + 'off' => __( 'Show', 'wordpress-seo' ), + 'on' => __( 'Hide', 'wordpress-seo' ), + /* translators: %1$s expands to Yoast SEO */ + ), sprintf( __( '%1$s Meta Box', 'wordpress-seo' ), 'Yoast SEO' ) ); + echo '
    '; + /** + * Allow adding a custom checkboxes to the admin meta page - Post Types tab + * + * @api WPSEO_Admin_Pages $yform The WPSEO_Admin_Pages object + * @api String $name The post type name + */ + do_action( 'wpseo_admin_page_meta_post_types', $yform, $name ); + echo '

    '; + } + unset( $post_type ); +} +unset( $post_types ); + +$post_types = get_post_types( array( '_builtin' => false, 'has_archive' => true ), 'objects' ); +if ( is_array( $post_types ) && $post_types !== array() ) { + echo '

    ' . esc_html__( 'Custom Post Type Archives', 'wordpress-seo' ) . '

    '; + echo '

    ' . __( 'Note: instead of templates these are the actual titles and meta descriptions for these custom post type archive pages.', 'wordpress-seo' ) . '

    '; + foreach ( $post_types as $post_type ) { + $name = $post_type->name; + echo '

    ' . esc_html( ucfirst( $post_type->labels->name ) ) . '

    '; + $yform->textinput( 'title-ptarchive-' . $name, __( 'Title', 'wordpress-seo' ), 'template posttype-template' ); + $yform->textarea( 'metadesc-ptarchive-' . $name, __( 'Meta description', 'wordpress-seo' ), array( 'class' => 'template posttype-template' ) ); + if ( $options['usemetakeywords'] === true ) { + $yform->textinput( 'metakey-ptarchive-' . $name, __( 'Meta keywords', 'wordpress-seo' ) ); + } + if ( $options['breadcrumbs-enable'] === true ) { + $yform->textinput( 'bctitle-ptarchive-' . $name, __( 'Breadcrumbs title', 'wordpress-seo' ) ); + } + $yform->toggle_switch( 'noindex-ptarchive-' . $name, $index_switch_values, __( 'Meta Robots', 'wordpress-seo' ) ); + + echo '

    '; + } + unset( $post_type ); +} +unset( $post_types ); diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/taxonomies.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/taxonomies.php new file mode 100644 index 0000000..2c4f3c3 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/metas/taxonomies.php @@ -0,0 +1,57 @@ + true ), 'objects' ); +if ( is_array( $taxonomies ) && $taxonomies !== array() ) { + foreach ( $taxonomies as $tax ) { + // Explicitly hide all the core taxonomies we never want to do stuff for. + if ( in_array( $tax->name, array( 'link_category', 'nav_menu' ) ) ) { + continue; + } + + echo '

    ' . esc_html( ucfirst( $tax->labels->name ) ) . '

    '; + if ( $tax->name === 'post_format' ) { + $yform->light_switch( + 'disable-post_format', + __( 'Format-based archives', 'wordpress-seo' ), + array( __( 'Enabled', 'wordpress-seo' ), __( 'Disabled', 'wordpress-seo' ) ), + false + ); + } + echo "
    "; + $yform->textinput( 'title-tax-' . $tax->name, __( 'Title template', 'wordpress-seo' ), 'template taxonomy-template' ); + $yform->textarea( 'metadesc-tax-' . $tax->name, __( 'Meta description template', 'wordpress-seo' ), array( 'class' => 'template taxonomy-template' ) ); + if ( $options['usemetakeywords'] === true ) { + $yform->textinput( 'metakey-tax-' . $tax->name, __( 'Meta keywords template', 'wordpress-seo' ) ); + } + $yform->toggle_switch( 'noindex-tax-' . $tax->name, $index_switch_values, __( 'Meta Robots', 'wordpress-seo' ) ); + if ( $tax->name !== 'post_format' ) { + /* translators: %1$s expands to Yoast SEO */ + $yform->toggle_switch( 'hideeditbox-tax-' . $tax->name, + array( + 'off' => __( 'Show', 'wordpress-seo' ), + 'on' => __( 'Hide', 'wordpress-seo' ), + /* translators: %1$s expands to Yoast SEO */ + ), sprintf( __( '%1$s Meta Box', 'wordpress-seo' ), 'Yoast SEO' ) ); + } + /** + * Allow adding custom checkboxes to the admin meta page - Taxonomies tab + * + * @api WPSEO_Admin_Pages $yform The WPSEO_Admin_Pages object + * @api Object $tax The taxonomy + */ + do_action( 'wpseo_admin_page_meta_taxonomies', $yform, $tax ); + echo '

    '; + echo '
    '; + } + unset( $tax ); +} +unset( $taxonomies ); diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/exclude-post.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/exclude-post.php new file mode 100644 index 0000000..857c626 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/exclude-post.php @@ -0,0 +1,16 @@ +' . esc_html__( 'Excluded posts settings', 'wordpress-seo' ) . ''; + +/* Translators: %1$s: expands to '1,2,99,100' */ +echo '

    ', sprintf( __( 'You can exclude posts from the sitemap by entering a comma separated string with the Post ID\'s. The format will become something like: %1$s.', 'wordpress-seo' ), '1,2,99,100' ), '

    '; +$yform->textinput( 'excluded-posts', __( 'Posts to exclude', 'wordpress-seo' ) ); diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/general.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/general.php new file mode 100644 index 0000000..0ed33b7 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/general.php @@ -0,0 +1,38 @@ +' . esc_html__( 'Your XML Sitemap', 'wordpress-seo' ) . ''; + +if ( $options['enablexmlsitemap'] === true ) { + echo '

    '; + /* translators: %1$s opening tag of the link to the Sitemap, %2$s closing tag for the link. */ + printf( + esc_html__( 'You can find your XML Sitemap here: %1$sXML Sitemap%2$s', 'wordpress-seo' ), + '', + '' + ); + echo '
    '; + echo '
    '; + _e( 'You do not need to generate the XML sitemap, nor will it take up time to generate after publishing a post.', 'wordpress-seo' ); + echo '

    '; +} +else { + echo '

    ', __( 'Save your settings to activate your XML Sitemap.', 'wordpress-seo' ), '

    '; +} + +echo '

    ' . esc_html__( 'Entries per sitemap page', 'wordpress-seo' ) . '

    '; +?> +

    + +

    + +textinput( 'entries-per-page', __( 'Max entries per sitemap', 'wordpress-seo' ) ); diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/post-types.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/post-types.php new file mode 100644 index 0000000..bfc611a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/post-types.php @@ -0,0 +1,40 @@ +' . esc_html__( 'Post types sitemap settings', 'wordpress-seo' ) . ''; + +$switch_values = array( + 'off' => __( 'In sitemap', 'wordpress-seo' ), + 'on' => __( 'Not in sitemap', 'wordpress-seo' ), +); + +/** + * Filter the post types to present in interface for exclusion. + * + * @param array $post_types Array of post type objects. + */ +$post_types = apply_filters( 'wpseo_sitemaps_supported_post_types', get_post_types( array( 'public' => true ), 'objects' ) ); +if ( is_array( $post_types ) && $post_types !== array() ) { + foreach ( $post_types as $pt ) { + $yform->toggle_switch( + 'post_types-' . $pt->name . '-not_in_sitemap', + $switch_values, + $pt->labels->name . ' (' . $pt->name . ')' + ); + /** + * Allow adding custom checkboxes to the admin sitemap page - Post Types tab + * + * @api Yoast_Form $yform The Yoast_Form object + * @api Object $pt The post type + */ + do_action( 'wpseo_admin_page_sitemap_post_types', $yform, $pt ); + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/taxonomies.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/taxonomies.php new file mode 100644 index 0000000..8068c7b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/taxonomies.php @@ -0,0 +1,41 @@ +' . esc_html__( 'Taxonomies sitemap settings', 'wordpress-seo' ) . ''; + +/** + * Filter the taxonomies to present in interface for exclusion. + * + * @param array $taxonomies Array of taxonomy objects. + */ +$taxonomies = apply_filters( 'wpseo_sitemaps_supported_taxonomies', get_taxonomies( array( 'public' => true ), 'objects' ) ); +if ( is_array( $taxonomies ) && $taxonomies !== array() ) { + foreach ( $taxonomies as $tax ) { + // Explicitly hide all the core taxonomies we never want in our sitemap. + if ( in_array( $tax->name, array( 'link_category', 'nav_menu' ) ) ) { + continue; + } + + $title_options = WPSEO_Options::get_option( 'wpseo_titles' ); + + if ( 'post_format' === $tax->name && ! empty( $title_options['disable-post_format'] ) ) { + continue; + } + + if ( isset( $tax->labels->name ) && trim( $tax->labels->name ) != '' ) { + $yform->toggle_switch( + 'taxonomies-' . $tax->name . '-not_in_sitemap', + $switch_values, + $tax->labels->name . ' (' . $tax->name . ')' + ); + } + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/user-sitemap.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/user-sitemap.php new file mode 100644 index 0000000..cf718a4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/sitemaps/user-sitemap.php @@ -0,0 +1,41 @@ +' . esc_html__( 'User sitemap settings', 'wordpress-seo' ) . ''; + +$yform->toggle_switch( + 'disable_author_sitemap', + array( 'off' => __( 'Enabled', 'wordpress-seo' ), 'on' => __( 'Disabled', 'wordpress-seo' ) ), + __( 'Author / user sitemap', 'wordpress-seo' ) +); + +printf( '

    %s

    ', __( 'The user sitemap contains the author archive URLs for every user on your site.', 'wordpress-seo' ) ); + +echo '
    '; + +$switch_values = array( + 'off' => __( 'In sitemap', 'wordpress-seo' ), + 'on' => __( 'Not in sitemap', 'wordpress-seo' ), +); +$yform->toggle_switch( 'disable_author_noposts', $switch_values, __( 'Users without posts', 'wordpress-seo' ) ); + +printf( '

    %s

    ', __( 'You can choose to not include users without posts.', 'wordpress-seo' ) ); + +$roles = WPSEO_Utils::get_roles(); +unset( $roles['subscriber'] ); +if ( is_array( $roles ) && $roles !== array() ) { + echo '

    ' . esc_html__( 'Filter specific user roles', 'wordpress-seo' ) . '

    '; + foreach ( $roles as $role_key => $role_name ) { + $yform->toggle_switch( 'user_role-' . $role_key . '-not_in_sitemap', $switch_values, $role_name ); + } +} + +echo '
    '; diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/social/accounts.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/social/accounts.php new file mode 100644 index 0000000..728dfc5 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/social/accounts.php @@ -0,0 +1,27 @@ +' . esc_html__( 'Your social profiles', 'wordpress-seo' ) . ''; + +echo '

    '; +_e( 'To let search engines know which social profiles are associated to this site, enter them below:', 'wordpress-seo' ); +echo '

    '; + +$yform->textinput( 'facebook_site', __( 'Facebook Page URL', 'wordpress-seo' ) ); +$yform->textinput( 'twitter_site', __( 'Twitter Username', 'wordpress-seo' ) ); +$yform->textinput( 'instagram_url', __( 'Instagram URL', 'wordpress-seo' ) ); +$yform->textinput( 'linkedin_url', __( 'LinkedIn URL', 'wordpress-seo' ) ); +$yform->textinput( 'myspace_url', __( 'MySpace URL', 'wordpress-seo' ) ); +$yform->textinput( 'pinterest_url', __( 'Pinterest URL', 'wordpress-seo' ) ); +$yform->textinput( 'youtube_url', __( 'YouTube URL', 'wordpress-seo' ) ); +$yform->textinput( 'google_plus_url', __( 'Google+ URL', 'wordpress-seo' ) ); + +do_action( 'wpseo_admin_other_section' ); diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/social/facebook.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/social/facebook.php new file mode 100644 index 0000000..7fbbe61 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/social/facebook.php @@ -0,0 +1,54 @@ +' . esc_html__( 'Facebook settings', 'wordpress-seo' ) . ''; + +$yform->light_switch( 'opengraph', __( 'Add Open Graph meta data', 'wordpress-seo' ) ); + +?> +

    + <head> */ + printf( __( 'Add Open Graph meta data to your site\'s %s section, Facebook and other social networks use this data when your pages are shared.', 'wordpress-seo' ), '<head>' ); + ?> +

    + +' . esc_html__( 'Frontpage settings', 'wordpress-seo' ) . ''; + echo '

    ' . esc_html__( 'These are the title, description and image used in the Open Graph meta tags on the front page of your site.', 'wordpress-seo' ) . '

    '; + + $yform->media_input( 'og_frontpage_image', __( 'Image URL', 'wordpress-seo' ) ); + $yform->textinput( 'og_frontpage_title', __( 'Title', 'wordpress-seo' ) ); + $yform->textinput( 'og_frontpage_desc', __( 'Description', 'wordpress-seo' ) ); + + // Offer copying of meta description. + $meta_options = get_option( 'wpseo_titles' ); + echo ''; + echo '

    ', esc_html__( 'Copy home meta description', 'wordpress-seo' ), '

    '; + +} + +echo '

    ' . esc_html__( 'Default settings', 'wordpress-seo' ) . '

    '; + +$yform->media_input( 'og_default_image', __( 'Image URL', 'wordpress-seo' ) ); + +?> +

    + +

    + +show_form(); + +do_action( 'wpseo_admin_opengraph_section' ); diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/social/google.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/social/google.php new file mode 100644 index 0000000..9008b87 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/social/google.php @@ -0,0 +1,18 @@ +' . esc_html__( 'Google+ settings', 'wordpress-seo' ) . ''; + +printf( '

    %s

    ', __( 'If you have a Google+ page for your business, add that URL here and link it on your Google+ page\'s about page.', 'wordpress-seo' ) ); + +$yform->textinput( 'plus-publisher', __( 'Google Publisher Page', 'wordpress-seo' ) ); + +do_action( 'wpseo_admin_googleplus_section' ); diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/social/pinterest.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/social/pinterest.php new file mode 100644 index 0000000..b9cace3 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/social/pinterest.php @@ -0,0 +1,23 @@ +' . esc_html__( 'Pinterest settings', 'wordpress-seo' ) . ''; + +printf( '

    %s

    ', __( 'Pinterest uses Open Graph metadata just like Facebook, so be sure to keep the Open Graph checkbox on the Facebook tab checked if you want to optimize your site for Pinterest.', 'wordpress-seo' ) ); +printf( '

    %s

    ', __( 'If you have already confirmed your website with Pinterest, you can skip the step below.', 'wordpress-seo' ) ); + +/* translators: %1$s / %2$s expands to a link to pinterest.com's help page. */ +$p = sprintf( __( 'To %1$sconfirm your site with Pinterest%2$s, add the meta tag here:', 'wordpress-seo' ), '', '' ); +printf( '

    %s

    ', $p ); + +$yform->textinput( 'pinterestverify', __( 'Pinterest confirmation', 'wordpress-seo' ) ); + +do_action( 'wpseo_admin_pinterest_section' ); diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/social/twitterbox.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/social/twitterbox.php new file mode 100644 index 0000000..9bc06bb --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/social/twitterbox.php @@ -0,0 +1,24 @@ +' . esc_html__( 'Twitter settings', 'wordpress-seo' ) . ''; + +$yform->light_switch( 'twitter', __( 'Add Twitter card meta data', 'wordpress-seo' ) ); + +/* translators: %s expands to <head> */ +$p = sprintf( __( 'Add Twitter card meta data to your site\'s %s section.', 'wordpress-seo' ), '<head>' ); +printf( '

    %s

    ', $p ); + +echo '
    '; + +$yform->select( 'twitter_card_type', __( 'The default card type to use', 'wordpress-seo' ), WPSEO_Option_Social::$twitter_card_types ); + +do_action( 'wpseo_admin_twitter_section' ); diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/import-seo.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/import-seo.php new file mode 100644 index 0000000..403e810 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/import-seo.php @@ -0,0 +1,36 @@ + +

    + +

    ', '' ); ?>

    + +
    + checkbox( 'importheadspace', __( 'Import from HeadSpace2?', 'wordpress-seo' ) ); + $yform->checkbox( 'importaioseo', __( 'Import from All-in-One SEO?', 'wordpress-seo' ) ); + $yform->checkbox( 'importwoo', __( 'Import from WooThemes SEO framework?', 'wordpress-seo' ) ); + $yform->checkbox( 'importwpseo', __( 'Import from wpSEO', 'wordpress-seo' ) ); + + do_action( 'wpseo_import_other_plugins' ); + ?> +
    + checkbox( 'deleteolddata', __( 'Delete the old data after import? (recommended)', 'wordpress-seo' ) ); + ?> +
    + +
    diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-export.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-export.php new file mode 100644 index 0000000..a9e15c3 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-export.php @@ -0,0 +1,26 @@ +

    +
    + checkbox( 'include_taxonomy_meta', __( 'Include Taxonomy Metadata', 'wordpress-seo' ) ); ?>
    + + +
    diff --git a/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-import.php b/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-import.php new file mode 100644 index 0000000..d4bff8d --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-import.php @@ -0,0 +1,26 @@ + +

    settings.zip and clicking "Import settings"', 'wordpress-seo' ); ?>

    + +
    + + + +
    +
    + +
    diff --git a/wp-content/plugins/wordpress-seo/admin/views/tool-bulk-editor.php b/wp-content/plugins/wordpress-seo/admin/views/tool-bulk-editor.php new file mode 100644 index 0000000..77a90c9 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tool-bulk-editor.php @@ -0,0 +1,81 @@ +set_screen_reader_content( array( + 'heading_views' => __( 'Filter posts list' ), + 'heading_pagination' => __( 'Posts list navigation' ), + 'heading_list' => __( 'Posts list' ), +) ); + +// If type is empty, fill it with value of first tab (title). +$_GET['type'] = ( ! empty( $_GET['type'] ) ) ? $_GET['type'] : 'title'; + +if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) { + wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), stripslashes( $_SERVER['REQUEST_URI'] ) ) ); + exit; +} + +/** + * Outputs a help center. + * + * @param string $id The id for the tab. + */ +function render_help_center( $id ) { + $helpcenter_tab = new WPSEO_Option_Tab( 'bulk-' . $id, 'Bulk editor', + array( 'video_url' => 'https://yoa.st/screencast-tools-bulk-editor' ) ); + + $helpcenter = new WPSEO_Help_Center( 'bulk-editor' . $id, $helpcenter_tab ); + $helpcenter->output_help_center(); +} + +/** + * Renders a bulk editor tab. + * + * @param WPSEO_Bulk_List_Table $table The table to render. + * @param string $id The id for the tab. + */ +function get_rendered_tab( $table, $id ) { + ?> +
    + show_page(); + ?> +
    + + + +

    + +
    + + + +
    + + +
    +
    diff --git a/wp-content/plugins/wordpress-seo/admin/views/tool-file-editor.php b/wp-content/plugins/wordpress-seo/admin/views/tool-file-editor.php new file mode 100644 index 0000000..18c9731 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tool-file-editor.php @@ -0,0 +1,150 @@ +

    ', esc_html( $msg ), '

    '; +} + +if ( is_multisite() ) { + $action_url = network_admin_url( 'admin.php?page=wpseo_files' ); +} +else { + $action_url = admin_url( 'admin.php?page=wpseo_tools&tool=file-editor' ); +} + +echo '

    '; +$helpcenter_tab = new WPSEO_Option_Tab( 'bulk-editor', 'Bulk editor', + array( 'video_url' => 'https://yoa.st/screencast-tools-file-editor' ) ); + +$helpcenter = new WPSEO_Help_Center( 'bulk-editor', $helpcenter_tab ); +$helpcenter->output_help_center(); + +echo '

    ', __( 'Robots.txt', 'wordpress-seo' ), '

    '; + + +if ( ! file_exists( $robots_file ) ) { + if ( is_writable( get_home_path() ) ) { + echo '
    '; + wp_nonce_field( 'wpseo_create_robots', '_wpnonce', true, true ); + echo '

    ', __( 'You don\'t have a robots.txt file, create one here:', 'wordpress-seo' ), '

    '; + echo ''; + echo '
    '; + } + else { + echo '

    ', __( 'If you had a robots.txt file and it was editable, you could edit it from here.', 'wordpress-seo' ), '

    '; + } +} +else { + $f = fopen( $robots_file, 'r' ); + + $content = ''; + if ( filesize( $robots_file ) > 0 ) { + $content = fread( $f, filesize( $robots_file ) ); + } + $robots_txt_content = esc_textarea( $content ); + + if ( ! is_writable( $robots_file ) ) { + echo '

    ', __( 'If your robots.txt were writable, you could edit it from here.', 'wordpress-seo' ), '

    '; + echo '
    '; + } + else { + echo '
    '; + wp_nonce_field( 'wpseo-robotstxt', '_wpnonce', true, true ); + echo '

    '; + echo '
    '; + echo '
    '; + echo '
    '; + } +} +if ( ( isset( $_SERVER['SERVER_SOFTWARE'] ) && stristr( $_SERVER['SERVER_SOFTWARE'], 'nginx' ) === false ) ) { + + echo '

    ', __( '.htaccess file', 'wordpress-seo' ), '

    '; + + if ( file_exists( $ht_access_file ) ) { + $f = fopen( $ht_access_file, 'r' ); + + $contentht = ''; + if ( filesize( $ht_access_file ) > 0 ) { + $contentht = fread( $f, filesize( $ht_access_file ) ); + } + $contentht = esc_textarea( $contentht ); + + if ( ! is_writable( $ht_access_file ) ) { + echo '

    ', __( 'If your .htaccess were writable, you could edit it from here.', 'wordpress-seo' ), '

    '; + echo '
    '; + } + else { + echo '
    '; + wp_nonce_field( 'wpseo-htaccess', '_wpnonce', true, true ); + echo '

    '; + echo '
    '; + echo '
    '; + echo '
    '; + } + } + else { + echo '

    ', __( 'If you had a .htaccess file and it was editable, you could edit it from here.', 'wordpress-seo' ), '

    '; + } +} diff --git a/wp-content/plugins/wordpress-seo/admin/views/tool-import-export.php b/wp-content/plugins/wordpress-seo/admin/views/tool-import-export.php new file mode 100644 index 0000000..5356fcb --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/tool-import-export.php @@ -0,0 +1,135 @@ +import_headspace(); + } + + if ( ! empty( $post_wpseo['importwpseo'] ) || filter_input( INPUT_GET, 'importwpseo' ) ) { + $import = new WPSEO_Import_WPSEO( $replace ); + } +} + +if ( isset( $_FILES['settings_import_file'] ) ) { + check_admin_referer( 'wpseo-import-file' ); + + $import = new WPSEO_Import(); +} + +/** + * Allow custom import actions. + * + * @api bool|object $import Contains info about the handled import + */ +$import = apply_filters( 'wpseo_handle_import', $import ); + +if ( $import ) { + /** + * Allow customization of import&export message + * + * @api string $msg The message. + */ + $msg = apply_filters( 'wpseo_import_message', isset( $import->msg ) ? $import->msg : '' ); + + if ( $msg != '' ) { + // Check if we've deleted old data and adjust message to match it. + if ( $replace ) { + $msg .= ' ' . __( 'The old data of the imported plugin was deleted successfully.', 'wordpress-seo' ); + } + + $status = ( $import->success ) ? 'updated' : 'error'; + + echo '

    ', $msg, '

    '; + } +} + +$tabs = array( + 'wpseo-import' => array( + 'label' => __( 'Import settings', 'wordpress-seo' ), + 'screencast_video_url' => 'https://yoa.st/screencast-tools-import-export', + ), + 'wpseo-export' => array( + 'label' => __( 'Export settings', 'wordpress-seo' ), + 'screencast_video_url' => 'https://yoa.st/screencast-tools-import-export', + ), + 'import-seo' => array( + 'label' => __( 'Import from other SEO plugins', 'wordpress-seo' ), + 'screencast_video_url' => 'https://yoa.st/screencast-tools-import-export', + ), +); + +?> +

    + + + + $tab ) { + + printf( '
    ', $identifier ); + + if ( ! empty( $tab['screencast_video_url'] ) ) { + $tab_video_url = $tab['screencast_video_url']; + + $helpcenter_tab = new WPSEO_Option_Tab( $identifier, $tab['label'], + array( 'video_url' => $tab['screencast_video_url'] ) ); + + $helpcenter = new WPSEO_Help_Center( $identifier, $helpcenter_tab ); + $helpcenter->output_help_center(); + } + + require_once WPSEO_PATH . 'admin/views/tabs/tool/' . $identifier . '.php'; + + echo '
    '; +} + +/** + * Allow adding a custom import tab + */ +do_action( 'wpseo_import_tab_content' ); diff --git a/wp-content/plugins/wordpress-seo/admin/views/user-profile.php b/wp-content/plugins/wordpress-seo/admin/views/user-profile.php new file mode 100644 index 0000000..5ef1258 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/admin/views/user-profile.php @@ -0,0 +1,90 @@ + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + +
    + + + +
    + ID ) === 'on' ) ? 'checked' : ''; ?> /> + +
    + ID ) === 'on' ) ? 'checked' : ''; ?> /> + +

    + +

    +
    + ID ) === 'on' ) ? 'checked' : ''; ?> /> + +

    + +

    +
    +

    diff --git a/wp-content/plugins/wordpress-seo/css/admin-global-370.min.css b/wp-content/plugins/wordpress-seo/css/admin-global-370.min.css new file mode 100644 index 0000000..dc211ba --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/admin-global-370.min.css @@ -0,0 +1 @@ +.wpseo-premium-indicator{display:inline-block;width:1px;height:1px}#adminmenu .wpseo-premium-indicator{margin:-2px 0 -3px 2px;color:inherit}.wpseo-premium-indicator svg{display:none;width:auto;height:100%}#TB_window .wpseo_content_wrapper p{font-size:14px;font-style:normal}#TB_window .wpseo_content_wrapper label{margin:0 10px 0 0;font-size:14px;font-weight:700}.wpseo-premium-popup-title{margin:1em 0;font-size:1.3em}.wpseo-premium-popup-icon{margin:10px}.edit-tags-php .column-description img{max-width:100%;height:auto}.select2-search__field{margin:0}.select2-results__option,.select2-search--inline,.select2-selection__choice{margin-bottom:0}.select2-container .select2-search--inline .select2-search__field{margin-top:6px!important;line-height:inherit}.yoast-label-strong{font-weight:600} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/admin-global-370.min.rapido.css b/wp-content/plugins/wordpress-seo/css/admin-global-370.min.rapido.css new file mode 100644 index 0000000..108ea85 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/admin-global-370.min.rapido.css @@ -0,0 +1 @@ +.wpseo-premium-indicator{display:inline-block;width:1px;height:1px}#adminmenu .wpseo-premium-indicator{margin:-2px 0 -3px 2px;color:inherit}.wpseo-premium-indicator svg{display:none;width:auto;height:100%}#TB_window .wpseo_content_wrapper p{font-size:14px;font-style:normal}#TB_window .wpseo_content_wrapper label{margin:0 10px 0 0;font-size:14px;font-weight:700}.wpseo-premium-popup-title{margin:1em 0;font-size:1.3em}.wpseo-premium-popup-icon{margin:10px}.edit-tags-php .column-description img{max-width:100%;height:auto}.select2-search__field{margin:0}.select2-results__option,.select2-search--inline,.select2-selection__choice{margin-bottom:0}.select2-container .select2-search--inline .select2-search__field{margin-top:6px !important;line-height:inherit}.yoast-label-strong{font-weight:600} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/adminbar-340.min.css b/wp-content/plugins/wordpress-seo/css/adminbar-340.min.css new file mode 100644 index 0000000..4b1017a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/adminbar-340.min.css @@ -0,0 +1 @@ +.wpseo-score-icon{display:inline-block!important;float:left;width:12px!important;height:12px!important;border-radius:50%!important;background-color:#999}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#999}.wpseo-score-icon.noindex{background-color:#1e8cbe}.adminbar-seo-score{margin:10px 10px 0 4px!important}#wpadminbar .yoast-issue-added,#wpadminbar .yoast-issue-added:hover{position:absolute;top:32px;left:0;min-width:300px;padding:2px 8px;border-radius:0 10px 10px;color:#fff;background-color:#a4286a;box-shadow:1px 1px 1px 1px grey}#wpadminbar .yoast-issue-added{display:none}#wpadminbar .yoast-issue-counter{display:inline;padding:1px 7px 1px 6px!important;border-radius:50%;color:#fff}.yoast-issue-counter{background-color:#d54e21}#wpadminbar .yoast-logo.svg{float:left;width:26px;height:30px;background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6IzgyODc4YyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxnPjxnPjxnPjxnPjxwYXRoIGQ9Ik0yMDMuNiwzOTVjNi44LTE3LjQsNi44LTM2LjYsMC01NGwtNzkuNC0yMDRoNzAuOWw0Ny43LDE0OS40bDc0LjgtMjA3LjZIMTE2LjRjLTQxLjgsMC03NiwzNC4yLTc2LDc2VjM1N2MwLDQxLjgsMzQuMiw3Niw3Niw3NkgxNzNDMTg5LDQyNC4xLDE5Ny42LDQxMC4zLDIwMy42LDM5NXoiLz48L2c+PGc+PHBhdGggZD0iTTQ3MS42LDE1NC44YzAtNDEuOC0zNC4yLTc2LTc2LTc2aC0zTDI4NS43LDM2NWMtOS42LDI2LjctMTkuNCw0OS4zLTMwLjMsNjhoMjE2LjJWMTU0Ljh6Ii8+PC9nPjwvZz48cGF0aCBzdHJva2Utd2lkdGg9IjIuOTc0IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0zMzgsMS4zbC05My4zLDI1OS4xbC00Mi4xLTEzMS45aC04OS4xbDgzLjgsMjE1LjJjNiwxNS41LDYsMzIuNSwwLDQ4Yy03LjQsMTktMTksMzcuMy01Myw0MS45bC03LjIsMXY3Nmg4LjNjODEuNywwLDExOC45LTU3LjIsMTQ5LjYtMTQyLjlMNDMxLjYsMS4zSDMzOHogTTI3OS40LDM2MmMtMzIuOSw5Mi02Ny42LDEyOC43LTEyNS43LDEzMS44di00NWMzNy41LTcuNSw1MS4zLTMxLDU5LjEtNTEuMWM3LjUtMTkuMyw3LjUtNDAuNywwLTYwbC03NS0xOTIuN2g1Mi44bDUzLjMsMTY2LjhsMTA1LjktMjk0aDU4LjFMMjc5LjQsMzYyeiIvPjwvZz48L2c+PC9zdmc+);background-repeat:no-repeat;background-position:0 6px;background-size:20px}#wpadminbar #wp-admin-bar-wpseo-licenses .ab-item{color:#f18500} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/adminbar-340.min.rapido.css b/wp-content/plugins/wordpress-seo/css/adminbar-340.min.rapido.css new file mode 100644 index 0000000..d2320bf --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/adminbar-340.min.rapido.css @@ -0,0 +1 @@ +.wpseo-score-icon{display:inline-block !important;float:left;width:12px !important;height:12px !important;border-radius:50% !important;background-color:#999}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#999}.wpseo-score-icon.noindex{background-color:#1e8cbe}.adminbar-seo-score{margin:10px 10px 0 4px !important}#wpadminbar .yoast-issue-added,#wpadminbar .yoast-issue-added:hover{position:absolute;top:32px;left:0;min-width:300px;padding:2px 8px;border-radius:0 10px 10px;color:#fff;background-color:#a4286a;box-shadow:1px 1px 1px 1px grey}#wpadminbar .yoast-issue-added{display:none}#wpadminbar .yoast-issue-counter{display:inline;padding:1px 7px 1px 6px !important;border-radius:50%;color:#fff}.yoast-issue-counter{background-color:#d54e21}#wpadminbar .yoast-logo.svg{float:left;width:26px;height:30px;background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6IzgyODc4YyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxnPjxnPjxnPjxnPjxwYXRoIGQ9Ik0yMDMuNiwzOTVjNi44LTE3LjQsNi44LTM2LjYsMC01NGwtNzkuNC0yMDRoNzAuOWw0Ny43LDE0OS40bDc0LjgtMjA3LjZIMTE2LjRjLTQxLjgsMC03NiwzNC4yLTc2LDc2VjM1N2MwLDQxLjgsMzQuMiw3Niw3Niw3NkgxNzNDMTg5LDQyNC4xLDE5Ny42LDQxMC4zLDIwMy42LDM5NXoiLz48L2c+PGc+PHBhdGggZD0iTTQ3MS42LDE1NC44YzAtNDEuOC0zNC4yLTc2LTc2LTc2aC0zTDI4NS43LDM2NWMtOS42LDI2LjctMTkuNCw0OS4zLTMwLjMsNjhoMjE2LjJWMTU0Ljh6Ii8+PC9nPjwvZz48cGF0aCBzdHJva2Utd2lkdGg9IjIuOTc0IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0zMzgsMS4zbC05My4zLDI1OS4xbC00Mi4xLTEzMS45aC04OS4xbDgzLjgsMjE1LjJjNiwxNS41LDYsMzIuNSwwLDQ4Yy03LjQsMTktMTksMzcuMy01Myw0MS45bC03LjIsMXY3Nmg4LjNjODEuNywwLDExOC45LTU3LjIsMTQ5LjYtMTQyLjlMNDMxLjYsMS4zSDMzOHogTTI3OS40LDM2MmMtMzIuOSw5Mi02Ny42LDEyOC43LTEyNS43LDEzMS44di00NWMzNy41LTcuNSw1MS4zLTMxLDU5LjEtNTEuMWM3LjUtMTkuMyw3LjUtNDAuNywwLTYwbC03NS0xOTIuN2g1Mi44bDUzLjMsMTY2LjhsMTA1LjktMjk0aDU4LjFMMjc5LjQsMzYyeiIvPjwvZz48L2c+PC9zdmc+);background-repeat:no-repeat;background-position:0 6px;background-size:20px}#wpadminbar #wp-admin-bar-wpseo-licenses .ab-item{color:#f18500} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/alerts-340.min.css b/wp-content/plugins/wordpress-seo/css/alerts-340.min.css new file mode 100644 index 0000000..7d0d641 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/alerts-340.min.css @@ -0,0 +1 @@ +.yoast-alert{padding:0 12px;border-left:4px solid #fff;background:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.yoast-alerts .yoast-alert-holder{margin-bottom:.8em}.yoast-alerts .yoast-alert{width:100%}.yoast-container__alert .yoast-alert{border-left-color:#dc3232}#yoast-alerts-dismissed .yoast-alert{border-left-color:#d93f69}.yoast-container__warning .yoast-alert{border-left-color:#5d237a}#yoast-warnings-dismissed .yoast-alert{border-left-color:#0075b3}.yoast-container{position:relative;max-width:1280px;margin-bottom:2em;padding:20px 20px 0;border:1px solid #bbb;background-color:#f1f1f1;box-shadow:0 2px 8px rgba(0,0,0,.1)}.yoast-alerts>h2:first-child{margin-bottom:1em}.yoast-alerts .yoast-container h3{margin:-20px -20px 0;padding:1em;border-bottom:1px solid #ccc;background-color:#dfdfdf;text-shadow:1px 1px 0 #eee;font-size:1.6em}h3 .dashicons-warning{color:#dc3232}.yoast-container .container{max-width:980px}.yoast-container .yoast-alert-holder{display:-ms-flexbox;display:flex}.dismiss .dashicons,.restore .dashicons{width:24px;height:24px;font-size:24px}.yoast-bottom-spacing{margin-bottom:20px}.yoast-alerts .button.dismiss,.yoast-alerts .button.restore{width:40px;height:40px;line-height:inherit;-ms-flex:0 0 40px;flex:0 0 40px}.yoast-alerts .button.dismiss:focus,.yoast-alerts .button.dismiss:hover,.yoast-alerts .button.restore:focus,.yoast-alerts .button.restore:hover{background:0 0}.yoast-container .separator{margin-top:1em;margin-bottom:1em;border-top:1px solid #ddd}.yoast-container .dashicons-yes{color:#77b227}.yoast-container__warning .dashicons-flag{color:#5d237a}.yoast-container-disabled{display:table-cell;position:absolute;top:0;right:0;bottom:0;left:0;border-radius:4px;background-color:rgba(232,232,232,.7)}.yoast-no-issues{padding:1em 1em 1em 16px;color:#666} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/alerts-340.min.rapido.css b/wp-content/plugins/wordpress-seo/css/alerts-340.min.rapido.css new file mode 100644 index 0000000..ea18af4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/alerts-340.min.rapido.css @@ -0,0 +1 @@ +.yoast-alert{padding:0 12px;border-left:4px solid #fff;background:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1)}.yoast-alerts .yoast-alert-holder{margin-bottom:.8em}.yoast-alerts .yoast-alert{width:100%}.yoast-container__alert .yoast-alert{border-left-color:#dc3232}#yoast-alerts-dismissed .yoast-alert{border-left-color:#d93f69}.yoast-container__warning .yoast-alert{border-left-color:#5d237a}#yoast-warnings-dismissed .yoast-alert{border-left-color:#0075b3}.yoast-container{position:relative;max-width:1280px;margin-bottom:2em;padding:20px 20px 0;border:1px solid #bbb;background-color:#f1f1f1;box-shadow:0 2px 8px rgba(0,0,0,0.1)}.yoast-alerts>h2:first-child{margin-bottom:1em}.yoast-alerts .yoast-container h3{margin:-20px -20px 0;padding:1em;border-bottom:1px solid #ccc;background-color:#dfdfdf;text-shadow:1px 1px 0 #eee;font-size:1.6em}h3 .dashicons-warning{color:#dc3232}.yoast-container .container{max-width:980px}.yoast-container .yoast-alert-holder{display:-ms-flexbox;display:flex}.dismiss .dashicons,.restore .dashicons{width:24px;height:24px;font-size:24px}.yoast-bottom-spacing{margin-bottom:20px}.yoast-alerts .button.dismiss,.yoast-alerts .button.restore{width:40px;height:40px;line-height:inherit;-ms-flex:0 0 40px;flex:0 0 40px}.yoast-alerts .button.dismiss:focus,.yoast-alerts .button.dismiss:hover,.yoast-alerts .button.restore:focus,.yoast-alerts .button.restore:hover{background:0 0}.yoast-container .separator{margin-top:1em;margin-bottom:1em;border-top:1px solid #ddd}.yoast-container .dashicons-yes{color:#77b227}.yoast-container__warning .dashicons-flag{color:#5d237a}.yoast-container-disabled{display:table-cell;position:absolute;top:0;right:0;bottom:0;left:0;border-radius:4px;background-color:rgba(232,232,232,0.7)}.yoast-no-issues{padding:1em 1em 1em 16px;color:#666} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dashboard-360.min.css b/wp-content/plugins/wordpress-seo/css/dashboard-360.min.css new file mode 100644 index 0000000..f08dbda --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dashboard-360.min.css @@ -0,0 +1 @@ +.wpseo-score-icon{display:inline-block;width:12px;height:12px;margin:3px 10px 0 3px;border-radius:50%;background:#888;vertical-align:top}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}#wpseo-dashboard-overview a{text-decoration:underline}#wpseo-dashboard-overview a.button{text-decoration:none}#wpseo-dashboard-overview th{font-weight:400;text-align:left}.wpseo-dashboard-overview-scores{display:table}.wpseo-dashboard-overview-scores li{display:table-row}.wpseo-dashboard-overview-post-count,.wpseo-dashboard-overview-post-score{display:table-cell;padding:2px 0}.wpseo-dashboard-overview-post-count{padding:0 0 0 10px;text-align:right}#wpseo-dashboard-overview .onpage{margin:5px 0 0;padding:10px 0 0;border-top:1px solid #eee}#wpseo-dashboard-overview .onpage .button.landing-page{border-color:#7b1e4f #6f1b47 #6f1b47;color:#fff;background:#a4286a;box-shadow:0 1px 0 #6f1b47}#wpseo-dashboard-overview .onpage .button.landing-page:focus,#wpseo-dashboard-overview .onpage .button.landing-page:hover{border-color:#6f1b47;background:#90235d}#wpseo-dashboard-overview .onpage .button.landing-page:focus{box-shadow:0 1px 0 #7b1e4f,0 0 2px 1px #a35685}#wpseo-dashboard-overview .onpage .button.landing-page:active{border-color:#6f1b47;background:#7b1e4f;box-shadow:inset 0 2px 0 #6f1b47;vertical-align:top} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/admin-global-370-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/admin-global-370-rtl.css new file mode 100644 index 0000000..ca5bfb8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/admin-global-370-rtl.css @@ -0,0 +1,61 @@ +.wpseo-premium-indicator { + display: inline-block; + width: 1px; + height: 1px; +} + +#adminmenu .wpseo-premium-indicator { + margin: -2px 2px -3px 0; + color: inherit; +} + +.wpseo-premium-indicator svg { + display: none; + width: auto; + height: 100%; +} + +#TB_window .wpseo_content_wrapper p { + font-size: 14px; + font-style: normal; +} + +#TB_window .wpseo_content_wrapper label { + margin: 0 0 0 10px; + font-size: 14px; + font-weight: bold; +} + +.wpseo-premium-popup-title { + margin: 1em 0; + font-size: 1.3em; +} + +.wpseo-premium-popup-icon { + margin: 10px; +} + +.edit-tags-php .column-description img { + max-width: 100%; + height: auto; +} + +/* Select2 specific fixes for WordPress */ +.select2-search__field { + margin: 0; +} + +.select2-results__option, +.select2-selection__choice, +.select2-search--inline { + margin-bottom: 0; +} + +.select2-container .select2-search--inline .select2-search__field { + margin-top: 6px !important; + line-height: inherit; +} + +.yoast-label-strong { + font-weight: 600; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/admin-global-370-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/admin-global-370-rtl.min.css new file mode 100644 index 0000000..b616834 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/admin-global-370-rtl.min.css @@ -0,0 +1 @@ +.wpseo-premium-indicator{display:inline-block;width:1px;height:1px}#adminmenu .wpseo-premium-indicator{margin:-2px 2px -3px 0;color:inherit}.wpseo-premium-indicator svg{display:none;width:auto;height:100%}#TB_window .wpseo_content_wrapper p{font-size:14px;font-style:normal}#TB_window .wpseo_content_wrapper label{margin:0 0 0 10px;font-size:14px;font-weight:700}.wpseo-premium-popup-title{margin:1em 0;font-size:1.3em}.wpseo-premium-popup-icon{margin:10px}.edit-tags-php .column-description img{max-width:100%;height:auto}.select2-search__field{margin:0}.select2-results__option,.select2-search--inline,.select2-selection__choice{margin-bottom:0}.select2-container .select2-search--inline .select2-search__field{margin-top:6px!important;line-height:inherit}.yoast-label-strong{font-weight:600} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/adminbar-340-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/adminbar-340-rtl.css new file mode 100644 index 0000000..2035a7a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/adminbar-340-rtl.css @@ -0,0 +1,74 @@ +.wpseo-score-icon { + display: inline-block !important; + float: right; + width: 12px !important; + height: 12px !important; + border-radius: 50% !important; + background-color: #999; +} + +.wpseo-score-icon.good { + background-color: #7ad03a; +} + +.wpseo-score-icon.ok { + background-color: #ee7c1b; +} + +.wpseo-score-icon.bad { + background-color: #dc3232; +} + +.wpseo-score-icon.na { + background-color: #999; +} + +.wpseo-score-icon.noindex { + background-color: #1e8cbe; +} + +.adminbar-seo-score { + margin: 10px 4px 0 10px !important; +} + +#wpadminbar .yoast-issue-added, +#wpadminbar .yoast-issue-added:hover { + position: absolute; + top: 32px; + right: 0; + min-width: 300px; + padding: 2px 8px; + border-radius: 10px 0 10px 10px; + color: white; + background-color: #a4286a; + box-shadow: -1px 1px 1px 1px grey; +} + +#wpadminbar .yoast-issue-added { + display: none; +} + +#wpadminbar .yoast-issue-counter { + display: inline; + padding: 1px 6px 1px 7px !important; + border-radius: 50%; + color: white; +} + +.yoast-issue-counter { + background-color: #d54e21; +} + +#wpadminbar .yoast-logo.svg { + float: right; + width: 26px; + height: 30px; + background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6IzgyODc4YyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxnPjxnPjxnPjxnPjxwYXRoIGQ9Ik0yMDMuNiwzOTVjNi44LTE3LjQsNi44LTM2LjYsMC01NGwtNzkuNC0yMDRoNzAuOWw0Ny43LDE0OS40bDc0LjgtMjA3LjZIMTE2LjRjLTQxLjgsMC03NiwzNC4yLTc2LDc2VjM1N2MwLDQxLjgsMzQuMiw3Niw3Niw3NkgxNzNDMTg5LDQyNC4xLDE5Ny42LDQxMC4zLDIwMy42LDM5NXoiLz48L2c+PGc+PHBhdGggZD0iTTQ3MS42LDE1NC44YzAtNDEuOC0zNC4yLTc2LTc2LTc2aC0zTDI4NS43LDM2NWMtOS42LDI2LjctMTkuNCw0OS4zLTMwLjMsNjhoMjE2LjJWMTU0Ljh6Ii8+PC9nPjwvZz48cGF0aCBzdHJva2Utd2lkdGg9IjIuOTc0IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0zMzgsMS4zbC05My4zLDI1OS4xbC00Mi4xLTEzMS45aC04OS4xbDgzLjgsMjE1LjJjNiwxNS41LDYsMzIuNSwwLDQ4Yy03LjQsMTktMTksMzcuMy01Myw0MS45bC03LjIsMXY3Nmg4LjNjODEuNywwLDExOC45LTU3LjIsMTQ5LjYtMTQyLjlMNDMxLjYsMS4zSDMzOHogTTI3OS40LDM2MmMtMzIuOSw5Mi02Ny42LDEyOC43LTEyNS43LDEzMS44di00NWMzNy41LTcuNSw1MS4zLTMxLDU5LjEtNTEuMWM3LjUtMTkuMyw3LjUtNDAuNywwLTYwbC03NS0xOTIuN2g1Mi44bDUzLjMsMTY2LjhsMTA1LjktMjk0aDU4LjFMMjc5LjQsMzYyeiIvPjwvZz48L2c+PC9zdmc+"); + background-repeat: no-repeat; + background-position: 100% 6px; + background-size: 20px; +} + +#wpadminbar #wp-admin-bar-wpseo-licenses .ab-item { + color: #f18500; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/adminbar-340-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/adminbar-340-rtl.min.css new file mode 100644 index 0000000..b15e8bd --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/adminbar-340-rtl.min.css @@ -0,0 +1 @@ +.wpseo-score-icon{display:inline-block!important;float:right;width:12px!important;height:12px!important;border-radius:50%!important;background-color:#999}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#999}.wpseo-score-icon.noindex{background-color:#1e8cbe}.adminbar-seo-score{margin:10px 4px 0 10px!important}#wpadminbar .yoast-issue-added,#wpadminbar .yoast-issue-added:hover{position:absolute;top:32px;right:0;min-width:300px;padding:2px 8px;border-radius:10px 0 10px 10px;color:#fff;background-color:#a4286a;box-shadow:-1px 1px 1px 1px grey}#wpadminbar .yoast-issue-added{display:none}#wpadminbar .yoast-issue-counter{display:inline;padding:1px 6px 1px 7px!important;border-radius:50%;color:#fff}.yoast-issue-counter{background-color:#d54e21}#wpadminbar .yoast-logo.svg{float:right;width:26px;height:30px;background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6IzgyODc4YyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxnPjxnPjxnPjxnPjxwYXRoIGQ9Ik0yMDMuNiwzOTVjNi44LTE3LjQsNi44LTM2LjYsMC01NGwtNzkuNC0yMDRoNzAuOWw0Ny43LDE0OS40bDc0LjgtMjA3LjZIMTE2LjRjLTQxLjgsMC03NiwzNC4yLTc2LDc2VjM1N2MwLDQxLjgsMzQuMiw3Niw3Niw3NkgxNzNDMTg5LDQyNC4xLDE5Ny42LDQxMC4zLDIwMy42LDM5NXoiLz48L2c+PGc+PHBhdGggZD0iTTQ3MS42LDE1NC44YzAtNDEuOC0zNC4yLTc2LTc2LTc2aC0zTDI4NS43LDM2NWMtOS42LDI2LjctMTkuNCw0OS4zLTMwLjMsNjhoMjE2LjJWMTU0Ljh6Ii8+PC9nPjwvZz48cGF0aCBzdHJva2Utd2lkdGg9IjIuOTc0IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0zMzgsMS4zbC05My4zLDI1OS4xbC00Mi4xLTEzMS45aC04OS4xbDgzLjgsMjE1LjJjNiwxNS41LDYsMzIuNSwwLDQ4Yy03LjQsMTktMTksMzcuMy01Myw0MS45bC03LjIsMXY3Nmg4LjNjODEuNywwLDExOC45LTU3LjIsMTQ5LjYtMTQyLjlMNDMxLjYsMS4zSDMzOHogTTI3OS40LDM2MmMtMzIuOSw5Mi02Ny42LDEyOC43LTEyNS43LDEzMS44di00NWMzNy41LTcuNSw1MS4zLTMxLDU5LjEtNTEuMWM3LjUtMTkuMyw3LjUtNDAuNywwLTYwbC03NS0xOTIuN2g1Mi44bDUzLjMsMTY2LjhsMTA1LjktMjk0aDU4LjFMMjc5LjQsMzYyeiIvPjwvZz48L2c+PC9zdmc+);background-repeat:no-repeat;background-position:100% 6px;background-size:20px}#wpadminbar #wp-admin-bar-wpseo-licenses .ab-item{color:#f18500} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/alerts-340-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/alerts-340-rtl.css new file mode 100644 index 0000000..ebe5cb9 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/alerts-340-rtl.css @@ -0,0 +1,125 @@ +.yoast-alert { + padding: 0 12px; + border-right: 4px solid #fff; + background: #fff; + box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1); +} + +.yoast-alerts .yoast-alert-holder { + margin-bottom: 0.8em; +} + +.yoast-alerts .yoast-alert { + width: 100%; +} + +.yoast-container__alert .yoast-alert { + border-right-color: #dc3232; +} + +#yoast-alerts-dismissed .yoast-alert { + border-right-color: #d93f69; +} + +.yoast-container__warning .yoast-alert { + border-right-color: #5d237a; +} + +#yoast-warnings-dismissed .yoast-alert { + border-right-color: #0075b3; +} + +.yoast-container { + position: relative; + max-width: 1280px; + margin-bottom: 2em; + padding: 20px 20px 0; + border: 1px solid #bbb; + background-color: #f1f1f1; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} + +.yoast-alerts > h2:first-child { + margin-bottom: 1em; +} + +.yoast-alerts .yoast-container h3 { + margin: -20px -20px 0; + padding: 1em; + border-bottom: 1px solid #ccc; + background-color: #dfdfdf; + text-shadow: -1px 1px 0 #eee; + font-size: 1.6em; +} + +h3 .dashicons-warning { + color: #dc3232; +} + +.yoast-container .container { + max-width: 980px; +} + +.yoast-container .yoast-alert-holder { + display: -ms-flexbox; + display: flex; +} + +.restore .dashicons, +.dismiss .dashicons { + width: 24px; + height: 24px; + font-size: 24px; +} + +.yoast-bottom-spacing { + margin-bottom: 20px; +} + +/* These selectors need a higher specificity than .wp-core-ui .button */ +.yoast-alerts .button.restore, +.yoast-alerts .button.dismiss { + width: 40px; + height: 40px; + line-height: inherit; + + -ms-flex: 0 0 40px; + flex: 0 0 40px; +} + +.yoast-alerts .button.restore:hover, +.yoast-alerts .button.dismiss:hover, +.yoast-alerts .button.restore:focus, +.yoast-alerts .button.dismiss:focus { + background: transparent; +} + +.yoast-container .separator { + margin-top: 1em; + margin-bottom: 1em; + border-top: 1px solid #ddd; +} + +.yoast-container .dashicons-yes { + color: #77b227; +} + +.yoast-container__warning .dashicons-flag { + color: #5d237a; +} + +.yoast-container-disabled { + display: table-cell; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + border-radius: 4px; + background-color: rgba(232, 232, 232, 0.7); +} + +.yoast-no-issues { + padding: 1em 16px 1em 1em; + color: #666; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/alerts-340-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/alerts-340-rtl.min.css new file mode 100644 index 0000000..5fae0ba --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/alerts-340-rtl.min.css @@ -0,0 +1 @@ +.yoast-alert{padding:0 12px;border-right:4px solid #fff;background:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.yoast-alerts .yoast-alert-holder{margin-bottom:.8em}.yoast-alerts .yoast-alert{width:100%}.yoast-container__alert .yoast-alert{border-right-color:#dc3232}#yoast-alerts-dismissed .yoast-alert{border-right-color:#d93f69}.yoast-container__warning .yoast-alert{border-right-color:#5d237a}#yoast-warnings-dismissed .yoast-alert{border-right-color:#0075b3}.yoast-container{position:relative;max-width:1280px;margin-bottom:2em;padding:20px 20px 0;border:1px solid #bbb;background-color:#f1f1f1;box-shadow:0 2px 8px rgba(0,0,0,.1)}.yoast-alerts>h2:first-child{margin-bottom:1em}.yoast-alerts .yoast-container h3{margin:-20px -20px 0;padding:1em;border-bottom:1px solid #ccc;background-color:#dfdfdf;text-shadow:-1px 1px 0 #eee;font-size:1.6em}h3 .dashicons-warning{color:#dc3232}.yoast-container .container{max-width:980px}.yoast-container .yoast-alert-holder{display:-ms-flexbox;display:flex}.dismiss .dashicons,.restore .dashicons{width:24px;height:24px;font-size:24px}.yoast-bottom-spacing{margin-bottom:20px}.yoast-alerts .button.dismiss,.yoast-alerts .button.restore{width:40px;height:40px;line-height:inherit;-ms-flex:0 0 40px;flex:0 0 40px}.yoast-alerts .button.dismiss:focus,.yoast-alerts .button.dismiss:hover,.yoast-alerts .button.restore:focus,.yoast-alerts .button.restore:hover{background:0 0}.yoast-container .separator{margin-top:1em;margin-bottom:1em;border-top:1px solid #ddd}.yoast-container .dashicons-yes{color:#77b227}.yoast-container__warning .dashicons-flag{color:#5d237a}.yoast-container-disabled{display:table-cell;position:absolute;top:0;left:0;bottom:0;right:0;border-radius:4px;background-color:rgba(232,232,232,.7)}.yoast-no-issues{padding:1em 16px 1em 1em;color:#666} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/dashboard-360-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/dashboard-360-rtl.css new file mode 100644 index 0000000..1160948 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/dashboard-360-rtl.css @@ -0,0 +1,91 @@ +.wpseo-score-icon { + display: inline-block; + width: 12px; + height: 12px; + margin: 3px 3px 0 10px; + border-radius: 50%; + background: #888; + vertical-align: top; +} + +.wpseo-score-icon.good { + background-color: #7ad03a; +} + +.wpseo-score-icon.ok { + background-color: #ee7c1b; +} + +.wpseo-score-icon.bad { + background-color: #dc3232; +} + +.wpseo-score-icon.na { + background-color: #888; +} + +.wpseo-score-icon.noindex { + background-color: #1e8cbe; +} + +#wpseo-dashboard-overview a { + text-decoration: underline; +} + +#wpseo-dashboard-overview a.button { + text-decoration: none; +} + +#wpseo-dashboard-overview th { + font-weight: 400; + text-align: right; +} + +.wpseo-dashboard-overview-scores { + display: table; +} + +.wpseo-dashboard-overview-scores li { + display: table-row; +} + +.wpseo-dashboard-overview-post-score, +.wpseo-dashboard-overview-post-count { + display: table-cell; + padding: 2px 0; +} + +.wpseo-dashboard-overview-post-count { + padding: 0 10px 0 0; + text-align: left; +} + +#wpseo-dashboard-overview .onpage { + margin: 5px 0 0; + padding: 10px 0 0; + border-top: 1px solid #eee; +} + +#wpseo-dashboard-overview .onpage .button.landing-page { + border-color: #7b1e4f #6f1b47 #6f1b47; + color: #fff; + background: #a4286a; + box-shadow: 0 1px 0 #6f1b47; +} + +#wpseo-dashboard-overview .onpage .button.landing-page:hover, +#wpseo-dashboard-overview .onpage .button.landing-page:focus { + border-color: #6f1b47; + background: #90235d; +} + +#wpseo-dashboard-overview .onpage .button.landing-page:focus { + box-shadow: 0 1px 0 #7b1e4f, 0 0 2px 1px #a35685; +} + +#wpseo-dashboard-overview .onpage .button.landing-page:active { + border-color: #6f1b47; + background: #7b1e4f; + box-shadow: inset 0 2px 0 #6f1b47; + vertical-align: top; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/dashboard-360-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/dashboard-360-rtl.min.css new file mode 100644 index 0000000..1fb7847 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/dashboard-360-rtl.min.css @@ -0,0 +1 @@ +.wpseo-score-icon{display:inline-block;width:12px;height:12px;margin:3px 3px 0 10px;border-radius:50%;background:#888;vertical-align:top}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}#wpseo-dashboard-overview a{text-decoration:underline}#wpseo-dashboard-overview a.button{text-decoration:none}#wpseo-dashboard-overview th{font-weight:400;text-align:right}.wpseo-dashboard-overview-scores{display:table}.wpseo-dashboard-overview-scores li{display:table-row}.wpseo-dashboard-overview-post-count,.wpseo-dashboard-overview-post-score{display:table-cell;padding:2px 0}.wpseo-dashboard-overview-post-count{padding:0 10px 0 0;text-align:left}#wpseo-dashboard-overview .onpage{margin:5px 0 0;padding:10px 0 0;border-top:1px solid #eee}#wpseo-dashboard-overview .onpage .button.landing-page{border-color:#7b1e4f #6f1b47 #6f1b47;color:#fff;background:#a4286a;box-shadow:0 1px 0 #6f1b47}#wpseo-dashboard-overview .onpage .button.landing-page:focus,#wpseo-dashboard-overview .onpage .button.landing-page:hover{border-color:#6f1b47;background:#90235d}#wpseo-dashboard-overview .onpage .button.landing-page:focus{box-shadow:0 1px 0 #7b1e4f,0 0 2px 1px #a35685}#wpseo-dashboard-overview .onpage .button.landing-page:active{border-color:#6f1b47;background:#7b1e4f;box-shadow:inset 0 2px 0 #6f1b47;vertical-align:top} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/edit-page-330-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/edit-page-330-rtl.css new file mode 100644 index 0000000..c8bc25c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/edit-page-330-rtl.css @@ -0,0 +1,42 @@ +.wpseo-score-icon { + display: inline-block; + width: 12px; + height: 12px; + margin-right: 6px; + border-radius: 50%; + background: #888; + line-height: 16px; +} + +.wpseo-score-icon.good { + background-color: #7ad03a; +} + +.wpseo-score-icon.ok { + background-color: #ee7c1b; +} + +.wpseo-score-icon.bad { + background-color: #dc3232; +} + +.wpseo-score-icon.na { + background-color: #888; +} + +.wpseo-score-icon.noindex { + background-color: #1e8cbe; +} + +th#wpseo-score { + width: 63px; +} + +@media screen and (max-width: 782px) { + .column-wpseo-title, + .column-wpseo-score, + .column-wpseo-metadesc, + .column-wpseo-focuskw { + display: none; + } +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/edit-page-330-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/edit-page-330-rtl.min.css new file mode 100644 index 0000000..d746414 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/edit-page-330-rtl.min.css @@ -0,0 +1 @@ +.wpseo-score-icon{display:inline-block;width:12px;height:12px;margin-right:6px;border-radius:50%;background:#888;line-height:16px}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}th#wpseo-score{width:63px}@media screen and (max-width:782px){.column-wpseo-focuskw,.column-wpseo-metadesc,.column-wpseo-score,.column-wpseo-title{display:none}} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/featured-image-330-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/featured-image-330-rtl.css new file mode 100644 index 0000000..80fe00e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/featured-image-330-rtl.css @@ -0,0 +1,7 @@ +#yst_opengraph_image_warning { + padding: 1px 12px; + border: solid #dc3232; + border-width: 4px 4px 0 4px; + background-color: #fff; + box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1); +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/featured-image-330-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/featured-image-330-rtl.min.css new file mode 100644 index 0000000..d2ab2fa --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/featured-image-330-rtl.min.css @@ -0,0 +1 @@ +#yst_opengraph_image_warning{padding:1px 12px;border:solid #dc3232;border-width:4px 4px 0;background-color:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/help-center-340-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/help-center-340-rtl.css new file mode 100644 index 0000000..914ca86 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/help-center-340-rtl.css @@ -0,0 +1,207 @@ +/* Dynamically set when the Help is expanded to avoid horizontal scrolling */ +#wpcontent.yoast-help-center-open { + overflow-x: hidden; +} + +.wpseo-tab-video-container { + margin-bottom: 20px; + border-bottom: 1px solid #a4286a; +} + +.wpseo-tab-video-container__handle { + width: 100%; + margin: 0; + padding: 10px; + border: none; + outline: none; + color: #a4286a; + background: none; + line-height: 19px; + text-align: right; + cursor: pointer; +} + +.wpseo-tab-video-container__handle .toggle__arrow { + text-decoration: none; +} + +.wpseo-tab-video-container__handle:hover, +.wpseo-tab-video-container__handle:focus { + text-decoration: underline; +} + +.wpseo-tab-video-container__handle .dashicons-before:before { + margin-left: 5px; +} + +.wpseotab .wpseo-tab-video-container { + margin-top: -15px; +} + +.wpseo-tab-video-slideout { + display: none; + min-height: 320px; + margin: 0 -9999px; + /* hide the container bottom border when expanded */ + margin-bottom: -1px; + padding: 2em 9999px; + background-color: #a4286a; + box-shadow: inset 0 10px 10px -5px rgba(123, 30, 80, 0.5), inset 0 -10px 10px -5px rgba(123, 30, 80, 0.5); + + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.wpseo-tab-video-slideout .contextual-help-tabs-wrap { + padding: 0; + + flex-basis: 0; + flex-grow: 1; + -ms-flex-negative: 1; + /* do not use the shorthand syntax to avoid the unitless bug in IE 11 */ + -ms-flex-positive: 1; + -ms-flex-preferred-size: 0; + flex-shrink: 1; +} + +.wpseo-tab-video-slideout a { + color: white; +} + +.wpseo-tab-video-slideout a.button, +.wpseo-tab-video-slideout a.button-primary { + text-decoration: none; +} + +.wpseo-tab-video-slideout h1, +.wpseo-tab-video-slideout h2, +.wpseo-tab-video-slideout h3, +.wpseo-tab-video-slideout h4, +.wpseo-tab-video-slideout h5, +.wpseo-tab-video-slideout h6 { + margin-top: 0.5em; + padding-top: 0; + color: white; + font-weight: 500; +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea { + float: right; + /* min-width to make two boxes always have the same min width */ + min-width: 234px; + /* max-width to make two boxes take the same space of the video above: 560px */ + max-width: 242px; + margin: 0 0 1em 12px; + padding: 15px 15px 5px; + border: 1px solid; + border-color: white; + border-radius: 30px; + border-bottom-left-radius: 0; + color: white; + background-color: #a4286a; +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a, +.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:hover, +.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:focus { + color: white; + font-weight: 500; +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea h3 { + margin: 0; +} + +.wpseo-tab-video-slideout .yoast-help-center-tabs { + width: 180px; + padding: 0 0 1em 1em; + color: white; + background-color: #a4286a; + + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} + +.wpseo-tab-video-slideout .yoast-help-center-tabs ul { + margin: 0; +} + +.wpseo-tab-video-slideout .help-tab-content { + margin: 0; + color: white; + font-weight: 300; +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel--video { + /* In the settings pages is not a children of the flexbox container. */ + float: right; + margin-left: 1em; + padding-bottom: 1em; + + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel--video iframe { + /* remove iframe descender space */ + vertical-align: middle; +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel--text { + min-width: 264px; + margin: 0 auto; + + flex-basis: 0; + flex-grow: 1; + -ms-flex-negative: 1; + /* do not use the shorthand syntax to avoid the unitless bug in IE 11 */ + -ms-flex-positive: 1; + -ms-flex-preferred-size: 0; + flex-shrink: 1; + /* must be less than a text box min width */ +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel--text div:last-child { + margin-left: 0; +} + +/* When it's inside the metabox (posts, terms, media ). */ +.postbox .wpseo-tab-video-container { + margin: -6px -12px 20px; +} + +/* When it's inside the metabox (posts, terms, media ). */ +.postbox .wpseo-tab-video-slideout { + margin: 0; + padding: 2em 12px 15px; +} + +.inside .wpseo-tab-video-slideout { + height: auto; +} + +.wpseo-help-center-item { + display: inline; +} + +.wpseo-help-center-item a { + display: block; + padding: 10px 12px; + color: white; + text-decoration: none; +} + +.wpseo-help-center-item a:hover, +.wpseo-help-center-item a:focus { + text-decoration: underline; +} + +.wpseo-help-center-item a.dashicons-before:before { + margin-left: 3px; + text-decoration: none; +} + +.wpseo-help-center-item.active a { + color: #a4286a; + background-color: white; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/help-center-340-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/help-center-340-rtl.min.css new file mode 100644 index 0000000..46becb8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/help-center-340-rtl.min.css @@ -0,0 +1 @@ +#wpcontent.yoast-help-center-open{overflow-x:hidden}.wpseo-tab-video-container{margin-bottom:20px;border-bottom:1px solid #a4286a}.wpseo-tab-video-container__handle{width:100%;margin:0;padding:10px;border:none;outline:0;color:#a4286a;background:0 0;line-height:19px;text-align:right;cursor:pointer}.wpseo-tab-video-container__handle .toggle__arrow{text-decoration:none}.wpseo-tab-video-container__handle:focus,.wpseo-tab-video-container__handle:hover{text-decoration:underline}.wpseo-tab-video-container__handle .dashicons-before:before{margin-left:5px}.wpseotab .wpseo-tab-video-container{margin-top:-15px}.wpseo-tab-video-slideout{display:none;min-height:320px;margin:0 -9999px -1px;padding:2em 9999px;background-color:#a4286a;box-shadow:inset 0 10px 10px -5px rgba(123,30,80,.5),inset 0 -10px 10px -5px rgba(123,30,80,.5);-ms-flex-wrap:wrap;flex-wrap:wrap}.wpseo-tab-video-slideout .contextual-help-tabs-wrap{padding:0;flex-basis:0;flex-grow:1;-ms-flex-negative:1;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-shrink:1}.wpseo-tab-video-slideout a{color:#fff}.wpseo-tab-video-slideout a.button,.wpseo-tab-video-slideout a.button-primary{text-decoration:none}.wpseo-tab-video-slideout h1,.wpseo-tab-video-slideout h2,.wpseo-tab-video-slideout h3,.wpseo-tab-video-slideout h4,.wpseo-tab-video-slideout h5,.wpseo-tab-video-slideout h6{margin-top:.5em;padding-top:0;color:#fff;font-weight:500}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea{float:right;min-width:234px;max-width:242px;margin:0 0 1em 12px;padding:15px 15px 5px;border:1px solid #fff;border-radius:30px 30px 30px 0;color:#fff;background-color:#a4286a}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea h3,.wpseo-tab-video-slideout .yoast-help-center-tabs ul{margin:0}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a,.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:focus,.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:hover{color:#fff;font-weight:500}.wpseo-tab-video-slideout .yoast-help-center-tabs{width:180px;padding:0 0 1em 1em;color:#fff;background-color:#a4286a;-ms-flex:0 0 auto;flex:0 0 auto}.wpseo-tab-video-slideout .help-tab-content{margin:0;color:#fff;font-weight:300}.wpseo-tab-video-slideout .wpseo-tab-video__panel--video{float:right;margin-left:1em;padding-bottom:1em;-ms-flex:0 0 auto;flex:0 0 auto}.wpseo-tab-video-slideout .wpseo-tab-video__panel--video iframe{vertical-align:middle}.wpseo-tab-video-slideout .wpseo-tab-video__panel--text{min-width:264px;margin:0 auto;flex-basis:0;flex-grow:1;-ms-flex-negative:1;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-shrink:1}.wpseo-tab-video-slideout .wpseo-tab-video__panel--text div:last-child{margin-left:0}.postbox .wpseo-tab-video-container{margin:-6px -12px 20px}.postbox .wpseo-tab-video-slideout{margin:0;padding:2em 12px 15px}.inside .wpseo-tab-video-slideout{height:auto}.wpseo-help-center-item{display:inline}.wpseo-help-center-item a{display:block;padding:10px 12px;color:#fff;text-decoration:none}.wpseo-help-center-item a:focus,.wpseo-help-center-item a:hover{text-decoration:underline}.wpseo-help-center-item a.dashicons-before:before{margin-left:3px;text-decoration:none}.wpseo-help-center-item.active a{color:#a4286a;background-color:#fff} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/inside-editor-331-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/inside-editor-331-rtl.css new file mode 100644 index 0000000..6eea16e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/inside-editor-331-rtl.css @@ -0,0 +1,8 @@ +.yoast-text-mark { + background-color: #e1bee7; +} + +.yoast-text-mark__highlight { + color: white; + background-color: #4a148c; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/inside-editor-331-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/inside-editor-331-rtl.min.css new file mode 100644 index 0000000..d16fec5 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/inside-editor-331-rtl.min.css @@ -0,0 +1 @@ +.yoast-text-mark{background-color:#e1bee7}.yoast-text-mark__highlight{color:#fff;background-color:#4a148c} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/kb-search-350-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/kb-search-350-rtl.css new file mode 100644 index 0000000..7c81cab --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/kb-search-350-rtl.css @@ -0,0 +1,143 @@ +.wpseo-kb-search-search-bar { + padding-bottom: 15px; + border-bottom: 1px solid #ccc; +} + +.wpseo-kb-search-search-bar input[type="text"] { + min-width: 50%; + height: 28px; + margin-left: 3px; +} + +.wpseo-kb-search-results { + overflow: auto; + height: 500px; + margin: 0; + padding: 0; + list-style: none; +} + +.help-tab-content .wpseo-kb-search-results li { + max-width: none; + margin: 0; + list-style: none; +} + +.wpseo-kb-search-result { + display: block; + margin: 0; + padding-right: 5px; + border-bottom: 1px solid #efefef; + text-decoration: none; +} + +.wpseo-kb-search-result p { + max-width: none; + margin-top: 0; +} + +.wpseo-kb-search-result-link { + display: block; + outline: none; + text-decoration: none; + cursor: pointer; +} + +.wpseo-kb-search-result-link:hover, +.wpseo-kb-search-result-link:focus { + background-color: rgba(93, 12, 55, 0.5); + box-shadow: none; + text-decoration: underline; +} + +.wpseo-kb-search-result .wpseo-kb-search-result-title { + margin: 0; + padding: 14px 0; +} + +.wpseo-kb-search-ext-link { + float: left; +} + +.wpseo-kb-search-back-button:before { + content: "\f139"; +} + +.wpseo-kb-search-ext-link:before { + content: "\f504"; +} + +.dashicon-button:before { + display: inline-block; + font-family: "dashicons"; + font-size: 20px; + line-height: 1.35em; + vertical-align: middle; +} + +.wpseo-kb-search-navigation { + z-index: 10; + padding: 1em 0; +} + +.kb-search-content-frame { + width: 100%; + height: 543px; +} + +.kb-search-content-frame { + background: url("data:image/svg+xml;charset=utf-8,Loading article...") 100% 0 no-repeat; +} + +.wpseo-kb-loader:before, +.wpseo-kb-loader:after, +.wpseo-kb-loader { + width: 2.5em; + height: 2.5em; + border-radius: 50%; + animation: load7 1.8s infinite ease-in-out; + + animation-fill-mode: both; +} + +.wpseo-kb-loader { + position: relative; + margin: 80px auto; + font-size: 10px; + text-indent: -9999em; + -ms-transform: translateZ(0); + transform: translateZ(0); + animation-delay: -0.16s; +} + +.wpseo-kb-loader:before { + right: -3.5em; + animation-delay: -0.32s; +} + +.wpseo-kb-loader:after { + right: 3.5em; +} + +.wpseo-kb-loader:before, +.wpseo-kb-loader:after { + position: absolute; + top: 0; + content: ""; +} + +.dashicons { + text-decoration: none; +} + +@keyframes load7 { + 0%, + 80%, + 100% { + box-shadow: 0 2.5em 0 -1.3em; + } + + 40% { + box-shadow: 0 2.5em 0 0; + } +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/kb-search-350-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/kb-search-350-rtl.min.css new file mode 100644 index 0000000..b410344 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/kb-search-350-rtl.min.css @@ -0,0 +1 @@ +.wpseo-kb-search-search-bar{padding-bottom:15px;border-bottom:1px solid #ccc}.wpseo-kb-search-search-bar input[type=text]{min-width:50%;height:28px;margin-left:3px}.wpseo-kb-search-results{overflow:auto;height:500px;margin:0;padding:0;list-style:none}.help-tab-content .wpseo-kb-search-results li{max-width:none;margin:0;list-style:none}.wpseo-kb-search-result{display:block;margin:0;padding-right:5px;border-bottom:1px solid #efefef;text-decoration:none}.wpseo-kb-search-result p{max-width:none;margin-top:0}.wpseo-kb-search-result-link{display:block;outline:0;text-decoration:none;cursor:pointer}.wpseo-kb-search-result-link:focus,.wpseo-kb-search-result-link:hover{background-color:rgba(93,12,55,.5);box-shadow:none;text-decoration:underline}.wpseo-kb-search-result .wpseo-kb-search-result-title{margin:0;padding:14px 0}.wpseo-kb-search-ext-link{float:left}.wpseo-kb-search-back-button:before{content:"\f139"}.wpseo-kb-search-ext-link:before{content:"\f504"}.dashicon-button:before{display:inline-block;font-family:dashicons;font-size:20px;line-height:1.35em;vertical-align:middle}.wpseo-kb-search-navigation{z-index:10;padding:1em 0}.kb-search-content-frame{width:100%;height:543px;background:url("data:image/svg+xml;charset=utf-8,Loading article...") 100% 0 no-repeat}.wpseo-kb-loader,.wpseo-kb-loader:after,.wpseo-kb-loader:before{width:2.5em;height:2.5em;border-radius:50%;animation:load7 1.8s infinite ease-in-out;animation-fill-mode:both}.wpseo-kb-loader{position:relative;margin:80px auto;font-size:10px;text-indent:-9999em;-ms-transform:translateZ(0);transform:translateZ(0);animation-delay:-.16s}.wpseo-kb-loader:before{right:-3.5em;animation-delay:-.32s}.wpseo-kb-loader:after{right:3.5em}.wpseo-kb-loader:after,.wpseo-kb-loader:before{position:absolute;top:0;content:""}.dashicons{text-decoration:none}@keyframes load7{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/metabox-400-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/metabox-400-rtl.css new file mode 100644 index 0000000..a048388 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/metabox-400-rtl.css @@ -0,0 +1,1556 @@ +.yoast-section { + position: relative; + box-sizing: border-box; + width: 640px; + border: 1px solid #f7f7f7; + border-radius: 20px; + background-color: #fff; +} + +/* css for snippet */ +.snippet_container:before, +.snippet_container:after { + display: table; + content: " "; +} + +.snippet_container:after { + clear: both; +} + +.snippet-editor__container { + position: relative; + cursor: pointer; +} + +.snippet-editor__heading { + margin: 0 -20px 15px; + padding: 8px 20px; + border-bottom: 1px solid #f7f7f7; + color: #555; + font-family: "Open Sans", sans-serif; + font-size: 0.9rem; + font-weight: 300; +} + +.snippet-editor__heading-editor { + border-top: 1px solid #f7f7f7; +} + +.snippet-editor__heading-icon { + padding-right: 45px; + background-repeat: no-repeat; + /* rtlcss needs this as separate property */ + background-position: right 20px top 0.6em; + background-size: 16px; +} + +.snippet-editor__heading-icon-eye { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E"); +} + +.snippet-editor__container:hover:before { + display: block; + position: absolute; + top: -3px; + right: -22px; + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E"); + background-size: 25px; + content: ""; +} + +.snippet-editor__container--focus:hover:before, +.snippet-editor__container--focus:before { + display: block; + position: absolute; + top: -3px; + right: -22px; + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E"); + background-size: 25px; + content: ""; +} + +.snippet-editor__preview { + padding: 0 20px 15px; +} + +.snippet-editor__button { + padding: 8px 10px; + border: 1px solid #dbdbdb; + border-radius: 4px; + color: #555; + background: #f7f7f7; + font-size: 0.8rem; + cursor: pointer; +} + +.snippet-editor__edit-button { + display: block; + margin-top: 1em; + padding-right: 32px; + background: #f7f7f7 url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") no-repeat; + /* rtlcss needs this as separate property */ + background-position: right 8px top 50%; + background-size: 16px; +} + +.snippet-editor__form { + padding: 20px; +} + +.snippet-editor__label { + display: block; + position: relative; + width: 100%; + margin-top: 1em; +} + +.snippet-editor__label:first-child { + margin-top: 0; +} + +.snippet-editor__label--hover:before { + display: block; + position: absolute; + top: -3px; + top: 20px; + right: -22px; + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E"); + background-size: 25px; + content: ""; +} + +.snippet-editor__label--focus:before { + display: block; + position: absolute; + top: -3px; + top: 20px; + right: -22px; + width: 24px; + height: 24px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E"); + background-size: 25px; + content: ""; +} + +.snippet-editor__input { + display: block; + box-sizing: border-box; + width: 100%; + max-width: 100%; + margin-top: 5px; + border: 1px solid #bfbfbf; +} + +.snippet-editor__input:focus { + border: 1px solid #1074a8; + outline: none; +} + +/* Swap icons for RTL. */ +.rtl .snippet-editor__container:hover:before { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E"); +} + +.rtl .snippet-editor__container--focus:hover:before, +.rtl .snippet-editor__container--focus:before { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E"); +} + +.rtl .snippet-editor__label--hover:before { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E"); +} + +.rtl .snippet-editor__label--focus:before { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E"); +} + +.snippet-editor__meta-description { + height: 70px; +} + +.snippet-editor__submit { + margin-top: 1em; +} + +#snippet_cite { + min-width: 20px; +} + +#meta_container { + clear: both; + min-height: 20px; +} + +.snippet_container .title { + display: block; + overflow: hidden; + width: 600px; + margin: 0; + color: #1e0fbe; + font-size: 18px; + font-weight: normal; + line-height: 1.2; + white-space: nowrap; + text-decoration: none; + text-overflow: ellipsis; +} + +.snippet_container .url, +.snippet_container .desc { + font-size: 13px; + line-height: 1.4; +} + +.snippet_container .url { + display: inline-block; + float: right; + color: #006621; + font-size: 14px; + font-style: normal; + line-height: 16px; +} + +.snippet_container .down_arrow { + float: right; + margin-top: 6px; + margin-right: 5px; + border-top: 5px solid #006621; + border-left: 4px solid transparent; + border-right: 4px solid transparent; +} + +.snippet_container .desc-default { + color: #545454; +} + +.snippet_container .desc-default strong { + color: #6a6a6a; +} + +.snippet_container .desc-render { + color: #777; +} + +.snippet_container .tooLong { + color: #f00 !important; +} + +.snippet-editor__field--invalid { + color: #f00; +} + +.snippet-editor__progress { + display: block; + box-sizing: border-box; + width: 100%; + height: 8px; + margin-top: 5px; + border: none; + + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.snippet-editor__progress::-webkit-progress-bar { + height: 8px; + border: 1px solid #bfbfbf; + background-color: #f7f7f7; +} + +.snippet-editor__progress--fallback { + height: 8px; + border: 1px solid #bfbfbf; + background-color: #f7f7f7; +} + +.snippet-editor__progress-bar { + width: 0; + max-width: 100%; + height: 100%; +} + +.snippet-editor__date { + color: #808080; + font-size: 13px; + line-height: 1.4; +} + +.snippet-editor--hidden { + display: none; +} + +.snippet-editor__progress--bad[value] { + color: #dc3232; +} + +.snippet-editor__progress--bad[value]::-webkit-progress-value { + background-color: #dc3232; + transition: width 250ms; +} + +.snippet-editor__progress--bad[value]::-moz-progress-bar { + background-color: #dc3232; +} + +.snippet-editor__progress--bad[value] .snippet-editor__progress-bar { + background-color: #dc3232; +} + +.snippet-editor__progress--ok[value] { + color: #ee7c1b; +} + +.snippet-editor__progress--ok[value]::-webkit-progress-value { + background-color: #ee7c1b; + transition: width 250ms; +} + +.snippet-editor__progress--ok[value]::-moz-progress-bar { + background-color: #ee7c1b; +} + +.snippet-editor__progress--ok[value] .snippet-editor__progress-bar { + background-color: #ee7c1b; +} + +.snippet-editor__progress--good[value] { + color: #7ad03a; +} + +.snippet-editor__progress--good[value]::-webkit-progress-value { + background-color: #7ad03a; + transition: width 250ms; +} + +.snippet-editor__progress--good[value]::-moz-progress-bar { + background-color: #7ad03a; +} + +.snippet-editor__progress--good[value] .snippet-editor__progress-bar { + background-color: #7ad03a; +} + +/* css for analyzer */ +.wpseoanalysis { + padding-left: 0; +} + +.wpseo-score-text { + float: right; + width: 86%; + /* make room for score and mark icons, consider to use a better layout model */ + width: calc( 100% - 56px); +} + +/* needs higher specificity than other score icons */ +.assessment-results .wpseo-score-icon { + float: right; + width: 12px; + height: 12px; + margin: 3px 0 0 10px; + border-radius: 50%; + background: #888; +} + +.wpseo-score-icon.good { + background-color: #7ad03a; +} + +.wpseo-score-icon.ok { + background-color: #ee7c1b; +} + +.wpseo-score-icon.bad { + background-color: #dc3232; +} + +.wpseo-score-icon.na { + background-color: #999; +} + +.wpseo-score-icon.noindex { + background-color: #1e8cbe; +} + +li.score { + margin-bottom: 6px; + list-style-type: none !important; +} + +li.score:after { + display: table; + clear: both; + content: ""; +} + +.screen-reader-text { + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); + position: absolute !important; + width: 1px; + height: 1px; +} + +.assessment-results { + clear: both; +} + +.assessment-results__mark.icon-eye-inactive, +.assessment-results__mark.icon-eye-active, +.assessment-results__mark.icon-eye-disabled { + float: right; + width: 28px; + height: 28px; + margin: -5px 3px 0 3px; + padding: 4px; + border: 0; + border-radius: 100%; + outline: none; + background: no-repeat center; + background-size: 16px; + cursor: pointer; +} + +.assessment-results__mark.icon-eye-inactive { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E"); +} + +.assessment-results__mark.icon-eye-active { + background-color: #a4286a; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23ffffff%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E"); +} + +.assessment-results__mark.icon-eye-active.yoast-tooltip::before, +.assessment-results__mark.icon-eye-active.yoast-tooltip::after { + display: none; +} + +.assessment-results__mark.icon-eye-disabled { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23e6e6e6%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E"); +} + +.assessment-results__mark:focus { + border-radius: 100%; + box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); +} + +.assessment-results__mark-container { + display: inline-block; + float: left; + width: 33px; + min-height: 1px; +} + +/* loading dialog */ +.YoastSEO_msg .right, +.YoastSEO_msg .left { + display: none; +} + +@keyframes animatedBackground { + from { + background-position: 100% 0; + } + + to { + background-position: 0% 0; + } +} + +.YoastSEO_msg .bufferbar { + display: block; + width: 100%; + height: 12px; + margin: 10px 0 10px 0; + border: 1px solid #dfdfdf; + /*multiple background definitions for the sake of browsercompatibility*/ + background-image: linear-gradient(to right, #fff, #0063ff, #fff, #0063ff); + background-position: 100% 0; + background-size: 300% 100%; + animation: animatedBackground 5s linear infinite; +} + +.yoast-tooltip { + position: relative; +} + +button.yoast-tooltip { + /* IE 11 needs overflow: visible on buttons. */ + overflow: visible; +} + +.yoast-tooltip::after { + display: none; + position: absolute; + z-index: 1000000; + padding: 5px 8px; + border-radius: 3px; + opacity: 0; + color: #fff; + background: rgba(0, 0, 0, 0.8); + text-shadow: none; + font: normal normal 11px/1.5 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + text-align: center; + white-space: pre; + text-decoration: none; + letter-spacing: normal; + text-transform: none; + word-wrap: break-word; + content: attr(aria-label); + pointer-events: none; + + -webkit-font-smoothing: subpixel-antialiased; +} + +/* + * Use a data attribute as alternative source for the tooltip text. + * Add this selector as modifier of the base selector. + */ +.yoast-tooltip-alt::after { + content: attr(data-label); +} + +.yoast-tooltip::before { + display: none; + position: absolute; + z-index: 1000001; + width: 0; + height: 0; + border: 5px solid transparent; + opacity: 0; + color: rgba(0, 0, 0, 0.8); + content: "\00a0"; + pointer-events: none; +} + +@keyframes yoast-tooltip-appear { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.yoast-tooltip:hover::before, +.yoast-tooltip:hover::after, +.yoast-tooltip:active::before, +.yoast-tooltip:active::after, +.yoast-tooltip:focus::before, +.yoast-tooltip:focus::after { + display: inline-block; + text-decoration: none; + animation-name: yoast-tooltip-appear; + animation-duration: 0.1s; + animation-timing-function: ease-in; + animation-delay: 0.4s; + + animation-fill-mode: forwards; +} + +.yoast-tooltip-no-delay:hover::before, +.yoast-tooltip-no-delay:hover::after, +.yoast-tooltip-no-delay:active::before, +.yoast-tooltip-no-delay:active::after, +.yoast-tooltip-no-delay:focus::before, +.yoast-tooltip-no-delay:focus::after { + opacity: 1; + animation: none; +} + +.yoast-tooltip-multiline:hover::after, +.yoast-tooltip-multiline:active::after, +.yoast-tooltip-multiline:focus::after { + display: table-cell; +} + +.yoast-tooltip-s::after, +.yoast-tooltip-se::after, +.yoast-tooltip-sw::after { + top: 100%; + left: 50%; + margin-top: 5px; +} + +.yoast-tooltip-s::before, +.yoast-tooltip-se::before, +.yoast-tooltip-sw::before { + top: auto; + left: 50%; + bottom: -5px; + margin-left: -5px; + border-bottom-color: rgba(0, 0, 0, 0.8); +} + +.yoast-tooltip-se::after { + left: auto; + right: 50%; + margin-right: -15px; +} + +.yoast-tooltip-sw::after { + margin-left: -15px; +} + +.yoast-tooltip-n::after, +.yoast-tooltip-ne::after, +.yoast-tooltip-nw::after { + left: 50%; + bottom: 100%; + margin-bottom: 5px; +} + +.yoast-tooltip-n::before, +.yoast-tooltip-ne::before, +.yoast-tooltip-nw::before { + top: -5px; + left: 50%; + bottom: auto; + margin-left: -5px; + border-top-color: rgba(0, 0, 0, 0.8); +} + +.yoast-tooltip-ne::after { + left: auto; + right: 50%; + margin-right: -15px; +} + +.yoast-tooltip-nw::after { + margin-left: -15px; +} + +.yoast-tooltip-s::after, +.yoast-tooltip-n::after { + -ms-transform: translateX(-50%); + transform: translateX(-50%); +} + +.yoast-tooltip-w::after { + left: 100%; + bottom: 50%; + margin-left: 5px; + -ms-transform: translateY(50%); + transform: translateY(50%); +} + +.yoast-tooltip-w::before { + top: 50%; + bottom: 50%; + right: -5px; + margin-top: -5px; + border-right-color: rgba(0, 0, 0, 0.8); +} + +.yoast-tooltip-e::after { + bottom: 50%; + right: 100%; + margin-right: 5px; + -ms-transform: translateY(50%); + transform: translateY(50%); +} + +.yoast-tooltip-e::before { + top: 50%; + left: -5px; + bottom: 50%; + margin-top: -5px; + border-left-color: rgba(0, 0, 0, 0.8); +} + +.yoast-tooltip-multiline::after { + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 250px; + border-collapse: separate; + white-space: pre-line; + word-wrap: normal; + word-break: break-word; +} + +.yoast-tooltip-multiline.yoast-tooltip-s::after, +.yoast-tooltip-multiline.yoast-tooltip-n::after { + left: auto; + right: 50%; + -ms-transform: translateX(50%); + transform: translateX(50%); +} + +.yoast-tooltip-multiline.yoast-tooltip-w::after, +.yoast-tooltip-multiline.yoast-tooltip-e::after { + left: 100%; +} + +@media screen and (min-width: 0\0) { + .yoast-tooltip-multiline::after { + width: 250px; + } +} + +.yoast-tooltip-sticky::before, +.yoast-tooltip-sticky::after { + display: inline-block; +} + +.yoast-tooltip-sticky.yoast-tooltip-multiline::after { + display: table-cell; +} + +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-moz-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { + .yoast-tooltip-w::after { + margin-left: 4.5px; + } +} + +/* Dynamically set when the Help is expanded to avoid horizontal scrolling */ +#wpcontent.yoast-help-center-open { + overflow-x: hidden; +} + +.wpseo-tab-video-container { + margin-bottom: 20px; + border-bottom: 1px solid #a4286a; +} + +.wpseo-tab-video-container__handle { + width: 100%; + margin: 0; + padding: 10px; + border: none; + outline: none; + color: #a4286a; + background: none; + line-height: 19px; + text-align: right; + cursor: pointer; +} + +.wpseo-tab-video-container__handle .toggle__arrow { + text-decoration: none; +} + +.wpseo-tab-video-container__handle:hover, +.wpseo-tab-video-container__handle:focus { + text-decoration: underline; +} + +.wpseo-tab-video-container__handle .dashicons-before:before { + margin-left: 5px; +} + +.wpseotab .wpseo-tab-video-container { + margin-top: -15px; +} + +.wpseo-tab-video-slideout { + display: none; + min-height: 320px; + margin: 0 -9999px; + /* hide the container bottom border when expanded */ + margin-bottom: -1px; + padding: 2em 9999px; + background-color: #a4286a; + box-shadow: inset 0 10px 10px -5px rgba(123, 30, 80, 0.5), inset 0 -10px 10px -5px rgba(123, 30, 80, 0.5); + + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.wpseo-tab-video-slideout .contextual-help-tabs-wrap { + padding: 0; + + flex-basis: 0; + flex-grow: 1; + -ms-flex-negative: 1; + /* do not use the shorthand syntax to avoid the unitless bug in IE 11 */ + -ms-flex-positive: 1; + -ms-flex-preferred-size: 0; + flex-shrink: 1; +} + +.wpseo-tab-video-slideout a { + color: white; +} + +.wpseo-tab-video-slideout a.button, +.wpseo-tab-video-slideout a.button-primary { + text-decoration: none; +} + +.wpseo-tab-video-slideout h1, +.wpseo-tab-video-slideout h2, +.wpseo-tab-video-slideout h3, +.wpseo-tab-video-slideout h4, +.wpseo-tab-video-slideout h5, +.wpseo-tab-video-slideout h6 { + margin-top: 0.5em; + padding-top: 0; + color: white; + font-weight: 500; +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea { + float: right; + /* min-width to make two boxes always have the same min width */ + min-width: 234px; + /* max-width to make two boxes take the same space of the video above: 560px */ + max-width: 242px; + margin: 0 0 1em 12px; + padding: 15px 15px 5px; + border: 1px solid; + border-color: white; + border-radius: 30px; + border-bottom-left-radius: 0; + color: white; + background-color: #a4286a; +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a, +.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:hover, +.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:focus { + color: white; + font-weight: 500; +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea h3 { + margin: 0; +} + +.wpseo-tab-video-slideout .yoast-help-center-tabs { + width: 180px; + padding: 0 0 1em 1em; + color: white; + background-color: #a4286a; + + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} + +.wpseo-tab-video-slideout .yoast-help-center-tabs ul { + margin: 0; +} + +.wpseo-tab-video-slideout .help-tab-content { + margin: 0; + color: white; + font-weight: 300; +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel--video { + /* In the settings pages is not a children of the flexbox container. */ + float: right; + margin-left: 1em; + padding-bottom: 1em; + + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel--video iframe { + /* remove iframe descender space */ + vertical-align: middle; +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel--text { + min-width: 264px; + margin: 0 auto; + + flex-basis: 0; + flex-grow: 1; + -ms-flex-negative: 1; + /* do not use the shorthand syntax to avoid the unitless bug in IE 11 */ + -ms-flex-positive: 1; + -ms-flex-preferred-size: 0; + flex-shrink: 1; + /* must be less than a text box min width */ +} + +.wpseo-tab-video-slideout .wpseo-tab-video__panel--text div:last-child { + margin-left: 0; +} + +/* When it's inside the metabox (posts, terms, media ). */ +.postbox .wpseo-tab-video-container { + margin: -6px -12px 20px; +} + +/* When it's inside the metabox (posts, terms, media ). */ +.postbox .wpseo-tab-video-slideout { + margin: 0; + padding: 2em 12px 15px; +} + +.inside .wpseo-tab-video-slideout { + height: auto; +} + +.wpseo-help-center-item { + display: inline; +} + +.wpseo-help-center-item a { + display: block; + padding: 10px 12px; + color: white; + text-decoration: none; +} + +.wpseo-help-center-item a:hover, +.wpseo-help-center-item a:focus { + text-decoration: underline; +} + +.wpseo-help-center-item a.dashicons-before:before { + margin-left: 3px; + text-decoration: none; +} + +.wpseo-help-center-item.active a { + color: #a4286a; + background-color: white; +} + +.yoast-section { + position: relative; + width: 640px; + padding: 0 20px 15px; + border: 1px solid #f7f7f7; + border-radius: 20px; + background-color: #fff; +} + +.yoast-section__heading { + margin: 0 -20px 15px; + padding: 8px 20px; + border-bottom: 1px solid #f7f7f7; + color: #555; + font-family: "Open Sans", sans-serif; + font-size: 0.9rem; + font-weight: 300; +} + +.yoast-section__heading-icon { + padding-right: 45px; + background-repeat: no-repeat; + background-position: right 20px top 0.6em; + background-size: 16px; +} + +.yoast-section__heading-icon-file-text-o { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20file%3D%22%23555%22%20d%3D%22M1596%20380q28%2028%2048%2076t20%2088v1152q0%2040%2D28%2068t%2D68%2028h%2D1344q%2D40%200%2D68%2D28t%2D28%2D68v%2D1600q0%2D40%2028%2D68t68%2D28h896q40%200%2088%2020t76%2048zm%2D444%2D244v376h376q%2D10%2D29%2D22%2D41l%2D313%2D313q%2D12%2D12%2D41%2D22zm384%201528v%2D1024h%2D416q%2D40%200%2D68%2D28t%2D28%2D68v%2D416h%2D768v1536h1280zm%2D1024%2D864q0%2D14%209%2D23t23%2D9h704q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64zm736%20224q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64q0%2D14%209%2D23t23%2D9h704zm0%20256q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64q0%2D14%209%2D23t23%2D9h704z%22%2F%3E%3C%2Fsvg%3E"); +} + +.yoast-section *, +.yoast-section { + box-sizing: border-box; +} + +.yoast-section *:before, +.yoast-section *:after, +.yoast-section:before, +.yoast-section:after { + box-sizing: border-box; +} + +/* Hide the taxonomy metabox rich editor when it's first inserted in the form. */ +#edittag > #wp-description-wrap { + display: none; +} + +#wp-description-wrap .wp-editor-area { + border: 0; +} + +/* Give the original textarea enough height to mitigate content flash. */ +.term-description-wrap td > textarea#description { + min-height: 530px; +} + +/** + * Lines below came from metabox-tabs.css + * + * Metabox Tabs + */ +ul.wpseo-metabox-tabs { + display: none; + margin-top: 6px; + margin-bottom: 0; +} + +/* Contain floated list items and have overflow visible for the active tab */ +ul.wpseo-metabox-tabs:after { + display: table; + clear: both; + content: ""; +} + +.wpseo-metabox-tabs-div ul { + list-style: none; +} + +ul.wpseo-metabox-tabs li.active { + background-color: #fdfdfd; +} + +.wpseo-meta-section { + display: none; + width: 100%; + vertical-align: top; +} + +.wpseo-meta-section.active { + display: table-cell; +} + +.wpseo-metabox-sidebar { + display: table-cell; + width: 40px; + padding: 0 0 0 5px; + background-color: #fff; + vertical-align: top; +} + +.wpseo-metabox-sidebar li span { + margin: 3px -5px 0 0; + padding: 0 5px 0 2px; + border: 0 solid transparent; + border-right-width: 3px; + border-radius: 3px; +} +.wpseo-metabox-sidebar li span.wpseo-buy-premium { + color: #a4286a; +} +.wpseo-metabox-sidebar li span.wpseo-buy-premium:hover { + color: #832055; +} + +.wpseo-metabox-sidebar li.active span { + border-color: #333; + color: #333; +} +.wpseo-metabox-sidebar li.active span.wpseo-buy-premium { + border-color: #a4286a; + color: #a4286a; +} +.wpseo-metabox-sidebar li.active span.wpseo-buy-premium:hover { + border-color: #832055; + color: #832055; +} + +/* Floated to reset white space between list items */ +ul.wpseo-metabox-tabs li { + float: right; + margin-left: 5px; + margin-bottom: -1px; + padding: 0; + border: 1px solid #dfdfdf; + border-bottom: 0 none; +} +ul.wpseo-metabox-tabs li .wpseo-keyword { + display: inline-block; + overflow: hidden; + max-width: 8em; + max-width: 8rem; + vertical-align: top; + white-space: nowrap; + text-overflow: ellipsis; +} + +.wpseotab.active { + display: block; + overflow: auto; + padding: 0.5em 0.9em; + border: 1px solid #ddd; + background-color: #fdfdfd; +} + +.wpseo-metabox-tabs .wpseo_tablink { + display: inline-block; + padding: 5px 12px 6px 12px; + vertical-align: top; + text-decoration: none; +} + +/* Bigger right padding only for the content tab and the main keyword tabs */ +.wpseo-metabox-tabs .wpseo_content_tab a, +.wpseo-metabox-tabs .wpseo_content_tab + .wpseo_keyword_tab a { + padding-left: 12px; +} + +.wpseo-metabox-tabs .wpseo-score-icon { + margin-right: 0; +} + +#wpseo-meta-section-social .wpseo-metabox-tabs .wpseo_tablink { + padding: 5px 7px; +} + +.wpseo-metabox-tabs .wpseo_tablink .dashicons { + width: 16px; + height: 16px; + font-size: 16px; +} + +.wpseo-metabox-sidebar .dashicons { + width: 30px; + height: 30px; + font-size: 30px; +} + +.wpseo-metabox-sidebar a { + display: inline-block; + width: 35px; + height: 35px; + font-size: 20px; + line-height: 30px; + text-decoration: none; +} + +.wpseo-metabox-sidebar ul { + margin: 0; +} + +.wpseo-metabox-sidebar li { + margin-bottom: 0; + padding: 5px; +} + +.wpseo-metabox-tabs-div div.wpseo-tabs-panel { + overflow: auto; + padding: 0.5em 0.9em; + border: 1px solid; +} + +.wpseo-heading { + padding-right: 10px; +} + +#wpseo_meta .inside { + overflow: auto; + margin: 6px 0 0 0; +} + +.wpseotab { + display: none; +} + +#wpseo_meta .postbox .inside .wpseotab { + font-size: 13px !important; +} + +#wpseo_meta .wpseo-tab-video-container h2 { + margin-bottom: 20px; + padding-right: 0; + border: 0; + font-size: 1.3em; +} + +.inside .wpseotab .form-table th { + width: 140px !important; + font-size: 13px; +} + +.inside .wpseotab .form-table td { + padding-top: 20px; +} + +.inside .wpseotab .form-table label { + vertical-align: top; +} + +.inside .wpseotab .form-table td input, +.inside .wpseotab .form-table td select { + margin-top: -5px; +} + +.inside .wpseotab .form-table #yoast_wpseo_focuskw_text_input, +.inside .wpseotab .form-table #yoast_wpseo_metakeywords { + margin-top: 0; +} + +.inside .wpseotab .form-table td select[multiple] { + margin-top: 0; +} + +.wpseotab .wpseo_image_upload_button { + margin-right: 3px; +} + +.wpseotab .wpseoanalysis { + margin-top: 0; +} + +.good, +.warn, +.wrong { + font-weight: bold; +} + +.good { + color: green; +} + +.warn { + color: maroon; +} + +.wrong { + color: #dc3232; +} + +#current_seo_title span { + padding: 2px 5px; + background-color: lightyellow; +} + +#focuskwresults ul { + margin: 0; +} + +#focuskwresults p, +#focuskwresults li { + font-size: 13px; +} + +#focuskwresults li { + margin: 0 20px 0 0; + list-style-type: disc; +} + +.wpseo_hidden { + display: none; +} + +/* Linkdex analysis block */ +table.wpseoanalysis th { + padding: 15px 0 5px 0; + font-size: 14px; + text-align: right; +} + +table.wpseoanalysis th.first { + padding-top: 0; +} + +table.wpseoanalysis td { + margin: 5px 0; + font-size: 13px; + line-height: 16px; +} + +table.wpseoanalysis td.score { + width: 20px; + height: 18px; + padding-right: 10px; +} + +.wpseo_msg { + margin: 5px 0 10px 0; + padding: 0 5px; + border: 1px solid #e6db55; + background-color: lightYellow; +} + +ul.wpseo-metabox-tabs li.wpseo-tab-add-keyword { + border: none; +} + +.wpseo-tab-add-keyword .wpseo-add-keyword.button { + height: auto; + margin-top: 1px; + padding: 3px 6px; + color: #000; + background: transparent; + font-size: 14px; + line-height: 1; + vertical-align: top; + text-decoration: none; + cursor: pointer; +} + +#wpseo-add-keyword-popup-title { + margin: 1em 0; + font-size: 1.3em; +} + +/** + * Edit Snippet Button focus style. + * + * This should be abstracted and applied to all buttons. + * Or, maybe, take advantage of the `.button` CSS class in WordPress. + */ +.snippet-editor__button.snippet-editor__edit-button:focus { + border-color: #5b9dd9; + outline: none; + color: #23282d; + background-color: #fafafa; + box-shadow: 0 0 3px rgba(0, 115, 170, 0.8); +} + +.yoast_help.yoast-help-button { + overflow: visible; + position: relative; + width: 20px; + height: 20px; + margin: 0; + padding: 0; + border: 0; + outline: none; + color: #72777c; + background: transparent; + box-shadow: none; + vertical-align: top; + /* IE 11 */ + cursor: pointer; +} + +.wpseotab .yoast_help.yoast-help-button { + float: left; +} + +.wpseotab.content .yoast_help.yoast-help-button { + margin-top: -48px; +} + +.wpseo-admin-page .yoast_help.yoast-help-button { + margin-left: 6px; +} + +.yoast_help.yoast-help-button:before { + position: absolute; + top: 0; + right: 0; + padding: 4px; + content: "\f223"; +} + +.yoast_help.yoast-help-button:hover, +.yoast_help.yoast-help-button:focus { + color: #0073aa; +} + +.yoast_help.yoast-help-button:focus:before, +.assessment-results__mark:focus { + border-radius: 100%; + box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); +} + +.yoast-help-panel { + display: none; + max-width: 30em !important; + padding: 0 0 1em; + font-weight: normal; + white-space: normal; +} + +.wpseo-admin-page .subsubsub li { + display: inline; + max-width: none; +} + +.yoast-seo-help-container { + float: right; + width: 100%; + max-width: none; +} + +.yoast-seo-help-container .yoast-help-panel { + margin: 0.5em 0 !important; +} + +.wpseo_content_wrapper p.search-box { + margin: 10px 0 5px 0; +} + +.wpseo-metabox-tabs .active a { + color: #333; +} + +#wpseotab .ui-widget-content .ui-state-hover { + border: 1px solid #dfdfdf; + color: #333; + background: #f1f1f1; +} + +/** + * Lines below came from taxonomy-meta.css + */ +.wpseo-taxonomy-form tr, +.wpseo-taxonomy-form th, +.wpseo-taxonomy-form td { + vertical-align: top; +} + +.inside .wpseotab .form-table.wpseo-taxonomy-form th { + width: 200px !important; +} + +.yst-traffic-light-container { + display: block; + height: 30px; +} + +.yst-traffic-light { + width: 19px; + height: 30px; + margin: 0 5px 0 0; +} + +.yst-traffic-light .traffic-light-color { + display: none; +} + +.yst-traffic-light.init .traffic-light-init { + display: inline; +} + +.yst-traffic-light.bad .traffic-light-red { + display: inline; +} + +.yst-traffic-light.ok .traffic-light-orange { + display: inline; +} + +.yst-traffic-light.good .traffic-light-green { + display: inline; +} + +.yst-traffic-light.na .traffic-light-empty { + display: inline; +} + +/** + * Traffic light in publish box + */ +#wpseo-score { + float: right; + margin: 0 -5px 0 5px; +} + +/** +* Content and SEO score in publish bar +*/ +.yoast-seo-score .yoast-logo.svg { + float: right; + width: 18px; + height: 18px; + margin-left: 5px; + background: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23999%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E") no-repeat; + background-size: 18px; +} + +.yoast-seo-score .yoast-logo.svg.good { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%237ad03a%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E"); +} + +.yoast-seo-score .yoast-logo.svg.ok { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23ee7c1b%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E"); +} + +.yoast-seo-score .yoast-logo.svg.bad { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23dc3232%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E"); +} + +.yoast-seo-score .yoast-logo.svg.na { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23999%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E"); +} + +.yoast-seo-score .yoast-logo.svg.noindex { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231e8cbe%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E"); +} + +.term-php .wpseo-taxonomy-metabox-postbox h2 { + margin: 0; + padding: 8px 12px; + border-bottom: 1px solid #eee; + font-size: 14px; + line-height: 1.4; +} + +.wpseo-buy-premium { + padding-left: 5px; + color: #a4286a; +} + +.wpseo-metabox-go-to::after { + position: static; + top: auto; + left: auto; + width: auto; + height: auto; + border: none; + content: " \00BB"; +} + +#wpseo-buy-premium-popup-button.button-buy-premium { + border-color: #a4286a; + color: #fff; + background: #a4286a; +} + +.wpseo-metabox-buy-premium { + position: absolute; + top: 6px; + left: 12px; + vertical-align: middle; +} + +.wpseo-metabox-premium-description { + margin-top: 0.5em; +} + +ul.wpseo-metabox-premium-advantages { + padding-right: 1.5em; + list-style: disc; +} + +.yoast-section__heading-icon-list { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M384%201408q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm0%2D512q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm1408%20416v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5zm%2D1408%2D928q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm1408%20416v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5zm0%2D512v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5z%22%2F%3E%3C%2Fsvg%3E"); +} + +.yoast-section__heading-icon-key { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M832%20512q0%2D80%2D56%2D136t%2D136%2D56%2D136%2056%2D56%20136q0%2042%2019%2083%2D41%2D19%2D83%2D19%2D80%200%2D136%2056t%2D56%20136%2056%20136%20136%2056%20136%2D56%2056%2D136q0%2D42%2D19%2D83%2041%2019%2083%2019%2080%200%20136%2D56t56%2D136zm851%20704q0%2017%2D49%2066t%2D66%2049q%2D9%200%2D28%2E5%2D16t%2D36%2E5%2D33%2D38%2E5%2D40%2D24%2E5%2D26l%2D96%2096%20220%20220q28%2028%2028%2068%200%2042%2D39%2081t%2D81%2039q%2D40%200%2D68%2D28l%2D671%2D671q%2D176%20131%2D365%20131%2D163%200%2D265%2E5%2D102%2E5t%2D102%2E5%2D265%2E5q0%2D160%2095%2D313t248%2D248%20313%2D95q163%200%20265%2E5%20102%2E5t102%2E5%20265%2E5q0%20189%2D131%20365l355%20355%2096%2D96q%2D3%2D3%2D26%2D24%2E5t%2D40%2D38%2E5%2D33%2D36%2E5%2D16%2D28%2E5q0%2D17%2049%2D66t66%2D49q13%200%2023%2010%206%206%2046%2044%2E5t82%2079%2E5%2086%2E5%2086%2073%2078%2028%2E5%2041z%22%2F%3E%3C%2Fsvg%3E"); +} + +.yoast-section__heading-icon-edit { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E"); +} + +#snippet_preview { + padding: 0; +} + +.yoast-tooltip.yoast-tooltip-hidden::before, +.yoast-tooltip.yoast-tooltip-hidden::after { + display: none; +} + +/* Workaround for VoiceOver bug see issue #5857 */ +.screen-reader-text.wpseo-generic-tab-textual-score, +.screen-reader-text.wpseo-keyword-tab-textual-score { + display: block; +} + +@media screen and (max-width: 782px) { + .yoast-help-panel { + max-width: none !important; + } + #wpseo-crawl-issues-table-form .subsubsub { + float: none; + max-width: calc( 100vw - 20px); + } + #wpseo-crawl-issues-table-form .yoast-help-button { + margin-top: 3px; + } +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/metabox-400-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/metabox-400-rtl.min.css new file mode 100644 index 0000000..e1d9eb7 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/metabox-400-rtl.min.css @@ -0,0 +1 @@ +.snippet-editor__heading,.yoast-section__heading{font-family:"Open Sans",sans-serif}#meta_container,.assessment-results,.snippet_container:after,li.score:after{clear:both}.snippet_container:after,.snippet_container:before{display:table;content:" "}.snippet-editor__container{position:relative;cursor:pointer}.snippet-editor__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-size:.9rem;font-weight:300}.snippet-editor__heading-editor{border-top:1px solid #f7f7f7}.snippet-editor__heading-icon{padding-right:45px;background-repeat:no-repeat;background-position:right 20px top .6em;background-size:16px}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before,.snippet-editor__container:hover:before{position:absolute;right:-22px;width:24px;height:24px;background-size:25px;content:"";display:block;top:-3px}.snippet-editor__heading-icon-eye{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__preview{padding:0 20px 15px}.snippet-editor__button{padding:8px 10px;border:1px solid #dbdbdb;border-radius:4px;color:#555;background:#f7f7f7;font-size:.8rem;cursor:pointer}.snippet-editor__edit-button{display:block;margin-top:1em;padding-right:32px;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") right 8px top 50% no-repeat #f7f7f7;background-size:16px}.snippet-editor__form{padding:20px}.snippet-editor__label{display:block;position:relative;width:100%;margin-top:1em}.snippet-editor__label--focus:before,.snippet-editor__label--hover:before{right:-22px;width:24px;height:24px;background-size:25px;display:block;content:"";position:absolute}.snippet-editor__label:first-child{margin-top:0}.snippet-editor__label--hover:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__label--focus:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__input{display:block;box-sizing:border-box;width:100%;max-width:100%;margin-top:5px;border:1px solid #bfbfbf}.snippet-editor__input:focus{border:1px solid #1074a8;outline:0}.rtl .snippet-editor__container:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.rtl .snippet-editor__container--focus:before,.rtl .snippet-editor__container--focus:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.rtl .snippet-editor__label--hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.rtl .snippet-editor__label--focus:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.snippet-editor__meta-description{height:70px}.snippet-editor__submit{margin-top:1em}#snippet_cite{min-width:20px}#meta_container{min-height:20px}.snippet_container .title{display:block;overflow:hidden;width:600px;margin:0;color:#1e0fbe;font-size:18px;font-weight:400;line-height:1.2;white-space:nowrap;text-decoration:none;text-overflow:ellipsis}.snippet_container .desc,.snippet_container .url{font-size:13px;line-height:1.4}.snippet_container .url{display:inline-block;float:right;color:#006621;font-size:14px;font-style:normal;line-height:16px}.snippet_container .down_arrow{float:right;margin-top:6px;margin-right:5px;border-top:5px solid #006621;border-left:4px solid transparent;border-right:4px solid transparent}.snippet_container .desc-default{color:#545454}.snippet_container .desc-default strong{color:#6a6a6a}.snippet_container .desc-render{color:#777}.snippet_container .tooLong{color:red!important}.snippet-editor__field--invalid{color:red}.snippet-editor__progress{display:block;box-sizing:border-box;width:100%;height:8px;margin-top:5px;border:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.assessment-results__mark.icon-eye-active.yoast-tooltip::after,.assessment-results__mark.icon-eye-active.yoast-tooltip::before,.snippet-editor--hidden{display:none}.snippet-editor__progress::-webkit-progress-bar{height:8px;border:1px solid #bfbfbf;background-color:#f7f7f7}.snippet-editor__progress--fallback{height:8px;border:1px solid #bfbfbf;background-color:#f7f7f7}.snippet-editor__progress-bar{width:0;max-width:100%;height:100%}.snippet-editor__date{color:grey;font-size:13px;line-height:1.4}.snippet-editor__progress--bad[value]{color:#dc3232}.snippet-editor__progress--bad[value]::-webkit-progress-value{background-color:#dc3232;transition:width 250ms}.snippet-editor__progress--bad[value]::-moz-progress-bar{background-color:#dc3232}.snippet-editor__progress--bad[value] .snippet-editor__progress-bar{background-color:#dc3232}.snippet-editor__progress--ok[value]{color:#ee7c1b}.snippet-editor__progress--ok[value]::-webkit-progress-value{background-color:#ee7c1b;transition:width 250ms}.snippet-editor__progress--ok[value]::-moz-progress-bar{background-color:#ee7c1b}.snippet-editor__progress--ok[value] .snippet-editor__progress-bar{background-color:#ee7c1b}.snippet-editor__progress--good[value]{color:#7ad03a}.snippet-editor__progress--good[value]::-webkit-progress-value{background-color:#7ad03a;transition:width 250ms}.snippet-editor__progress--good[value]::-moz-progress-bar{background-color:#7ad03a}.snippet-editor__progress--good[value] .snippet-editor__progress-bar{background-color:#7ad03a}.wpseoanalysis{padding-left:0}.wpseo-score-text{float:right;width:86%;width:calc(100% - 56px)}.assessment-results .wpseo-score-icon{float:right;width:12px;height:12px;margin:3px 0 0 10px;border-radius:50%;background:#888}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#999}.wpseo-score-icon.noindex{background-color:#1e8cbe}li.score{margin-bottom:6px;list-style-type:none!important}li.score:after{display:table;content:""}.screen-reader-text{overflow:hidden;clip:rect(1px,1px,1px,1px);position:absolute!important;width:1px;height:1px}.assessment-results__mark.icon-eye-active,.assessment-results__mark.icon-eye-disabled,.assessment-results__mark.icon-eye-inactive{float:right;width:28px;height:28px;margin:-5px 3px 0;padding:4px;border:0;border-radius:100%;outline:0;background:center no-repeat;background-size:16px;cursor:pointer}.assessment-results__mark.icon-eye-inactive{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.assessment-results__mark.icon-eye-active{background-color:#a4286a;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23ffffff%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.assessment-results__mark.icon-eye-disabled{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23e6e6e6%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.assessment-results__mark-container{display:inline-block;float:left;width:33px;min-height:1px}.YoastSEO_msg .left,.YoastSEO_msg .right{display:none}@keyframes animatedBackground{from{background-position:100% 0}to{background-position:0 0}}.YoastSEO_msg .bufferbar{display:block;width:100%;height:12px;margin:10px 0;border:1px solid #dfdfdf;background-image:linear-gradient(to right,#fff,#0063ff,#fff,#0063ff);background-position:100% 0;background-size:300% 100%;animation:animatedBackground 5s linear infinite}.yoast-tooltip{position:relative}button.yoast-tooltip{overflow:visible}.yoast-tooltip::after{display:none;position:absolute;z-index:1000000;padding:5px 8px;border-radius:3px;opacity:0;color:#fff;background:rgba(0,0,0,.8);text-shadow:none;font:normal normal 11px/1.5 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";text-align:center;white-space:pre;text-decoration:none;letter-spacing:normal;text-transform:none;word-wrap:break-word;content:attr(aria-label);pointer-events:none;-webkit-font-smoothing:subpixel-antialiased}.yoast-tooltip-alt::after{content:attr(data-label)}.yoast-tooltip::before{display:none;position:absolute;z-index:1000001;width:0;height:0;border:5px solid transparent;opacity:0;color:rgba(0,0,0,.8);content:"\00a0";pointer-events:none}@keyframes yoast-tooltip-appear{from{opacity:0}to{opacity:1}}.yoast-tooltip:active::after,.yoast-tooltip:active::before,.yoast-tooltip:focus::after,.yoast-tooltip:focus::before,.yoast-tooltip:hover::after,.yoast-tooltip:hover::before{display:inline-block;text-decoration:none;animation-name:yoast-tooltip-appear;animation-duration:.1s;animation-timing-function:ease-in;animation-delay:.4s;animation-fill-mode:forwards}.yoast-tooltip-no-delay:active::after,.yoast-tooltip-no-delay:active::before,.yoast-tooltip-no-delay:focus::after,.yoast-tooltip-no-delay:focus::before,.yoast-tooltip-no-delay:hover::after,.yoast-tooltip-no-delay:hover::before{opacity:1;animation:none}.yoast-tooltip-multiline:active::after,.yoast-tooltip-multiline:focus::after,.yoast-tooltip-multiline:hover::after{display:table-cell}.yoast-tooltip-s::after,.yoast-tooltip-se::after,.yoast-tooltip-sw::after{top:100%;left:50%;margin-top:5px}.yoast-tooltip-s::before,.yoast-tooltip-se::before,.yoast-tooltip-sw::before{top:auto;left:50%;bottom:-5px;margin-left:-5px;border-bottom-color:rgba(0,0,0,.8)}.yoast-tooltip-se::after{left:auto;right:50%;margin-right:-15px}.yoast-tooltip-sw::after{margin-left:-15px}.yoast-tooltip-n::after,.yoast-tooltip-ne::after,.yoast-tooltip-nw::after{left:50%;bottom:100%;margin-bottom:5px}.yoast-tooltip-n::before,.yoast-tooltip-ne::before,.yoast-tooltip-nw::before{top:-5px;left:50%;bottom:auto;margin-left:-5px;border-top-color:rgba(0,0,0,.8)}.yoast-tooltip-ne::after{left:auto;right:50%;margin-right:-15px}.yoast-tooltip-nw::after{margin-left:-15px}.yoast-tooltip-n::after,.yoast-tooltip-s::after{-ms-transform:translateX(-50%);transform:translateX(-50%)}.yoast-tooltip-w::after{left:100%;bottom:50%;margin-left:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-w::before{top:50%;bottom:50%;right:-5px;margin-top:-5px;border-right-color:rgba(0,0,0,.8)}.yoast-tooltip-e::after{bottom:50%;right:100%;margin-right:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-e::before{top:50%;left:-5px;bottom:50%;margin-top:-5px;border-left-color:rgba(0,0,0,.8)}.yoast-tooltip-multiline::after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;border-collapse:separate;white-space:pre-line;word-wrap:normal;word-break:break-word}.yoast-tooltip-multiline.yoast-tooltip-n::after,.yoast-tooltip-multiline.yoast-tooltip-s::after{left:auto;right:50%;-ms-transform:translateX(50%);transform:translateX(50%)}.yoast-tooltip-multiline.yoast-tooltip-e::after,.yoast-tooltip-multiline.yoast-tooltip-w::after{left:100%}@media screen and (min-width:0\0){.yoast-tooltip-multiline::after{width:250px}}.yoast-tooltip-sticky::after,.yoast-tooltip-sticky::before{display:inline-block}.yoast-tooltip-sticky.yoast-tooltip-multiline::after{display:table-cell}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (-moz-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.yoast-tooltip-w::after{margin-left:4.5px}}#wpcontent.yoast-help-center-open{overflow-x:hidden}.wpseo-tab-video-container{margin-bottom:20px;border-bottom:1px solid #a4286a}.wpseo-tab-video-container__handle{width:100%;margin:0;padding:10px;border:none;outline:0;color:#a4286a;background:0 0;line-height:19px;text-align:right;cursor:pointer}.wpseo-tab-video-container__handle .toggle__arrow{text-decoration:none}.wpseo-tab-video-container__handle:focus,.wpseo-tab-video-container__handle:hover{text-decoration:underline}.wpseo-tab-video-container__handle .dashicons-before:before{margin-left:5px}.wpseotab .wpseo-tab-video-container{margin-top:-15px}.wpseo-tab-video-slideout{display:none;min-height:320px;margin:0 -9999px -1px;padding:2em 9999px;background-color:#a4286a;box-shadow:inset 0 10px 10px -5px rgba(123,30,80,.5),inset 0 -10px 10px -5px rgba(123,30,80,.5);-ms-flex-wrap:wrap;flex-wrap:wrap}.wpseo-tab-video-slideout .contextual-help-tabs-wrap{padding:0;flex-basis:0;flex-grow:1;-ms-flex-negative:1;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-shrink:1}.wpseo-tab-video-slideout a{color:#fff}.wpseo-tab-video-slideout a.button,.wpseo-tab-video-slideout a.button-primary{text-decoration:none}.wpseo-tab-video-slideout h1,.wpseo-tab-video-slideout h2,.wpseo-tab-video-slideout h3,.wpseo-tab-video-slideout h4,.wpseo-tab-video-slideout h5,.wpseo-tab-video-slideout h6{margin-top:.5em;padding-top:0;color:#fff;font-weight:500}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea{float:right;min-width:234px;max-width:242px;margin:0 0 1em 12px;padding:15px 15px 5px;border:1px solid #fff;border-radius:30px 30px 30px 0;color:#fff;background-color:#a4286a}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea h3,.wpseo-tab-video-slideout .yoast-help-center-tabs ul{margin:0}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a,.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:focus,.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:hover{color:#fff;font-weight:500}.wpseo-tab-video-slideout .yoast-help-center-tabs{width:180px;padding:0 0 1em 1em;color:#fff;background-color:#a4286a;-ms-flex:0 0 auto;flex:0 0 auto}.wpseo-tab-video-slideout .help-tab-content{margin:0;color:#fff;font-weight:300}.wpseo-tab-video-slideout .wpseo-tab-video__panel--video{float:right;margin-left:1em;padding-bottom:1em;-ms-flex:0 0 auto;flex:0 0 auto}.wpseo-tab-video-slideout .wpseo-tab-video__panel--video iframe{vertical-align:middle}.wpseo-tab-video-slideout .wpseo-tab-video__panel--text{min-width:264px;margin:0 auto;flex-basis:0;flex-grow:1;-ms-flex-negative:1;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-shrink:1}.wpseo-tab-video-slideout .wpseo-tab-video__panel--text div:last-child{margin-left:0}.postbox .wpseo-tab-video-container{margin:-6px -12px 20px}.postbox .wpseo-tab-video-slideout{margin:0;padding:2em 12px 15px}.inside .wpseo-tab-video-slideout{height:auto}.wpseo-help-center-item{display:inline}.wpseo-help-center-item a{display:block;padding:10px 12px;color:#fff;text-decoration:none}.wpseo-help-center-item a:focus,.wpseo-help-center-item a:hover{text-decoration:underline}.wpseo-help-center-item a.dashicons-before:before{margin-left:3px;text-decoration:none}.wpseo-help-center-item.active a{color:#a4286a;background-color:#fff}.yoast-section{position:relative;width:640px;padding:0 20px 15px;border:1px solid #f7f7f7;border-radius:20px;background-color:#fff}.yoast-section__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-size:.9rem;font-weight:300}.yoast-section__heading-icon{padding-right:45px;background-repeat:no-repeat;background-position:right 20px top .6em;background-size:16px}.yoast-section__heading-icon-file-text-o{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20file%3D%22%23555%22%20d%3D%22M1596%20380q28%2028%2048%2076t20%2088v1152q0%2040%2D28%2068t%2D68%2028h%2D1344q%2D40%200%2D68%2D28t%2D28%2D68v%2D1600q0%2D40%2028%2D68t68%2D28h896q40%200%2088%2020t76%2048zm%2D444%2D244v376h376q%2D10%2D29%2D22%2D41l%2D313%2D313q%2D12%2D12%2D41%2D22zm384%201528v%2D1024h%2D416q%2D40%200%2D68%2D28t%2D28%2D68v%2D416h%2D768v1536h1280zm%2D1024%2D864q0%2D14%209%2D23t23%2D9h704q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64zm736%20224q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64q0%2D14%209%2D23t23%2D9h704zm0%20256q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64q0%2D14%209%2D23t23%2D9h704z%22%2F%3E%3C%2Fsvg%3E")}.yoast-section,.yoast-section *,.yoast-section :after,.yoast-section :before,.yoast-section:after,.yoast-section:before{box-sizing:border-box}#edittag>#wp-description-wrap{display:none}#wp-description-wrap .wp-editor-area{border:0}.term-description-wrap td>textarea#description{min-height:530px}ul.wpseo-metabox-tabs{display:none;margin-top:6px;margin-bottom:0}ul.wpseo-metabox-tabs:after{display:table;clear:both;content:""}.wpseo-metabox-tabs-div ul{list-style:none}ul.wpseo-metabox-tabs li.active{background-color:#fdfdfd}.wpseo-meta-section{display:none;width:100%;vertical-align:top}.wpseo-meta-section.active{display:table-cell}.wpseo-metabox-sidebar{display:table-cell;width:40px;padding:0 0 0 5px;background-color:#fff;vertical-align:top}.wpseo-metabox-sidebar li span{margin:3px -5px 0 0;padding:0 5px 0 2px;border:0 solid transparent;border-right-width:3px;border-radius:3px}.wpseo-metabox-sidebar li span.wpseo-buy-premium{color:#a4286a}.wpseo-metabox-sidebar li span.wpseo-buy-premium:hover{color:#832055}.wpseo-metabox-sidebar li.active span{border-color:#333;color:#333}.wpseo-metabox-sidebar li.active span.wpseo-buy-premium{border-color:#a4286a;color:#a4286a}.wpseo-metabox-sidebar li.active span.wpseo-buy-premium:hover{border-color:#832055;color:#832055}ul.wpseo-metabox-tabs li{float:right;margin-left:5px;margin-bottom:-1px;padding:0;border:1px solid #dfdfdf;border-bottom:0 none}ul.wpseo-metabox-tabs li .wpseo-keyword{display:inline-block;overflow:hidden;max-width:8em;max-width:8rem;vertical-align:top;white-space:nowrap;text-overflow:ellipsis}.wpseotab.active{display:block;overflow:auto;padding:.5em .9em;border:1px solid #ddd;background-color:#fdfdfd}.wpseo-metabox-tabs .wpseo_tablink{display:inline-block;padding:5px 12px 6px;vertical-align:top;text-decoration:none}.wpseo-metabox-tabs .wpseo_content_tab a,.wpseo-metabox-tabs .wpseo_content_tab+.wpseo_keyword_tab a{padding-left:12px}.wpseo-metabox-tabs .wpseo-score-icon{margin-right:0}#wpseo-meta-section-social .wpseo-metabox-tabs .wpseo_tablink{padding:5px 7px}.wpseo-metabox-tabs .wpseo_tablink .dashicons{width:16px;height:16px;font-size:16px}.wpseo-metabox-sidebar .dashicons{width:30px;height:30px;font-size:30px}.wpseo-metabox-sidebar a{display:inline-block;width:35px;height:35px;font-size:20px;line-height:30px;text-decoration:none}.wpseo_hidden,.wpseotab{display:none}.wpseo-metabox-sidebar ul{margin:0}.wpseo-metabox-sidebar li{margin-bottom:0;padding:5px}.wpseo-metabox-tabs-div div.wpseo-tabs-panel{overflow:auto;padding:.5em .9em;border:1px solid}.wpseo-heading{padding-right:10px}#wpseo_meta .inside{overflow:auto;margin:6px 0 0}#wpseo_meta .postbox .inside .wpseotab{font-size:13px!important}#wpseo_meta .wpseo-tab-video-container h2{margin-bottom:20px;padding-right:0;border:0;font-size:1.3em}.inside .wpseotab .form-table th{width:140px!important;font-size:13px}.inside .wpseotab .form-table td{padding-top:20px}.inside .wpseotab .form-table label{vertical-align:top}.inside .wpseotab .form-table td input,.inside .wpseotab .form-table td select{margin-top:-5px}.inside .wpseotab .form-table #yoast_wpseo_focuskw_text_input,.inside .wpseotab .form-table #yoast_wpseo_metakeywords,.inside .wpseotab .form-table td select[multiple],.wpseotab .wpseoanalysis{margin-top:0}.wpseotab .wpseo_image_upload_button{margin-right:3px}.good,.warn,.wrong{font-weight:700}.good{color:green}.warn{color:maroon}.wrong{color:#dc3232}#current_seo_title span{padding:2px 5px;background-color:#ffffe0}#focuskwresults ul{margin:0}#focuskwresults li,#focuskwresults p{font-size:13px}#focuskwresults li{margin:0 20px 0 0;list-style-type:disc}table.wpseoanalysis th{padding:15px 0 5px;font-size:14px;text-align:right}table.wpseoanalysis th.first{padding-top:0}table.wpseoanalysis td{margin:5px 0;font-size:13px;line-height:16px}table.wpseoanalysis td.score{width:20px;height:18px;padding-right:10px}.wpseo_msg{margin:5px 0 10px;padding:0 5px;border:1px solid #e6db55;background-color:#ffffe0}ul.wpseo-metabox-tabs li.wpseo-tab-add-keyword{border:none}.wpseo-tab-add-keyword .wpseo-add-keyword.button{height:auto;margin-top:1px;padding:3px 6px;color:#000;background:0 0;font-size:14px;line-height:1;vertical-align:top;text-decoration:none;cursor:pointer}#wpseo-add-keyword-popup-title{margin:1em 0;font-size:1.3em}.snippet-editor__button.snippet-editor__edit-button:focus{border-color:#5b9dd9;outline:0;color:#23282d;background-color:#fafafa;box-shadow:0 0 3px rgba(0,115,170,.8)}.yoast_help.yoast-help-button{overflow:visible;position:relative;width:20px;height:20px;margin:0;padding:0;border:0;outline:0;color:#72777c;background:0 0;box-shadow:none;vertical-align:top;cursor:pointer}.wpseotab .yoast_help.yoast-help-button{float:left}.wpseotab.content .yoast_help.yoast-help-button{margin-top:-48px}.wpseo-admin-page .yoast_help.yoast-help-button{margin-left:6px}.yoast_help.yoast-help-button:before{position:absolute;top:0;right:0;padding:4px;content:"\f223"}.yoast_help.yoast-help-button:focus,.yoast_help.yoast-help-button:hover{color:#0073aa}.assessment-results__mark:focus,.yoast_help.yoast-help-button:focus:before{border-radius:100%;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-help-panel{display:none;max-width:30em!important;padding:0 0 1em;font-weight:400;white-space:normal}.wpseo-admin-page .subsubsub li{display:inline;max-width:none}.yoast-seo-help-container{float:right;width:100%;max-width:none}.yoast-seo-help-container .yoast-help-panel{margin:.5em 0!important}.wpseo_content_wrapper p.search-box{margin:10px 0 5px}.wpseo-metabox-tabs .active a{color:#333}#wpseotab .ui-widget-content .ui-state-hover{border:1px solid #dfdfdf;color:#333;background:#f1f1f1}.wpseo-taxonomy-form td,.wpseo-taxonomy-form th,.wpseo-taxonomy-form tr{vertical-align:top}.inside .wpseotab .form-table.wpseo-taxonomy-form th{width:200px!important}.yst-traffic-light-container{display:block;height:30px}.yst-traffic-light{width:19px;height:30px;margin:0 5px 0 0}.yst-traffic-light .traffic-light-color{display:none}.yst-traffic-light.bad .traffic-light-red,.yst-traffic-light.good .traffic-light-green,.yst-traffic-light.init .traffic-light-init,.yst-traffic-light.na .traffic-light-empty,.yst-traffic-light.ok .traffic-light-orange{display:inline}#wpseo-score{float:right;margin:0 -5px 0 5px}.yoast-seo-score .yoast-logo.svg{float:right;width:18px;height:18px;margin-left:5px;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23999%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E") no-repeat;background-size:18px}.yoast-seo-score .yoast-logo.svg.good{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%237ad03a%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E")}.yoast-seo-score .yoast-logo.svg.ok{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23ee7c1b%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E")}.yoast-seo-score .yoast-logo.svg.bad{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23dc3232%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E")}.yoast-seo-score .yoast-logo.svg.na{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23999%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E")}.yoast-seo-score .yoast-logo.svg.noindex{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231e8cbe%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E")}.term-php .wpseo-taxonomy-metabox-postbox h2{margin:0;padding:8px 12px;border-bottom:1px solid #eee;font-size:14px;line-height:1.4}.wpseo-buy-premium{padding-left:5px;color:#a4286a}.wpseo-metabox-go-to::after{position:static;top:auto;left:auto;width:auto;height:auto;border:none;content:" \00BB"}#wpseo-buy-premium-popup-button.button-buy-premium{border-color:#a4286a;color:#fff;background:#a4286a}.wpseo-metabox-buy-premium{position:absolute;top:6px;left:12px;vertical-align:middle}.wpseo-metabox-premium-description{margin-top:.5em}ul.wpseo-metabox-premium-advantages{padding-right:1.5em;list-style:disc}.yoast-section__heading-icon-list{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M384%201408q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm0%2D512q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm1408%20416v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5zm%2D1408%2D928q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm1408%20416v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5zm0%2D512v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5z%22%2F%3E%3C%2Fsvg%3E")}.yoast-section__heading-icon-key{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M832%20512q0%2D80%2D56%2D136t%2D136%2D56%2D136%2056%2D56%20136q0%2042%2019%2083%2D41%2D19%2D83%2D19%2D80%200%2D136%2056t%2D56%20136%2056%20136%20136%2056%20136%2D56%2056%2D136q0%2D42%2D19%2D83%2041%2019%2083%2019%2080%200%20136%2D56t56%2D136zm851%20704q0%2017%2D49%2066t%2D66%2049q%2D9%200%2D28%2E5%2D16t%2D36%2E5%2D33%2D38%2E5%2D40%2D24%2E5%2D26l%2D96%2096%20220%20220q28%2028%2028%2068%200%2042%2D39%2081t%2D81%2039q%2D40%200%2D68%2D28l%2D671%2D671q%2D176%20131%2D365%20131%2D163%200%2D265%2E5%2D102%2E5t%2D102%2E5%2D265%2E5q0%2D160%2095%2D313t248%2D248%20313%2D95q163%200%20265%2E5%20102%2E5t102%2E5%20265%2E5q0%20189%2D131%20365l355%20355%2096%2D96q%2D3%2D3%2D26%2D24%2E5t%2D40%2D38%2E5%2D33%2D36%2E5%2D16%2D28%2E5q0%2D17%2049%2D66t66%2D49q13%200%2023%2010%206%206%2046%2044%2E5t82%2079%2E5%2086%2E5%2086%2073%2078%2028%2E5%2041z%22%2F%3E%3C%2Fsvg%3E")}.yoast-section__heading-icon-edit{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E")}#snippet_preview{padding:0}.yoast-tooltip.yoast-tooltip-hidden::after,.yoast-tooltip.yoast-tooltip-hidden::before{display:none}.screen-reader-text.wpseo-generic-tab-textual-score,.screen-reader-text.wpseo-keyword-tab-textual-score{display:block}@media screen and (max-width:782px){.yoast-help-panel{max-width:none!important}#wpseo-crawl-issues-table-form .subsubsub{float:none;max-width:calc(100vw - 20px)}#wpseo-crawl-issues-table-form .yoast-help-button{margin-top:3px}} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-rtl.css new file mode 100644 index 0000000..eb183eb --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-rtl.css @@ -0,0 +1,47 @@ +.wpseo-primary-term > label, +.wpseo-is-primary-term { + font-weight: bold; +} + +.wpseo-primary-term > .wpseo-make-primary-term, +.wpseo-term-unchecked > .wpseo-make-primary-term { + display: none; +} + +.wpseo-non-primary-term > .wpseo-is-primary-term, +.wpseo-term-unchecked > .wpseo-is-primary-term { + display: none; +} + +.wpseo-make-primary-term, +.wpseo-is-primary-term { + float: left; +} + +.wpseo-primary-term:before, +.wpseo-primary-term:after, +.wpseo-non-primary-term:before, +.wpseo-non-primary-term:after { + display: table; + content: ""; +} + +.wpseo-primary-term:after, +.wpseo-non-primary-term:after { + clear: both; +} + +/* It is a button, style it like a link */ +.wpseo-make-primary-term { + margin: 4px 0 0 0; + padding: 0; + border: none; + color: #0073aa; + background: none; + text-decoration: underline; + cursor: pointer; +} + +.wpseo-make-primary-term:hover { + color: #00a0d2; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-rtl.min.css new file mode 100644 index 0000000..eda6e1b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-rtl.min.css @@ -0,0 +1 @@ +.wpseo-is-primary-term,.wpseo-primary-term>label{font-weight:700}.wpseo-non-primary-term>.wpseo-is-primary-term,.wpseo-primary-term>.wpseo-make-primary-term,.wpseo-term-unchecked>.wpseo-is-primary-term,.wpseo-term-unchecked>.wpseo-make-primary-term{display:none}.wpseo-is-primary-term,.wpseo-make-primary-term{float:left}.wpseo-non-primary-term:after,.wpseo-non-primary-term:before,.wpseo-primary-term:after,.wpseo-primary-term:before{display:table;content:""}.wpseo-non-primary-term:after,.wpseo-primary-term:after{clear:both}.wpseo-make-primary-term{margin:4px 0 0;padding:0;border:none;color:#0073aa;background:0 0;text-decoration:underline;cursor:pointer}.wpseo-make-primary-term:hover{color:#00a0d2} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/select2/select2.min.css b/wp-content/plugins/wordpress-seo/css/dist/select2/select2.min.css new file mode 100644 index 0000000..76de04d --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/select2/select2.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/wp-content/plugins/wordpress-seo/css/dist/select2/select2.min.rapido.css b/wp-content/plugins/wordpress-seo/css/dist/select2/select2.min.rapido.css new file mode 100644 index 0000000..e7c3490 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/select2/select2.min.rapido.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top,#fff 50%,#eee 100%);background-image:-o-linear-gradient(top,#fff 50%,#eee 100%);background-image:linear-gradient(to bottom,#fff 50%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF',endColorstr='#FFEEEEEE',GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top,#eee 50%,#ccc 100%);background-image:-o-linear-gradient(top,#eee 50%,#ccc 100%);background-image:linear-gradient(to bottom,#eee 50%,#ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE',endColorstr='#FFCCCCCC',GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top,#fff 0%,#eee 50%);background-image:-o-linear-gradient(top,#fff 0%,#eee 50%);background-image:linear-gradient(to bottom,#fff 0%,#eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF',endColorstr='#FFEEEEEE',GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top,#eee 50%,#fff 100%);background-image:-o-linear-gradient(top,#eee 50%,#fff 100%);background-image:linear-gradient(to bottom,#eee 50%,#fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE',endColorstr='#FFFFFFFF',GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/snippet-330-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/snippet-330-rtl.css new file mode 100644 index 0000000..e7f5758 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/snippet-330-rtl.css @@ -0,0 +1,27 @@ +#snippet_preview { + margin: -11px 0 10px; + font-family: Arial, Helvetica, sans-serif; + font-style: normal; +} + +.form-table td .snippet-editor__label { + font-size: 1rem; + line-height: 1; +} + +.form-table td textarea { + margin-top: 5px; +} + +.wp-core-ui .button.snippet-editor__submit { + margin-top: 1em; +} + +/* In the snippet editor reset the margin that throws of the layout */ +.inside .wpseotab .form-table td input.snippet-editor__input { + margin-top: 5px; +} + +input[type="text"].snippet-editor__field--invalid { + color: #dc3232; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/snippet-330-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/snippet-330-rtl.min.css new file mode 100644 index 0000000..88b04b8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/snippet-330-rtl.min.css @@ -0,0 +1 @@ +#snippet_preview{margin:-11px 0 10px;font-family:Arial,Helvetica,sans-serif;font-style:normal}.form-table td .snippet-editor__label{font-size:1rem;line-height:1}.form-table td textarea{margin-top:5px}.wp-core-ui .button.snippet-editor__submit{margin-top:1em}.inside .wpseotab .form-table td input.snippet-editor__input{margin-top:5px}input[type=text].snippet-editor__field--invalid{color:#dc3232} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/taxonomy-meta-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/taxonomy-meta-rtl.css new file mode 100644 index 0000000..51289f7 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/taxonomy-meta-rtl.css @@ -0,0 +1,5 @@ +.wpseo-taxonomy-form tr, +.wpseo-taxonomy-form th, +.wpseo-taxonomy-form td { + vertical-align: top; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/taxonomy-meta-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/taxonomy-meta-rtl.min.css new file mode 100644 index 0000000..6fd0c5c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/taxonomy-meta-rtl.min.css @@ -0,0 +1 @@ +.wpseo-taxonomy-form td,.wpseo-taxonomy-form th,.wpseo-taxonomy-form tr{vertical-align:top} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-390-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-390-rtl.css new file mode 100644 index 0000000..20f4fb3 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-390-rtl.css @@ -0,0 +1,375 @@ +@charset "UTF-8"; +/* + * Styles from the toggle switch library. + */ +/* + * CSS TOGGLE SWITCH + * + * Ionuț Colceriu - ghinda.net + * https://github.com/ghinda/css-toggle-switch + * + */ +/* Hide by default. */ +.switch-toggle a, +.switch-light span span { + display: none; +} + +/* Only target browsers with support for media queries. */ +@media only screen { + .switch-light, + .switch-toggle { + display: block; + position: relative; + padding: 0 !important; + } + + .switch-light::after, + .switch-toggle::after { + display: table; + clear: both; + content: ""; + } + + .switch-light *, + .switch-light *:before, + .switch-light *:after, + .switch-toggle *, + .switch-toggle *:before, + .switch-toggle *:after { + box-sizing: border-box; + } + + .switch-light a, + .switch-toggle a { + display: block; + transition: all 0.2s ease-out; + } + + .switch-light label, + .switch-light > span, + .switch-toggle label, + .switch-toggle > span { + line-height: 2em; + vertical-align: middle; + } + + .switch-light input { + position: absolute; + z-index: 3; + opacity: 0; + } + + .switch-light input:checked ~ span a { + left: 0; + } + +/* Inherit from label. */ + .switch-light strong { + font-weight: inherit; + } + + .switch-light > span { + position: relative; + min-height: 2em; + padding: 0; + text-align: right; + } + + .switch-light span span { + display: block; + float: right; + position: relative; + z-index: 2; + width: 50%; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + + .switch-light a { + display: block; + position: absolute; + z-index: 1; + top: 0; + left: 50%; + width: 50%; + height: 100%; + padding: 0; + } + + .switch-toggle input { + position: absolute; + right: 0; + opacity: 0; + } + + .switch-toggle input + label { + display: block; + float: right; + position: relative; + z-index: 2; + margin: 0; + padding: 0 0.5em; + text-align: center; + } + + .switch-toggle a { + position: absolute; + z-index: 1; + top: 0; + right: 0; + width: 10px; + height: 100%; + padding: 0; + } + + .switch-toggle label:nth-child(2):nth-last-child(4), + .switch-toggle label:nth-child(2):nth-last-child(4) ~ label, + .switch-toggle label:nth-child(2):nth-last-child(4) ~ a { + width: 50%; + } + + .switch-toggle label:nth-child(2):nth-last-child(4) ~ input:checked:nth-child(3) + label ~ a { + right: 50%; + } + + .switch-toggle label:nth-child(2):nth-last-child(6), + .switch-toggle label:nth-child(2):nth-last-child(6) ~ label, + .switch-toggle label:nth-child(2):nth-last-child(6) ~ a { + width: 33.33%; + } + + .switch-toggle label:nth-child(2):nth-last-child(6) ~ input:checked:nth-child(3) + label ~ a { + right: 33.33%; + } + + .switch-toggle label:nth-child(2):nth-last-child(6) ~ input:checked:nth-child(5) + label ~ a { + right: 66.66%; + } + + .switch-toggle label:nth-child(2):nth-last-child(8), + .switch-toggle label:nth-child(2):nth-last-child(8) ~ label, + .switch-toggle label:nth-child(2):nth-last-child(8) ~ a { + width: 25%; + } + + .switch-toggle label:nth-child(2):nth-last-child(8) ~ input:checked:nth-child(3) + label ~ a { + right: 25%; + } + + .switch-toggle label:nth-child(2):nth-last-child(8) ~ input:checked:nth-child(5) + label ~ a { + right: 50%; + } + + .switch-toggle label:nth-child(2):nth-last-child(8) ~ input:checked:nth-child(7) + label ~ a { + right: 75%; + } + + .switch-toggle label:nth-child(2):nth-last-child(10), + .switch-toggle label:nth-child(2):nth-last-child(10) ~ label, + .switch-toggle label:nth-child(2):nth-last-child(10) ~ a { + width: 20%; + } + + .switch-toggle label:nth-child(2):nth-last-child(10) ~ input:checked:nth-child(3) + label ~ a { + right: 20%; + } + + .switch-toggle label:nth-child(2):nth-last-child(10) ~ input:checked:nth-child(5) + label ~ a { + right: 40%; + } + + .switch-toggle label:nth-child(2):nth-last-child(10) ~ input:checked:nth-child(7) + label ~ a { + right: 60%; + } + + .switch-toggle label:nth-child(2):nth-last-child(10) ~ input:checked:nth-child(9) + label ~ a { + right: 80%; + } + + .switch-toggle label:nth-child(2):nth-last-child(12), + .switch-toggle label:nth-child(2):nth-last-child(12) ~ label, + .switch-toggle label:nth-child(2):nth-last-child(12) ~ a { + width: 16.6%; + } + + .switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(3) + label ~ a { + right: 16.6%; + } + + .switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(5) + label ~ a { + right: 33.2%; + } + + .switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(7) + label ~ a { + right: 49.8%; + } + + .switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(9) + label ~ a { + right: 66.4%; + } + + .switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(11) + label ~ a { + right: 83%; + } + + .switch-candy a { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), inset 0 1px 1px rgba(255, 255, 255, 0.45); + } +} + +/* + * Bugfix for older Webkit, including mobile Webkit. Adapted from + * http://css-tricks.com/webkit-sibling-bug/ + */ +@media only screen and (-webkit-max-device-pixel-ratio: 2) and (max-device-width: 80em) { + .switch-light, + .switch-toggle { + -webkit-animation: webkitSiblingBugfix infinite 1s; + } +} + +/* + * Custom styles. + */ +.fieldset-switch-toggle label { + float: none; +} + +@media only screen { + .switch-light.switch-yoast-seo { + margin-bottom: 0.2em; + } + + .fieldset-switch-toggle legend, + .switch-light.switch-yoast-seo > strong { + display: block; + box-sizing: border-box; + min-width: 200px; + margin-top: 10px; + padding-left: 1em; + font-weight: bold; + line-height: 2em; + vertical-align: middle; + } + + .switch-toggle.switch-yoast-seo, + .switch-light.switch-yoast-seo > span { + width: 250px; + border: 1px solid #ccc; + border-radius: 0.5em; + background-color: #dcdcdc; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); + } + + .switch-toggle.switch-yoast-seo { + float: right; + } + + .switch-light.switch-yoast-seo > span { + /* To contain floats instead of the original overflow: hidden;. */ + display: inline-block; + /* To make the focus style fully visible. */ + overflow: visible; + } + + .switch-toggle.switch-yoast-seo a, + .switch-light.switch-yoast-seo a { + border: 1px solid #b5b5b5; + border-radius: 0.5em; + background: #a4286a; + } + + .switch-toggle.switch-yoast-seo input:focus ~ span a, + .switch-light.switch-yoast-seo input:focus ~ span a, + .switch-toggle.switch-yoast-seo input:focus + label, + .switch-light.switch-yoast-seo input:focus + label { + /* Reset focus style. */ + outline: none; + } + + .switch-toggle.switch-yoast-seo input:focus ~ a, + .switch-light.switch-yoast-seo input:focus ~ span a { + border-color: #5b9dd9 !important; + box-shadow: 0 0 2px rgba(0, 115, 170, 0.8) !important; + } + + .switch-toggle.switch-yoast-seo input:checked ~ span a, + .switch-light.switch-yoast-seo input:checked ~ span a { + border: 1px solid #b5b5b5; + background: #a4286a; + } + + .switch-light.switch-yoast-seo span span, + .switch-light.switch-yoast-seo input:checked ~ span span:first-child, + .switch-toggle.switch-yoast-seo label { + color: #333; + text-shadow: none; + font-weight: inherit; + } + + .switch-candy.switch-yoast-seo input ~ span span:first-child, + .switch-candy.switch-yoast-seo input:checked ~ span span:nth-child(2), + .switch-candy.switch-yoast-seo input:checked + label { + color: #fff; + text-shadow: none; + } + + .switch-light.switch-yoast-seo-reverse input:checked ~ span a { + right: 0; + } + + .switch-light.switch-yoast-seo-reverse a { + right: 50%; + } + + .switch-light.switch-yoast-seo-reverse span span { + float: left; + } + + .switch-toggle.switch-yoast-seo label, + label.switch-light.switch-yoast-seo { + margin-right: 0; + /* + * To help old iOS: ensure labels have cursor pointer instead of + * using the empty onclick hack. + */ + cursor: pointer; + } + + .switch-yoast-seo .switch-yoast-seo-jaws-a11y { + /* IE11 and JAWS 17.0 need this hack. */ + display: block; + overflow: hidden; + height: 1px; + margin-bottom: -1px; + } + + .switch-toggle.switch-yoast-seo label code, + .switch-light.switch-yoast-seo label code { + background-color: inherit; + vertical-align: top; + } + + .switch-container .label-text { + display: block; + margin: 0.5em 0; + font-weight: 600; + } + + .switch-container { + clear: both; + margin: 0 0 1em 0; + } + + .switch-container + .switch-container { + margin-top: 0.5em; + } + + .switch-container + p { + margin: -0.5em 0 1em 0; + } +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-390-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-390-rtl.min.css new file mode 100644 index 0000000..30aa795 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-390-rtl.min.css @@ -0,0 +1 @@ +@charset "UTF-8";.switch-light span span,.switch-toggle a{display:none}@media only screen{.switch-light,.switch-toggle{display:block;position:relative;padding:0!important}.switch-light::after,.switch-toggle::after{display:table;clear:both;content:""}.switch-light *,.switch-light :after,.switch-light :before,.switch-toggle *,.switch-toggle :after,.switch-toggle :before{box-sizing:border-box}.switch-light a,.switch-toggle a{display:block;transition:all .2s ease-out}.switch-light label,.switch-light>span,.switch-toggle label,.switch-toggle>span{line-height:2em;vertical-align:middle}.switch-light input{position:absolute;z-index:3;opacity:0}.switch-light input:checked~span a{left:0}.switch-light strong{font-weight:inherit}.switch-light>span{position:relative;min-height:2em;padding:0;text-align:right}.switch-light span span{display:block;float:right;position:relative;z-index:2;width:50%;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch-light a{display:block;position:absolute;z-index:1;top:0;left:50%;width:50%;height:100%;padding:0}.switch-toggle input{position:absolute;right:0;opacity:0}.switch-toggle input+label{display:block;float:right;position:relative;z-index:2;margin:0;padding:0 .5em;text-align:center}.switch-toggle a{position:absolute;z-index:1;top:0;right:0;width:10px;height:100%;padding:0}.switch-toggle label:nth-child(2):nth-last-child(4),.switch-toggle label:nth-child(2):nth-last-child(4)~a,.switch-toggle label:nth-child(2):nth-last-child(4)~label{width:50%}.switch-toggle label:nth-child(2):nth-last-child(4)~input:checked:nth-child(3)+label~a{right:50%}.switch-toggle label:nth-child(2):nth-last-child(6),.switch-toggle label:nth-child(2):nth-last-child(6)~a,.switch-toggle label:nth-child(2):nth-last-child(6)~label{width:33.33%}.switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(3)+label~a{right:33.33%}.switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(5)+label~a{right:66.66%}.switch-toggle label:nth-child(2):nth-last-child(8),.switch-toggle label:nth-child(2):nth-last-child(8)~a,.switch-toggle label:nth-child(2):nth-last-child(8)~label{width:25%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(3)+label~a{right:25%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(5)+label~a{right:50%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(7)+label~a{right:75%}.switch-toggle label:nth-child(2):nth-last-child(10),.switch-toggle label:nth-child(2):nth-last-child(10)~a,.switch-toggle label:nth-child(2):nth-last-child(10)~label{width:20%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(3)+label~a{right:20%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(5)+label~a{right:40%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(7)+label~a{right:60%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(9)+label~a{right:80%}.switch-toggle label:nth-child(2):nth-last-child(12),.switch-toggle label:nth-child(2):nth-last-child(12)~a,.switch-toggle label:nth-child(2):nth-last-child(12)~label{width:16.6%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(3)+label~a{right:16.6%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(5)+label~a{right:33.2%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(7)+label~a{right:49.8%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(9)+label~a{right:66.4%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(11)+label~a{right:83%}.switch-candy a{box-shadow:0 1px 1px rgba(0,0,0,.2),inset 0 1px 1px rgba(255,255,255,.45)}}@media only screen and (-webkit-max-device-pixel-ratio:2) and (max-device-width:80em){.switch-light,.switch-toggle{-webkit-animation:webkitSiblingBugfix infinite 1s}}.fieldset-switch-toggle label{float:none}@media only screen{.switch-light.switch-yoast-seo{margin-bottom:.2em}.fieldset-switch-toggle legend,.switch-light.switch-yoast-seo>strong{display:block;box-sizing:border-box;min-width:200px;margin-top:10px;padding-left:1em;font-weight:700;line-height:2em;vertical-align:middle}.switch-light.switch-yoast-seo>span,.switch-toggle.switch-yoast-seo{width:250px;border:1px solid #ccc;border-radius:.5em;background-color:#dcdcdc;box-shadow:inset 0 2px 4px rgba(0,0,0,.15)}.switch-toggle.switch-yoast-seo{float:right}.switch-light.switch-yoast-seo>span{display:inline-block;overflow:visible}.switch-light.switch-yoast-seo a,.switch-toggle.switch-yoast-seo a{border:1px solid #b5b5b5;border-radius:.5em;background:#a4286a}.switch-light.switch-yoast-seo input:focus+label,.switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus+label,.switch-toggle.switch-yoast-seo input:focus~span a{outline:0}.switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus~a{border-color:#5b9dd9!important;box-shadow:0 0 2px rgba(0,115,170,.8)!important}.switch-light.switch-yoast-seo input:checked~span a,.switch-toggle.switch-yoast-seo input:checked~span a{border:1px solid #b5b5b5;background:#a4286a}.switch-light.switch-yoast-seo input:checked~span span:first-child,.switch-light.switch-yoast-seo span span,.switch-toggle.switch-yoast-seo label{color:#333;text-shadow:none;font-weight:inherit}.switch-candy.switch-yoast-seo input:checked+label,.switch-candy.switch-yoast-seo input:checked~span span:nth-child(2),.switch-candy.switch-yoast-seo input~span span:first-child{color:#fff;text-shadow:none}.switch-light.switch-yoast-seo-reverse input:checked~span a{right:0}.switch-light.switch-yoast-seo-reverse a{right:50%}.switch-light.switch-yoast-seo-reverse span span{float:left}.switch-toggle.switch-yoast-seo label,label.switch-light.switch-yoast-seo{margin-right:0;cursor:pointer}.switch-yoast-seo .switch-yoast-seo-jaws-a11y{display:block;overflow:hidden;height:1px;margin-bottom:-1px}.switch-light.switch-yoast-seo label code,.switch-toggle.switch-yoast-seo label code{background-color:inherit;vertical-align:top}.switch-container .label-text{display:block;margin:.5em 0;font-weight:600}.switch-container{clear:both;margin:0 0 1em}.switch-container+.switch-container{margin-top:.5em}.switch-container+p{margin:-.5em 0 1em}} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-350-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-350-rtl.css new file mode 100644 index 0000000..718e698 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-350-rtl.css @@ -0,0 +1,56 @@ +.yoast-notice-dismiss:before { + display: block !important; + width: 20px; + height: 20px; + color: #b4b9be; + background: none; + font: normal 16px/1 "dashicons"; + text-align: center; + content: "\f153"; + + -webkit-font-smoothing: antialiased !important; + speak: none; +} + +.yoast-notice-dismiss { + position: absolute; + top: 0; + left: 1px; + margin: 0; + padding: 9px; + border: none; + color: #b4b9be; + background: none; + cursor: pointer; +} + +.yoast-notice-dismiss:before { + position: relative; + top: 0; + right: 0; + line-height: 20px; +} + +.yoast-notice-dismiss:hover:before, +.yoast-notice-dismiss:active:before, +.yoast-notice-dismiss:focus:before { + color: #c00; +} + +.yoast-notice-dismiss:focus { + outline: none; + color: #c00; + box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); +} + +.ie8 .yoast-notice-dismiss:focus { + outline: 1px solid #5b9dd9; +} + +.yoast-notice.is-dismissible { + position: relative; +} + +.yoast-notice-dismiss { + text-decoration: none; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-350-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-350-rtl.min.css new file mode 100644 index 0000000..f7d21e5 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-350-rtl.min.css @@ -0,0 +1 @@ +.yoast-notice-dismiss{position:absolute;top:0;left:1px;margin:0;padding:9px;border:none;color:#b4b9be;background:0 0;cursor:pointer;text-decoration:none}.yoast-notice-dismiss:before{display:block!important;width:20px;height:20px;color:#b4b9be;background:0 0;font:400 16px/1 dashicons;text-align:center;content:"\f153";-webkit-font-smoothing:antialiased!important;speak:none;position:relative;top:0;right:0;line-height:20px}.yoast-notice-dismiss:active:before,.yoast-notice-dismiss:focus:before,.yoast-notice-dismiss:hover:before{color:#c00}.yoast-notice-dismiss:focus{outline:0;color:#c00;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 .yoast-notice-dismiss:focus{outline:#5b9dd9 solid 1px}.yoast-notice.is-dismissible{position:relative} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/yoast-components-400-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/yoast-components-400-rtl.css new file mode 100644 index 0000000..5c881c2 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/yoast-components-400-rtl.css @@ -0,0 +1,673 @@ +/* WordPress-specific styling. */ +body { + background: #f1f1f1; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + line-height: 1.375; + /* 22px based on default browser font size 16px. */ +} + +a { + outline: 0; + color: #0073aa; + transition-timing-function: ease-in-out; + transition-duration: 0.05s; + transition-property: border, background, color; +} + +a:hover, +a:active { + color: #00a0d2; +} + +a:focus { + color: #124964; + box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); +} + +.screen-reader-text { + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); + position: absolute !important; + width: 1px; + height: 1px; +} + +/* css for snippet */ +.yoast-search-result-preview { + overflow: hidden; + background-color: #fff; + font-family: Arial, sans-serif; +} + +.yoast-search-result-preview__heading { + margin: 0 -20px 15px; + padding: 8px 20px; + border-bottom: 1px solid #f7f7f7; + color: #555; + font-family: "Open Sans", sans-serif; + font-size: 0.9rem; + font-weight: 300; +} + +.yoast-search-result-preview__field { + overflow: hidden; + position: relative; + width: 600px; + cursor: pointer; +} + +.yoast-search-result-preview__field:before, +.yoast-search-result-preview__field:after { + display: table; + content: " "; +} + +.yoast-search-result-preview__field:after { + clear: both; +} + +.yoast-search-result-preview__field--hover:before { + display: block; + position: absolute; + right: -3px; + width: 24px; + height: 24px; + margin-top: -3px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23646464%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E"); + background-size: 25px; + content: ""; +} + +.yoast-search-result-preview__field--focus:before { + display: block; + position: absolute; + right: -3px; + width: 24px; + height: 24px; + margin-top: -3px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%230075b3%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E"); + background-size: 25px; + content: ""; +} + +.yoast-search-result-preview__title { + overflow: hidden; + margin: 0; + color: #1a0dab; + font-size: 18px; + font-weight: normal; + line-height: 1.2; + white-space: nowrap; + text-decoration: none; + text-overflow: ellipsis; +} + +.yoast-search-result-preview__url { + color: #006621; + font-size: 14px; + font-style: normal; + line-height: 16px; +} + +.yoast-search-result-preview__description, +.yoast-search-result-preview__date { + font-size: 13px; + line-height: 1.4; +} + +.yoast-search-result-preview__date { + color: #808080; +} + +.yoast-search-result-preview__description { + color: #545454; +} + +.yoast-icon, +.yoast-icon__eye { + padding-right: 45px; +} + +.yoast-icon__eye { + background: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E") no-repeat 20px center/16px 16px; +} + +.yoast-button, +.yoast-button__edit { + padding: 8px 10px; + border: 1px solid #ccc; + border-radius: 4px; + color: #555; + background: #f7f7f7; + font-size: 0.8rem; + cursor: pointer; +} + +.yoast-button__edit { + display: block; + margin-top: 1em; + padding-right: 32px; + background: #f7f7f7 url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") no-repeat 8px center/16px 16px; + background-size: 16px; +} + +.yoast-search-result-form { + overflow: hidden; + background-color: #fff; + font-family: Arial, sans-serif; +} + +.yoast-search-result-form__heading { + margin: 0 -20px 15px; + padding: 8px 20px; + border-bottom: 1px solid #f7f7f7; + color: #555; + font-family: "Open Sans", sans-serif; + font-size: 0.9rem; + font-weight: 300; +} + +.yoast-search-result-form__container--hover:before { + display: block; + position: absolute; + right: -3px; + width: 24px; + height: 24px; + margin-top: -3px; + margin-top: 15px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23646464%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E"); + background-size: 25px; + content: ""; +} + +.yoast-search-result-form__container--focus:before { + display: block; + position: absolute; + right: -3px; + width: 24px; + height: 24px; + margin-top: -3px; + margin-top: 15px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%230075b3%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E"); + background-size: 25px; + content: ""; +} + +.yoast-search-result-form__label { + display: block; + width: 100%; + margin-top: 1em; +} + +.yoast-search-result-form__field { + box-sizing: border-box; + width: 100%; + border: 1px solid #ddd; +} + +.yoast-search-result-form__description { + display: block; + box-sizing: border-box; + width: 100%; + height: 70px; + border: 1px solid #ddd; +} + +.yoast-search-result-form__progress { + display: block; + box-sizing: border-box; + width: 100%; + height: 8px; + margin-top: 5px; + border: 0; + + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.yoast-search-result-form__progress::-webkit-progress-bar { + border: 1px solid #ddd; + background-color: #f7f7f7; +} + +.yoast-search-result-form__close-button { + margin-top: 1em; +} + +.yoast-search-result-form__progress--bad { + color: #dc3232; +} + +.yoast-search-result-form__progress--bad::-webkit-progress-value { + background-color: #dc3232; + transition: width 250ms; +} + +.yoast-search-result-form__progress--bad::-moz-progress-bar { + background-color: #dc3232; +} + +.yoast-search-result-form__progress--bad--fallback { + overflow: hidden; + max-width: 100%; + background-color: #dc3232; +} + +.yoast-search-result-form__progress--ok { + color: #ee7c1b; +} + +.yoast-search-result-form__progress--ok::-webkit-progress-value { + background-color: #ee7c1b; + transition: width 250ms; +} + +.yoast-search-result-form__progress--ok::-moz-progress-bar { + background-color: #ee7c1b; +} + +.yoast-search-result-form__progress--ok--fallback { + overflow: hidden; + max-width: 100%; + background-color: #ee7c1b; +} + +.yoast-search-result-form__progress--good { + color: #7ad03a; +} + +.yoast-search-result-form__progress--good::-webkit-progress-value { + background-color: #7ad03a; + transition: width 250ms; +} + +.yoast-search-result-form__progress--good::-moz-progress-bar { + background-color: #7ad03a; +} + +.yoast-search-result-form__progress--good--fallback { + overflow: hidden; + max-width: 100%; + background-color: #7ad03a; +} + +.yoast-search-result-editor { + position: relative; + width: 640px; + padding: 0 20px 20px; + border: 1px solid #f7f7f7; + border-radius: 20px; + background-color: #fff; + font-family: Arial, sans-serif; +} + +body { + margin: 0; + padding: 0; +} + +#container { + max-width: 1660px; + margin: 0 auto; +} + +.yoast-wizard-body { + box-sizing: border-box; + width: 80%; + margin: 1rem auto 4rem; +} + +@media screen and (max-width: 768px) { + .yoast-wizard-body { + width: auto; + margin: 0; + } +} + +.yoast-wizard__logo { + display: block; + margin: 0 auto; +} + +.yoast-wizard { + box-sizing: border-box; + width: 100%; + min-height: 20px; + padding: 3em; + background: #fff; + text-align: right; +} + +@media screen and (max-width: 768px) { + .yoast-wizard { + padding: 1em 1em 2em; + } +} + +.yoast-wizard--navigation { + width: 100%; + text-align: left; +} + +.yoast-wizard--button { + margin-top: 1em; +} + +.yoast-wizard--button__next { + margin-right: 1em; +} + +.yoast-wizard--button__next button:hover, +.yoast-wizard--button__next button:focus { + background-color: #6c2548 !important; +} + +.yoast-wizard--button__next button:hover div, +.yoast-wizard--button__next button:focus div { + background-color: transparent !important; +} + +.yoast-wizard--button__previous button:focus { + background: #ddd !important; +} + +.yoast-wizard--button__previous button:focus:active { + background: transparent !important; +} + +.yoast-wizard--button__previous button:hover > div > span, +.yoast-wizard--button__previous button:focus > div > span { + color: #000 !important; +} + +@media screen and (max-width: 768px) { + .yoast-wizard--step__active { + overflow: hidden; + width: 38px; + } + + .yoast-wizard--step__active div { + display: inline-block !important; + vertical-align: middle; + } + + .yoast-wizard--step__active div > span > span { + display: block !important; + margin-right: -7px; + padding-left: 99px !important; + } +} + +.yoast-wizard--step__active svg { + color: #5d237a; + + fill: #5d237a; +} + +.yoast-wizard--step__inactive div { + pointer-events: none; +} + +@media screen and (max-width: 768px) { + .yoast-wizard--step__inactive { + display: none !important; + } +} + +.yoast-wizard--step--container:focus { + outline: none; +} + +.yoast-wizard--step--container h1 { + margin-top: 0; + margin-bottom: 16px; + margin-bottom: 1rem; + color: #a4286a; + font-size: 2.75em; + font-weight: 300; + line-height: 3.68rem; + letter-spacing: normal; +} + +@media screen and (max-width: 768px) { + .yoast-wizard--step--container h1 { + font-size: 2em; + line-height: 1.25; + } +} + +.yoast-wizard--step--container h2 { + color: #a4286a; + font-size: 1.375em; + font-weight: 400; +} + +.yoast-wizard--stepper { + width: 100%; + margin: auto; +} + +.yoast-wizard-overlay { + position: absolute; + z-index: 10; + top: 0; + right: 0; + width: 100%; + height: 100%; + opacity: 0.2; + color: #fff; + background-color: #000; + text-align: center; +} + +.yoast-wizard-overlay-loader { + position: relative; +} + +.yoast-wizard-container { + position: relative; + min-height: 20px; + border: 1px solid #ccc; + box-shadow: rgba(0, 0, 0, 0.15) 0 3px 10px, rgba(0, 0, 0, 0.2) 0 3px 10px; + text-align: right; +} + +@media screen and (max-width: 768px) { + .yoast-wizard-container { + box-shadow: none; + } +} + +.yoast-wizard-container fieldset { + margin: 1em 0; + padding-right: 0.5em; + border: 0; +} + +.yoast-wizard-text-input { + padding-bottom: 0.5em; + font-size: 14px; +} + +.yoast-wizard-text-input-label { + display: block; + margin: 0.5em 0 0; + font-weight: bold; + cursor: pointer; +} + +.yoast-wizard-text-input [type="text"] { + box-sizing: border-box; + width: 100%; + max-width: 450px; +} + +.yoast-wizard-field-description { + font-weight: bold; +} + +.yoast-wizard input { + margin: 0.5em 0; + padding: 5px; + font-size: 14px; + line-height: 140%; +} + +.yoast-wizard label { + cursor: pointer; +} + +.yoast-wizard input[type="radio"] { + margin: 0.3em 0 0.3em 0.7em; + vertical-align: middle; +} + +.yoast-wizard-input__explanation { + margin-top: 0; + color: #555; + font-style: italic; +} + +.yoast-wizard-input-radio { + font-size: 14px; +} + +.yoast-wizard-input-radio-option label { + padding-top: 2px; +} + +.yoast-wizard-input-radio-separator { + padding: 0; +} + +.yoast-wizard-input-radio-separator input { + /* visually hide the radio buttons but keep them accessible */ + position: absolute; + right: -9999em; + width: 1px; + height: 1px; +} + +.yoast-wizard-input-radio-separator input + label { + float: right; + width: 30px !important; + margin: 0 0 5px 5px !important; + padding: 9px 6px; + border: 1px solid #ccc; + /* Don't change: these mimic Google's font and font size for titles */ + font-family: Arial, Helvetica, sans-serif !important; + font-size: 18px !important; + line-height: 24px; + text-align: center; + cursor: pointer; +} + +.yoast-wizard-input-radio-separator input:checked + label { + border: 1px solid #a4286a; + background-color: #fff; + box-shadow: inset 0 0 0 2px #a4286a; +} + +.yoast-wizard-input-radio-separator input:checked + label, +.yoast-wizard-input-radio-separator input:focus + label { + border-radius: 10px; + border-bottom-left-radius: 0; +} + +/* Responsive videos. */ +/* Other common aspect ratios: 75% = 4:3, 66.66% = 3:2, 62.5% = 8:5 */ +.yoast-video-container-max-width { + max-width: 560px; +} + +.yoast-video-container { + overflow: hidden; + position: relative; + /* 16:9 */ + height: 0; + padding-bottom: 56.25%; +} + +.yoast-video-container iframe { + position: absolute; + top: 0; + right: 0; + width: 100%; + height: 100%; +} + +.yoast-wizard-notice__error { + margin-bottom: 15px; + padding: 12px; + border-right: 4px solid #dc3232; + background: #fff; + box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1); +} + +@keyframes heartbeat { + 0% { + opacity: 0.4; + transform: scale(0.7); + } + + 80% { + opacity: 1; + } + + 100% { + opacity: 1; + transform: scale(0.95); + } +} + +.yoast-loader { + animation: heartbeat 1.15s infinite; + animation-timing-function: cubic-bezier(0.96, 0.02, 0.63, 0.86); + animation-direction: alternate; +} + +.yoast-wizard-return-link { + display: block; + margin: 1em 0; + /* lighter #555d66 */ + color: #646d78; + text-align: center; +} + +.yoast-wizard-mailchimp-message-error { + color: #dc3232; +} + +.yoast-wizard-mailchimp-message-success { + color: #008a00; +} + +.yoast-wizard-input { + padding-bottom: 0.5em; +} + +.yoast-wizard-input__select { + margin: 1em 0; + font-size: 14px; +} + +.yoast-wizard-image-upload-container__image { + max-width: 151px; +} + +.yoast-wizard-image-upload-container-buttons { + margin-top: 1em; +} + +.yoast-wizard-image-upload-container-buttons__remove { + margin-right: 1em; +} + +.yoast-wizard-image-upload-container-description { + display: block; +} + +.ie9 .yoast-wizard--stepper { + display: none; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/yoast-components-400-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/yoast-components-400-rtl.min.css new file mode 100644 index 0000000..b0afa08 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/yoast-components-400-rtl.min.css @@ -0,0 +1 @@ +.yoast-wizard--step--container:focus,a{outline:0}body{background:#f1f1f1;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:1.375}a{color:#0073aa;transition-timing-function:ease-in-out;transition-duration:50ms;transition-property:border,background,color}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.screen-reader-text{overflow:hidden;clip:rect(1px,1px,1px,1px);position:absolute!important;width:1px;height:1px}.yoast-search-result-preview{overflow:hidden;background-color:#fff;font-family:Arial,sans-serif}.yoast-search-result-preview__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-family:"Open Sans",sans-serif;font-size:.9rem;font-weight:300}.yoast-search-result-preview__field{overflow:hidden;position:relative;width:600px;cursor:pointer}.yoast-search-result-preview__field:after,.yoast-search-result-preview__field:before{display:table;content:" "}.yoast-search-result-preview__field--focus:before,.yoast-search-result-preview__field--hover:before{position:absolute;right:-3px;width:24px;height:24px;margin-top:-3px;background-size:25px;content:"";display:block}.yoast-search-result-preview__field:after{clear:both}.yoast-search-result-preview__field--hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23646464%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.yoast-search-result-preview__field--focus:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%230075b3%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.yoast-search-result-preview__title{overflow:hidden;margin:0;color:#1a0dab;font-size:18px;font-weight:400;line-height:1.2;white-space:nowrap;text-decoration:none;text-overflow:ellipsis}.yoast-search-result-preview__url{color:#006621;font-size:14px;font-style:normal;line-height:16px}.yoast-search-result-preview__date,.yoast-search-result-preview__description{font-size:13px;line-height:1.4}.yoast-search-result-preview__date{color:grey}.yoast-search-result-preview__description{color:#545454}.yoast-icon,.yoast-icon__eye{padding-right:45px}.yoast-icon__eye{background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E") 20px center/16px 16px no-repeat}.yoast-button,.yoast-button__edit{padding:8px 10px;border:1px solid #ccc;border-radius:4px;color:#555;background:#f7f7f7;font-size:.8rem;cursor:pointer}.yoast-button__edit{display:block;margin-top:1em;padding-right:32px;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") 8px center/16px 16px no-repeat #f7f7f7;background-size:16px}.yoast-search-result-form{overflow:hidden;background-color:#fff;font-family:Arial,sans-serif}.yoast-search-result-form__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-family:"Open Sans",sans-serif;font-size:.9rem;font-weight:300}.yoast-search-result-form__container--focus:before,.yoast-search-result-form__container--hover:before{position:absolute;right:-3px;width:24px;height:24px;margin-top:15px;background-size:25px;content:"";display:block}.yoast-search-result-form__container--hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23646464%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.yoast-search-result-form__container--focus:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%230075b3%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.yoast-search-result-form__label{display:block;width:100%;margin-top:1em}.yoast-search-result-form__field{box-sizing:border-box;width:100%;border:1px solid #ddd}.yoast-search-result-form__description{display:block;box-sizing:border-box;width:100%;height:70px;border:1px solid #ddd}.yoast-search-result-form__progress{display:block;box-sizing:border-box;width:100%;height:8px;margin-top:5px;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.yoast-search-result-form__progress::-webkit-progress-bar{border:1px solid #ddd;background-color:#f7f7f7}.yoast-search-result-form__close-button{margin-top:1em}.yoast-search-result-form__progress--bad{color:#dc3232}.yoast-search-result-form__progress--bad::-webkit-progress-value{background-color:#dc3232;transition:width 250ms}.yoast-search-result-form__progress--bad::-moz-progress-bar{background-color:#dc3232}.yoast-search-result-form__progress--bad--fallback{overflow:hidden;max-width:100%;background-color:#dc3232}.yoast-search-result-form__progress--ok{color:#ee7c1b}.yoast-search-result-form__progress--ok::-webkit-progress-value{background-color:#ee7c1b;transition:width 250ms}.yoast-search-result-form__progress--ok::-moz-progress-bar{background-color:#ee7c1b}.yoast-search-result-form__progress--ok--fallback{overflow:hidden;max-width:100%;background-color:#ee7c1b}.yoast-search-result-form__progress--good{color:#7ad03a}.yoast-search-result-form__progress--good::-webkit-progress-value{background-color:#7ad03a;transition:width 250ms}.yoast-search-result-form__progress--good::-moz-progress-bar{background-color:#7ad03a}.yoast-search-result-form__progress--good--fallback{overflow:hidden;max-width:100%;background-color:#7ad03a}.yoast-search-result-editor{position:relative;width:640px;padding:0 20px 20px;border:1px solid #f7f7f7;border-radius:20px;background-color:#fff;font-family:Arial,sans-serif}body{margin:0;padding:0}#container{max-width:1660px;margin:0 auto}.yoast-wizard-body{box-sizing:border-box;width:80%;margin:1rem auto 4rem}@media screen and (max-width:768px){.yoast-wizard-body{width:auto;margin:0}}.yoast-wizard__logo{display:block;margin:0 auto}.yoast-wizard{box-sizing:border-box;width:100%;min-height:20px;padding:3em;background:#fff;text-align:right}.yoast-wizard--navigation{width:100%;text-align:left}.yoast-wizard--button{margin-top:1em}.yoast-wizard--button__next{margin-right:1em}.yoast-wizard--button__next button:focus,.yoast-wizard--button__next button:hover{background-color:#6c2548!important}.yoast-wizard--button__next button:focus div,.yoast-wizard--button__next button:hover div{background-color:transparent!important}.yoast-wizard--button__previous button:focus{background:#ddd!important}.yoast-wizard--button__previous button:focus:active{background:0 0!important}.yoast-wizard--button__previous button:focus>div>span,.yoast-wizard--button__previous button:hover>div>span{color:#000!important}.yoast-wizard--step__active svg{color:#5d237a;fill:#5d237a}.yoast-wizard--step__inactive div{pointer-events:none}.yoast-wizard--step--container h1{margin-top:0;margin-bottom:1rem;color:#a4286a;font-size:2.75em;font-weight:300;line-height:3.68rem;letter-spacing:normal}@media screen and (max-width:768px){.yoast-wizard{padding:1em 1em 2em}.yoast-wizard--step__active{overflow:hidden;width:38px}.yoast-wizard--step__active div{display:inline-block!important;vertical-align:middle}.yoast-wizard--step__active div>span>span{display:block!important;margin-right:-7px;padding-left:99px!important}.yoast-wizard--step__inactive{display:none!important}.yoast-wizard--step--container h1{font-size:2em;line-height:1.25}}.yoast-wizard--step--container h2{color:#a4286a;font-size:1.375em;font-weight:400}.yoast-wizard--stepper{width:100%;margin:auto}.yoast-wizard-overlay{position:absolute;z-index:10;top:0;right:0;width:100%;height:100%;opacity:.2;color:#fff;background-color:#000;text-align:center}.yoast-wizard-overlay-loader{position:relative}.yoast-wizard-container{position:relative;min-height:20px;border:1px solid #ccc;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.2) 0 3px 10px;text-align:right}@media screen and (max-width:768px){.yoast-wizard-container{box-shadow:none}}.yoast-wizard-container fieldset{margin:1em 0;padding-right:.5em;border:0}.yoast-wizard-text-input{padding-bottom:.5em;font-size:14px}.yoast-wizard-text-input-label{display:block;margin:.5em 0 0;font-weight:700;cursor:pointer}.yoast-wizard-text-input [type=text]{box-sizing:border-box;width:100%;max-width:450px}.yoast-wizard-field-description{font-weight:700}.yoast-wizard input{margin:.5em 0;padding:5px;font-size:14px;line-height:140%}.yoast-wizard label{cursor:pointer}.yoast-wizard input[type=radio]{margin:.3em 0 .3em .7em;vertical-align:middle}.yoast-wizard-input__explanation{margin-top:0;color:#555;font-style:italic}.yoast-wizard-input-radio{font-size:14px}.yoast-wizard-input-radio-option label{padding-top:2px}.yoast-wizard-input-radio-separator{padding:0}.yoast-wizard-input-radio-separator input{position:absolute;right:-9999em;width:1px;height:1px}.yoast-wizard-input-radio-separator input+label{float:right;width:30px!important;margin:0 0 5px 5px!important;padding:9px 6px;border:1px solid #ccc;font-family:Arial,Helvetica,sans-serif!important;font-size:18px!important;line-height:24px;text-align:center;cursor:pointer}.yoast-wizard-input-radio-separator input:checked+label{border:1px solid #a4286a;background-color:#fff;box-shadow:inset 0 0 0 2px #a4286a}.yoast-wizard-input-radio-separator input:checked+label,.yoast-wizard-input-radio-separator input:focus+label{border-radius:10px 10px 10px 0}.yoast-video-container-max-width{max-width:560px}.yoast-video-container{overflow:hidden;position:relative;height:0;padding-bottom:56.25%}.yoast-video-container iframe{position:absolute;top:0;right:0;width:100%;height:100%}.yoast-wizard-notice__error{margin-bottom:15px;padding:12px;border-right:4px solid #dc3232;background:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@keyframes heartbeat{0%{opacity:.4;transform:scale(.7)}80%{opacity:1}100%{opacity:1;transform:scale(.95)}}.yoast-loader{animation:heartbeat 1.15s infinite;animation-timing-function:cubic-bezier(.96,.02,.63,.86);animation-direction:alternate}.yoast-wizard-return-link{display:block;margin:1em 0;color:#646d78;text-align:center}.yoast-wizard-mailchimp-message-error{color:#dc3232}.yoast-wizard-mailchimp-message-success{color:#008a00}.yoast-wizard-input{padding-bottom:.5em}.yoast-wizard-input__select{margin:1em 0;font-size:14px}.yoast-wizard-image-upload-container__image{max-width:151px}.yoast-wizard-image-upload-container-buttons{margin-top:1em}.yoast-wizard-image-upload-container-buttons__remove{margin-right:1em}.yoast-wizard-image-upload-container-description{display:block}.ie9 .yoast-wizard--stepper{display:none} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-390-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-390-rtl.css new file mode 100644 index 0000000..10451d5 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-390-rtl.css @@ -0,0 +1,899 @@ +@charset "UTF-8"; + + +/*------------------------------------* #SETTINGS +\*------------------------------------*/ + +/** + * Pull in all the settings we require for this project. + */ +/** + * Create vendor-prefixed CSS in one go, e.g. + * + `@include vendor(border-radius, 4px);` + * + */ +.yoast-list--usp { + margin-bottom: 1em; + padding: 0; + font-family: "Open Sans", Arial, sans-serif; +} + +.yoast-list--usp li { + position: relative; + padding-right: 1.2533333333rem; + list-style: none !important; +} + +.yoast-list--usp li::before { + position: absolute; + top: 0; + right: 0; + color: #77b227; + font-family: "FontAwesome", "Open Sans", Arial, sans-serif; + content: "\f00c\0020"; +} + +.yoast h1, +.yoast h2, +.yoast h3, +.yoast h4, +.yoast h5, +.yoast h6, +.yoast .h1, +.yoast .h2, +.yoast .h3, +.yoast .h4, +.yoast .h5, +.yoast .h6 { + display: block; + margin-top: 0; + font-family: "Open Sans", Arial, sans-serif; + font-weight: 300; +} + +.yoast h1, +.yoast .h1 { + margin-bottom: 1.35rem; + font-size: 2.5em; + line-height: 3.68rem; + letter-spacing: normal; +} + +@media only screen and (min-width: 30rem) { + .yoast h1, + .yoast .h1 { + font-size: 2.75em; + } +} + +.yoast h2, +.yoast .h2 { + margin-bottom: 1.2rem; + font-size: 1.88em; + line-height: 2.5rem; +} + +.yoast h2.tight, +.yoast .h2.tight { + margin-bottom: 0.6rem; +} + +.yoast h3, +.yoast .h3 { + margin-bottom: 0.8rem; + font-size: 1.25em; + line-height: 1.88rem; +} + +.yoast h3.tight, +.yoast .h3.tight { + margin-bottom: 0.4rem; +} + +@media only screen and (min-width: 30rem) { + .yoast h3, + .yoast .h3 { + font-size: 1.375em; + } +} + +@media only screen and (min-width: 50rem) { + .yoast h3, + .yoast .h3 { + font-size: 1.5em; + } +} + +.yoast h4, +.yoast .h4, +.yoast h5, +.yoast .h5, +.yoast h6, +.yoast .h6 { + margin-bottom: 0.2rem; + font-size: 1.13em; + font-weight: 400; + line-height: 1.88rem; +} + +.yoast-button { + display: inline-block; + position: relative; + width: 100%; + padding: 0.345em 1em 0.345em 1.5em; + border: 0; + color: #dc5c04; + background-color: transparent; + background-color: #dc5c04; + font-family: "Open Sans", Arial, sans-serif; + font-size: 1.1em; + text-decoration: none; + cursor: pointer; +} + +@media only screen and (min-width: 30rem) { + .yoast-button { + width: auto; + max-height: 2.86rem; + margin-left: 1.36rem; + } + + .yoast-button::after { + position: absolute; + top: 0; + left: -1.36rem; + width: 0; + height: 0; + border-top: 1.43rem solid transparent; + border-left: 0; + border-bottom: 1.44rem solid transparent; + border-right: 1.43rem solid #dc5c04; + content: ""; + } + + .yoast-button.left { + margin-left: 0; + margin-right: 1.36rem; + } + + .yoast-button.left::after { + content: none; + } + + .yoast-button.left::before { + position: absolute; + top: 0; + right: -1.36rem; + width: 0; + height: 0; + border-top: 1.43rem solid transparent; + border-left: 1.43rem solid #dc5c04; + border-bottom: 1.44rem solid transparent; + border-right: 0; + content: ""; + } +} + +.yoast-button.alignleft { + margin: 1rem 0 0 2.5rem !important; +} + +.yoast-button .arrow { + display: none; +} + +.yoast-button + .yoast-button { + margin-top: 1em; + margin-right: 1.88rem; +} + +.yoast-button--full { + width: 100%; +} + +.yoast-button--full::after { + content: none; +} + +.yoast-button.default { + color: #fff; + background-color: #dc5c04; +} + +.yoast-button.default::after { + border-right-color: #dc5c04; +} + +.yoast-button.default::before { + border-left-color: #dc5c04; +} + +.yoast-button:hover, +.yoast-button a:focus { + color: #fff; + background-color: #f58223; + text-decoration: underline; +} + +.yoast-button:hover::after, +.yoast-button a:focus::after { + border-right-color: #f58223; +} + +.yoast-button:hover::before, +.yoast-button a:focus::before { + border-left-color: #f58223; +} + +.yoast-button.academy { + color: #fff; + background-color: #5d237a; +} + +.yoast-button.academy::after { + border-right-color: #5d237a; +} + +.yoast-button.academy::before { + border-left-color: #5d237a; +} + +@media only screen and (max-width: 20rem) { + .yoast-button.academy { + background-color: #5d237a; + } +} + +.yoast-button.academy--secondary { + color: #fff; + background-color: #a4286a; +} + +.yoast-button.academy--secondary::after { + border-right-color: #a4286a; +} + +.yoast-button.academy--secondary::before { + border-left-color: #a4286a; +} + +@media only screen and (max-width: 20rem) { + .yoast-button.academy--secondary { + background-color: #a4286a; + } +} + +.yoast-button.software { + color: #fff; + background-color: #0075b3; +} + +.yoast-button.software::after { + border-right-color: #0075b3; +} + +.yoast-button.software::before { + border-left-color: #0075b3; +} + +.yoast-button.review { + color: #fff; + background-color: #009288; +} + +.yoast-button.review::after { + border-right-color: #009288; +} + +.yoast-button.review::before { + border-left-color: #009288; +} + +.yoast-button.about { + color: #fff; + background-color: #d93f69; +} + +.yoast-button.about::after { + border-right-color: #d93f69; +} + +.yoast-button.about::before { + border-left-color: #d93f69; +} + +.yoast_academy .yoast-button { + color: #fff; + background-color: #d93f69; +} + +.yoast_academy .yoast-button::after { + border-right-color: #d93f69; +} + +.yoast_academy .yoast-button::before { + border-left-color: #d93f69; +} + +.yoast_academy .yoast-button:hover, +.yoast_academy .yoast-button a:focus { + color: #fff; + background-color: #d42a59; + text-decoration: underline; +} + +.yoast_academy .yoast-button:hover::after, +.yoast_academy .yoast-button a:focus::after { + border-right-color: #d42a59; +} + +.yoast_academy .yoast-button:hover::before, +.yoast_academy .yoast-button a:focus::before { + border-left-color: #d42a59; +} + +body .yoast-button.dimmed, +.yoast_academy .yoast-button.dimmed { + color: #646464; + background-color: #dcdcdc; +} + +body .yoast-button.dimmed::after, +.yoast_academy .yoast-button.dimmed::after { + border-right-color: #dcdcdc; +} + +body .yoast-button.dimmed::before, +.yoast_academy .yoast-button.dimmed::before { + border-left-color: #dcdcdc; +} + +body .yoast-button.dimmed:hover, +body .yoast-button.dimmed a:focus, +.yoast_academy .yoast-button.dimmed:hover, +.yoast_academy .yoast-button.dimmed a:focus { + color: #646464; + background-color: #cdcdcd; + text-decoration: underline; +} + +body .yoast-button.dimmed:hover::after, +body .yoast-button.dimmed a:focus::after, +.yoast_academy .yoast-button.dimmed:hover::after, +.yoast_academy .yoast-button.dimmed a:focus::after { + border-right-color: #cdcdcd; +} + +body .yoast-button.dimmed:hover:before, +body .yoast-button.dimmed a:focus:before, +.yoast_academy .yoast-button.dimmed:hover:before, +.yoast_academy .yoast-button.dimmed a:focus:before { + border-left-color: #cdcdcd; +} + +.yoast-button--noarrow::after { + content: none; +} + +.yoast-button--naked { + padding: 0; + border: none; + background-color: transparent; +} + +.yoast-button--naked::after { + content: none; +} + +.yoast-button i.fa { + margin: 4px 0 0 10px; + font-size: 140%; +} + +.yoast-promoblock { + border: 1px solid #e6e6e6; + /* Explicit theming */ +} + +.theme-academy .yoast-promoblock { + border-color: #5d237a; +} + +.theme-academy--secondary .yoast-promoblock { + border-color: #a4286a; +} + +.theme-software .yoast-promoblock { + border-color: #0075b3; +} + +.theme-review .yoast-promoblock { + border-color: #009288; +} + +.theme-about .yoast-promoblock { + border-color: #d93f69; +} + +.theme-home .yoast-promoblock { + border-color: #d93f69; +} + +.theme-academy.yoast-promoblock { + border-color: #5d237a; +} + +.theme-academy--secondary.yoast-promoblock { + border-color: #a4286a; +} + +.theme-software.yoast-promoblock { + border-color: #0075b3; +} + +.theme-software--secondary.yoast-promoblock { + border-color: #009288; +} + +.theme-review.yoast-promoblock { + border-color: #009288; +} + +.theme-review--secondary.yoast-promoblock { + border-color: #77b227; +} + +.theme-about.yoast-promoblock { + border-color: #d93f69; +} + +.theme-about--secondary.yoast-promoblock { + border-color: #a4286a; +} + +.link.yoast-promoblock { + border-color: #dc5c04; +} + +.link.yoast-promoblock::after { + -moz-filter: drop-shadow(1px 0 0 #dc5c04); + -ms-filter: drop-shadow(1px 0 0 #dc5c04); + -o-filter: drop-shadow(1px 0 0 #dc5c04); + filter: drop-shadow(1px 0 0 #dc5c04); +} + +.cta.yoast-promoblock { + border-color: #dc5c04; +} + +.cta.yoast-promoblock::after { + -moz-filter: drop-shadow(1px 0 0 #dc5c04); + -ms-filter: drop-shadow(1px 0 0 #dc5c04); + -o-filter: drop-shadow(1px 0 0 #dc5c04); + filter: drop-shadow(1px 0 0 #dc5c04); +} + +.yoast-promoblock { + display: block; + position: relative; + margin-bottom: 1.88rem; + padding: 20px; + border: 1px solid; + border-radius: 30px; + border-bottom-left-radius: 0; + background-color: #fff; + font-family: "Merriweather", Georgia, serif; +} + +.yoast-promoblock p { + color: #000; +} + +.yoast-promoblock p:last-of-type { + margin-bottom: 0; +} + +.yoast-promoblock i.blockicon { + position: absolute; + left: 10px; + bottom: 10px; + padding: 0 0.5em 0 0; + font-size: 2.25em; +} + +.yoast-promoblock a img { + border: 1px solid #dcdcdc; +} + +.yoast-promoblock p a { + font-weight: 600 !important; + text-decoration: underline; +} + +.yoast-promoblock form a { + font-family: "Open Sans", Arial, sans-serif; + font-weight: 400 !important; + text-decoration: none; +} + +.yoast-promoblock h4, +.yoast-promoblock .h4 { + margin-bottom: 0.7rem; +} + +.yoast-promoblock.link { + border-color: #dc5c04; +} + +.yoast-promoblock.link a, +.yoast-promoblock.link a:hover { + color: #dc5c04; +} + +.yoast-promoblock--white { + border-color: #fff !important; +} + +.yoast-promoblock.theme-academy a { + color: #5d237a !important; +} + +.yoast-promoblock.theme-academy.secondary a { + color: #a4286a !important; +} + +.yoast-promoblock.theme-software a { + color: #0075b3 !important; +} + +.yoast-promoblock.theme-review a { + color: #009288 !important; +} + +.yoast-promoblock.theme-review.secondary a { + color: #77b227 !important; +} + +.yoast-promoblock.theme-about a { + color: #d93f69 !important; +} + +.product .yoast-promoblock { + overflow: hidden; +} + +.yoast-promoblock--hometitle { + /* OLD - iOS 6-, Safari 3.1-6 */ + /* OLD - Firefox 19- (buggy but mostly works) */ + display: -ms-flexbox; + /* TWEENER - IE 10 */ + /* NEW - Chrome */ + display: flex; + max-width: 16em; + height: 11em; + margin: 16px auto 32px; + margin: 1rem auto 2rem; + border-color: #fff !important; + background-color: rgba(217, 63, 105, 0.25); + font-size: 16px; + font-size: 1rem; + line-height: 1; + + -webkit-box-pack: center; + -ms-flex-align: center; + -ms-flex-line-pack: center; + /* NEW, Spec - Opera 12.1, Firefox 20+ */ + -ms-flex-pack: justify; +} + +.old-ie .yoast-promoblock--hometitle { + text-align: justify; +} + +.old-ie .yoast-promoblock--hometitle::after { + display: inline-block; + width: 100%; + content: ""; +} + +.old-ie .yoast-promoblock--hometitle > * { + display: inline-block; + text-align: right; +} + +@media only screen and (max-width: 30rem) { + .yoast-promoblock--hometitle::after { + content: none !important; + } +} + +.yoast-promoblock--imageholder { + margin-bottom: 0; + padding: 0; +} + +.yoast-promoblock--imageholdersmall { + position: absolute; +} + +.yoast-promoblock--imageholdersmall:first-child { + right: 4rem; +} + +.yoast-promoblock--imageholdersmall:last-child { + top: 4rem; +} + +@media only screen and (max-width: 50rem) { + .yoast-promoblock h2 { + margin-bottom: 0; + } +} + +a.promoblock { + color: #000; + text-decoration: none; +} + +a.promoblock:hover { + text-decoration: none; +} + +.promoblockimage__holder { + position: relative; + width: 240px; + height: 295px; +} + +@media only screen and (min-width: 50rem) { + [class*="promoblock--icon"]::before { + position: absolute; + left: 0.47rem; + bottom: 0.47rem; + font-family: "FontAwesome", "Open Sans", Arial, sans-serif; + font-size: 2.2rem; + line-height: 1; + } + + body.theme-about [class*="promoblock--icon"]::before { + color: #d93f69; + } + + body.theme-about .promoblock a.color-cta { + color: #009288 !important; + } + + body.theme-academy [class*="promoblock--icon"]::before { + color: #5d237a; + } + + body.theme-software [class*="promoblock--icon"]::before { + color: #0075b3; + } + + .promoblock--icon-academy::before { + content: "\f19d"; + } + + .promoblock--icon-blog::before { + content: "\f1ea"; + } + + .promoblock--icon-book::before { + content: "\f02d"; + } + + .promoblock--icon-calendar::before { + content: "\f073"; + } + + .promoblock--icon-check::before { + content: "\f046"; + } + + .promoblock--icon-drupal::before { + content: "\f1a9"; + } + + .promoblock--icon-gears::before { + content: "\f085"; + } + + .promoblock--icon-pencil::before { + content: "\f040"; + } + + .promoblock--icon-plug::before { + content: "\f1e6"; + } + + .promoblock--icon-video::before { + content: "\f008"; + } + + .promoblock--icon-wordpress::before { + content: "\f19a"; + } +} + +.yoast { + color: #000; + font-family: "Open Sans",Arial,sans-serif; + font-size: 1rem; + line-height: 1.88; + letter-spacing: 0.01em; +} + +.yoast *, +.yoast *:before, +.yoast *:after { + box-sizing: border-box; +} + +.yoast-hr { + position: relative; + margin: 0; + padding-bottom: 1.88rem; + border: 0; + border-top: 1px solid #a4286a; +} + +.yoast-hr:after { + position: absolute; + z-index: 1; + top: -2px; + right: 50%; + height: 0; + border: none; + border-top: 20px solid #f1f1f1; + border-left: 40px solid transparent; + border-right: 40px solid transparent; + line-height: 0; + content: ""; + -ms-transform: translateX(50%); + transform: translateX(50%); + + -moz-filter: drop-shadow(0 1px 0 #a4286a); + -ms-filter: drop-shadow(0 1px 0 #a4286a); + -o-filter: drop-shadow(0 1px 0 #a4286a); + filter: drop-shadow(0 1px 0 #a4286a); +} + +.yoast-list--usp li:before { + width: 1em; + height: 100%; + background: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%2377B227%22%20d%3D%22M1671%20566q0%2040%2D28%2068l%2D724%20724%2D136%20136q%2D28%2028%2D68%2028t%2D68%2D28l%2D136%2D136%2D362%2D362q%2D28%2D28%2D28%2D68t28%2D68l136%2D136q28%2D28%2068%2D28t68%2028l294%20295%20656%2D657q28%2D28%2068%2D28t68%2028l136%20136q28%2028%2028%2068z%22%2F%3E%3C%2Fsvg%3E") no-repeat; + background-position: right 0.4em; + background-size: contain; + content: ""; +} + +.yoast-button--purple { + background-color: #5d237a; +} + +.yoast-button-go-to:after { + position: static; + top: auto; + left: auto; + width: auto; + height: auto; + border: none; + content: " \00BB"; +} + +.yoast-button--installed { + color: #fff; + background-color: #77b227; + cursor: default; +} + +.yoast-button--installed:hover { + background-color: #77b227; + text-decoration: none; +} + +.yoast-promo-extensions { + display: -ms-flexbox; + display: flex; + margin-right: -50px; + + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.yoast-promo-extensions > h2 { + width: 100%; + margin-right: 50px; +} + +.yoast-promo-extension { + max-width: 330px; + margin-right: 50px; + border-color: #a4286a; + background-color: transparent; +} + +.yoast-promo-extension:first-child { + margin-right: 0; +} + +.yoast-promo-extension img { + width: 100%; + height: auto; + margin-bottom: 0.8rem; +} + +@media screen and (max-width: 900px) { + .yoast-promo-extension img { + display: none; + } +} + +.yoast-promo-extension .yoast-button { + width: 100%; + max-height: none; +} + +.yoast-promo-extension .yoast-button--installed { + width: auto; +} + +.yoast-promo-extension h3 { + color: #a4286a; +} + +@media screen and (max-width: 900px) { + .yoast-promo-extension { + width: 100%; + max-width: none; + } +} + +.yoast-seo-premium-extension:before, +.yoast-seo-premium-extension:after { + display: table; + content: ""; +} + +.yoast-seo-premium-extension:after { + clear: both; +} + +.yoast-seo-premium-benefits__title { + font-weight: 600; +} + +.yoast-seo-premium-benefits__description:before { + content: "– "; +} + +.yoast-link--more-info { + padding-right: calc( 1em + 5px); + color: #646464; + background: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23646464%22%20d%3D%22M1152%201376v%2D160q0%2D14%2D9%2D23t%2D23%2D9h%2D96v%2D512q0%2D14%2D9%2D23t%2D23%2D9h%2D320q%2D14%200%2D23%209t%2D9%2023v160q0%2014%209%2023t23%209h96v320h%2D96q%2D14%200%2D23%209t%2D9%2023v160q0%2014%209%2023t23%209h448q14%200%2023%2D9t9%2D23zm%2D128%2D896v%2D160q0%2D14%2D9%2D23t%2D23%2D9h%2D192q%2D14%200%2D23%209t%2D9%2023v160q0%2014%209%2023t23%209h192q14%200%2023%2D9t9%2D23zm640%20416q0%20209%2D103%20385%2E5t%2D279%2E5%20279%2E5%2D385%2E5%20103%2D385%2E5%2D103%2D279%2E5%2D279%2E5%2D103%2D385%2E5%20103%2D385%2E5%20279%2E5%2D279%2E5%20385%2E5%2D103%20385%2E5%20103%20279%2E5%20279%2E5%20103%20385%2E5z%22%2F%3E%3C%2Fsvg%3E"); + background-repeat: no-repeat; + background-position: right 0.2em; + background-size: 1em; +} + +.yoast-link--more-info:after { + content: " \00BB"; +} + +.yoast-promo-extension .yoast-link--more-info { + display: block; + margin: 1em 0 0 0; + background-position: right 0.4em; +} + +.yoast-heading-highlight { + color: #a4286a; + font-weight: 600; +} + +.yoast-money-back-guarantee { + font-size: 1.1em; + font-style: italic; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-390-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-390-rtl.min.css new file mode 100644 index 0000000..ced784c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-390-rtl.min.css @@ -0,0 +1 @@ +@charset "UTF-8";.yoast-list--usp{margin-bottom:1em;padding:0;font-family:"Open Sans",Arial,sans-serif}.yoast-list--usp li{position:relative;padding-right:1.2533333333rem;list-style:none!important}.yoast-list--usp li::before{position:absolute;top:0;right:0;color:#77b227;font-family:FontAwesome,"Open Sans",Arial,sans-serif;content:"\f00c\0020"}.yoast .h1,.yoast .h2,.yoast .h3,.yoast .h4,.yoast .h5,.yoast .h6,.yoast h1,.yoast h2,.yoast h3,.yoast h4,.yoast h5,.yoast h6{display:block;margin-top:0;font-family:"Open Sans",Arial,sans-serif;font-weight:300}.yoast .h1,.yoast h1{margin-bottom:1.35rem;font-size:2.5em;line-height:3.68rem;letter-spacing:normal}@media only screen and (min-width:30rem){.yoast .h1,.yoast h1{font-size:2.75em}}.yoast .h2,.yoast h2{margin-bottom:1.2rem;font-size:1.88em;line-height:2.5rem}.yoast .h2.tight,.yoast h2.tight{margin-bottom:.6rem}.yoast .h3,.yoast h3{margin-bottom:.8rem;font-size:1.25em;line-height:1.88rem}.yoast .h3.tight,.yoast h3.tight{margin-bottom:.4rem}@media only screen and (min-width:30rem){.yoast .h3,.yoast h3{font-size:1.375em}}@media only screen and (min-width:50rem){.yoast .h3,.yoast h3{font-size:1.5em}}.yoast .h4,.yoast .h5,.yoast .h6,.yoast h4,.yoast h5,.yoast h6{margin-bottom:.2rem;font-size:1.13em;font-weight:400;line-height:1.88rem}.yoast-button{display:inline-block;position:relative;width:100%;padding:.345em 1em .345em 1.5em;border:0;color:#dc5c04;background-color:#dc5c04;font-family:"Open Sans",Arial,sans-serif;font-size:1.1em;text-decoration:none;cursor:pointer}@media only screen and (min-width:30rem){.yoast-button{width:auto;max-height:2.86rem;margin-left:1.36rem}.yoast-button.left::before,.yoast-button::after{position:absolute;top:0;width:0;height:0;border-top:1.43rem solid transparent;border-bottom:1.44rem solid transparent}.yoast-button::after{left:-1.36rem;border-left:0;border-right:1.43rem solid #dc5c04;content:""}.yoast-button.left{margin-left:0;margin-right:1.36rem}.yoast-button.left::after{content:none}.yoast-button.left::before{right:-1.36rem;border-left:1.43rem solid #dc5c04;border-right:0;content:""}}.yoast-button--full::after,.yoast-button--naked::after,.yoast-button--noarrow::after{content:none}.yoast-button.alignleft{margin:1rem 0 0 2.5rem!important}.yoast-button .arrow{display:none}.yoast-button+.yoast-button{margin-top:1em;margin-right:1.88rem}.yoast-button--full{width:100%}.yoast-button.default{color:#fff;background-color:#dc5c04}.yoast-button.default::after{border-right-color:#dc5c04}.yoast-button.default::before{border-left-color:#dc5c04}.yoast-button a:focus,.yoast-button:hover{color:#fff;background-color:#f58223;text-decoration:underline}.yoast-button a:focus::after,.yoast-button:hover::after{border-right-color:#f58223}.yoast-button a:focus::before,.yoast-button:hover::before{border-left-color:#f58223}.yoast-button.academy{color:#fff;background-color:#5d237a}.yoast-button.academy::after{border-right-color:#5d237a}.yoast-button.academy::before{border-left-color:#5d237a}@media only screen and (max-width:20rem){.yoast-button.academy{background-color:#5d237a}.yoast-button.academy--secondary{background-color:#a4286a}}.yoast-button.academy--secondary{color:#fff;background-color:#a4286a}.yoast-button.academy--secondary::after{border-right-color:#a4286a}.yoast-button.academy--secondary::before{border-left-color:#a4286a}.yoast-button.software{color:#fff;background-color:#0075b3}.yoast-button.software::after{border-right-color:#0075b3}.yoast-button.software::before{border-left-color:#0075b3}.yoast-button.review{color:#fff;background-color:#009288}.yoast-button.about,.yoast_academy .yoast-button{background-color:#d93f69;color:#fff}.yoast-button.review::after{border-right-color:#009288}.yoast-button.about::after,.yoast_academy .yoast-button::after{border-right-color:#d93f69}.yoast-button.review::before{border-left-color:#009288}.yoast-button.about::before,.yoast_academy .yoast-button::before{border-left-color:#d93f69}.yoast_academy .yoast-button a:focus,.yoast_academy .yoast-button:hover{color:#fff;background-color:#d42a59;text-decoration:underline}.yoast_academy .yoast-button a:focus::after,.yoast_academy .yoast-button:hover::after{border-right-color:#d42a59}.yoast_academy .yoast-button a:focus::before,.yoast_academy .yoast-button:hover::before{border-left-color:#d42a59}.yoast_academy .yoast-button.dimmed,body .yoast-button.dimmed{color:#646464;background-color:#dcdcdc}.yoast_academy .yoast-button.dimmed::after,body .yoast-button.dimmed::after{border-right-color:#dcdcdc}.yoast_academy .yoast-button.dimmed::before,body .yoast-button.dimmed::before{border-left-color:#dcdcdc}.yoast_academy .yoast-button.dimmed a:focus,.yoast_academy .yoast-button.dimmed:hover,body .yoast-button.dimmed a:focus,body .yoast-button.dimmed:hover{color:#646464;background-color:#cdcdcd;text-decoration:underline}.yoast_academy .yoast-button.dimmed a:focus::after,.yoast_academy .yoast-button.dimmed:hover::after,body .yoast-button.dimmed a:focus::after,body .yoast-button.dimmed:hover::after{border-right-color:#cdcdcd}.yoast_academy .yoast-button.dimmed a:focus:before,.yoast_academy .yoast-button.dimmed:hover:before,body .yoast-button.dimmed a:focus:before,body .yoast-button.dimmed:hover:before{border-left-color:#cdcdcd}.yoast-button--naked{padding:0;border:none;background-color:transparent}.yoast-button i.fa{margin:4px 0 0 10px;font-size:140%}.theme-academy .yoast-promoblock{border-color:#5d237a}.theme-academy--secondary .yoast-promoblock{border-color:#a4286a}.theme-software .yoast-promoblock{border-color:#0075b3}.theme-review .yoast-promoblock{border-color:#009288}.theme-about .yoast-promoblock,.theme-home .yoast-promoblock{border-color:#d93f69}.theme-academy.yoast-promoblock{border-color:#5d237a}.theme-academy--secondary.yoast-promoblock{border-color:#a4286a}.theme-software.yoast-promoblock{border-color:#0075b3}.theme-review.yoast-promoblock,.theme-software--secondary.yoast-promoblock{border-color:#009288}.theme-review--secondary.yoast-promoblock{border-color:#77b227}.theme-about.yoast-promoblock{border-color:#d93f69}.theme-about--secondary.yoast-promoblock{border-color:#a4286a}.cta.yoast-promoblock,.link.yoast-promoblock{border-color:#dc5c04}.link.yoast-promoblock::after{-moz-filter:drop-shadow(1px 0 0 #dc5c04);-ms-filter:drop-shadow(1px 0 0 #dc5c04);-o-filter:drop-shadow(1px 0 0 #dc5c04);filter:drop-shadow(1px 0 0 #dc5c04)}.cta.yoast-promoblock::after{-moz-filter:drop-shadow(1px 0 0 #dc5c04);-ms-filter:drop-shadow(1px 0 0 #dc5c04);-o-filter:drop-shadow(1px 0 0 #dc5c04);filter:drop-shadow(1px 0 0 #dc5c04)}.yoast-promoblock{display:block;position:relative;margin-bottom:1.88rem;padding:20px;border:1px solid;border-radius:30px 30px 30px 0;background-color:#fff;font-family:Merriweather,Georgia,serif}.yoast-promoblock p{color:#000}.yoast-promoblock p:last-of-type{margin-bottom:0}.yoast-promoblock i.blockicon{position:absolute;left:10px;bottom:10px;padding:0 .5em 0 0;font-size:2.25em}.yoast-promoblock a img{border:1px solid #dcdcdc}.yoast-promoblock p a{font-weight:600!important;text-decoration:underline}.yoast-promoblock form a,a.promoblock,a.promoblock:hover{text-decoration:none}.yoast-promoblock form a{font-family:"Open Sans",Arial,sans-serif;font-weight:400!important}.yoast-promoblock .h4,.yoast-promoblock h4{margin-bottom:.7rem}.yoast-promoblock.link{border-color:#dc5c04}.yoast-promoblock.link a,.yoast-promoblock.link a:hover{color:#dc5c04}.yoast-promoblock--white{border-color:#fff!important}.yoast-promoblock.theme-academy a{color:#5d237a!important}.yoast-promoblock.theme-academy.secondary a{color:#a4286a!important}.yoast-promoblock.theme-software a{color:#0075b3!important}.yoast-promoblock.theme-review a{color:#009288!important}.yoast-promoblock.theme-review.secondary a{color:#77b227!important}.yoast-promoblock.theme-about a{color:#d93f69!important}.product .yoast-promoblock{overflow:hidden}.yoast-promoblock--hometitle{display:-ms-flexbox;display:flex;max-width:16em;height:11em;margin:1rem auto 2rem;border-color:#fff!important;background-color:rgba(217,63,105,.25);font-size:16px;font-size:1rem;line-height:1;-webkit-box-pack:center;-ms-flex-align:center;-ms-flex-line-pack:center;-ms-flex-pack:justify}.old-ie .yoast-promoblock--hometitle{text-align:justify}.old-ie .yoast-promoblock--hometitle::after{display:inline-block;width:100%;content:""}.old-ie .yoast-promoblock--hometitle>*{display:inline-block;text-align:right}@media only screen and (max-width:30rem){.yoast-promoblock--hometitle::after{content:none!important}}.yoast-promoblock--imageholder{margin-bottom:0;padding:0}.yoast-promoblock--imageholdersmall{position:absolute}.yoast-promoblock--imageholdersmall:first-child{right:4rem}.yoast-promoblock--imageholdersmall:last-child{top:4rem}@media only screen and (max-width:50rem){.yoast-promoblock h2{margin-bottom:0}}a.promoblock{color:#000}.promoblockimage__holder{position:relative;width:240px;height:295px}@media only screen and (min-width:50rem){[class*=promoblock--icon]::before{position:absolute;left:.47rem;bottom:.47rem;font-family:FontAwesome,"Open Sans",Arial,sans-serif;font-size:2.2rem;line-height:1}body.theme-about [class*=promoblock--icon]::before{color:#d93f69}body.theme-about .promoblock a.color-cta{color:#009288!important}body.theme-academy [class*=promoblock--icon]::before{color:#5d237a}body.theme-software [class*=promoblock--icon]::before{color:#0075b3}.promoblock--icon-academy::before{content:"\f19d"}.promoblock--icon-blog::before{content:"\f1ea"}.promoblock--icon-book::before{content:"\f02d"}.promoblock--icon-calendar::before{content:"\f073"}.promoblock--icon-check::before{content:"\f046"}.promoblock--icon-drupal::before{content:"\f1a9"}.promoblock--icon-gears::before{content:"\f085"}.promoblock--icon-pencil::before{content:"\f040"}.promoblock--icon-plug::before{content:"\f1e6"}.promoblock--icon-video::before{content:"\f008"}.promoblock--icon-wordpress::before{content:"\f19a"}}.yoast{color:#000;font-family:"Open Sans",Arial,sans-serif;font-size:1rem;line-height:1.88;letter-spacing:.01em}.yoast *,.yoast :after,.yoast :before{box-sizing:border-box}.yoast-hr{position:relative;margin:0;padding-bottom:1.88rem;border:0;border-top:1px solid #a4286a}.yoast-hr:after{position:absolute;z-index:1;top:-2px;right:50%;height:0;border:none;border-top:20px solid #f1f1f1;border-left:40px solid transparent;border-right:40px solid transparent;line-height:0;content:"";-ms-transform:translateX(50%);transform:translateX(50%);-moz-filter:drop-shadow(0 1px 0 #a4286a);-ms-filter:drop-shadow(0 1px 0 #a4286a);-o-filter:drop-shadow(0 1px 0 #a4286a);filter:drop-shadow(0 1px 0 #a4286a)}.yoast-list--usp li:before{width:1em;height:100%;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%2377B227%22%20d%3D%22M1671%20566q0%2040%2D28%2068l%2D724%20724%2D136%20136q%2D28%2028%2D68%2028t%2D68%2D28l%2D136%2D136%2D362%2D362q%2D28%2D28%2D28%2D68t28%2D68l136%2D136q28%2D28%2068%2D28t68%2028l294%20295%20656%2D657q28%2D28%2068%2D28t68%2028l136%20136q28%2028%2028%2068z%22%2F%3E%3C%2Fsvg%3E") right .4em no-repeat;background-size:contain;content:""}.yoast-button--purple{background-color:#5d237a}.yoast-button-go-to:after{position:static;top:auto;left:auto;width:auto;height:auto;border:none;content:" \00BB"}.yoast-button--installed{color:#fff;background-color:#77b227;cursor:default}.yoast-button--installed:hover{background-color:#77b227;text-decoration:none}.yoast-promo-extensions{display:-ms-flexbox;display:flex;margin-right:-50px;-ms-flex-wrap:wrap;flex-wrap:wrap}.yoast-promo-extensions>h2{width:100%;margin-right:50px}.yoast-promo-extension{max-width:330px;margin-right:50px;border-color:#a4286a;background-color:transparent}.yoast-promo-extension:first-child{margin-right:0}.yoast-promo-extension img{width:100%;height:auto;margin-bottom:.8rem}.yoast-promo-extension .yoast-button{width:100%;max-height:none}.yoast-promo-extension .yoast-button--installed{width:auto}.yoast-promo-extension h3{color:#a4286a}@media screen and (max-width:900px){.yoast-promo-extension img{display:none}.yoast-promo-extension{width:100%;max-width:none}}.yoast-seo-premium-extension:after,.yoast-seo-premium-extension:before{display:table;content:""}.yoast-seo-premium-extension:after{clear:both}.yoast-seo-premium-benefits__title{font-weight:600}.yoast-seo-premium-benefits__description:before{content:"– "}.yoast-link--more-info{padding-right:calc(1em + 5px);color:#646464;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23646464%22%20d%3D%22M1152%201376v%2D160q0%2D14%2D9%2D23t%2D23%2D9h%2D96v%2D512q0%2D14%2D9%2D23t%2D23%2D9h%2D320q%2D14%200%2D23%209t%2D9%2023v160q0%2014%209%2023t23%209h96v320h%2D96q%2D14%200%2D23%209t%2D9%2023v160q0%2014%209%2023t23%209h448q14%200%2023%2D9t9%2D23zm%2D128%2D896v%2D160q0%2D14%2D9%2D23t%2D23%2D9h%2D192q%2D14%200%2D23%209t%2D9%2023v160q0%2014%209%2023t23%209h192q14%200%2023%2D9t9%2D23zm640%20416q0%20209%2D103%20385%2E5t%2D279%2E5%20279%2E5%2D385%2E5%20103%2D385%2E5%2D103%2D279%2E5%2D279%2E5%2D103%2D385%2E5%20103%2D385%2E5%20279%2E5%2D279%2E5%20385%2E5%2D103%20385%2E5%20103%20279%2E5%20279%2E5%20103%20385%2E5z%22%2F%3E%3C%2Fsvg%3E") right .2em no-repeat;background-size:1em}.yoast-link--more-info:after{content:" \00BB"}.yoast-promo-extension .yoast-link--more-info{display:block;margin:1em 0 0;background-position:right .4em}.yoast-heading-highlight{color:#a4286a;font-weight:600}.yoast-money-back-guarantee{font-size:1.1em;font-style:italic} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-400-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-400-rtl.css new file mode 100644 index 0000000..571e8d6 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-400-rtl.css @@ -0,0 +1,537 @@ +h4 { + clear: both; + margin: 1.2em 0 0.5em 0; +} + +p.desc { + margin: 6px 0 10px 0; + padding: 0 25px 8px 0; +} + +p.desc.label { + margin: 0 0 20px; + padding: 0 200px 10px 0; +} + +tr.yst_row { + margin: 5px 0 0 0; + padding: 5px 0 0 0; +} + +tr.yst_row.even { + background-color: #f6f6f6; +} + +div.yoastbox ul { + margin-right: 20px; +} + +.postbox { + margin: 10px 0 0 10px; +} + +label { + float: right; + margin-right: 6px; +} + +.yoast-inline-label { + float: none; + margin: 0; +} + +label.radio { + float: none; + margin-left: 20px; +} + +input.textinput, +textarea, +select { + width: 400px; +} + +input.checkbox + label.checkbox { + width: auto; +} + +input.textinput, +textarea.textinput, +select.select { + float: right; + margin: 0 0 15px 3px; + padding: 5px; +} + +textarea.textinput { + padding: 3px 6px; +} + +select.select { + padding: 3px; +} + +input.checkbox, +input.checkbox.double { + float: right; + margin: 6px 0 6px 10px; +} + +.textinput.metadesc { + height: 50px; +} + +textarea.import { + width: 500px; + height: 100px; +} + +label.textinput, +label.select, +label.checkbox { + width: 200px; + margin: 5px 0 5px 0; + background-color: transparent; +} + +.wpseo-gsc-reload-crawl-issues-form { + position: relative; + top: 9px; +} + +.wp-core-ui .button.wpseo-gsc-save-profile { + margin-right: 200px; +} + +table.wpseo th { + text-align: right; +} + +.wpseo_content_wrapper { + display: table; + width: 100%; +} + +.wpseo_content_wrapper p, +.wpseo_content_wrapper li { + max-width: 600px; +} + +.wpseo_content_wrapper .notice p { + max-width: none; +} + +/* Notices below Settings pages tabs. */ +#wpseo-tabs + .notice { + margin-top: 1.5em; +} + +.wpseo_content_cell { + display: table-cell; + height: 500px; + margin: 0; + padding: 0; + vertical-align: top; +} + +.wpseo-remove-ads { + margin-top: 0; + padding: 12px; + border: 1px solid #0075b3; + border-radius: 20px; + border-bottom-left-radius: 0; + background-color: #fff; +} + +#wpseo_content_top { + min-width: 800px; +} + +.wpseo-variable-warning-element { + border: 1px solid #c62d2d !important; +} + +.wpseo-variable-warning { + clear: both; + margin: 5px 0 0 0; + padding: 5px; + color: #c62d2d; +} + +.wpseo-variable-warning code { + color: #b02828; +} + +.wpseo-variable-warning a { + color: #c62d2d; +} + +.wpseo_content_wrapper h3 { + margin: 1em 0 0.5em 0; +} + +.wpseo_content_wrapper h1.wpseo-redirect-url-title { + margin: 1em 0 0.5em 0; + font-size: 1.3em; +} + +#sidebar-container { + width: 261px; + padding: 0 20px 0 0; +} + +@media (max-width: 1020px) { + #wpseo_content_top { + margin-right: 0; + padding-right: 0; + } +} + +.wpseo-admin-page .form-table tr, +.wpseo-admin-page .form-table th, +.wpseo-admin-page .form-table td { + vertical-align: top; +} + +.postbox form { + line-height: 150%; +} + +div.yoastbox ul li { + list-style: square; +} + +.text { + width: 250px; +} + +div.yoastbox .button:hover, +div.yoastbox .button-primary:hover { + text-decoration: none; +} + +/*.button, .button-primary {*/ +/*margin-top: 10px;*/ +/*}*/ +table.yoast_help, +table.yoast_help th, +table.yoast_help td { + border: 1px solid #ddd; + border-collapse: collapse; + color: #444; + font-size: 12px; +} + +table.yoast_help th, +table.yoast_help td { + padding: 5px 10px; + text-align: right; + vertical-align: text-top; +} + +table.yoast_help tr { + background-color: #f1f1f1; +} + +table.yoast_help tr:nth-child(2n) { + background-color: #fbfbfe; +} + +table.yoast_help tr:hover { + background-color: #ddd; +} + +.correct { + padding: 5px; + color: white; + background-color: green; +} + +.wrong { + padding: 5px; + color: white; + background-color: #dc3232; +} + +.wrong code { + padding: 3px 8px; + color: #000; +} + +.yoast-notice-blocking-files code { + color: #000; + line-height: 2; +} + +.yoast-notice-blocking-files .button { + margin: 0.5em 0; +} + +.wpseo_content_wrapper .yoast-blocking-files-error p { + max-width: none; +} + +.button.fixit { + float: left; + margin: 0 5px; +} + +.button.checkit { + float: left; + margin: 0 5px; + padding: 5px 8px; +} + +.fb-buttons .button-primary, +.fb-buttons .button { + margin-left: 8px; +} + +.postbox#donate { + border: 2px green; +} + +.wpseotab { + display: none; + margin-top: 15px; +} + +.wpseotab.active { + display: block; +} + +.wpseotab p.expl { + margin-right: 6px; +} + +.wpseotab p.expl strong { + font-size: 115%; +} + +#sidebar .yoastbox { + margin: 0 0 10px 0; + padding: 10px 15px; + border: 1px solid #ccc; + border-radius: 25px 5px; +} + +#sidebar .yoastbox h2 { + font-size: 16px; +} + +#sidebar .promo { + color: #000; +} + +#donate.yoastbox, +#sitereview.yoastbox { + border-color: green; + background-color: #cfc; +} + +h2 { + margin-bottom: 20px; +} + +h2 code { + font-size: 23px; +} + +#pointer-primary { + margin: 0 0 0 5px; +} + +#wpseo-debug-info { + clear: both; +} + +#wpseo-debug-info .hndle { + cursor: auto; +} + +#wpseo-debug-info .wpseo-debug-heading { + font-size: 1em; +} + +#wpseo-debug-info .wpseo-debug { + display: inline-block; + padding-right: 20px; + color: #c00; +} + +input.wpseo-new-title, +textarea.wpseo-new-metadesc { + width: 100%; + max-width: 100%; +} + +.wpseotab .extension { + float: right; + box-sizing: border-box; + width: 300px; + height: 230px; + margin: 10px 0 10px 20px; + border: 1px solid #ccc; +} + +.wpseotab .extension p { + margin: 0; + padding: 10px; +} + +.wpseotab .extension h3 { + box-sizing: border-box; + height: 110px; + margin: 0; + padding: 20px 120px 0 10px; + border-bottom: 1px solid #ccc; + background: #fff no-repeat right 10px; + background-size: 130px 100px; +} + +.wpseotab .extension a { + text-decoration: none; +} + +.wpseotab .extension button.installed { + border-color: #00a000; + background-color: #00a000; + cursor: default; +} + +#separator { + margin: 1.5em 0 1em; +} + +#separator input.radio { + /* visually hide the radio buttons but keep them accessible */ + position: absolute; + right: -9999em; + width: 1px; + height: 1px; +} + +#separator input.radio + label { + float: right; + width: 30px !important; + margin: 0 0 0 5px !important; + padding: 9px 6px; + border: 1px solid #ccc; + /* Don't change: these mimic Google's font and font size for titles */ + font-family: Arial, Helvetica, sans-serif !important; + font-size: 18px !important; + line-height: 24px; + text-align: center; + cursor: pointer; +} + +#separator input.radio:checked + label { + border: 1px solid #a4286a; + background-color: #fff; + box-shadow: inset 0 0 0 2px #a4286a; +} + +#separator input.radio:focus + label { + border-radius: 10px; + border-bottom-left-radius: 0; +} + +.svg-container { + text-align: center; +} + +.svg-container .dashicons { + width: 200px; + height: 100px; + font-size: 100px; +} + +body.toplevel_page_wpseo_dashboard .wp-badge { + border: none; + background: url(../images/Yoast_SEO_Icon.svg); + background-size: 150px 160px; + box-shadow: none; +} + +.nav-tab .dashicons { + width: 18px; + height: 18px; + font-size: 18px; + line-height: 24px; +} + +.nav-tab .pinteresticon { + width: 12px; + height: 24px; + margin-left: 2px; + background-image: url(../images/pinterest-23x30.png); + background-repeat: no-repeat; + background-position: center center; + background-size: contain; +} + +#wpseo_progressbar { + height: 25px; + border: 1px solid #006691; +} + +#wpseo_progressbar .ui-progressbar-value { + height: 25px; + background: #006691; +} + +.wpseo-add-fb-admin-form-wrap .notice span { + margin-right: 10px; +} + +.archives-titles-metas-content { + padding-top: 1em; +} + +@media screen and (max-width: 782px) { + .wpseo-gsc-reload-crawl-issues-form { + top: 0; + margin: 1em 0; + } + + .wpseo-gsc-reload-crawl-issues-form .alignright { + float: none; + } +} + +@media screen and (max-width: 600px) { + .wpseo-gsc-reload-crawl-issues-form { + margin-bottom: 0; + } +} + +.yoast-sidebar__title { + box-sizing: border-box; + width: 100%; + margin: 46px 0 20px; + padding: 10px; + border: none; + border-bottom: 1px solid #a4286a; + outline: none; + color: #a4286a; + background: none; + line-height: 19px; + text-align: right; +} + +.yoast-sidebar__spot { + padding: 10px 0; + border-bottom: 1px solid #ddd; +} + +.yoast-sidebar__spot a { + color: #a4286a; +} + +.wpseo-banner__link { + display: inline-block; +} + +.wpseo-banner__image { + vertical-align: top; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-400-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-400-rtl.min.css new file mode 100644 index 0000000..628e60d --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-400-rtl.min.css @@ -0,0 +1 @@ +#wpseo-debug-info,h4{clear:both}.wpseotab .extension a,div.yoastbox .button-primary:hover,div.yoastbox .button:hover{text-decoration:none}h4{margin:1.2em 0 .5em}p.desc{margin:6px 0 10px;padding:0 25px 8px 0}p.desc.label{margin:0 0 20px;padding:0 200px 10px 0}tr.yst_row{margin:5px 0 0;padding:5px 0 0}tr.yst_row.even{background-color:#f6f6f6}div.yoastbox ul{margin-right:20px}.postbox{margin:10px 0 0 10px}label{float:right;margin-right:6px}.yoast-inline-label{float:none;margin:0}label.radio{float:none;margin-left:20px}input.textinput,select,textarea{width:400px}input.checkbox+label.checkbox{width:auto}input.textinput,select.select,textarea.textinput{float:right;margin:0 0 15px 3px;padding:5px}textarea.textinput{padding:3px 6px}select.select{padding:3px}input.checkbox,input.checkbox.double{float:right;margin:6px 0 6px 10px}.textinput.metadesc{height:50px}textarea.import{width:500px;height:100px}label.checkbox,label.select,label.textinput{width:200px;margin:5px 0;background-color:transparent}.wpseo-gsc-reload-crawl-issues-form{position:relative;top:9px}.wp-core-ui .button.wpseo-gsc-save-profile{margin-right:200px}table.wpseo th{text-align:right}.wpseo_content_wrapper{display:table;width:100%}.wpseo_content_wrapper li,.wpseo_content_wrapper p{max-width:600px}.wpseo_content_wrapper .notice p,.wpseo_content_wrapper .yoast-blocking-files-error p{max-width:none}#wpseo-tabs+.notice{margin-top:1.5em}.wpseo_content_cell{display:table-cell;height:500px;margin:0;padding:0;vertical-align:top}.wpseo-remove-ads{margin-top:0;padding:12px;border:1px solid #0075b3;border-radius:20px 20px 20px 0;background-color:#fff}#wpseo_content_top{min-width:800px}.wpseo-variable-warning-element{border:1px solid #c62d2d!important}.wpseo-variable-warning{clear:both;margin:5px 0 0;padding:5px;color:#c62d2d}.wpseo-variable-warning code{color:#b02828}.wpseo-variable-warning a{color:#c62d2d}.wpseo_content_wrapper h3{margin:1em 0 .5em}.wpseo_content_wrapper h1.wpseo-redirect-url-title{margin:1em 0 .5em;font-size:1.3em}#sidebar-container{width:261px;padding:0 20px 0 0}@media (max-width:1020px){#wpseo_content_top{margin-right:0;padding-right:0}}.wpseo-admin-page .form-table td,.wpseo-admin-page .form-table th,.wpseo-admin-page .form-table tr{vertical-align:top}.postbox form{line-height:150%}div.yoastbox ul li{list-style:square}.text{width:250px}table.yoast_help,table.yoast_help td,table.yoast_help th{border:1px solid #ddd;border-collapse:collapse;color:#444;font-size:12px}table.yoast_help td,table.yoast_help th{padding:5px 10px;text-align:right;vertical-align:text-top}.correct,.wrong{padding:5px;color:#fff}table.yoast_help tr{background-color:#f1f1f1}table.yoast_help tr:nth-child(2n){background-color:#fbfbfe}table.yoast_help tr:hover{background-color:#ddd}.correct{background-color:green}.wrong{background-color:#dc3232}.wrong code{padding:3px 8px;color:#000}.yoast-notice-blocking-files code{color:#000;line-height:2}.yoast-notice-blocking-files .button{margin:.5em 0}.button.checkit,.button.fixit{float:left;margin:0 5px}.button.checkit{padding:5px 8px}.fb-buttons .button,.fb-buttons .button-primary{margin-left:8px}.postbox#donate{border:2px green}.wpseotab{display:none;margin-top:15px}.wpseotab.active{display:block}.wpseotab p.expl{margin-right:6px}.wpseotab p.expl strong{font-size:115%}#sidebar .yoastbox{margin:0 0 10px;padding:10px 15px;border:1px solid #ccc;border-radius:25px 5px}#sidebar .yoastbox h2{font-size:16px}#sidebar .promo{color:#000}#donate.yoastbox,#sitereview.yoastbox{border-color:green;background-color:#cfc}h2{margin-bottom:20px}h2 code{font-size:23px}#pointer-primary{margin:0 0 0 5px}#wpseo-debug-info .hndle{cursor:auto}#wpseo-debug-info .wpseo-debug-heading{font-size:1em}#wpseo-debug-info .wpseo-debug{display:inline-block;padding-right:20px;color:#c00}input.wpseo-new-title,textarea.wpseo-new-metadesc{width:100%;max-width:100%}.wpseotab .extension{float:right;box-sizing:border-box;width:300px;height:230px;margin:10px 0 10px 20px;border:1px solid #ccc}.wpseotab .extension p{margin:0;padding:10px}.wpseotab .extension h3{box-sizing:border-box;height:110px;margin:0;padding:20px 120px 0 10px;border-bottom:1px solid #ccc;background:right 10px no-repeat #fff;background-size:130px 100px}.wpseotab .extension button.installed{border-color:#00a000;background-color:#00a000;cursor:default}#separator{margin:1.5em 0 1em}#separator input.radio{position:absolute;right:-9999em;width:1px;height:1px}#separator input.radio+label{float:right;width:30px!important;margin:0 0 0 5px!important;padding:9px 6px;border:1px solid #ccc;font-family:Arial,Helvetica,sans-serif!important;font-size:18px!important;line-height:24px;text-align:center;cursor:pointer}#separator input.radio:checked+label{border:1px solid #a4286a;background-color:#fff;box-shadow:inset 0 0 0 2px #a4286a}#separator input.radio:focus+label{border-radius:10px 10px 10px 0}.svg-container{text-align:center}.svg-container .dashicons{width:200px;height:100px;font-size:100px}body.toplevel_page_wpseo_dashboard .wp-badge{border:none;background:url(../images/Yoast_SEO_Icon.svg);background-size:150px 160px;box-shadow:none}.nav-tab .dashicons{width:18px;height:18px;font-size:18px;line-height:24px}.nav-tab .pinteresticon{width:12px;height:24px;margin-left:2px;background-image:url(../images/pinterest-23x30.png);background-repeat:no-repeat;background-position:center center;background-size:contain}#wpseo_progressbar{height:25px;border:1px solid #006691}#wpseo_progressbar .ui-progressbar-value{height:25px;background:#006691}.wpseo-add-fb-admin-form-wrap .notice span{margin-right:10px}.archives-titles-metas-content{padding-top:1em}@media screen and (max-width:782px){.wpseo-gsc-reload-crawl-issues-form{top:0;margin:1em 0}.wpseo-gsc-reload-crawl-issues-form .alignright{float:none}}@media screen and (max-width:600px){.wpseo-gsc-reload-crawl-issues-form{margin-bottom:0}}.yoast-sidebar__title{box-sizing:border-box;width:100%;margin:46px 0 20px;padding:10px;border:none;border-bottom:1px solid #a4286a;outline:0;color:#a4286a;background:0 0;line-height:19px;text-align:right}.yoast-sidebar__spot{padding:10px 0;border-bottom:1px solid #ddd}.yoast-sidebar__spot a{color:#a4286a}.wpseo-banner__link{display:inline-block}.wpseo-banner__image{vertical-align:top} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-390-rtl.css b/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-390-rtl.css new file mode 100644 index 0000000..965ea2b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-390-rtl.css @@ -0,0 +1,39 @@ +.wpseo-score-icon { + display: inline-block; + width: 12px; + height: 12px; + margin: 3px 3px 0 10px; + border-radius: 50%; + background: #888; + vertical-align: top; +} + +.wpseo-score-icon.good { + background-color: #7ad03a; +} + +.wpseo-score-icon.ok { + background-color: #ee7c1b; +} + +.wpseo-score-icon.bad { + background-color: #dc3232; +} + +.wpseo-score-icon.na { + background-color: #888; +} + +.wpseo-score-icon.noindex { + background-color: #1e8cbe; +} + +.wpseo-score-title { + font-weight: 600; +} + +#taxonomy_overall { + position: absolute; + top: 0; + margin-right: 87.5%; +} diff --git a/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-390-rtl.min.css b/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-390-rtl.min.css new file mode 100644 index 0000000..01c4325 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-390-rtl.min.css @@ -0,0 +1 @@ +.wpseo-score-icon{display:inline-block;width:12px;height:12px;margin:3px 3px 0 10px;border-radius:50%;background:#888;vertical-align:top}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}.wpseo-score-title{font-weight:600}#taxonomy_overall{position:absolute;top:0;margin-right:87.5%} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/edit-page-330.min.css b/wp-content/plugins/wordpress-seo/css/edit-page-330.min.css new file mode 100644 index 0000000..4dfc1bd --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/edit-page-330.min.css @@ -0,0 +1 @@ +.wpseo-score-icon{display:inline-block;width:12px;height:12px;margin-left:6px;border-radius:50%;background:#888;line-height:16px}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}th#wpseo-score{width:63px}@media screen and (max-width:782px){.column-wpseo-focuskw,.column-wpseo-metadesc,.column-wpseo-score,.column-wpseo-title{display:none}} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/featured-image-330.min.css b/wp-content/plugins/wordpress-seo/css/featured-image-330.min.css new file mode 100644 index 0000000..d2ab2fa --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/featured-image-330.min.css @@ -0,0 +1 @@ +#yst_opengraph_image_warning{padding:1px 12px;border:solid #dc3232;border-width:4px 4px 0;background-color:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/help-center-340.min.css b/wp-content/plugins/wordpress-seo/css/help-center-340.min.css new file mode 100644 index 0000000..f7e567f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/help-center-340.min.css @@ -0,0 +1 @@ +#wpcontent.yoast-help-center-open{overflow-x:hidden}.wpseo-tab-video-container{margin-bottom:20px;border-bottom:1px solid #a4286a}.wpseo-tab-video-container__handle{width:100%;margin:0;padding:10px;border:none;outline:0;color:#a4286a;background:0 0;line-height:19px;text-align:left;cursor:pointer}.wpseo-tab-video-container__handle .toggle__arrow{text-decoration:none}.wpseo-tab-video-container__handle:focus,.wpseo-tab-video-container__handle:hover{text-decoration:underline}.wpseo-tab-video-container__handle .dashicons-before:before{margin-right:5px}.wpseotab .wpseo-tab-video-container{margin-top:-15px}.wpseo-tab-video-slideout{display:none;min-height:320px;margin:0 -9999px -1px;padding:2em 9999px;background-color:#a4286a;box-shadow:inset 0 10px 10px -5px rgba(123,30,80,.5),inset 0 -10px 10px -5px rgba(123,30,80,.5);-ms-flex-wrap:wrap;flex-wrap:wrap}.wpseo-tab-video-slideout .contextual-help-tabs-wrap{padding:0;flex-basis:0;flex-grow:1;-ms-flex-negative:1;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-shrink:1}.wpseo-tab-video-slideout a{color:#fff}.wpseo-tab-video-slideout a.button,.wpseo-tab-video-slideout a.button-primary{text-decoration:none}.wpseo-tab-video-slideout h1,.wpseo-tab-video-slideout h2,.wpseo-tab-video-slideout h3,.wpseo-tab-video-slideout h4,.wpseo-tab-video-slideout h5,.wpseo-tab-video-slideout h6{margin-top:.5em;padding-top:0;color:#fff;font-weight:500}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea{float:left;min-width:234px;max-width:242px;margin:0 12px 1em 0;padding:15px 15px 5px;border:1px solid #fff;border-radius:30px 30px 0;color:#fff;background-color:#a4286a}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea h3,.wpseo-tab-video-slideout .yoast-help-center-tabs ul{margin:0}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a,.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:focus,.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:hover{color:#fff;font-weight:500}.wpseo-tab-video-slideout .yoast-help-center-tabs{width:180px;padding:0 1em 1em 0;color:#fff;background-color:#a4286a;-ms-flex:0 0 auto;flex:0 0 auto}.wpseo-tab-video-slideout .help-tab-content{margin:0;color:#fff;font-weight:300}.wpseo-tab-video-slideout .wpseo-tab-video__panel--video{float:left;margin-right:1em;padding-bottom:1em;-ms-flex:0 0 auto;flex:0 0 auto}.wpseo-tab-video-slideout .wpseo-tab-video__panel--video iframe{vertical-align:middle}.wpseo-tab-video-slideout .wpseo-tab-video__panel--text{min-width:264px;margin:0 auto;flex-basis:0;flex-grow:1;-ms-flex-negative:1;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-shrink:1}.wpseo-tab-video-slideout .wpseo-tab-video__panel--text div:last-child{margin-right:0}.postbox .wpseo-tab-video-container{margin:-6px -12px 20px}.postbox .wpseo-tab-video-slideout{margin:0;padding:2em 12px 15px}.inside .wpseo-tab-video-slideout{height:auto}.wpseo-help-center-item{display:inline}.wpseo-help-center-item a{display:block;padding:10px 12px;color:#fff;text-decoration:none}.wpseo-help-center-item a:focus,.wpseo-help-center-item a:hover{text-decoration:underline}.wpseo-help-center-item a.dashicons-before:before{margin-right:3px;text-decoration:none}.wpseo-help-center-item.active a{color:#a4286a;background-color:#fff} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/help-center-340.min.rapido.css b/wp-content/plugins/wordpress-seo/css/help-center-340.min.rapido.css new file mode 100644 index 0000000..843901a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/help-center-340.min.rapido.css @@ -0,0 +1 @@ +#wpcontent.yoast-help-center-open{overflow-x:hidden}.wpseo-tab-video-container{margin-bottom:20px;border-bottom:1px solid #a4286a}.wpseo-tab-video-container__handle{width:100%;margin:0;padding:10px;border:none;outline:0;color:#a4286a;background:0 0;line-height:19px;text-align:left;cursor:pointer}.wpseo-tab-video-container__handle .toggle__arrow{text-decoration:none}.wpseo-tab-video-container__handle:focus,.wpseo-tab-video-container__handle:hover{text-decoration:underline}.wpseo-tab-video-container__handle .dashicons-before:before{margin-right:5px}.wpseotab .wpseo-tab-video-container{margin-top:-15px}.wpseo-tab-video-slideout{display:none;min-height:320px;margin:0 -9999px -1px;padding:2em 9999px;background-color:#a4286a;box-shadow:inset 0 10px 10px -5px rgba(123,30,80,0.5),inset 0 -10px 10px -5px rgba(123,30,80,0.5);-ms-flex-wrap:wrap;flex-wrap:wrap}.wpseo-tab-video-slideout .contextual-help-tabs-wrap{padding:0;flex-basis:0;flex-grow:1;-ms-flex-negative:1;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-shrink:1}.wpseo-tab-video-slideout a{color:#fff}.wpseo-tab-video-slideout a.button,.wpseo-tab-video-slideout a.button-primary{text-decoration:none}.wpseo-tab-video-slideout h1,.wpseo-tab-video-slideout h2,.wpseo-tab-video-slideout h3,.wpseo-tab-video-slideout h4,.wpseo-tab-video-slideout h5,.wpseo-tab-video-slideout h6{margin-top:.5em;padding-top:0;color:#fff;font-weight:500}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea{float:left;min-width:234px;max-width:242px;margin:0 12px 1em 0;padding:15px 15px 5px;border:1px solid #fff;border-radius:30px 30px 0;color:#fff;background-color:#a4286a}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea h3,.wpseo-tab-video-slideout .yoast-help-center-tabs ul{margin:0}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a,.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:focus,.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:hover{color:#fff;font-weight:500}.wpseo-tab-video-slideout .yoast-help-center-tabs{width:180px;padding:0 1em 1em 0;color:#fff;background-color:#a4286a;-ms-flex:0 0 auto;flex:0 0 auto}.wpseo-tab-video-slideout .help-tab-content{margin:0;color:#fff;font-weight:300}.wpseo-tab-video-slideout .wpseo-tab-video__panel--video{float:left;margin-right:1em;padding-bottom:1em;-ms-flex:0 0 auto;flex:0 0 auto}.wpseo-tab-video-slideout .wpseo-tab-video__panel--video iframe{vertical-align:middle}.wpseo-tab-video-slideout .wpseo-tab-video__panel--text{min-width:264px;margin:0 auto;flex-basis:0;flex-grow:1;-ms-flex-negative:1;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-shrink:1}.wpseo-tab-video-slideout .wpseo-tab-video__panel--text div:last-child{margin-right:0}.postbox .wpseo-tab-video-container{margin:-6px -12px 20px}.postbox .wpseo-tab-video-slideout{margin:0;padding:2em 12px 15px}.inside .wpseo-tab-video-slideout{height:auto}.wpseo-help-center-item{display:inline}.wpseo-help-center-item a{display:block;padding:10px 12px;color:#fff;text-decoration:none}.wpseo-help-center-item a:focus,.wpseo-help-center-item a:hover{text-decoration:underline}.wpseo-help-center-item a.dashicons-before:before{margin-right:3px;text-decoration:none}.wpseo-help-center-item.active a{color:#a4286a;background-color:#fff} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/inside-editor-331.min.css b/wp-content/plugins/wordpress-seo/css/inside-editor-331.min.css new file mode 100644 index 0000000..d16fec5 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/inside-editor-331.min.css @@ -0,0 +1 @@ +.yoast-text-mark{background-color:#e1bee7}.yoast-text-mark__highlight{color:#fff;background-color:#4a148c} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/kb-search-350.min.css b/wp-content/plugins/wordpress-seo/css/kb-search-350.min.css new file mode 100644 index 0000000..35cffe6 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/kb-search-350.min.css @@ -0,0 +1 @@ +.wpseo-kb-search-search-bar{padding-bottom:15px;border-bottom:1px solid #ccc}.wpseo-kb-search-search-bar input[type=text]{min-width:50%;height:28px;margin-right:3px}.wpseo-kb-search-results{overflow:auto;height:500px;margin:0;padding:0;list-style:none}.help-tab-content .wpseo-kb-search-results li{max-width:none;margin:0;list-style:none}.wpseo-kb-search-result{display:block;margin:0;padding-left:5px;border-bottom:1px solid #efefef;text-decoration:none}.wpseo-kb-search-result p{max-width:none;margin-top:0}.wpseo-kb-search-result-link{display:block;outline:0;text-decoration:none;cursor:pointer}.wpseo-kb-search-result-link:focus,.wpseo-kb-search-result-link:hover{background-color:rgba(93,12,55,.5);box-shadow:none;text-decoration:underline}.wpseo-kb-search-result .wpseo-kb-search-result-title{margin:0;padding:14px 0}.wpseo-kb-search-ext-link{float:right}.wpseo-kb-search-back-button:before{content:"\f141"}.wpseo-kb-search-ext-link:before{content:"\f504"}.dashicon-button:before{display:inline-block;font-family:dashicons;font-size:20px;line-height:1.35em;vertical-align:middle}.wpseo-kb-search-navigation{z-index:10;padding:1em 0}.kb-search-content-frame{width:100%;height:543px;background:url("data:image/svg+xml;charset=utf-8,Loading article...") no-repeat}.wpseo-kb-loader,.wpseo-kb-loader:after,.wpseo-kb-loader:before{width:2.5em;height:2.5em;border-radius:50%;animation:load7 1.8s infinite ease-in-out;animation-fill-mode:both}.wpseo-kb-loader{position:relative;margin:80px auto;font-size:10px;text-indent:-9999em;-ms-transform:translateZ(0);transform:translateZ(0);animation-delay:-.16s}.wpseo-kb-loader:before{left:-3.5em;animation-delay:-.32s}.wpseo-kb-loader:after{left:3.5em}.wpseo-kb-loader:after,.wpseo-kb-loader:before{position:absolute;top:0;content:""}.dashicons{text-decoration:none}@keyframes load7{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/kb-search-350.min.rapido.css b/wp-content/plugins/wordpress-seo/css/kb-search-350.min.rapido.css new file mode 100644 index 0000000..73d98c9 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/kb-search-350.min.rapido.css @@ -0,0 +1 @@ +.wpseo-kb-search-search-bar{padding-bottom:15px;border-bottom:1px solid #ccc}.wpseo-kb-search-search-bar input[type=text]{min-width:50%;height:28px;margin-right:3px}.wpseo-kb-search-results{overflow:auto;height:500px;margin:0;padding:0;list-style:none}.help-tab-content .wpseo-kb-search-results li{max-width:none;margin:0;list-style:none}.wpseo-kb-search-result{display:block;margin:0;padding-left:5px;border-bottom:1px solid #efefef;text-decoration:none}.wpseo-kb-search-result p{max-width:none;margin-top:0}.wpseo-kb-search-result-link{display:block;outline:0;text-decoration:none;cursor:pointer}.wpseo-kb-search-result-link:focus,.wpseo-kb-search-result-link:hover{background-color:rgba(93,12,55,0.5);box-shadow:none;text-decoration:underline}.wpseo-kb-search-result .wpseo-kb-search-result-title{margin:0;padding:14px 0}.wpseo-kb-search-ext-link{float:right}.wpseo-kb-search-back-button:before{content:"\f141"}.wpseo-kb-search-ext-link:before{content:"\f504"}.dashicon-button:before{display:inline-block;font-family:dashicons;font-size:20px;line-height:1.35em;vertical-align:middle}.wpseo-kb-search-navigation{z-index:10;padding:1em 0}.kb-search-content-frame{width:100%;height:543px;background:url("data:image/svg+xml;charset=utf-8,Loading article...") no-repeat}.wpseo-kb-loader,.wpseo-kb-loader:after,.wpseo-kb-loader:before{width:2.5em;height:2.5em;border-radius:50%;animation:load7 1.8s infinite ease-in-out;animation-fill-mode:both}.wpseo-kb-loader{position:relative;margin:80px auto;font-size:10px;text-indent:-9999em;-ms-transform:translateZ(0);transform:translateZ(0);animation-delay:-0.16s}.wpseo-kb-loader:before{left:-3.5em;animation-delay:-0.32s}.wpseo-kb-loader:after{left:3.5em}.wpseo-kb-loader:after,.wpseo-kb-loader:before{position:absolute;top:0;content:""}.dashicons{text-decoration:none}@keyframes load7{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em} 40%{box-shadow:0 2.5em 0 0}} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/metabox-400.min.css b/wp-content/plugins/wordpress-seo/css/metabox-400.min.css new file mode 100644 index 0000000..3cecb93 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/metabox-400.min.css @@ -0,0 +1 @@ +.snippet-editor__heading,.yoast-section__heading{font-family:"Open Sans",sans-serif}#meta_container,.assessment-results,.snippet_container:after,li.score:after{clear:both}.snippet_container:after,.snippet_container:before{display:table;content:" "}.snippet-editor__container{position:relative;cursor:pointer}.snippet-editor__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-size:.9rem;font-weight:300}.snippet-editor__heading-editor{border-top:1px solid #f7f7f7}.snippet-editor__heading-icon{padding-left:45px;background-repeat:no-repeat;background-position:left 20px top .6em;background-size:16px}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before,.snippet-editor__container:hover:before{position:absolute;left:-22px;width:24px;height:24px;background-size:25px;content:"";display:block;top:-3px}.snippet-editor__heading-icon-eye{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__preview{padding:0 20px 15px}.snippet-editor__button{padding:8px 10px;border:1px solid #dbdbdb;border-radius:4px;color:#555;background:#f7f7f7;font-size:.8rem;cursor:pointer}.snippet-editor__edit-button{display:block;margin-top:1em;padding-left:32px;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") left 8px top 50% no-repeat #f7f7f7;background-size:16px}.snippet-editor__form{padding:20px}.snippet-editor__label{display:block;position:relative;width:100%;margin-top:1em}.snippet-editor__label--focus:before,.snippet-editor__label--hover:before{left:-22px;width:24px;height:24px;background-size:25px;display:block;content:"";position:absolute}.snippet-editor__label:first-child{margin-top:0}.snippet-editor__label--hover:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__label--focus:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__input{display:block;box-sizing:border-box;width:100%;max-width:100%;margin-top:5px;border:1px solid #bfbfbf}.snippet-editor__input:focus{border:1px solid #1074a8;outline:0}.rtl .snippet-editor__container:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.rtl .snippet-editor__container--focus:before,.rtl .snippet-editor__container--focus:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.rtl .snippet-editor__label--hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.rtl .snippet-editor__label--focus:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.snippet-editor__meta-description{height:70px}.snippet-editor__submit{margin-top:1em}#snippet_cite{min-width:20px}#meta_container{min-height:20px}.snippet_container .title{display:block;overflow:hidden;width:600px;margin:0;color:#1e0fbe;font-size:18px;font-weight:400;line-height:1.2;white-space:nowrap;text-decoration:none;text-overflow:ellipsis}.snippet_container .desc,.snippet_container .url{font-size:13px;line-height:1.4}.snippet_container .url{display:inline-block;float:left;color:#006621;font-size:14px;font-style:normal;line-height:16px}.snippet_container .down_arrow{float:left;margin-top:6px;margin-left:5px;border-top:5px solid #006621;border-right:4px solid transparent;border-left:4px solid transparent}.snippet_container .desc-default{color:#545454}.snippet_container .desc-default strong{color:#6a6a6a}.snippet_container .desc-render{color:#777}.snippet_container .tooLong{color:red!important}.snippet-editor__field--invalid{color:red}.snippet-editor__progress{display:block;box-sizing:border-box;width:100%;height:8px;margin-top:5px;border:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.assessment-results__mark.icon-eye-active.yoast-tooltip::after,.assessment-results__mark.icon-eye-active.yoast-tooltip::before,.snippet-editor--hidden{display:none}.snippet-editor__progress::-webkit-progress-bar{height:8px;border:1px solid #bfbfbf;background-color:#f7f7f7}.snippet-editor__progress--fallback{height:8px;border:1px solid #bfbfbf;background-color:#f7f7f7}.snippet-editor__progress-bar{width:0;max-width:100%;height:100%}.snippet-editor__date{color:grey;font-size:13px;line-height:1.4}.snippet-editor__progress--bad[value]{color:#dc3232}.snippet-editor__progress--bad[value]::-webkit-progress-value{background-color:#dc3232;transition:width 250ms}.snippet-editor__progress--bad[value]::-moz-progress-bar{background-color:#dc3232}.snippet-editor__progress--bad[value] .snippet-editor__progress-bar{background-color:#dc3232}.snippet-editor__progress--ok[value]{color:#ee7c1b}.snippet-editor__progress--ok[value]::-webkit-progress-value{background-color:#ee7c1b;transition:width 250ms}.snippet-editor__progress--ok[value]::-moz-progress-bar{background-color:#ee7c1b}.snippet-editor__progress--ok[value] .snippet-editor__progress-bar{background-color:#ee7c1b}.snippet-editor__progress--good[value]{color:#7ad03a}.snippet-editor__progress--good[value]::-webkit-progress-value{background-color:#7ad03a;transition:width 250ms}.snippet-editor__progress--good[value]::-moz-progress-bar{background-color:#7ad03a}.snippet-editor__progress--good[value] .snippet-editor__progress-bar{background-color:#7ad03a}.wpseoanalysis{padding-right:0}.wpseo-score-text{float:left;width:86%;width:calc(100% - 56px)}.assessment-results .wpseo-score-icon{float:left;width:12px;height:12px;margin:3px 10px 0 0;border-radius:50%;background:#888}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#999}.wpseo-score-icon.noindex{background-color:#1e8cbe}li.score{margin-bottom:6px;list-style-type:none!important}li.score:after{display:table;content:""}.screen-reader-text{overflow:hidden;clip:rect(1px,1px,1px,1px);position:absolute!important;width:1px;height:1px}.assessment-results__mark.icon-eye-active,.assessment-results__mark.icon-eye-disabled,.assessment-results__mark.icon-eye-inactive{float:left;width:28px;height:28px;margin:-5px 3px 0;padding:4px;border:0;border-radius:100%;outline:0;background:center no-repeat;background-size:16px;cursor:pointer}.assessment-results__mark.icon-eye-inactive{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.assessment-results__mark.icon-eye-active{background-color:#a4286a;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23ffffff%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.assessment-results__mark.icon-eye-disabled{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23e6e6e6%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.assessment-results__mark-container{display:inline-block;float:right;width:33px;min-height:1px}.YoastSEO_msg .left,.YoastSEO_msg .right{display:none}@keyframes animatedBackground{from{background-position:0 0}to{background-position:100% 0}}.YoastSEO_msg .bufferbar{display:block;width:100%;height:12px;margin:10px 0;border:1px solid #dfdfdf;background-image:linear-gradient(to left,#fff,#0063ff,#fff,#0063ff);background-position:0 0;background-size:300% 100%;animation:animatedBackground 5s linear infinite}.yoast-tooltip{position:relative}button.yoast-tooltip{overflow:visible}.yoast-tooltip::after{display:none;position:absolute;z-index:1000000;padding:5px 8px;border-radius:3px;opacity:0;color:#fff;background:rgba(0,0,0,.8);text-shadow:none;font:normal normal 11px/1.5 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";text-align:center;white-space:pre;text-decoration:none;letter-spacing:normal;text-transform:none;word-wrap:break-word;content:attr(aria-label);pointer-events:none;-webkit-font-smoothing:subpixel-antialiased}.yoast-tooltip-alt::after{content:attr(data-label)}.yoast-tooltip::before{display:none;position:absolute;z-index:1000001;width:0;height:0;border:5px solid transparent;opacity:0;color:rgba(0,0,0,.8);content:"\00a0";pointer-events:none}@keyframes yoast-tooltip-appear{from{opacity:0}to{opacity:1}}.yoast-tooltip:active::after,.yoast-tooltip:active::before,.yoast-tooltip:focus::after,.yoast-tooltip:focus::before,.yoast-tooltip:hover::after,.yoast-tooltip:hover::before{display:inline-block;text-decoration:none;animation-name:yoast-tooltip-appear;animation-duration:.1s;animation-timing-function:ease-in;animation-delay:.4s;animation-fill-mode:forwards}.yoast-tooltip-no-delay:active::after,.yoast-tooltip-no-delay:active::before,.yoast-tooltip-no-delay:focus::after,.yoast-tooltip-no-delay:focus::before,.yoast-tooltip-no-delay:hover::after,.yoast-tooltip-no-delay:hover::before{opacity:1;animation:none}.yoast-tooltip-multiline:active::after,.yoast-tooltip-multiline:focus::after,.yoast-tooltip-multiline:hover::after{display:table-cell}.yoast-tooltip-s::after,.yoast-tooltip-se::after,.yoast-tooltip-sw::after{top:100%;right:50%;margin-top:5px}.yoast-tooltip-s::before,.yoast-tooltip-se::before,.yoast-tooltip-sw::before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,.8)}.yoast-tooltip-se::after{right:auto;left:50%;margin-left:-15px}.yoast-tooltip-sw::after{margin-right:-15px}.yoast-tooltip-n::after,.yoast-tooltip-ne::after,.yoast-tooltip-nw::after{right:50%;bottom:100%;margin-bottom:5px}.yoast-tooltip-n::before,.yoast-tooltip-ne::before,.yoast-tooltip-nw::before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,.8)}.yoast-tooltip-ne::after{right:auto;left:50%;margin-left:-15px}.yoast-tooltip-nw::after{margin-right:-15px}.yoast-tooltip-n::after,.yoast-tooltip-s::after{-ms-transform:translateX(50%);transform:translateX(50%)}.yoast-tooltip-w::after{right:100%;bottom:50%;margin-right:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-w::before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,.8)}.yoast-tooltip-e::after{bottom:50%;left:100%;margin-left:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-e::before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:rgba(0,0,0,.8)}.yoast-tooltip-multiline::after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;border-collapse:separate;white-space:pre-line;word-wrap:normal;word-break:break-word}.yoast-tooltip-multiline.yoast-tooltip-n::after,.yoast-tooltip-multiline.yoast-tooltip-s::after{right:auto;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%)}.yoast-tooltip-multiline.yoast-tooltip-e::after,.yoast-tooltip-multiline.yoast-tooltip-w::after{right:100%}@media screen and (min-width:0\0){.yoast-tooltip-multiline::after{width:250px}}.yoast-tooltip-sticky::after,.yoast-tooltip-sticky::before{display:inline-block}.yoast-tooltip-sticky.yoast-tooltip-multiline::after{display:table-cell}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (-moz-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.yoast-tooltip-w::after{margin-right:4.5px}}#wpcontent.yoast-help-center-open{overflow-x:hidden}.wpseo-tab-video-container{margin-bottom:20px;border-bottom:1px solid #a4286a}.wpseo-tab-video-container__handle{width:100%;margin:0;padding:10px;border:none;outline:0;color:#a4286a;background:0 0;line-height:19px;text-align:left;cursor:pointer}.wpseo-tab-video-container__handle .toggle__arrow{text-decoration:none}.wpseo-tab-video-container__handle:focus,.wpseo-tab-video-container__handle:hover{text-decoration:underline}.wpseo-tab-video-container__handle .dashicons-before:before{margin-right:5px}.wpseotab .wpseo-tab-video-container{margin-top:-15px}.wpseo-tab-video-slideout{display:none;min-height:320px;margin:0 -9999px -1px;padding:2em 9999px;background-color:#a4286a;box-shadow:inset 0 10px 10px -5px rgba(123,30,80,.5),inset 0 -10px 10px -5px rgba(123,30,80,.5);-ms-flex-wrap:wrap;flex-wrap:wrap}.wpseo-tab-video-slideout .contextual-help-tabs-wrap{padding:0;flex-basis:0;flex-grow:1;-ms-flex-negative:1;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-shrink:1}.wpseo-tab-video-slideout a{color:#fff}.wpseo-tab-video-slideout a.button,.wpseo-tab-video-slideout a.button-primary{text-decoration:none}.wpseo-tab-video-slideout h1,.wpseo-tab-video-slideout h2,.wpseo-tab-video-slideout h3,.wpseo-tab-video-slideout h4,.wpseo-tab-video-slideout h5,.wpseo-tab-video-slideout h6{margin-top:.5em;padding-top:0;color:#fff;font-weight:500}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea{float:left;min-width:234px;max-width:242px;margin:0 12px 1em 0;padding:15px 15px 5px;border:1px solid #fff;border-radius:30px 30px 0;color:#fff;background-color:#a4286a}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea h3,.wpseo-tab-video-slideout .yoast-help-center-tabs ul{margin:0}.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a,.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:focus,.wpseo-tab-video-slideout .wpseo-tab-video__panel__textarea a:hover{color:#fff;font-weight:500}.wpseo-tab-video-slideout .yoast-help-center-tabs{width:180px;padding:0 1em 1em 0;color:#fff;background-color:#a4286a;-ms-flex:0 0 auto;flex:0 0 auto}.wpseo-tab-video-slideout .help-tab-content{margin:0;color:#fff;font-weight:300}.wpseo-tab-video-slideout .wpseo-tab-video__panel--video{float:left;margin-right:1em;padding-bottom:1em;-ms-flex:0 0 auto;flex:0 0 auto}.wpseo-tab-video-slideout .wpseo-tab-video__panel--video iframe{vertical-align:middle}.wpseo-tab-video-slideout .wpseo-tab-video__panel--text{min-width:264px;margin:0 auto;flex-basis:0;flex-grow:1;-ms-flex-negative:1;-ms-flex-positive:1;-ms-flex-preferred-size:0;flex-shrink:1}.wpseo-tab-video-slideout .wpseo-tab-video__panel--text div:last-child{margin-right:0}.postbox .wpseo-tab-video-container{margin:-6px -12px 20px}.postbox .wpseo-tab-video-slideout{margin:0;padding:2em 12px 15px}.inside .wpseo-tab-video-slideout{height:auto}.wpseo-help-center-item{display:inline}.wpseo-help-center-item a{display:block;padding:10px 12px;color:#fff;text-decoration:none}.wpseo-help-center-item a:focus,.wpseo-help-center-item a:hover{text-decoration:underline}.wpseo-help-center-item a.dashicons-before:before{margin-right:3px;text-decoration:none}.wpseo-help-center-item.active a{color:#a4286a;background-color:#fff}.yoast-section{position:relative;width:640px;padding:0 20px 15px;border:1px solid #f7f7f7;border-radius:20px;background-color:#fff}.yoast-section__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-size:.9rem;font-weight:300}.yoast-section__heading-icon{padding-left:45px;background-repeat:no-repeat;background-position:left 20px top .6em;background-size:16px}.yoast-section__heading-icon-file-text-o{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20file%3D%22%23555%22%20d%3D%22M1596%20380q28%2028%2048%2076t20%2088v1152q0%2040%2D28%2068t%2D68%2028h%2D1344q%2D40%200%2D68%2D28t%2D28%2D68v%2D1600q0%2D40%2028%2D68t68%2D28h896q40%200%2088%2020t76%2048zm%2D444%2D244v376h376q%2D10%2D29%2D22%2D41l%2D313%2D313q%2D12%2D12%2D41%2D22zm384%201528v%2D1024h%2D416q%2D40%200%2D68%2D28t%2D28%2D68v%2D416h%2D768v1536h1280zm%2D1024%2D864q0%2D14%209%2D23t23%2D9h704q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64zm736%20224q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64q0%2D14%209%2D23t23%2D9h704zm0%20256q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64q0%2D14%209%2D23t23%2D9h704z%22%2F%3E%3C%2Fsvg%3E")}.yoast-section,.yoast-section *,.yoast-section :after,.yoast-section :before,.yoast-section:after,.yoast-section:before{box-sizing:border-box}#edittag>#wp-description-wrap{display:none}#wp-description-wrap .wp-editor-area{border:0}.term-description-wrap td>textarea#description{min-height:530px}ul.wpseo-metabox-tabs{display:none;margin-top:6px;margin-bottom:0}ul.wpseo-metabox-tabs:after{display:table;clear:both;content:""}.wpseo-metabox-tabs-div ul{list-style:none}ul.wpseo-metabox-tabs li.active{background-color:#fdfdfd}.wpseo-meta-section{display:none;width:100%;vertical-align:top}.wpseo-meta-section.active{display:table-cell}.wpseo-metabox-sidebar{display:table-cell;width:40px;padding:0 5px 0 0;background-color:#fff;vertical-align:top}.wpseo-metabox-sidebar li span{margin:3px 0 0 -5px;padding:0 2px 0 5px;border:0 solid transparent;border-left-width:3px;border-radius:3px}.wpseo-metabox-sidebar li span.wpseo-buy-premium{color:#a4286a}.wpseo-metabox-sidebar li span.wpseo-buy-premium:hover{color:#832055}.wpseo-metabox-sidebar li.active span{border-color:#333;color:#333}.wpseo-metabox-sidebar li.active span.wpseo-buy-premium{border-color:#a4286a;color:#a4286a}.wpseo-metabox-sidebar li.active span.wpseo-buy-premium:hover{border-color:#832055;color:#832055}ul.wpseo-metabox-tabs li{float:left;margin-right:5px;margin-bottom:-1px;padding:0;border:1px solid #dfdfdf;border-bottom:0 none}ul.wpseo-metabox-tabs li .wpseo-keyword{display:inline-block;overflow:hidden;max-width:8em;max-width:8rem;vertical-align:top;white-space:nowrap;text-overflow:ellipsis}.wpseotab.active{display:block;overflow:auto;padding:.5em .9em;border:1px solid #ddd;background-color:#fdfdfd}.wpseo-metabox-tabs .wpseo_tablink{display:inline-block;padding:5px 12px 6px;vertical-align:top;text-decoration:none}.wpseo-metabox-tabs .wpseo_content_tab a,.wpseo-metabox-tabs .wpseo_content_tab+.wpseo_keyword_tab a{padding-right:12px}.wpseo-metabox-tabs .wpseo-score-icon{margin-left:0}#wpseo-meta-section-social .wpseo-metabox-tabs .wpseo_tablink{padding:5px 7px}.wpseo-metabox-tabs .wpseo_tablink .dashicons{width:16px;height:16px;font-size:16px}.wpseo-metabox-sidebar .dashicons{width:30px;height:30px;font-size:30px}.wpseo-metabox-sidebar a{display:inline-block;width:35px;height:35px;font-size:20px;line-height:30px;text-decoration:none}.wpseo_hidden,.wpseotab{display:none}.wpseo-metabox-sidebar ul{margin:0}.wpseo-metabox-sidebar li{margin-bottom:0;padding:5px}.wpseo-metabox-tabs-div div.wpseo-tabs-panel{overflow:auto;padding:.5em .9em;border:1px solid}.wpseo-heading{padding-left:10px}#wpseo_meta .inside{overflow:auto;margin:6px 0 0}#wpseo_meta .postbox .inside .wpseotab{font-size:13px!important}#wpseo_meta .wpseo-tab-video-container h2{margin-bottom:20px;padding-left:0;border:0;font-size:1.3em}.inside .wpseotab .form-table th{width:140px!important;font-size:13px}.inside .wpseotab .form-table td{padding-top:20px}.inside .wpseotab .form-table label{vertical-align:top}.inside .wpseotab .form-table td input,.inside .wpseotab .form-table td select{margin-top:-5px}.inside .wpseotab .form-table #yoast_wpseo_focuskw_text_input,.inside .wpseotab .form-table #yoast_wpseo_metakeywords,.inside .wpseotab .form-table td select[multiple],.wpseotab .wpseoanalysis{margin-top:0}.wpseotab .wpseo_image_upload_button{margin-left:3px}.good,.warn,.wrong{font-weight:700}.good{color:green}.warn{color:maroon}.wrong{color:#dc3232}#current_seo_title span{padding:2px 5px;background-color:#ffffe0}#focuskwresults ul{margin:0}#focuskwresults li,#focuskwresults p{font-size:13px}#focuskwresults li{margin:0 0 0 20px;list-style-type:disc}table.wpseoanalysis th{padding:15px 0 5px;font-size:14px;text-align:left}table.wpseoanalysis th.first{padding-top:0}table.wpseoanalysis td{margin:5px 0;font-size:13px;line-height:16px}table.wpseoanalysis td.score{width:20px;height:18px;padding-left:10px}.wpseo_msg{margin:5px 0 10px;padding:0 5px;border:1px solid #e6db55;background-color:#ffffe0}ul.wpseo-metabox-tabs li.wpseo-tab-add-keyword{border:none}.wpseo-tab-add-keyword .wpseo-add-keyword.button{height:auto;margin-top:1px;padding:3px 6px;color:#000;background:0 0;font-size:14px;line-height:1;vertical-align:top;text-decoration:none;cursor:pointer}#wpseo-add-keyword-popup-title{margin:1em 0;font-size:1.3em}.snippet-editor__button.snippet-editor__edit-button:focus{border-color:#5b9dd9;outline:0;color:#23282d;background-color:#fafafa;box-shadow:0 0 3px rgba(0,115,170,.8)}.yoast_help.yoast-help-button{overflow:visible;position:relative;width:20px;height:20px;margin:0;padding:0;border:0;outline:0;color:#72777c;background:0 0;box-shadow:none;vertical-align:top;cursor:pointer}.wpseotab .yoast_help.yoast-help-button{float:right}.wpseotab.content .yoast_help.yoast-help-button{margin-top:-48px}.wpseo-admin-page .yoast_help.yoast-help-button{margin-right:6px}.yoast_help.yoast-help-button:before{position:absolute;top:0;left:0;padding:4px;content:"\f223"}.yoast_help.yoast-help-button:focus,.yoast_help.yoast-help-button:hover{color:#0073aa}.assessment-results__mark:focus,.yoast_help.yoast-help-button:focus:before{border-radius:100%;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-help-panel{display:none;max-width:30em!important;padding:0 0 1em;font-weight:400;white-space:normal}.wpseo-admin-page .subsubsub li{display:inline;max-width:none}.yoast-seo-help-container{float:left;width:100%;max-width:none}.yoast-seo-help-container .yoast-help-panel{margin:.5em 0!important}.wpseo_content_wrapper p.search-box{margin:10px 0 5px}.wpseo-metabox-tabs .active a{color:#333}#wpseotab .ui-widget-content .ui-state-hover{border:1px solid #dfdfdf;color:#333;background:#f1f1f1}.wpseo-taxonomy-form td,.wpseo-taxonomy-form th,.wpseo-taxonomy-form tr{vertical-align:top}.inside .wpseotab .form-table.wpseo-taxonomy-form th{width:200px!important}.yst-traffic-light-container{display:block;height:30px}.yst-traffic-light{width:19px;height:30px;margin:0 0 0 5px}.yst-traffic-light .traffic-light-color{display:none}.yst-traffic-light.bad .traffic-light-red,.yst-traffic-light.good .traffic-light-green,.yst-traffic-light.init .traffic-light-init,.yst-traffic-light.na .traffic-light-empty,.yst-traffic-light.ok .traffic-light-orange{display:inline}#wpseo-score{float:left;margin:0 5px 0 -5px}.yoast-seo-score .yoast-logo.svg{float:left;width:18px;height:18px;margin-right:5px;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23999%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E") no-repeat;background-size:18px}.yoast-seo-score .yoast-logo.svg.good{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%237ad03a%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E")}.yoast-seo-score .yoast-logo.svg.ok{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23ee7c1b%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E")}.yoast-seo-score .yoast-logo.svg.bad{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23dc3232%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E")}.yoast-seo-score .yoast-logo.svg.na{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23999%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E")}.yoast-seo-score .yoast-logo.svg.noindex{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231e8cbe%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E")}.term-php .wpseo-taxonomy-metabox-postbox h2{margin:0;padding:8px 12px;border-bottom:1px solid #eee;font-size:14px;line-height:1.4}.wpseo-buy-premium{padding-right:5px;color:#a4286a}.wpseo-metabox-go-to::after{position:static;top:auto;right:auto;width:auto;height:auto;border:none;content:" \00BB"}#wpseo-buy-premium-popup-button.button-buy-premium{border-color:#a4286a;color:#fff;background:#a4286a}.wpseo-metabox-buy-premium{position:absolute;top:6px;right:12px;vertical-align:middle}.wpseo-metabox-premium-description{margin-top:.5em}ul.wpseo-metabox-premium-advantages{padding-left:1.5em;list-style:disc}.yoast-section__heading-icon-list{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M384%201408q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm0%2D512q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm1408%20416v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5zm%2D1408%2D928q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm1408%20416v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5zm0%2D512v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5z%22%2F%3E%3C%2Fsvg%3E")}.yoast-section__heading-icon-key{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M832%20512q0%2D80%2D56%2D136t%2D136%2D56%2D136%2056%2D56%20136q0%2042%2019%2083%2D41%2D19%2D83%2D19%2D80%200%2D136%2056t%2D56%20136%2056%20136%20136%2056%20136%2D56%2056%2D136q0%2D42%2D19%2D83%2041%2019%2083%2019%2080%200%20136%2D56t56%2D136zm851%20704q0%2017%2D49%2066t%2D66%2049q%2D9%200%2D28%2E5%2D16t%2D36%2E5%2D33%2D38%2E5%2D40%2D24%2E5%2D26l%2D96%2096%20220%20220q28%2028%2028%2068%200%2042%2D39%2081t%2D81%2039q%2D40%200%2D68%2D28l%2D671%2D671q%2D176%20131%2D365%20131%2D163%200%2D265%2E5%2D102%2E5t%2D102%2E5%2D265%2E5q0%2D160%2095%2D313t248%2D248%20313%2D95q163%200%20265%2E5%20102%2E5t102%2E5%20265%2E5q0%20189%2D131%20365l355%20355%2096%2D96q%2D3%2D3%2D26%2D24%2E5t%2D40%2D38%2E5%2D33%2D36%2E5%2D16%2D28%2E5q0%2D17%2049%2D66t66%2D49q13%200%2023%2010%206%206%2046%2044%2E5t82%2079%2E5%2086%2E5%2086%2073%2078%2028%2E5%2041z%22%2F%3E%3C%2Fsvg%3E")}.yoast-section__heading-icon-edit{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E")}#snippet_preview{padding:0}.yoast-tooltip.yoast-tooltip-hidden::after,.yoast-tooltip.yoast-tooltip-hidden::before{display:none}.screen-reader-text.wpseo-generic-tab-textual-score,.screen-reader-text.wpseo-keyword-tab-textual-score{display:block}@media screen and (max-width:782px){.yoast-help-panel{max-width:none!important}#wpseo-crawl-issues-table-form .subsubsub{float:none;max-width:calc(100vw - 20px)}#wpseo-crawl-issues-table-form .yoast-help-button{margin-top:3px}} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/metabox-400.min.rapido.css b/wp-content/plugins/wordpress-seo/css/metabox-400.min.rapido.css new file mode 100644 index 0000000..3c5d0a9 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/metabox-400.min.rapido.css @@ -0,0 +1 @@ +.snippet-editor__heading,.yoast-section__heading{font-family:"Open Sans",sans-serif}#meta_container,.assessment-results,.snippet_container:after,li.score:after{clear:both}.snippet_container:after,.snippet_container:before{display:table;content:" "}.snippet-editor__container{position:relative;cursor:pointer}.snippet-editor__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-size:.9rem;font-weight:300}.snippet-editor__heading-editor{border-top:1px solid #f7f7f7}.snippet-editor__heading-icon{padding-left:45px;background-repeat:no-repeat;background-position:left 20px top .6em;background-size:16px}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before,.snippet-editor__container:hover:before{position:absolute;left:-22px;width:24px;height:24px;background-size:25px;content:"";display:block;top:-3px}.snippet-editor__heading-icon-eye{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__preview{padding:0 20px 15px}.snippet-editor__button{padding:8px 10px;border:1px solid #dbdbdb;border-radius:4px;color:#555;background:#f7f7f7;font-size:.8rem;cursor:pointer}.snippet-editor__edit-button{display:block;margin-top:1em;padding-left:32px;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") left 8px top 50% no-repeat #f7f7f7;background-size:16px}.snippet-editor__form{padding:20px}.snippet-editor__label{display:block;position:relative;width:100%;margin-top:1em}.snippet-editor__label--focus:before,.snippet-editor__label--hover:before{left:-22px;width:24px;height:24px;background-size:25px;display:block;content:"";position:absolute}.snippet-editor__label:first-child{margin-top:0}.snippet-editor__label--hover:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__label--focus:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__input{display:block;box-sizing:border-box;width:100%;max-width:100%;margin-top:5px;border:1px solid #bfbfbf}.snippet-editor__input:focus{border:1px solid #1074a8;outline:0}.rtl .snippet-editor__container:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.rtl .snippet-editor__container--focus:before,.rtl .snippet-editor__container--focus:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.rtl .snippet-editor__label--hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.rtl .snippet-editor__label--focus:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.snippet-editor__meta-description{height:70px}.snippet-editor__submit{margin-top:1em}#snippet_cite{min-width:20px}#meta_container{min-height:20px}.snippet_container .title{display:block;overflow:hidden;width:600px;margin:0;color:#1e0fbe;font-size:18px;font-weight:400;line-height:1.2;white-space:nowrap;text-decoration:none;text-overflow:ellipsis}.snippet_container .desc,.snippet_container .url{font-size:13px;line-height:1.4}.snippet_container .url{display:inline-block;float:left;color:#006621;font-size:14px;font-style:normal;line-height:16px}.snippet_container .down_arrow{float:left;margin-top:6px;margin-left:5px;border-top:5px solid #006621;border-right:4px solid transparent;border-left:4px solid transparent}.snippet_container .desc-default{color:#545454}.snippet_container .desc-default strong{color:#6a6a6a}.snippet_container .desc-render{color:#777}.snippet_container .tooLong{color:red !important}.snippet-editor__field--invalid{color:red}.snippet-editor__progress{display:block;box-sizing:border-box;width:100%;height:8px;margin-top:5px;border:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.assessment-results__mark.icon-eye-active.yoast-tooltip::after,.assessment-results__mark.icon-eye-active.yoast-tooltip::before,.snippet-editor--hidden{display:none}.snippet-editor__progress::-webkit-progress-bar{height:8px;border:1px solid #bfbfbf;background-color:#f7f7f7}.snippet-editor__progress--fallback{height:8px;border:1px solid #bfbfbf;background-color:#f7f7f7}.snippet-editor__progress-bar{width:0;max-width:100%;height:100%}.snippet-editor__date{color:grey;font-size:13px;line-height:1.4}.snippet-editor__progress--bad[value]{color:#dc3232}.snippet-editor__progress--bad[value]::-webkit-progress-value{background-color:#dc3232;transition:width 250ms}.snippet-editor__progress--bad[value]::-moz-progress-bar{background-color:#dc3232}.snippet-editor__progress--bad[value] .snippet-editor__progress-bar{background-color:#dc3232}.snippet-editor__progress--ok[value]{color:#ee7c1b}.snippet-editor__progress--ok[value]::-webkit-progress-value{background-color:#ee7c1b;transition:width 250ms}.snippet-editor__progress--ok[value]::-moz-progress-bar{background-color:#ee7c1b}.snippet-editor__progress--ok[value] .snippet-editor__progress-bar{background-color:#ee7c1b}.snippet-editor__progress--good[value]{color:#7ad03a}.snippet-editor__progress--good[value]::-webkit-progress-value{background-color:#7ad03a;transition:width 250ms}.snippet-editor__progress--good[value]::-moz-progress-bar{background-color:#7ad03a}.snippet-editor__progress--good[value] .snippet-editor__progress-bar{background-color:#7ad03a}.wpseoanalysis{padding-right:0}.wpseo-score-text{float:left;width:86%;width:calc(44%)}.assessment-results .wpseo-score-icon{float:left;width:12px;height:12px;margin:3px 10px 0 0;border-radius:50%;background:#888}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#999}.wpseo-score-icon.noindex{background-color:#1e8cbe}li.score{margin-bottom:6px;list-style-type:none !important}li.score:after{display:table;content:""}.screen-reader-text{overflow:hidden;clip:rect(1px,1px,1px,1px);position:absolute !important;width:1px;height:1px}.assessment-results__mark.icon-eye-active,.assessment-results__mark.icon-eye-disabled,.assessment-results__mark.icon-eye-inactive{float:left;width:28px;height:28px;margin:-5px 3px 0;padding:4px;border:0;border-radius:100%;outline:0;background:center no-repeat;background-size:16px;cursor:pointer}.assessment-results__mark.icon-eye-inactive{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.assessment-results__mark.icon-eye-active{background-color:#a4286a;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23ffffff%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.assessment-results__mark.icon-eye-disabled{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23e6e6e6%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.assessment-results__mark-container{display:inline-block;float:right;width:33px;min-height:1px}.YoastSEO_msg .left,.YoastSEO_msg .right{display:none}@keyframes animatedBackground{from{background-position:0 0} to{background-position:100% 0}}.YoastSEO_msg .bufferbar{display:block;width:100%;height:12px;margin:10px 0;border:1px solid #dfdfdf;background-image:linear-gradient(to left,#fff,#0063ff,#fff,#0063ff);background-position:0 0;background-size:300% 100%;animation:animatedBackground 5s linear infinite}.yoast-tooltip{position:relative}button.yoast-tooltip{overflow:visible}.yoast-tooltip::after{display:none;position:absolute;z-index:1000000;padding:5px 8px;border-radius:3px;opacity:0;color:#fff;background:rgba(0,0,0,0.8);text-shadow:none;font:normal normal 11px/1.5 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";text-align:center;white-space:pre;text-decoration:none;letter-spacing:normal;text-transform:none;word-wrap:break-word;content:attr(aria-label);pointer-events:none;-webkit-font-smoothing:subpixel-antialiased}.yoast-tooltip-alt::after{content:attr(data-label)}.yoast-tooltip::before{display:none;position:absolute;z-index:1000001;width:0;height:0;border:5px solid transparent;opacity:0;color:rgba(0,0,0,0.8);content:"\00a0";pointer-events:none}@keyframes yoast-tooltip-appear{from{opacity:0} to{opacity:1}}.yoast-tooltip:active::after,.yoast-tooltip:active::before,.yoast-tooltip:focus::after,.yoast-tooltip:focus::before,.yoast-tooltip:hover::after,.yoast-tooltip:hover::before{display:inline-block;text-decoration:none;animation-name:yoast-tooltip-appear;animation-duration:.1s;animation-timing-function:ease-in;animation-delay:.4s;animation-fill-mode:forwards}.yoast-tooltip-no-delay:active::after,.yoast-tooltip-no-delay:active::before,.yoast-tooltip-no-delay:focus::after,.yoast-tooltip-no-delay:focus::before,.yoast-tooltip-no-delay:hover::after,.yoast-tooltip-no-delay:hover::before{opacity:1;animation:none}.yoast-tooltip-multiline:active::after,.yoast-tooltip-multiline:focus::after,.yoast-tooltip-multiline:hover::after{display:table-cell}.yoast-tooltip-s::after,.yoast-tooltip-se::after,.yoast-tooltip-sw::after{top:100%;right:50%;margin-top:5px}.yoast-tooltip-s::before,.yoast-tooltip-se::before,.yoast-tooltip-sw::before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,0.8)}.yoast-tooltip-se::after{right:auto;left:50%;margin-left:-15px}.yoast-tooltip-sw::after{margin-right:-15px}.yoast-tooltip-n::after,.yoast-tooltip-ne::after,.yoast-tooltip-nw::after{right:50%;bottom:100%;margin-bottom:5px}.yoast-tooltip-n::before,.yoast-tooltip-ne::before,.yoast-tooltip-nw::before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,0.8)}.yoast-tooltip-ne::after{right:auto;left:50%;margin-left:-15px}.yoast-tooltip-nw::after{margin-right:-15px}.yoast-tooltip-n::after,.yoast-tooltip-s::after{-ms-transform:translateX(50%);transform:translateX(50%)}.yoast-tooltip-w::after{right:100%;bottom:50%;margin-right:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-w::before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,0.8)}.yoast-tooltip-e::after{bottom:50%;left:100%;margin-left:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-e::before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:rgba(0,0,0,0.8)}.yoast-tooltip-multiline::after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;border-collapse:separate;white-space:pre-line;word-wrap:normal;word-break:break-word}.yoast-tooltip-multiline.yoast-tooltip-n::after,.yoast-tooltip-multiline.yoast-tooltip-s::after{right:auto;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%)}.yoast-tooltip-multiline.yoast-tooltip-e::after,.yoast-tooltip-multiline.yoast-tooltip-w::after{right:100%} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/metabox-primary-category.min.css b/wp-content/plugins/wordpress-seo/css/metabox-primary-category.min.css new file mode 100644 index 0000000..d92f61e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/metabox-primary-category.min.css @@ -0,0 +1 @@ +.wpseo-is-primary-term,.wpseo-primary-term>label{font-weight:700}.wpseo-non-primary-term>.wpseo-is-primary-term,.wpseo-primary-term>.wpseo-make-primary-term,.wpseo-term-unchecked>.wpseo-is-primary-term,.wpseo-term-unchecked>.wpseo-make-primary-term{display:none}.wpseo-is-primary-term,.wpseo-make-primary-term{float:right}.wpseo-non-primary-term:after,.wpseo-non-primary-term:before,.wpseo-primary-term:after,.wpseo-primary-term:before{display:table;content:""}.wpseo-non-primary-term:after,.wpseo-primary-term:after{clear:both}.wpseo-make-primary-term{margin:4px 0 0;padding:0;border:none;color:#0073aa;background:0 0;text-decoration:underline;cursor:pointer}.wpseo-make-primary-term:hover{color:#00a0d2} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/snippet-330.min.css b/wp-content/plugins/wordpress-seo/css/snippet-330.min.css new file mode 100644 index 0000000..88b04b8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/snippet-330.min.css @@ -0,0 +1 @@ +#snippet_preview{margin:-11px 0 10px;font-family:Arial,Helvetica,sans-serif;font-style:normal}.form-table td .snippet-editor__label{font-size:1rem;line-height:1}.form-table td textarea{margin-top:5px}.wp-core-ui .button.snippet-editor__submit{margin-top:1em}.inside .wpseotab .form-table td input.snippet-editor__input{margin-top:5px}input[type=text].snippet-editor__field--invalid{color:#dc3232} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/taxonomy-meta.min.css b/wp-content/plugins/wordpress-seo/css/taxonomy-meta.min.css new file mode 100644 index 0000000..6fd0c5c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/taxonomy-meta.min.css @@ -0,0 +1 @@ +.wpseo-taxonomy-form td,.wpseo-taxonomy-form th,.wpseo-taxonomy-form tr{vertical-align:top} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/toggle-switch-390.min.css b/wp-content/plugins/wordpress-seo/css/toggle-switch-390.min.css new file mode 100644 index 0000000..33293ce --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/toggle-switch-390.min.css @@ -0,0 +1 @@ +@charset "UTF-8";.switch-light span span,.switch-toggle a{display:none}@media only screen{.switch-light,.switch-toggle{display:block;position:relative;padding:0!important}.switch-light::after,.switch-toggle::after{display:table;clear:both;content:""}.switch-light *,.switch-light :after,.switch-light :before,.switch-toggle *,.switch-toggle :after,.switch-toggle :before{box-sizing:border-box}.switch-light a,.switch-toggle a{display:block;transition:all .2s ease-out}.switch-light label,.switch-light>span,.switch-toggle label,.switch-toggle>span{line-height:2em;vertical-align:middle}.switch-light input{position:absolute;z-index:3;opacity:0}.switch-light input:checked~span a{right:0}.switch-light strong{font-weight:inherit}.switch-light>span{position:relative;min-height:2em;padding:0;text-align:left}.switch-light span span{display:block;float:left;position:relative;z-index:2;width:50%;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch-light a{display:block;position:absolute;z-index:1;top:0;right:50%;width:50%;height:100%;padding:0}.switch-toggle input{position:absolute;left:0;opacity:0}.switch-toggle input+label{display:block;float:left;position:relative;z-index:2;margin:0;padding:0 .5em;text-align:center}.switch-toggle a{position:absolute;z-index:1;top:0;left:0;width:10px;height:100%;padding:0}.switch-toggle label:nth-child(2):nth-last-child(4),.switch-toggle label:nth-child(2):nth-last-child(4)~a,.switch-toggle label:nth-child(2):nth-last-child(4)~label{width:50%}.switch-toggle label:nth-child(2):nth-last-child(4)~input:checked:nth-child(3)+label~a{left:50%}.switch-toggle label:nth-child(2):nth-last-child(6),.switch-toggle label:nth-child(2):nth-last-child(6)~a,.switch-toggle label:nth-child(2):nth-last-child(6)~label{width:33.33%}.switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(3)+label~a{left:33.33%}.switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(5)+label~a{left:66.66%}.switch-toggle label:nth-child(2):nth-last-child(8),.switch-toggle label:nth-child(2):nth-last-child(8)~a,.switch-toggle label:nth-child(2):nth-last-child(8)~label{width:25%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(3)+label~a{left:25%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(5)+label~a{left:50%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(7)+label~a{left:75%}.switch-toggle label:nth-child(2):nth-last-child(10),.switch-toggle label:nth-child(2):nth-last-child(10)~a,.switch-toggle label:nth-child(2):nth-last-child(10)~label{width:20%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(3)+label~a{left:20%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(5)+label~a{left:40%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(7)+label~a{left:60%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(9)+label~a{left:80%}.switch-toggle label:nth-child(2):nth-last-child(12),.switch-toggle label:nth-child(2):nth-last-child(12)~a,.switch-toggle label:nth-child(2):nth-last-child(12)~label{width:16.6%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(3)+label~a{left:16.6%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(5)+label~a{left:33.2%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(7)+label~a{left:49.8%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(9)+label~a{left:66.4%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(11)+label~a{left:83%}.switch-candy a{box-shadow:0 1px 1px rgba(0,0,0,.2),inset 0 1px 1px rgba(255,255,255,.45)}}@media only screen and (-webkit-max-device-pixel-ratio:2) and (max-device-width:80em){.switch-light,.switch-toggle{-webkit-animation:webkitSiblingBugfix infinite 1s}}.fieldset-switch-toggle label{float:none}@media only screen{.switch-light.switch-yoast-seo{margin-bottom:.2em}.fieldset-switch-toggle legend,.switch-light.switch-yoast-seo>strong{display:block;box-sizing:border-box;min-width:200px;margin-top:10px;padding-right:1em;font-weight:700;line-height:2em;vertical-align:middle}.switch-light.switch-yoast-seo>span,.switch-toggle.switch-yoast-seo{width:250px;border:1px solid #ccc;border-radius:.5em;background-color:#dcdcdc;box-shadow:inset 0 2px 4px rgba(0,0,0,.15)}.switch-toggle.switch-yoast-seo{float:left}.switch-light.switch-yoast-seo>span{display:inline-block;overflow:visible}.switch-light.switch-yoast-seo a,.switch-toggle.switch-yoast-seo a{border:1px solid #b5b5b5;border-radius:.5em;background:#a4286a}.switch-light.switch-yoast-seo input:focus+label,.switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus+label,.switch-toggle.switch-yoast-seo input:focus~span a{outline:0}.switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus~a{border-color:#5b9dd9!important;box-shadow:0 0 2px rgba(0,115,170,.8)!important}.switch-light.switch-yoast-seo input:checked~span a,.switch-toggle.switch-yoast-seo input:checked~span a{border:1px solid #b5b5b5;background:#a4286a}.switch-light.switch-yoast-seo input:checked~span span:first-child,.switch-light.switch-yoast-seo span span,.switch-toggle.switch-yoast-seo label{color:#333;text-shadow:none;font-weight:inherit}.switch-candy.switch-yoast-seo input:checked+label,.switch-candy.switch-yoast-seo input:checked~span span:nth-child(2),.switch-candy.switch-yoast-seo input~span span:first-child{color:#fff;text-shadow:none}.switch-light.switch-yoast-seo-reverse input:checked~span a{left:0}.switch-light.switch-yoast-seo-reverse a{left:50%}.switch-light.switch-yoast-seo-reverse span span{float:right}.switch-toggle.switch-yoast-seo label,label.switch-light.switch-yoast-seo{margin-left:0;cursor:pointer}.switch-yoast-seo .switch-yoast-seo-jaws-a11y{display:block;overflow:hidden;height:1px;margin-bottom:-1px}.switch-light.switch-yoast-seo label code,.switch-toggle.switch-yoast-seo label code{background-color:inherit;vertical-align:top}.switch-container .label-text{display:block;margin:.5em 0;font-weight:600}.switch-container{clear:both;margin:0 0 1em}.switch-container+.switch-container{margin-top:.5em}.switch-container+p{margin:-.5em 0 1em}} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/toggle-switch-390.min.rapido.css b/wp-content/plugins/wordpress-seo/css/toggle-switch-390.min.rapido.css new file mode 100644 index 0000000..ff1e65f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/toggle-switch-390.min.rapido.css @@ -0,0 +1 @@ +@charset "UTF-8";.switch-light span span,.switch-toggle a{display:none}@media only screen{.switch-light,.switch-toggle{display:block;position:relative;padding:0 !important} .switch-light::after,.switch-toggle::after{display:table;clear:both;content:""} .switch-light *,.switch-light :after,.switch-light :before,.switch-toggle *,.switch-toggle :after,.switch-toggle :before{box-sizing:border-box} .switch-light a,.switch-toggle a{display:block;transition:all .2s ease-out} .switch-light label,.switch-light>span,.switch-toggle label,.switch-toggle>span{line-height:2em;vertical-align:middle} .switch-light input{position:absolute;z-index:3;opacity:0} .switch-light input:checked~span a{right:0} .switch-light strong{font-weight:inherit} .switch-light>span{position:relative;min-height:2em;padding:0;text-align:left} .switch-light span span{display:block;float:left;position:relative;z-index:2;width:50%;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} .switch-light a{display:block;position:absolute;z-index:1;top:0;right:50%;width:50%;height:100%;padding:0} .switch-toggle input{position:absolute;left:0;opacity:0} .switch-toggle input+label{display:block;float:left;position:relative;z-index:2;margin:0;padding:0 .5em;text-align:center} .switch-toggle a{position:absolute;z-index:1;top:0;left:0;width:10px;height:100%;padding:0} .switch-toggle label:nth-child(2):nth-last-child(4),.switch-toggle label:nth-child(2):nth-last-child(4)~a,.switch-toggle label:nth-child(2):nth-last-child(4)~label{width:50%} .switch-toggle label:nth-child(2):nth-last-child(4)~input:checked:nth-child(3)+label~a{left:50%} .switch-toggle label:nth-child(2):nth-last-child(6),.switch-toggle label:nth-child(2):nth-last-child(6)~a,.switch-toggle label:nth-child(2):nth-last-child(6)~label{width:33.33%} .switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(3)+label~a{left:33.33%} .switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(5)+label~a{left:66.66%} .switch-toggle label:nth-child(2):nth-last-child(8),.switch-toggle label:nth-child(2):nth-last-child(8)~a,.switch-toggle label:nth-child(2):nth-last-child(8)~label{width:25%} .switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(3)+label~a{left:25%} .switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(5)+label~a{left:50%} .switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(7)+label~a{left:75%} .switch-toggle label:nth-child(2):nth-last-child(10),.switch-toggle label:nth-child(2):nth-last-child(10)~a,.switch-toggle label:nth-child(2):nth-last-child(10)~label{width:20%} .switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(3)+label~a{left:20%} .switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(5)+label~a{left:40%} .switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(7)+label~a{left:60%} .switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(9)+label~a{left:80%} .switch-toggle label:nth-child(2):nth-last-child(12),.switch-toggle label:nth-child(2):nth-last-child(12)~a,.switch-toggle label:nth-child(2):nth-last-child(12)~label{width:16.6%} .switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(3)+label~a{left:16.6%} .switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(5)+label~a{left:33.2%} .switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(7)+label~a{left:49.8%} .switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(9)+label~a{left:66.4%} .switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(11)+label~a{left:83%} .switch-candy a{box-shadow:0 1px 1px rgba(0,0,0,0.2),inset 0 1px 1px rgba(255,255,255,0.45)}}@media only screen and (-webkit-max-device-pixel-ratio:2) and (max-device-width:80em){.switch-light,.switch-toggle{-webkit-animation:webkitSiblingBugfix infinite 1s}}.fieldset-switch-toggle label{float:none}@media only screen{.switch-light.switch-yoast-seo{margin-bottom:.2em} .fieldset-switch-toggle legend,.switch-light.switch-yoast-seo>strong{display:block;box-sizing:border-box;min-width:200px;margin-top:10px;padding-right:1em;font-weight:700;line-height:2em;vertical-align:middle} .switch-light.switch-yoast-seo>span,.switch-toggle.switch-yoast-seo{width:250px;border:1px solid #ccc;border-radius:.5em;background-color:#dcdcdc;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)} .switch-toggle.switch-yoast-seo{float:left} .switch-light.switch-yoast-seo>span{display:inline-block;overflow:visible} .switch-light.switch-yoast-seo a,.switch-toggle.switch-yoast-seo a{border:1px solid #b5b5b5;border-radius:.5em;background:#a4286a} .switch-light.switch-yoast-seo input:focus+label,.switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus+label,.switch-toggle.switch-yoast-seo input:focus~span a{outline:0} .switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus~a{border-color:#5b9dd9 !important;box-shadow:0 0 2px rgba(0,115,170,0.8) !important} .switch-light.switch-yoast-seo input:checked~span a,.switch-toggle.switch-yoast-seo input:checked~span a{border:1px solid #b5b5b5;background:#a4286a} .switch-light.switch-yoast-seo input:checked~span span:first-child,.switch-light.switch-yoast-seo span span,.switch-toggle.switch-yoast-seo label{color:#333;text-shadow:none;font-weight:inherit} .switch-candy.switch-yoast-seo input:checked+label,.switch-candy.switch-yoast-seo input:checked~span span:nth-child(2),.switch-candy.switch-yoast-seo input~span span:first-child{color:#fff;text-shadow:none} .switch-light.switch-yoast-seo-reverse input:checked~span a{left:0} .switch-light.switch-yoast-seo-reverse a{left:50%} .switch-light.switch-yoast-seo-reverse span span{float:right} .switch-toggle.switch-yoast-seo label,label.switch-light.switch-yoast-seo{margin-left:0;cursor:pointer} .switch-yoast-seo .switch-yoast-seo-jaws-a11y{display:block;overflow:hidden;height:1px;margin-bottom:-1px} .switch-light.switch-yoast-seo label code,.switch-toggle.switch-yoast-seo label code{background-color:inherit;vertical-align:top} .switch-container .label-text{display:block;margin:.5em 0;font-weight:600} .switch-container{clear:both;margin:0 0 1em} .switch-container+.switch-container{margin-top:.5em} .switch-container+p{margin:-0.5em 0 1em}} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/wpseo-dismissible-350.min.css b/wp-content/plugins/wordpress-seo/css/wpseo-dismissible-350.min.css new file mode 100644 index 0000000..f90fda1 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/wpseo-dismissible-350.min.css @@ -0,0 +1 @@ +.yoast-notice-dismiss{position:absolute;top:0;right:1px;margin:0;padding:9px;border:none;color:#b4b9be;background:0 0;cursor:pointer;text-decoration:none}.yoast-notice-dismiss:before{display:block!important;width:20px;height:20px;color:#b4b9be;background:0 0;font:400 16px/1 dashicons;text-align:center;content:"\f153";-webkit-font-smoothing:antialiased!important;speak:none;position:relative;top:0;left:0;line-height:20px}.yoast-notice-dismiss:active:before,.yoast-notice-dismiss:focus:before,.yoast-notice-dismiss:hover:before{color:#c00}.yoast-notice-dismiss:focus{outline:0;color:#c00;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 .yoast-notice-dismiss:focus{outline:#5b9dd9 solid 1px}.yoast-notice.is-dismissible{position:relative} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/wpseo-dismissible-350.min.rapido.css b/wp-content/plugins/wordpress-seo/css/wpseo-dismissible-350.min.rapido.css new file mode 100644 index 0000000..8d6e5a8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/wpseo-dismissible-350.min.rapido.css @@ -0,0 +1 @@ +.yoast-notice-dismiss{position:absolute;top:0;right:1px;margin:0;padding:9px;border:none;color:#b4b9be;background:0 0;cursor:pointer;text-decoration:none}.yoast-notice-dismiss:before{display:block !important;width:20px;height:20px;color:#b4b9be;background:0 0;font:400 16px/1 dashicons;text-align:center;content:"\f153";-webkit-font-smoothing:antialiased !important;speak:none;position:relative;top:0;left:0;line-height:20px}.yoast-notice-dismiss:active:before,.yoast-notice-dismiss:focus:before,.yoast-notice-dismiss:hover:before{color:#c00}.yoast-notice-dismiss:focus{outline:0;color:#c00;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8)}.ie8 .yoast-notice-dismiss:focus{outline:#5b9dd9 solid 1px}.yoast-notice.is-dismissible{position:relative} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/xml-sitemap-xsl.php b/wp-content/plugins/wordpress-seo/css/xml-sitemap-xsl.php new file mode 100644 index 0000000..354466a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/xml-sitemap-xsl.php @@ -0,0 +1,173 @@ +'; +?> + + + + + + XML Sitemap + + + + +
    +

    XML Sitemap

    +

    + Generated by Yoast SEO, this is an XML Sitemap, meant for consumption by search engines.
    + You can find more information about XML sitemaps on sitemaps.org. +

    + +

    + This XML Sitemap Index file contains sitemaps. +

    + + + + + + + + + + + + + + + + + + +
    SitemapLast Modified
    + + + +
    +
    + +

    + This XML Sitemap contains URLs. +

    +

    ↑ Sitemap Index

    + + + + + + + + + + + + + + + + + + + +
    URLImagesLast Mod.
    + + + + + + + + + + +
    +
    +
    + + + + + +
    +
    div>span,.yoast-wizard--button__previous button:hover>div>span{color:#000!important}.yoast-wizard--step__active svg{color:#5d237a;fill:#5d237a}.yoast-wizard--step__inactive div{pointer-events:none}.yoast-wizard--step--container h1{margin-top:0;margin-bottom:1rem;color:#a4286a;font-size:2.75em;font-weight:300;line-height:3.68rem;letter-spacing:normal}@media screen and (max-width:768px){.yoast-wizard{padding:1em 1em 2em}.yoast-wizard--step__active{overflow:hidden;width:38px}.yoast-wizard--step__active div{display:inline-block!important;vertical-align:middle}.yoast-wizard--step__active div>span>span{display:block!important;margin-left:-7px;padding-right:99px!important}.yoast-wizard--step__inactive{display:none!important}.yoast-wizard--step--container h1{font-size:2em;line-height:1.25}}.yoast-wizard--step--container h2{color:#a4286a;font-size:1.375em;font-weight:400}.yoast-wizard--stepper{width:100%;margin:auto}.yoast-wizard-overlay{position:absolute;z-index:10;top:0;left:0;width:100%;height:100%;opacity:.2;color:#fff;background-color:#000;text-align:center}.yoast-wizard-overlay-loader{position:relative}.yoast-wizard-container{position:relative;min-height:20px;border:1px solid #ccc;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.2) 0 3px 10px;text-align:left}@media screen and (max-width:768px){.yoast-wizard-container{box-shadow:none}}.yoast-wizard-container fieldset{margin:1em 0;padding-left:.5em;border:0}.yoast-wizard-text-input{padding-bottom:.5em;font-size:14px}.yoast-wizard-text-input-label{display:block;margin:.5em 0 0;font-weight:700;cursor:pointer}.yoast-wizard-text-input [type=text]{box-sizing:border-box;width:100%;max-width:450px}.yoast-wizard-field-description{font-weight:700}.yoast-wizard input{margin:.5em 0;padding:5px;font-size:14px;line-height:140%}.yoast-wizard label{cursor:pointer}.yoast-wizard input[type=radio]{margin:.3em .7em .3em 0;vertical-align:middle}.yoast-wizard-input__explanation{margin-top:0;color:#555;font-style:italic}.yoast-wizard-input-radio{font-size:14px}.yoast-wizard-input-radio-option label{padding-top:2px}.yoast-wizard-input-radio-separator{padding:0}.yoast-wizard-input-radio-separator input{position:absolute;left:-9999em;width:1px;height:1px}.yoast-wizard-input-radio-separator input+label{float:left;width:30px!important;margin:0 5px 5px 0!important;padding:9px 6px;border:1px solid #ccc;font-family:Arial,Helvetica,sans-serif!important;font-size:18px!important;line-height:24px;text-align:center;cursor:pointer}.yoast-wizard-input-radio-separator input:checked+label{border:1px solid #a4286a;background-color:#fff;box-shadow:inset 0 0 0 2px #a4286a}.yoast-wizard-input-radio-separator input:checked+label,.yoast-wizard-input-radio-separator input:focus+label{border-radius:10px 10px 0}.yoast-video-container-max-width{max-width:560px}.yoast-video-container{overflow:hidden;position:relative;height:0;padding-bottom:56.25%}.yoast-video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.yoast-wizard-notice__error{margin-bottom:15px;padding:12px;border-left:4px solid #dc3232;background:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@keyframes heartbeat{0%{opacity:.4;transform:scale(.7)}80%{opacity:1}100%{opacity:1;transform:scale(.95)}}.yoast-loader{animation:heartbeat 1.15s infinite;animation-timing-function:cubic-bezier(.96,.02,.63,.86);animation-direction:alternate}.yoast-wizard-return-link{display:block;margin:1em 0;color:#646d78;text-align:center}.yoast-wizard-mailchimp-message-error{color:#dc3232}.yoast-wizard-mailchimp-message-success{color:#008a00}.yoast-wizard-input{padding-bottom:.5em}.yoast-wizard-input__select{margin:1em 0;font-size:14px}.yoast-wizard-image-upload-container__image{max-width:151px}.yoast-wizard-image-upload-container-buttons{margin-top:1em}.yoast-wizard-image-upload-container-buttons__remove{margin-left:1em}.yoast-wizard-image-upload-container-description{display:block}.ie9 .yoast-wizard--stepper{display:none} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/yoast-extensions-390.min.css b/wp-content/plugins/wordpress-seo/css/yoast-extensions-390.min.css new file mode 100644 index 0000000..cb21601 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/yoast-extensions-390.min.css @@ -0,0 +1 @@ +@charset "UTF-8";.yoast-list--usp{margin-bottom:1em;padding:0;font-family:"Open Sans",Arial,sans-serif}.yoast-list--usp li{position:relative;padding-left:1.2533333333rem;list-style:none!important}.yoast-list--usp li::before{position:absolute;top:0;left:0;color:#77b227;font-family:FontAwesome,"Open Sans",Arial,sans-serif;content:"\f00c\0020"}.yoast .h1,.yoast .h2,.yoast .h3,.yoast .h4,.yoast .h5,.yoast .h6,.yoast h1,.yoast h2,.yoast h3,.yoast h4,.yoast h5,.yoast h6{display:block;margin-top:0;font-family:"Open Sans",Arial,sans-serif;font-weight:300}.yoast .h1,.yoast h1{margin-bottom:1.35rem;font-size:2.5em;line-height:3.68rem;letter-spacing:normal}@media only screen and (min-width:30rem){.yoast .h1,.yoast h1{font-size:2.75em}}.yoast .h2,.yoast h2{margin-bottom:1.2rem;font-size:1.88em;line-height:2.5rem}.yoast .h2.tight,.yoast h2.tight{margin-bottom:.6rem}.yoast .h3,.yoast h3{margin-bottom:.8rem;font-size:1.25em;line-height:1.88rem}.yoast .h3.tight,.yoast h3.tight{margin-bottom:.4rem}@media only screen and (min-width:30rem){.yoast .h3,.yoast h3{font-size:1.375em}}@media only screen and (min-width:50rem){.yoast .h3,.yoast h3{font-size:1.5em}}.yoast .h4,.yoast .h5,.yoast .h6,.yoast h4,.yoast h5,.yoast h6{margin-bottom:.2rem;font-size:1.13em;font-weight:400;line-height:1.88rem}.yoast-button{display:inline-block;position:relative;width:100%;padding:.345em 1.5em .345em 1em;border:0;color:#dc5c04;background-color:#dc5c04;font-family:"Open Sans",Arial,sans-serif;font-size:1.1em;text-decoration:none;cursor:pointer}@media only screen and (min-width:30rem){.yoast-button{width:auto;max-height:2.86rem;margin-right:1.36rem}.yoast-button.left::before,.yoast-button::after{position:absolute;top:0;width:0;height:0;border-top:1.43rem solid transparent;border-bottom:1.44rem solid transparent}.yoast-button::after{right:-1.36rem;border-right:0;border-left:1.43rem solid #dc5c04;content:""}.yoast-button.left{margin-right:0;margin-left:1.36rem}.yoast-button.left::after{content:none}.yoast-button.left::before{left:-1.36rem;border-right:1.43rem solid #dc5c04;border-left:0;content:""}}.yoast-button--full::after,.yoast-button--naked::after,.yoast-button--noarrow::after{content:none}.yoast-button.alignleft{margin:1rem 2.5rem 0 0!important}.yoast-button .arrow{display:none}.yoast-button+.yoast-button{margin-top:1em;margin-left:1.88rem}.yoast-button--full{width:100%}.yoast-button.default{color:#fff;background-color:#dc5c04}.yoast-button.default::after{border-left-color:#dc5c04}.yoast-button.default::before{border-right-color:#dc5c04}.yoast-button a:focus,.yoast-button:hover{color:#fff;background-color:#f58223;text-decoration:underline}.yoast-button a:focus::after,.yoast-button:hover::after{border-left-color:#f58223}.yoast-button a:focus::before,.yoast-button:hover::before{border-right-color:#f58223}.yoast-button.academy{color:#fff;background-color:#5d237a}.yoast-button.academy::after{border-left-color:#5d237a}.yoast-button.academy::before{border-right-color:#5d237a}@media only screen and (max-width:20rem){.yoast-button.academy{background-color:#5d237a}.yoast-button.academy--secondary{background-color:#a4286a}}.yoast-button.academy--secondary{color:#fff;background-color:#a4286a}.yoast-button.academy--secondary::after{border-left-color:#a4286a}.yoast-button.academy--secondary::before{border-right-color:#a4286a}.yoast-button.software{color:#fff;background-color:#0075b3}.yoast-button.software::after{border-left-color:#0075b3}.yoast-button.software::before{border-right-color:#0075b3}.yoast-button.review{color:#fff;background-color:#009288}.yoast-button.about,.yoast_academy .yoast-button{background-color:#d93f69;color:#fff}.yoast-button.review::after{border-left-color:#009288}.yoast-button.about::after,.yoast_academy .yoast-button::after{border-left-color:#d93f69}.yoast-button.review::before{border-right-color:#009288}.yoast-button.about::before,.yoast_academy .yoast-button::before{border-right-color:#d93f69}.yoast_academy .yoast-button a:focus,.yoast_academy .yoast-button:hover{color:#fff;background-color:#d42a59;text-decoration:underline}.yoast_academy .yoast-button a:focus::after,.yoast_academy .yoast-button:hover::after{border-left-color:#d42a59}.yoast_academy .yoast-button a:focus::before,.yoast_academy .yoast-button:hover::before{border-right-color:#d42a59}.yoast_academy .yoast-button.dimmed,body .yoast-button.dimmed{color:#646464;background-color:#dcdcdc}.yoast_academy .yoast-button.dimmed::after,body .yoast-button.dimmed::after{border-left-color:#dcdcdc}.yoast_academy .yoast-button.dimmed::before,body .yoast-button.dimmed::before{border-right-color:#dcdcdc}.yoast_academy .yoast-button.dimmed a:focus,.yoast_academy .yoast-button.dimmed:hover,body .yoast-button.dimmed a:focus,body .yoast-button.dimmed:hover{color:#646464;background-color:#cdcdcd;text-decoration:underline}.yoast_academy .yoast-button.dimmed a:focus::after,.yoast_academy .yoast-button.dimmed:hover::after,body .yoast-button.dimmed a:focus::after,body .yoast-button.dimmed:hover::after{border-left-color:#cdcdcd}.yoast_academy .yoast-button.dimmed a:focus:before,.yoast_academy .yoast-button.dimmed:hover:before,body .yoast-button.dimmed a:focus:before,body .yoast-button.dimmed:hover:before{border-right-color:#cdcdcd}.yoast-button--naked{padding:0;border:none;background-color:transparent}.yoast-button i.fa{margin:4px 10px 0 0;font-size:140%}.theme-academy .yoast-promoblock{border-color:#5d237a}.theme-academy--secondary .yoast-promoblock{border-color:#a4286a}.theme-software .yoast-promoblock{border-color:#0075b3}.theme-review .yoast-promoblock{border-color:#009288}.theme-about .yoast-promoblock,.theme-home .yoast-promoblock{border-color:#d93f69}.theme-academy.yoast-promoblock{border-color:#5d237a}.theme-academy--secondary.yoast-promoblock{border-color:#a4286a}.theme-software.yoast-promoblock{border-color:#0075b3}.theme-review.yoast-promoblock,.theme-software--secondary.yoast-promoblock{border-color:#009288}.theme-review--secondary.yoast-promoblock{border-color:#77b227}.theme-about.yoast-promoblock{border-color:#d93f69}.theme-about--secondary.yoast-promoblock{border-color:#a4286a}.cta.yoast-promoblock,.link.yoast-promoblock{border-color:#dc5c04}.link.yoast-promoblock::after{-moz-filter:drop-shadow(1px 0 0 #dc5c04);-ms-filter:drop-shadow(1px 0 0 #dc5c04);-o-filter:drop-shadow(1px 0 0 #dc5c04);filter:drop-shadow(1px 0 0 #dc5c04)}.cta.yoast-promoblock::after{-moz-filter:drop-shadow(1px 0 0 #dc5c04);-ms-filter:drop-shadow(1px 0 0 #dc5c04);-o-filter:drop-shadow(1px 0 0 #dc5c04);filter:drop-shadow(1px 0 0 #dc5c04)}.yoast-promoblock{display:block;position:relative;margin-bottom:1.88rem;padding:20px;border:1px solid;border-radius:30px 30px 0;background-color:#fff;font-family:Merriweather,Georgia,serif}.yoast-promoblock p{color:#000}.yoast-promoblock p:last-of-type{margin-bottom:0}.yoast-promoblock i.blockicon{position:absolute;right:10px;bottom:10px;padding:0 0 0 .5em;font-size:2.25em}.yoast-promoblock a img{border:1px solid #dcdcdc}.yoast-promoblock p a{font-weight:600!important;text-decoration:underline}.yoast-promoblock form a,a.promoblock,a.promoblock:hover{text-decoration:none}.yoast-promoblock form a{font-family:"Open Sans",Arial,sans-serif;font-weight:400!important}.yoast-promoblock .h4,.yoast-promoblock h4{margin-bottom:.7rem}.yoast-promoblock.link{border-color:#dc5c04}.yoast-promoblock.link a,.yoast-promoblock.link a:hover{color:#dc5c04}.yoast-promoblock--white{border-color:#fff!important}.yoast-promoblock.theme-academy a{color:#5d237a!important}.yoast-promoblock.theme-academy.secondary a{color:#a4286a!important}.yoast-promoblock.theme-software a{color:#0075b3!important}.yoast-promoblock.theme-review a{color:#009288!important}.yoast-promoblock.theme-review.secondary a{color:#77b227!important}.yoast-promoblock.theme-about a{color:#d93f69!important}.product .yoast-promoblock{overflow:hidden}.yoast-promoblock--hometitle{display:-ms-flexbox;display:flex;max-width:16em;height:11em;margin:1rem auto 2rem;border-color:#fff!important;background-color:rgba(217,63,105,.25);font-size:16px;font-size:1rem;line-height:1;-webkit-box-pack:center;-ms-flex-align:center;-ms-flex-line-pack:center;-ms-flex-pack:justify}.old-ie .yoast-promoblock--hometitle{text-align:justify}.old-ie .yoast-promoblock--hometitle::after{display:inline-block;width:100%;content:""}.old-ie .yoast-promoblock--hometitle>*{display:inline-block;text-align:left}@media only screen and (max-width:30rem){.yoast-promoblock--hometitle::after{content:none!important}}.yoast-promoblock--imageholder{margin-bottom:0;padding:0}.yoast-promoblock--imageholdersmall{position:absolute}.yoast-promoblock--imageholdersmall:first-child{left:4rem}.yoast-promoblock--imageholdersmall:last-child{top:4rem}@media only screen and (max-width:50rem){.yoast-promoblock h2{margin-bottom:0}}a.promoblock{color:#000}.promoblockimage__holder{position:relative;width:240px;height:295px}@media only screen and (min-width:50rem){[class*=promoblock--icon]::before{position:absolute;right:.47rem;bottom:.47rem;font-family:FontAwesome,"Open Sans",Arial,sans-serif;font-size:2.2rem;line-height:1}body.theme-about [class*=promoblock--icon]::before{color:#d93f69}body.theme-about .promoblock a.color-cta{color:#009288!important}body.theme-academy [class*=promoblock--icon]::before{color:#5d237a}body.theme-software [class*=promoblock--icon]::before{color:#0075b3}.promoblock--icon-academy::before{content:"\f19d"}.promoblock--icon-blog::before{content:"\f1ea"}.promoblock--icon-book::before{content:"\f02d"}.promoblock--icon-calendar::before{content:"\f073"}.promoblock--icon-check::before{content:"\f046"}.promoblock--icon-drupal::before{content:"\f1a9"}.promoblock--icon-gears::before{content:"\f085"}.promoblock--icon-pencil::before{content:"\f040"}.promoblock--icon-plug::before{content:"\f1e6"}.promoblock--icon-video::before{content:"\f008"}.promoblock--icon-wordpress::before{content:"\f19a"}}.yoast{color:#000;font-family:"Open Sans",Arial,sans-serif;font-size:1rem;line-height:1.88;letter-spacing:.01em}.yoast *,.yoast :after,.yoast :before{box-sizing:border-box}.yoast-hr{position:relative;margin:0;padding-bottom:1.88rem;border:0;border-top:1px solid #a4286a}.yoast-hr:after{position:absolute;z-index:1;top:-2px;left:50%;height:0;border:none;border-top:20px solid #f1f1f1;border-right:40px solid transparent;border-left:40px solid transparent;line-height:0;content:"";-ms-transform:translateX(-50%);transform:translateX(-50%);-moz-filter:drop-shadow(0 1px 0 #a4286a);-ms-filter:drop-shadow(0 1px 0 #a4286a);-o-filter:drop-shadow(0 1px 0 #a4286a);filter:drop-shadow(0 1px 0 #a4286a)}.yoast-list--usp li:before{width:1em;height:100%;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%2377B227%22%20d%3D%22M1671%20566q0%2040%2D28%2068l%2D724%20724%2D136%20136q%2D28%2028%2D68%2028t%2D68%2D28l%2D136%2D136%2D362%2D362q%2D28%2D28%2D28%2D68t28%2D68l136%2D136q28%2D28%2068%2D28t68%2028l294%20295%20656%2D657q28%2D28%2068%2D28t68%2028l136%20136q28%2028%2028%2068z%22%2F%3E%3C%2Fsvg%3E") left .4em no-repeat;background-size:contain;content:""}.yoast-button--purple{background-color:#5d237a}.yoast-button-go-to:after{position:static;top:auto;right:auto;width:auto;height:auto;border:none;content:" \00BB"}.yoast-button--installed{color:#fff;background-color:#77b227;cursor:default}.yoast-button--installed:hover{background-color:#77b227;text-decoration:none}.yoast-promo-extensions{display:-ms-flexbox;display:flex;margin-left:-50px;-ms-flex-wrap:wrap;flex-wrap:wrap}.yoast-promo-extensions>h2{width:100%;margin-left:50px}.yoast-promo-extension{max-width:330px;margin-left:50px;border-color:#a4286a;background-color:transparent}.yoast-promo-extension:first-child{margin-left:0}.yoast-promo-extension img{width:100%;height:auto;margin-bottom:.8rem}.yoast-promo-extension .yoast-button{width:100%;max-height:none}.yoast-promo-extension .yoast-button--installed{width:auto}.yoast-promo-extension h3{color:#a4286a}@media screen and (max-width:900px){.yoast-promo-extension img{display:none}.yoast-promo-extension{width:100%;max-width:none}}.yoast-seo-premium-extension:after,.yoast-seo-premium-extension:before{display:table;content:""}.yoast-seo-premium-extension:after{clear:both}.yoast-seo-premium-benefits__title{font-weight:600}.yoast-seo-premium-benefits__description:before{content:"– "}.yoast-link--more-info{padding-left:calc(1em + 5px);color:#646464;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23646464%22%20d%3D%22M1152%201376v%2D160q0%2D14%2D9%2D23t%2D23%2D9h%2D96v%2D512q0%2D14%2D9%2D23t%2D23%2D9h%2D320q%2D14%200%2D23%209t%2D9%2023v160q0%2014%209%2023t23%209h96v320h%2D96q%2D14%200%2D23%209t%2D9%2023v160q0%2014%209%2023t23%209h448q14%200%2023%2D9t9%2D23zm%2D128%2D896v%2D160q0%2D14%2D9%2D23t%2D23%2D9h%2D192q%2D14%200%2D23%209t%2D9%2023v160q0%2014%209%2023t23%209h192q14%200%2023%2D9t9%2D23zm640%20416q0%20209%2D103%20385%2E5t%2D279%2E5%20279%2E5%2D385%2E5%20103%2D385%2E5%2D103%2D279%2E5%2D279%2E5%2D103%2D385%2E5%20103%2D385%2E5%20279%2E5%2D279%2E5%20385%2E5%2D103%20385%2E5%20103%20279%2E5%20279%2E5%20103%20385%2E5z%22%2F%3E%3C%2Fsvg%3E") left .2em no-repeat;background-size:1em}.yoast-link--more-info:after{content:" \00BB"}.yoast-promo-extension .yoast-link--more-info{display:block;margin:1em 0 0;background-position:left .4em}.yoast-heading-highlight{color:#a4286a;font-weight:600}.yoast-money-back-guarantee{font-size:1.1em;font-style:italic} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/yst_plugin_tools-400.min.css b/wp-content/plugins/wordpress-seo/css/yst_plugin_tools-400.min.css new file mode 100644 index 0000000..49f1dd5 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/yst_plugin_tools-400.min.css @@ -0,0 +1 @@ +#wpseo-debug-info,h4{clear:both}.wpseotab .extension a,div.yoastbox .button-primary:hover,div.yoastbox .button:hover{text-decoration:none}h4{margin:1.2em 0 .5em}p.desc{margin:6px 0 10px;padding:0 0 8px 25px}p.desc.label{margin:0 0 20px;padding:0 0 10px 200px}tr.yst_row{margin:5px 0 0;padding:5px 0 0}tr.yst_row.even{background-color:#f6f6f6}div.yoastbox ul{margin-left:20px}.postbox{margin:10px 10px 0 0}label{float:left;margin-left:6px}.yoast-inline-label{float:none;margin:0}label.radio{float:none;margin-right:20px}input.textinput,select,textarea{width:400px}input.checkbox+label.checkbox{width:auto}input.textinput,select.select,textarea.textinput{float:left;margin:0 3px 15px 0;padding:5px}textarea.textinput{padding:3px 6px}select.select{padding:3px}input.checkbox,input.checkbox.double{float:left;margin:6px 10px 6px 0}.textinput.metadesc{height:50px}textarea.import{width:500px;height:100px}label.checkbox,label.select,label.textinput{width:200px;margin:5px 0;background-color:transparent}.wpseo-gsc-reload-crawl-issues-form{position:relative;top:9px}.wp-core-ui .button.wpseo-gsc-save-profile{margin-left:200px}table.wpseo th{text-align:left}.wpseo_content_wrapper{display:table;width:100%}.wpseo_content_wrapper li,.wpseo_content_wrapper p{max-width:600px}.wpseo_content_wrapper .notice p,.wpseo_content_wrapper .yoast-blocking-files-error p{max-width:none}#wpseo-tabs+.notice{margin-top:1.5em}.wpseo_content_cell{display:table-cell;height:500px;margin:0;padding:0;vertical-align:top}.wpseo-remove-ads{margin-top:0;padding:12px;border:1px solid #0075b3;border-radius:20px 20px 0;background-color:#fff}#wpseo_content_top{min-width:800px}.wpseo-variable-warning-element{border:1px solid #c62d2d!important}.wpseo-variable-warning{clear:both;margin:5px 0 0;padding:5px;color:#c62d2d}.wpseo-variable-warning code{color:#b02828}.wpseo-variable-warning a{color:#c62d2d}.wpseo_content_wrapper h3{margin:1em 0 .5em}.wpseo_content_wrapper h1.wpseo-redirect-url-title{margin:1em 0 .5em;font-size:1.3em}#sidebar-container{width:261px;padding:0 0 0 20px}@media (max-width:1020px){#wpseo_content_top{margin-left:0;padding-left:0}}.wpseo-admin-page .form-table td,.wpseo-admin-page .form-table th,.wpseo-admin-page .form-table tr{vertical-align:top}.postbox form{line-height:150%}div.yoastbox ul li{list-style:square}.text{width:250px}table.yoast_help,table.yoast_help td,table.yoast_help th{border:1px solid #ddd;border-collapse:collapse;color:#444;font-size:12px}table.yoast_help td,table.yoast_help th{padding:5px 10px;text-align:left;vertical-align:text-top}.correct,.wrong{padding:5px;color:#fff}table.yoast_help tr{background-color:#f1f1f1}table.yoast_help tr:nth-child(2n){background-color:#fbfbfe}table.yoast_help tr:hover{background-color:#ddd}.correct{background-color:green}.wrong{background-color:#dc3232}.wrong code{padding:3px 8px;color:#000}.yoast-notice-blocking-files code{color:#000;line-height:2}.yoast-notice-blocking-files .button{margin:.5em 0}.button.checkit,.button.fixit{float:right;margin:0 5px}.button.checkit{padding:5px 8px}.fb-buttons .button,.fb-buttons .button-primary{margin-right:8px}.postbox#donate{border:2px green}.wpseotab{display:none;margin-top:15px}.wpseotab.active{display:block}.wpseotab p.expl{margin-left:6px}.wpseotab p.expl strong{font-size:115%}#sidebar .yoastbox{margin:0 0 10px;padding:10px 15px;border:1px solid #ccc;border-radius:5px 25px}#sidebar .yoastbox h2{font-size:16px}#sidebar .promo{color:#000}#donate.yoastbox,#sitereview.yoastbox{border-color:green;background-color:#cfc}h2{margin-bottom:20px}h2 code{font-size:23px}#pointer-primary{margin:0 5px 0 0}#wpseo-debug-info .hndle{cursor:auto}#wpseo-debug-info .wpseo-debug-heading{font-size:1em}#wpseo-debug-info .wpseo-debug{display:inline-block;padding-left:20px;color:#c00}input.wpseo-new-title,textarea.wpseo-new-metadesc{width:100%;max-width:100%}.wpseotab .extension{float:left;box-sizing:border-box;width:300px;height:230px;margin:10px 20px 10px 0;border:1px solid #ccc}.wpseotab .extension p{margin:0;padding:10px}.wpseotab .extension h3{box-sizing:border-box;height:110px;margin:0;padding:20px 10px 0 120px;border-bottom:1px solid #ccc;background:left 10px no-repeat #fff;background-size:130px 100px}.wpseotab .extension button.installed{border-color:#00a000;background-color:#00a000;cursor:default}#separator{margin:1.5em 0 1em}#separator input.radio{position:absolute;left:-9999em;width:1px;height:1px}#separator input.radio+label{float:left;width:30px!important;margin:0 5px 0 0!important;padding:9px 6px;border:1px solid #ccc;font-family:Arial,Helvetica,sans-serif!important;font-size:18px!important;line-height:24px;text-align:center;cursor:pointer}#separator input.radio:checked+label{border:1px solid #a4286a;background-color:#fff;box-shadow:inset 0 0 0 2px #a4286a}#separator input.radio:focus+label{border-radius:10px 10px 0}.svg-container{text-align:center}.svg-container .dashicons{width:200px;height:100px;font-size:100px}body.toplevel_page_wpseo_dashboard .wp-badge{border:none;background:url(../images/Yoast_SEO_Icon.svg);background-size:150px 160px;box-shadow:none}.nav-tab .dashicons{width:18px;height:18px;font-size:18px;line-height:24px}.nav-tab .pinteresticon{width:12px;height:24px;margin-right:2px;background-image:url(../images/pinterest-23x30.png);background-repeat:no-repeat;background-position:center center;background-size:contain}#wpseo_progressbar{height:25px;border:1px solid #006691}#wpseo_progressbar .ui-progressbar-value{height:25px;background:#006691}.wpseo-add-fb-admin-form-wrap .notice span{margin-left:10px}.archives-titles-metas-content{padding-top:1em}@media screen and (max-width:782px){.wpseo-gsc-reload-crawl-issues-form{top:0;margin:1em 0}.wpseo-gsc-reload-crawl-issues-form .alignright{float:none}}@media screen and (max-width:600px){.wpseo-gsc-reload-crawl-issues-form{margin-bottom:0}}.yoast-sidebar__title{box-sizing:border-box;width:100%;margin:46px 0 20px;padding:10px;border:none;border-bottom:1px solid #a4286a;outline:0;color:#a4286a;background:0 0;line-height:19px;text-align:left}.yoast-sidebar__spot{padding:10px 0;border-bottom:1px solid #ddd}.yoast-sidebar__spot a{color:#a4286a}.wpseo-banner__link{display:inline-block}.wpseo-banner__image{vertical-align:top} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/yst_plugin_tools-400.min.rapido.css b/wp-content/plugins/wordpress-seo/css/yst_plugin_tools-400.min.rapido.css new file mode 100644 index 0000000..38b5e18 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/yst_plugin_tools-400.min.rapido.css @@ -0,0 +1 @@ +#wpseo-debug-info,h4{clear:both}.wpseotab .extension a,div.yoastbox .button-primary:hover,div.yoastbox .button:hover{text-decoration:none}h4{margin:1.2em 0 .5em}p.desc{margin:6px 0 10px;padding:0 0 8px 25px}p.desc.label{margin:0 0 20px;padding:0 0 10px 200px}tr.yst_row{margin:5px 0 0;padding:5px 0 0}tr.yst_row.even{background-color:#f6f6f6}div.yoastbox ul{margin-left:20px}.postbox{margin:10px 10px 0 0}label{float:left;margin-left:6px}.yoast-inline-label{float:none;margin:0}label.radio{float:none;margin-right:20px}input.textinput,select,textarea{width:400px}input.checkbox+label.checkbox{width:auto}input.textinput,select.select,textarea.textinput{float:left;margin:0 3px 15px 0;padding:5px}textarea.textinput{padding:3px 6px}select.select{padding:3px}input.checkbox,input.checkbox.double{float:left;margin:6px 10px 6px 0}.textinput.metadesc{height:50px}textarea.import{width:500px;height:100px}label.checkbox,label.select,label.textinput{width:200px;margin:5px 0;background-color:transparent}.wpseo-gsc-reload-crawl-issues-form{position:relative;top:9px}.wp-core-ui .button.wpseo-gsc-save-profile{margin-left:200px}table.wpseo th{text-align:left}.wpseo_content_wrapper{display:table;width:100%}.wpseo_content_wrapper li,.wpseo_content_wrapper p{max-width:600px}.wpseo_content_wrapper .notice p,.wpseo_content_wrapper .yoast-blocking-files-error p{max-width:none}#wpseo-tabs+.notice{margin-top:1.5em}.wpseo_content_cell{display:table-cell;height:500px;margin:0;padding:0;vertical-align:top}.wpseo-remove-ads{margin-top:0;padding:12px;border:1px solid #0075b3;border-radius:20px 20px 0;background-color:#fff}#wpseo_content_top{min-width:800px}.wpseo-variable-warning-element{border:1px solid #c62d2d !important}.wpseo-variable-warning{clear:both;margin:5px 0 0;padding:5px;color:#c62d2d}.wpseo-variable-warning code{color:#b02828}.wpseo-variable-warning a{color:#c62d2d}.wpseo_content_wrapper h3{margin:1em 0 .5em}.wpseo_content_wrapper h1.wpseo-redirect-url-title{margin:1em 0 .5em;font-size:1.3em}#sidebar-container{width:261px;padding:0 0 0 20px}@media (max-width:1020px){#wpseo_content_top{margin-left:0;padding-left:0}}.wpseo-admin-page .form-table td,.wpseo-admin-page .form-table th,.wpseo-admin-page .form-table tr{vertical-align:top}.postbox form{line-height:150%}div.yoastbox ul li{list-style:square}.text{width:250px}table.yoast_help,table.yoast_help td,table.yoast_help th{border:1px solid #ddd;border-collapse:collapse;color:#444;font-size:12px}table.yoast_help td,table.yoast_help th{padding:5px 10px;text-align:left;vertical-align:text-top}.correct,.wrong{padding:5px;color:#fff}table.yoast_help tr{background-color:#f1f1f1}table.yoast_help tr:nth-child(2n){background-color:#fbfbfe}table.yoast_help tr:hover{background-color:#ddd}.correct{background-color:green}.wrong{background-color:#dc3232}.wrong code{padding:3px 8px;color:#000}.yoast-notice-blocking-files code{color:#000;line-height:2}.yoast-notice-blocking-files .button{margin:.5em 0}.button.checkit,.button.fixit{float:right;margin:0 5px}.button.checkit{padding:5px 8px}.fb-buttons .button,.fb-buttons .button-primary{margin-right:8px}.postbox#donate{border:2px green}.wpseotab{display:none;margin-top:15px}.wpseotab.active{display:block}.wpseotab p.expl{margin-left:6px}.wpseotab p.expl strong{font-size:115%}#sidebar .yoastbox{margin:0 0 10px;padding:10px 15px;border:1px solid #ccc;border-radius:5px 25px}#sidebar .yoastbox h2{font-size:16px}#sidebar .promo{color:#000}#donate.yoastbox,#sitereview.yoastbox{border-color:green;background-color:#cfc}h2{margin-bottom:20px}h2 code{font-size:23px}#pointer-primary{margin:0 5px 0 0}#wpseo-debug-info .hndle{cursor:auto}#wpseo-debug-info .wpseo-debug-heading{font-size:1em}#wpseo-debug-info .wpseo-debug{display:inline-block;padding-left:20px;color:#c00}input.wpseo-new-title,textarea.wpseo-new-metadesc{width:100%;max-width:100%}.wpseotab .extension{float:left;box-sizing:border-box;width:300px;height:230px;margin:10px 20px 10px 0;border:1px solid #ccc}.wpseotab .extension p{margin:0;padding:10px}.wpseotab .extension h3{box-sizing:border-box;height:110px;margin:0;padding:20px 10px 0 120px;border-bottom:1px solid #ccc;background:left 10px no-repeat #fff;background-size:130px 100px}.wpseotab .extension button.installed{border-color:#00a000;background-color:#00a000;cursor:default}#separator{margin:1.5em 0 1em}#separator input.radio{position:absolute;left:-9999em;width:1px;height:1px}#separator input.radio+label{float:left;width:30px !important;margin:0 5px 0 0 !important;padding:9px 6px;border:1px solid #ccc;font-family:Arial,Helvetica,sans-serif !important;font-size:18px !important;line-height:24px;text-align:center;cursor:pointer}#separator input.radio:checked+label{border:1px solid #a4286a;background-color:#fff;box-shadow:inset 0 0 0 2px #a4286a}#separator input.radio:focus+label{border-radius:10px 10px 0}.svg-container{text-align:center}.svg-container .dashicons{width:200px;height:100px;font-size:100px}body.toplevel_page_wpseo_dashboard .wp-badge{border:none;background:url(../images/Yoast_SEO_Icon.svg);background-size:150px 160px;box-shadow:none}.nav-tab .dashicons{width:18px;height:18px;font-size:18px;line-height:24px}.nav-tab .pinteresticon{width:12px;height:24px;margin-right:2px;background-image:url(../images/pinterest-23x30.png);background-repeat:no-repeat;background-position:center center;background-size:contain}#wpseo_progressbar{height:25px;border:1px solid #006691}#wpseo_progressbar .ui-progressbar-value{height:25px;background:#006691}.wpseo-add-fb-admin-form-wrap .notice span{margin-left:10px}.archives-titles-metas-content{padding-top:1em}@media screen and (max-width:782px){.wpseo-gsc-reload-crawl-issues-form{top:0;margin:1em 0} .wpseo-gsc-reload-crawl-issues-form .alignright{float:none}}@media screen and (max-width:600px){.wpseo-gsc-reload-crawl-issues-form{margin-bottom:0}}.yoast-sidebar__title{box-sizing:border-box;width:100%;margin:46px 0 20px;padding:10px;border:none;border-bottom:1px solid #a4286a;outline:0;color:#a4286a;background:0 0;line-height:19px;text-align:left}.yoast-sidebar__spot{padding:10px 0;border-bottom:1px solid #ddd}.yoast-sidebar__spot a{color:#a4286a}.wpseo-banner__link{display:inline-block}.wpseo-banner__image{vertical-align:top} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/css/yst_seo_score-390.min.css b/wp-content/plugins/wordpress-seo/css/yst_seo_score-390.min.css new file mode 100644 index 0000000..df91e15 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/css/yst_seo_score-390.min.css @@ -0,0 +1 @@ +.wpseo-score-icon{display:inline-block;width:12px;height:12px;margin:3px 10px 0 3px;border-radius:50%;background:#888;vertical-align:top}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}.wpseo-score-title{font-weight:600}#taxonomy_overall{position:absolute;top:0;margin-left:87.5%} \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/deprecated/class-onpage-email-presenter.php b/wp-content/plugins/wordpress-seo/deprecated/class-onpage-email-presenter.php new file mode 100644 index 0000000..599a920 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/deprecated/class-onpage-email-presenter.php @@ -0,0 +1,41 @@ + '', + '1' => '', + ); + } + + /** + * @deprecated 3.0.7 + */ + public function get_message() { + _deprecated_function( 'WPSEO_OnPage_Email_Presenter', 'WPSEO 3.0.7' ); + + return ''; + } +} diff --git a/wp-content/plugins/wordpress-seo/deprecated/class-onpage-notifier.php b/wp-content/plugins/wordpress-seo/deprecated/class-onpage-notifier.php new file mode 100644 index 0000000..325d2d0 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/deprecated/class-onpage-notifier.php @@ -0,0 +1,43 @@ +content + * + * @return string html for snippet preview + * + * @deprecated 3.0 Removed, use javascript instead. + */ + public function get_content() { + _deprecated_function( 'WPSEO_Snippet_Preview::get_content', 'WPSEO 3.0', 'javascript' ); + return $this->content; + } + + /** + * Sets date if available + * + * @deprecated 3.0 Removed, use javascript instead. + */ + protected function set_date() { + _deprecated_function( 'WPSEO_Snippet_Preview::set_date', 'WPSEO 3.0', 'javascript' ); + } + + /** + * Retrieves a post date when post is published, or return current date when it's not. + * + * @return string + * + * @deprecated 3.0 Removed, use javascript instead. + */ + protected function get_post_date() { + _deprecated_function( 'WPSEO_Snippet_Preview::get_post_date', 'WPSEO 3.0', 'javascript' ); + return ''; + } + + /** + * Generates the url that is displayed in the snippet preview. + * + * @deprecated 3.0 Removed, use javascript instead. + */ + protected function set_url() { + _deprecated_function( 'WPSEO_Snippet_Preview::set_url', 'WPSEO 3.0', 'javascript' ); + } + + /** + * Sets the slug and adds it to the url if the post has been published and the post name exists. + * + * If the post is set to be the homepage the slug is also not included. + * + * @deprecated 3.0 Removed, use javascript instead. + */ + protected function set_slug() { + _deprecated_function( 'WPSEO_Snippet_Preview::set_slug', 'WPSEO 3.0', 'javascript' ); + } + + /** + * Generates the html for the snippet preview and assign it to $this->content. + * + * @deprecated 3.0 Removed, use javascript instead. + */ + protected function set_content() { + _deprecated_function( 'WPSEO_Snippet_Preview::set_content', 'WPSEO 3.0', 'javascript' ); + } + + /** + * Sets the html for the snippet preview through a filter + * + * @param string $content Content string. + * + * @deprecated 3.0 Removed, use javascript instead. + */ + protected function set_content_through_filter( $content ) { + _deprecated_function( 'WPSEO_Snippet_Preview::set_content_through_filter', 'WPSEO 3.0', 'javascript' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/deprecated/class-yoast-textstatistics.php b/wp-content/plugins/wordpress-seo/deprecated/class-yoast-textstatistics.php new file mode 100644 index 0000000..b882ac2 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/deprecated/class-yoast-textstatistics.php @@ -0,0 +1,196 @@ +options = WPSEO_Options::get_options( array( 'wpseo_titles', 'wpseo_internallinks', 'wpseo_xml' ) ); + $this->post = ( isset( $GLOBALS['post'] ) ? $GLOBALS['post'] : null ); + $this->show_on_front = get_option( 'show_on_front' ); + $this->page_for_posts = get_option( 'page_for_posts' ); + + $this->filter_element(); + $this->filter_separator(); + $this->filter_wrapper(); + + $this->set_crumbs(); + $this->prepare_links(); + $this->links_to_string(); + $this->wrap_breadcrumb(); + } + + /** + * Get breadcrumb string using the singleton instance of this class + * + * @param string $before Optional string to prepend. + * @param string $after Optional string to append. + * @param bool $display Echo or return flag. + * + * @return object + */ + public static function breadcrumb( $before = '', $after = '', $display = true ) { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + // Remember the last used before/after for use in case the object goes __toString(). + self::$before = $before; + self::$after = $after; + + $output = $before . self::$instance->output . $after; + + if ( $display === true ) { + echo $output; + + return true; + } + else { + return $output; + } + } + + /** + * Magic method to use in case the class would be send to string + * + * @return string + */ + public function __toString() { + return self::$before . $this->output . self::$after; + } + + + /** + * Filter: 'wpseo_breadcrumb_single_link_wrapper' - Allows developer to change or wrap each breadcrumb element + * + * @api string $element + */ + private function filter_element() { + $this->element = esc_attr( apply_filters( 'wpseo_breadcrumb_single_link_wrapper', $this->element ) ); + } + + /** + * Filter: 'wpseo_breadcrumb_separator' - Allow (theme) developer to change the Yoast SEO breadcrumb separator. + * + * @api string $breadcrumbs_sep Breadcrumbs separator + */ + private function filter_separator() { + $separator = apply_filters( 'wpseo_breadcrumb_separator', $this->options['breadcrumbs-sep'] ); + $this->separator = ' ' . $separator . ' '; + } + + /** + * Filter: 'wpseo_breadcrumb_output_wrapper' - Allow changing the HTML wrapper element for the Yoast SEO breadcrumbs output + * + * @api string $wrapper The wrapper element + */ + private function filter_wrapper() { + $wrapper = apply_filters( 'wpseo_breadcrumb_output_wrapper', $this->wrapper ); + $wrapper = tag_escape( $wrapper ); + if ( is_string( $wrapper ) && '' !== $wrapper ) { + $this->wrapper = $wrapper; + } + } + + + /** + * Get a term's parents. + * + * @param object $term Term to get the parents for. + * + * @return array + */ + private function get_term_parents( $term ) { + $tax = $term->taxonomy; + $parents = array(); + while ( $term->parent != 0 ) { + $term = get_term( $term->parent, $tax ); + $parents[] = $term; + } + + return array_reverse( $parents ); + } + + /** + * Find the deepest term in an array of term objects + * + * @param array $terms Terms set. + * + * @return object + */ + private function find_deepest_term( $terms ) { + /* + Let's find the deepest term in this array, by looping through and then + unsetting every term that is used as a parent by another one in the array. + */ + $terms_by_id = array(); + foreach ( $terms as $term ) { + $terms_by_id[ $term->term_id ] = $term; + } + foreach ( $terms as $term ) { + unset( $terms_by_id[ $term->parent ] ); + } + unset( $term ); + + /* + As we could still have two subcategories, from different parent categories, + let's pick the one with the lowest ordered ancestor. + */ + $parents_count = 0; + $term_order = 9999; // Because ASC. + reset( $terms_by_id ); + $deepest_term = current( $terms_by_id ); + foreach ( $terms_by_id as $term ) { + $parents = $this->get_term_parents( $term ); + + if ( count( $parents ) >= $parents_count ) { + $parents_count = count( $parents ); + + // If higher count. + if ( count( $parents ) > $parents_count ) { + // Reset order. + $term_order = 9999; + } + + $parent_order = 9999; // Set default order. + foreach ( $parents as $parent ) { + if ( $parent->parent == 0 && isset( $parent->term_order ) ) { + $parent_order = $parent->term_order; + } + } + unset( $parent ); + + // Check if parent has lowest order. + if ( $parent_order < $term_order ) { + $term_order = $parent_order; + $deepest_term = $term; + } + } + } + + return $deepest_term; + } + + /** + * Retrieve the hierachical ancestors for the current 'post' + * + * @return array + */ + private function get_post_ancestors() { + $ancestors = array(); + + if ( isset( $this->post->ancestors ) ) { + if ( is_array( $this->post->ancestors ) ) { + $ancestors = array_values( $this->post->ancestors ); + } + else { + $ancestors = array( $this->post->ancestors ); + } + } + elseif ( isset( $this->post->post_parent ) ) { + $ancestors = array( $this->post->post_parent ); + } + + /** + * Filter: Allow changing the ancestors for the Yoast SEO breadcrumbs output + * + * @api array $ancestors Ancestors + */ + $ancestors = apply_filters( 'wp_seo_get_bc_ancestors', $ancestors ); + + if ( ! is_array( $ancestors ) ) { + trigger_error( 'The return value for the "wp_seo_get_bc_ancestors" filter should be an array.', E_USER_WARNING ); + $ancestors = (array) $ancestors; + } + + // Reverse the order so it's oldest to newest. + $ancestors = array_reverse( $ancestors ); + + return $ancestors; + } + + /** + * Determine the crumbs which should form the breadcrumb. + */ + private function set_crumbs() { + /** @var WP_Query $wp_query */ + global $wp_query; + + $this->add_home_crumb(); + $this->maybe_add_blog_crumb(); + + if ( ( $this->show_on_front === 'page' && is_front_page() ) || ( $this->show_on_front === 'posts' && is_home() ) ) { + // Do nothing. + } + elseif ( $this->show_on_front == 'page' && is_home() ) { + $this->add_blog_crumb(); + } + elseif ( is_singular() ) { + $this->maybe_add_pt_archive_crumb_for_post(); + + if ( isset( $this->post->post_parent ) && 0 == $this->post->post_parent ) { + $this->maybe_add_taxonomy_crumbs_for_post(); + } + else { + $this->add_post_ancestor_crumbs(); + } + + if ( isset( $this->post->ID ) ) { + $this->add_single_post_crumb( $this->post->ID ); + } + } + else { + if ( is_post_type_archive() ) { + $post_type = $wp_query->get( 'post_type' ); + + if ( $post_type && is_string( $post_type ) ) { + $this->add_ptarchive_crumb( $post_type ); + } + } + elseif ( is_tax() || is_tag() || is_category() ) { + $this->add_crumbs_for_taxonomy(); + } + elseif ( is_date() ) { + if ( is_day() ) { + $this->add_linked_month_year_crumb(); + $this->add_date_crumb(); + } + elseif ( is_month() ) { + $this->add_month_crumb(); + } + elseif ( is_year() ) { + $this->add_year_crumb(); + } + } + elseif ( is_author() ) { + $user = $wp_query->get_queried_object(); + $this->add_predefined_crumb( + $this->options['breadcrumbs-archiveprefix'] . ' ' . $user->display_name, + null, + true + ); + } + elseif ( is_search() ) { + $this->add_predefined_crumb( + $this->options['breadcrumbs-searchprefix'] . ' "' . esc_html( get_search_query() ) . '"', + null, + true + ); + } + elseif ( is_404() ) { + $this->add_predefined_crumb( + $this->options['breadcrumbs-404crumb'], + null, + true + ); + } + } + + /** + * Filter: 'wpseo_breadcrumb_links' - Allow the developer to filter the Yoast SEO breadcrumb links, add to them, change order, etc. + * + * @api array $crumbs The crumbs array + */ + $this->crumbs = apply_filters( 'wpseo_breadcrumb_links', $this->crumbs ); + + $this->crumb_count = count( $this->crumbs ); + } + + + /** + * Add a single id based crumb to the crumbs property + * + * @param int $id Post ID. + */ + private function add_single_post_crumb( $id ) { + $this->crumbs[] = array( + 'id' => $id, + ); + } + + /** + * Add a term based crumb to the crumbs property + * + * @param object $term Term data object. + */ + private function add_term_crumb( $term ) { + $this->crumbs[] = array( + 'term' => $term, + ); + } + + /** + * Add a ptarchive based crumb to the crumbs property + * + * @param string $pt Post type. + */ + private function add_ptarchive_crumb( $pt ) { + $this->crumbs[] = array( + 'ptarchive' => $pt, + ); + } + + /** + * Add a predefined crumb to the crumbs property + * + * @param string $text Text string. + * @param string $url URL string. + * @param bool $allow_html Flag to allow HTML. + */ + private function add_predefined_crumb( $text, $url = '', $allow_html = false ) { + $this->crumbs[] = array( + 'text' => $text, + 'url' => $url, + 'allow_html' => $allow_html, + ); + } + + /** + * Add Homepage crumb to the crumbs property + */ + private function add_home_crumb() { + $this->add_predefined_crumb( + $this->options['breadcrumbs-home'], + WPSEO_Utils::home_url(), + true + ); + } + + /** + * Add Blog crumb to the crumbs property + */ + private function add_blog_crumb() { + $this->add_single_post_crumb( $this->page_for_posts ); + } + + /** + * Add Blog crumb to the crumbs property for single posts where Home != blogpage + */ + private function maybe_add_blog_crumb() { + if ( ( 'page' === $this->show_on_front && 'post' === get_post_type() ) && ( ! is_home() && ! is_search() ) ) { + if ( $this->page_for_posts && $this->options['breadcrumbs-blog-remove'] === false ) { + $this->add_blog_crumb(); + } + } + } + + /** + * Add ptarchive crumb to the crumbs property if it can be linked to, for a single post + */ + private function maybe_add_pt_archive_crumb_for_post() { + // Never do this for the Post type archive for posts, as that would break `maybe_add_blog_crumb`. + if ( $this->post->post_type === 'post' ) { + return; + } + if ( isset( $this->post->post_type ) && get_post_type_archive_link( $this->post->post_type ) ) { + $this->add_ptarchive_crumb( $this->post->post_type ); + } + } + + /** + * Add taxonomy crumbs to the crumbs property for a single post + */ + private function maybe_add_taxonomy_crumbs_for_post() { + if ( isset( $this->options[ 'post_types-' . $this->post->post_type . '-maintax' ] ) && $this->options[ 'post_types-' . $this->post->post_type . '-maintax' ] != '0' ) { + $main_tax = $this->options[ 'post_types-' . $this->post->post_type . '-maintax' ]; + if ( isset( $this->post->ID ) ) { + $terms = get_the_terms( $this->post, $main_tax ); + + if ( is_array( $terms ) && $terms !== array() ) { + + $primary_term = new WPSEO_Primary_Term( $main_tax, $this->post->ID ); + if ( $primary_term->get_primary_term() ) { + $breadcrumb_term = get_term( $primary_term->get_primary_term(), $main_tax ); + } + else { + $breadcrumb_term = $this->find_deepest_term( $terms ); + } + + if ( is_taxonomy_hierarchical( $main_tax ) && $breadcrumb_term->parent != 0 ) { + $parent_terms = $this->get_term_parents( $breadcrumb_term ); + foreach ( $parent_terms as $parent_term ) { + $this->add_term_crumb( $parent_term ); + } + } + + $this->add_term_crumb( $breadcrumb_term ); + } + } + } + } + + /** + * Add hierarchical ancestor crumbs to the crumbs property for a single post + */ + private function add_post_ancestor_crumbs() { + $ancestors = $this->get_post_ancestors(); + if ( is_array( $ancestors ) && $ancestors !== array() ) { + foreach ( $ancestors as $ancestor ) { + $this->add_single_post_crumb( $ancestor ); + } + } + } + + /** + * Add taxonomy parent crumbs to the crumbs property for a taxonomy + */ + private function add_crumbs_for_taxonomy() { + $term = $GLOBALS['wp_query']->get_queried_object(); + + // @todo adjust function name!! + $this->maybe_add_preferred_term_parent_crumb( $term ); + + $this->maybe_add_term_parent_crumbs( $term ); + + $this->add_term_crumb( $term ); + } + + /** + * Add parent taxonomy crumb based on user defined preference + * + * @param object $term Term data object. + */ + private function maybe_add_preferred_term_parent_crumb( $term ) { + if ( isset( $this->options[ 'taxonomy-' . $term->taxonomy . '-ptparent' ] ) && $this->options[ 'taxonomy-' . $term->taxonomy . '-ptparent' ] != '0' ) { + if ( 'post' == $this->options[ 'taxonomy-' . $term->taxonomy . '-ptparent' ] && $this->show_on_front == 'page' ) { + if ( $this->page_for_posts ) { + $this->add_blog_crumb(); + } + } + else { + $this->add_ptarchive_crumb( $this->options[ 'taxonomy-' . $term->taxonomy . '-ptparent' ] ); + } + } + } + + /** + * Add parent taxonomy crumbs to the crumb property for hierachical taxonomy + * + * @param object $term Term data object. + */ + private function maybe_add_term_parent_crumbs( $term ) { + if ( is_taxonomy_hierarchical( $term->taxonomy ) && $term->parent != 0 ) { + foreach ( $this->get_term_parents( $term ) as $parent_term ) { + $this->add_term_crumb( $parent_term ); + } + } + } + + /** + * Add month-year crumb to crumbs property + */ + private function add_linked_month_year_crumb() { + $this->add_predefined_crumb( + $GLOBALS['wp_locale']->get_month( get_query_var( 'monthnum' ) ) . ' ' . get_query_var( 'year' ), + get_month_link( get_query_var( 'year' ), get_query_var( 'monthnum' ) ) + ); + } + + /** + * Add (non-link) month crumb to crumbs property + */ + private function add_month_crumb() { + $this->add_predefined_crumb( + $this->options['breadcrumbs-archiveprefix'] . ' ' . esc_html( single_month_title( ' ', false ) ), + null, + true + ); + } + + /** + * Add (non-link) year crumb to crumbs property + */ + private function add_year_crumb() { + $this->add_predefined_crumb( + $this->options['breadcrumbs-archiveprefix'] . ' ' . esc_html( get_query_var( 'year' ) ), + null, + true + ); + } + + /** + * Add (non-link) date crumb to crumbs property + * + * @param string $date Optional date string, defaults to post's date. + */ + private function add_date_crumb( $date = null ) { + if ( is_null( $date ) ) { + $date = get_the_date(); + } + else { + $date = mysql2date( get_option( 'date_format' ), $date, true ); + $date = apply_filters( 'get_the_date', $date, '' ); + } + + $this->add_predefined_crumb( + $this->options['breadcrumbs-archiveprefix'] . ' ' . esc_html( $date ), + null, + true + ); + } + + + /** + * Take the crumbs array and convert each crumb to a single breadcrumb string. + * + * @link http://support.google.com/webmasters/bin/answer.py?hl=en&answer=185417 Google documentation on RDFA + */ + private function prepare_links() { + if ( ! is_array( $this->crumbs ) || $this->crumbs === array() ) { + return; + } + + foreach ( $this->crumbs as $i => $crumb ) { + $link_info = $crumb; // Keep pre-set url/text combis. + + if ( isset( $crumb['id'] ) ) { + $link_info = $this->get_link_info_for_id( $crumb['id'] ); + } + if ( isset( $crumb['term'] ) ) { + $link_info = $this->get_link_info_for_term( $crumb['term'] ); + } + if ( isset( $crumb['ptarchive'] ) ) { + $link_info = $this->get_link_info_for_ptarchive( $crumb['ptarchive'] ); + } + + $this->links[] = $this->crumb_to_link( $link_info, $i ); + } + } + + /** + * Retrieve link url and text based on post id + * + * @param int $id Post ID. + * + * @return array Array of link text and url + */ + private function get_link_info_for_id( $id ) { + $link = array(); + + $link['url'] = get_permalink( $id ); + $link['text'] = WPSEO_Meta::get_value( 'bctitle', $id ); + if ( $link['text'] === '' ) { + $link['text'] = strip_tags( get_the_title( $id ) ); + } + + /** + * Filter: 'wp_seo_get_bc_title' - Allow developer to filter the Yoast SEO Breadcrumb title. + * + * @api string $link_text The Breadcrumb title text + * + * @param int $link_id The post ID + */ + $link['text'] = apply_filters( 'wp_seo_get_bc_title', $link['text'], $id ); + + return $link; + } + + /** + * Retrieve link url and text based on term object + * + * @param object $term Term object. + * + * @return array Array of link text and url + */ + private function get_link_info_for_term( $term ) { + $link = array(); + + $bctitle = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'bctitle' ); + if ( ! is_string( $bctitle ) || $bctitle === '' ) { + $bctitle = $term->name; + } + + $link['url'] = get_term_link( $term ); + $link['text'] = $bctitle; + + return $link; + } + + /** + * Retrieve link url and text based on post type + * + * @param string $pt Post type. + * + * @return array Array of link text and url + */ + private function get_link_info_for_ptarchive( $pt ) { + $link = array(); + $archive_title = ''; + + if ( isset( $this->options[ 'bctitle-ptarchive-' . $pt ] ) && $this->options[ 'bctitle-ptarchive-' . $pt ] !== '' ) { + + $archive_title = $this->options[ 'bctitle-ptarchive-' . $pt ]; + } + else { + $post_type_obj = get_post_type_object( $pt ); + if ( is_object( $post_type_obj ) ) { + if ( isset( $post_type_obj->label ) && $post_type_obj->label !== '' ) { + $archive_title = $post_type_obj->label; + } + elseif ( isset( $post_type_obj->labels->menu_name ) && $post_type_obj->labels->menu_name !== '' ) { + $archive_title = $post_type_obj->labels->menu_name; + } + else { + $archive_title = $post_type_obj->name; + } + } + } + + $link['url'] = get_post_type_archive_link( $pt ); + $link['text'] = $archive_title; + + return $link; + } + + + /** + * Create a breadcrumb element string + * + * @todo The `$paged` variable only works for archives, not for paged articles, so this does not work + * for paged article at this moment. + * + * @param array $link Link info array containing the keys: + * 'text' => (string) link text + * 'url' => (string) link url + * (optional) 'title' => (string) link title attribute text + * (optional) 'allow_html' => (bool) whether to (not) escape html in the link text + * This prevents html stripping from the text strings set in the + * WPSEO -> Internal Links options page. + * @param int $i Index for the current breadcrumb. + * + * @return string + */ + private function crumb_to_link( $link, $i ) { + $link_output = ''; + + if ( isset( $link['text'] ) && ( is_string( $link['text'] ) && $link['text'] !== '' ) ) { + + $link['text'] = trim( $link['text'] ); + if ( ! isset( $link['allow_html'] ) || $link['allow_html'] !== true ) { + $link['text'] = esc_html( $link['text'] ); + } + + $inner_elm = 'span'; + if ( $this->options['breadcrumbs-boldlast'] === true && $i === ( $this->crumb_count - 1 ) ) { + $inner_elm = 'strong'; + } + + if ( ( isset( $link['url'] ) && ( is_string( $link['url'] ) && $link['url'] !== '' ) ) && + ( $i < ( $this->crumb_count - 1 ) ) + ) { + if ( $i === 0 ) { + $link_output .= '<' . $this->element . ' typeof="v:Breadcrumb">'; + } + else { + $link_output .= '<' . $this->element . ' rel="v:child" typeof="v:Breadcrumb">'; + } + $title_attr = isset( $link['title'] ) ? ' title="' . esc_attr( $link['title'] ) . '"' : ''; + $link_output .= '' . $link['text'] . ''; + } + else { + $link_output .= '<' . $inner_elm . ' class="breadcrumb_last">' . $link['text'] . ''; + // This is the last element, now close all previous elements. + while ( $i > 0 ) { + $link_output .= 'element . '>'; + $i--; + } + } + } + + /** + * Filter: 'wpseo_breadcrumb_single_link' - Allow changing of each link being put out by the Yoast SEO breadcrumbs class + * + * @api string $link_output The output string + * + * @param array $link The link array. + */ + + return apply_filters( 'wpseo_breadcrumb_single_link', $link_output, $link ); + } + + + /** + * Create a complete breadcrumb string from an array of breadcrumb element strings + */ + private function links_to_string() { + if ( is_array( $this->links ) && $this->links !== array() ) { + // Remove any effectively empty links. + $links = array_map( 'trim', $this->links ); + $links = array_filter( $links ); + + $this->output = implode( $this->separator, $links ); + } + } + + /** + * Wrap a complete breadcrumb string in a Breadcrumb RDFA wrapper + */ + private function wrap_breadcrumb() { + if ( is_string( $this->output ) && $this->output !== '' ) { + $output = '<' . $this->wrapper . $this->get_output_id() . $this->get_output_class() . ' xmlns:v="http://rdf.data-vocabulary.org/#">' . $this->output . 'wrapper . '>'; + + /** + * Filter: 'wpseo_breadcrumb_output' - Allow changing the HTML output of the Yoast SEO breadcrumbs class + * + * @api string $unsigned HTML output + */ + $output = apply_filters( 'wpseo_breadcrumb_output', $output ); + + if ( $this->options['breadcrumbs-prefix'] !== '' ) { + $output = "\t" . $this->options['breadcrumbs-prefix'] . "\n" . $output; + } + + $this->output = $output; + } + } + + + /** + * Filter: 'wpseo_breadcrumb_output_id' - Allow changing the HTML ID on the Yoast SEO breadcrumbs wrapper element + * + * @api string $unsigned ID to add to the wrapper element + */ + private function get_output_id() { + $id = apply_filters( 'wpseo_breadcrumb_output_id', '' ); + if ( is_string( $id ) && '' !== $id ) { + $id = ' id="' . esc_attr( $id ) . '"'; + } + + return $id; + } + + /** + * Filter: 'wpseo_breadcrumb_output_class' - Allow changing the HTML class on the Yoast SEO breadcrumbs wrapper element + * + * @api string $unsigned class to add to the wrapper element + */ + private function get_output_class() { + $class = apply_filters( 'wpseo_breadcrumb_output_class', '' ); + if ( is_string( $class ) && '' !== $class ) { + $class = ' class="' . esc_attr( $class ) . '"'; + } + + return $class; + } + + + /********************** DEPRECATED METHODS **********************/ + + /** + * Wrapper function for the breadcrumb so it can be output for the supported themes. + * + * @deprecated 1.5.0 + */ + public function breadcrumb_output() { + _deprecated_function( __METHOD__, '1.5.0', 'yoast_breadcrumb' ); + self::breadcrumb( '
    ', '
    ' ); + } + + /** + * Take the links array and return a full breadcrumb string. + * + * @deprecated 1.5.2.3 + * + * @param string $links Unused. + * @param string $wrapper Unused. + * @param string $element Unused. + * + * @return void + */ + public function create_breadcrumbs_string( $links, $wrapper = 'span', $element = 'span' ) { + _deprecated_function( __METHOD__, 'WPSEO 1.5.2.3', 'yoast_breadcrumbs' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/frontend/class-frontend.php b/wp-content/plugins/wordpress-seo/frontend/class-frontend.php new file mode 100644 index 0000000..eaeff89 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/frontend/class-frontend.php @@ -0,0 +1,1939 @@ +options = WPSEO_Options::get_options( $this->required_options ); + + add_action( 'wp_head', array( $this, 'front_page_specific_init' ), 0 ); + add_action( 'wp_head', array( $this, 'head' ), 1 ); + + // The head function here calls action wpseo_head, to which we hook all our functionality. + add_action( 'wpseo_head', array( $this, 'debug_marker' ), 2 ); + add_action( 'wpseo_head', array( $this, 'metadesc' ), 6 ); + add_action( 'wpseo_head', array( $this, 'robots' ), 10 ); + add_action( 'wpseo_head', array( $this, 'metakeywords' ), 11 ); + add_action( 'wpseo_head', array( $this, 'canonical' ), 20 ); + add_action( 'wpseo_head', array( $this, 'adjacent_rel_links' ), 21 ); + add_action( 'wpseo_head', array( $this, 'publisher' ), 22 ); + + // Remove actions that we will handle through our wpseo_head call, and probably change the output of. + remove_action( 'wp_head', 'rel_canonical' ); + remove_action( 'wp_head', 'index_rel_link' ); + remove_action( 'wp_head', 'start_post_rel_link' ); + remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' ); + remove_action( 'wp_head', 'noindex', 1 ); + + // When using WP 4.4, just use the new hook. + add_filter( 'pre_get_document_title', array( $this, 'title' ), 15 ); + add_filter( 'wp_title', array( $this, 'title' ), 15, 3 ); + + add_filter( 'thematic_doctitle', array( $this, 'title' ), 15 ); + + add_action( 'wp', array( $this, 'page_redirect' ), 99 ); + + add_action( 'template_redirect', array( $this, 'noindex_feed' ) ); + + add_filter( 'loginout', array( $this, 'nofollow_link' ) ); + add_filter( 'register', array( $this, 'nofollow_link' ) ); + + // Fix the WooThemes woo_title() output. + add_filter( 'woo_title', array( $this, 'fix_woo_title' ), 99 ); + + if ( $this->options['disable-date'] === true || + $this->options['disable-author'] === true || + $this->options['disable-post_format'] === true + ) { + add_action( 'wp', array( $this, 'archive_redirect' ) ); + } + if ( $this->options['redirectattachment'] === true ) { + add_action( 'template_redirect', array( $this, 'attachment_redirect' ), 1 ); + } + + /* + * The setting to get here has been deprecated, but don't remove the code as that would break + * the functionality for those that still have it! + */ + if ( $this->options['trailingslash'] === true ) { + add_filter( 'user_trailingslashit', array( $this, 'add_trailingslash' ), 10, 2 ); + } + if ( $this->options['cleanpermalinks'] === true ) { + add_action( 'template_redirect', array( $this, 'clean_permalink' ), 1 ); + } + if ( $this->options['cleanreplytocom'] === true ) { + add_filter( 'comment_reply_link', array( $this, 'remove_reply_to_com' ) ); + add_action( 'template_redirect', array( $this, 'replytocom_redirect' ), 1 ); + } + add_filter( 'the_content_feed', array( $this, 'embed_rssfooter' ) ); + add_filter( 'the_excerpt_rss', array( $this, 'embed_rssfooter_excerpt' ) ); + + // For WordPress functions below 4.4. + if ( ! current_theme_supports( 'title-tag' ) && $this->options['forcerewritetitle'] === true ) { + add_action( 'template_redirect', array( $this, 'force_rewrite_output_buffer' ), 99999 ); + add_action( 'wp_footer', array( $this, 'flush_cache' ), - 1 ); + } + + if ( $this->options['title_test'] > 0 ) { + add_filter( 'wpseo_title', array( $this, 'title_test_helper' ) ); + } + + $primary_category = new WPSEO_Frontend_Primary_Category(); + $primary_category->register_hooks(); + + $this->hooks = array( $primary_category ); + } + + /** + * Initialize the functions that only need to run on the frontpage + */ + public function front_page_specific_init() { + if ( ! is_front_page() ) { + return; + } + + new WPSEO_JSON_LD; + add_action( 'wpseo_head', array( $this, 'webmaster_tools_authentication' ), 90 ); + } + + /** + * Resets the entire class so canonicals, titles etc can be regenerated. + */ + public function reset() { + foreach ( get_class_vars( __CLASS__ ) as $name => $default ) { + if ( $name == 'instance' ) { + self::$instance = null; + } + else { + $this->$name = $default; + } + } + $this->options = WPSEO_Options::get_options( $this->required_options ); + } + + /** + * Get the singleton instance of this class + * + * @return WPSEO_Frontend + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Override Woo's title with our own. + * + * @param string $title Title string. + * + * @return string + */ + public function fix_woo_title( $title ) { + return $this->title( $title ); + } + + /** + * Determine whether this is the homepage and shows posts. + * + * @return bool + */ + public function is_home_posts_page() { + return ( is_home() && 'posts' == get_option( 'show_on_front' ) ); + } + + /** + * Determine whether the this is the static frontpage. + * + * @return bool + */ + public function is_home_static_page() { + return ( is_front_page() && 'page' == get_option( 'show_on_front' ) && is_page( get_option( 'page_on_front' ) ) ); + } + + /** + * Determine whether this is the posts page, when it's not the frontpage. + * + * @return bool + */ + public function is_posts_page() { + return ( is_home() && 'page' == get_option( 'show_on_front' ) ); + } + + /** + * Used for static home and posts pages as well as singular titles. + * + * @param object|null $object If filled, object to get the title for. + * + * @return string + */ + public function get_content_title( $object = null ) { + if ( is_null( $object ) ) { + $object = $GLOBALS['wp_query']->get_queried_object(); + } + + if ( is_object( $object ) ) { + $title = WPSEO_Meta::get_value( 'title', $object->ID ); + + if ( $title !== '' ) { + return wpseo_replace_vars( $title, $object ); + } + + $post_type = ( isset( $object->post_type ) ? $object->post_type : $object->query_var ); + + return $this->get_title_from_options( 'title-' . $post_type, $object ); + } + + return $this->get_title_from_options( 'title-404-wpseo' ); + } + + /** + * Used for category, tag, and tax titles. + * + * @return string + */ + public function get_taxonomy_title() { + $object = $GLOBALS['wp_query']->get_queried_object(); + + $title = WPSEO_Taxonomy_Meta::get_term_meta( $object, $object->taxonomy, 'title' ); + + if ( is_string( $title ) && $title !== '' ) { + return wpseo_replace_vars( $title, $object ); + } + else { + return $this->get_title_from_options( 'title-tax-' . $object->taxonomy, $object ); + } + } + + /** + * Used for author titles. + * + * @return string + */ + public function get_author_title() { + $author_id = get_query_var( 'author' ); + $title = trim( get_the_author_meta( 'wpseo_title', $author_id ) ); + + if ( $title !== '' ) { + return wpseo_replace_vars( $title, array() ); + } + + return $this->get_title_from_options( 'title-author-wpseo' ); + } + + /** + * Simple function to use to pull data from $options. + * + * All titles pulled from options will be run through the wpseo_replace_vars function. + * + * @param string $index name of the page to get the title from the settings for. + * @param object|array $var_source possible object to pull variables from. + * + * @return string + */ + public function get_title_from_options( $index, $var_source = array() ) { + if ( ! isset( $this->options[ $index ] ) || $this->options[ $index ] === '' ) { + if ( is_singular() ) { + return wpseo_replace_vars( '%%title%% %%sep%% %%sitename%%', $var_source ); + } + else { + return ''; + } + } + else { + return wpseo_replace_vars( $this->options[ $index ], $var_source ); + } + } + + /** + * Get the default title for the current page. + * + * This is the fallback title generator used when a title hasn't been set for the specific content, taxonomy, author + * details, or in the options. It scrubs off any present prefix before or after the title (based on $seplocation) in + * order to prevent duplicate seperations from appearing in the title (this happens when a prefix is supplied to the + * wp_title call on singular pages). + * + * @param string $sep The separator used between variables. + * @param string $seplocation Whether the separator should be left or right. + * @param string $title Possible title that's already set. + * + * @return string + */ + public function get_default_title( $sep, $seplocation, $title = '' ) { + if ( 'right' == $seplocation ) { + $regex = '`\s*' . preg_quote( trim( $sep ), '`' ) . '\s*`u'; + } + else { + $regex = '`^\s*' . preg_quote( trim( $sep ), '`' ) . '\s*`u'; + } + $title = preg_replace( $regex, '', $title ); + + if ( ! is_string( $title ) || ( is_string( $title ) && $title === '' ) ) { + $title = get_bloginfo( 'name' ); + $title = $this->add_paging_to_title( $sep, $seplocation, $title ); + $title = $this->add_to_title( $sep, $seplocation, $title, strip_tags( get_bloginfo( 'description' ) ) ); + + return $title; + } + + $title = $this->add_paging_to_title( $sep, $seplocation, $title ); + $title = $this->add_to_title( $sep, $seplocation, $title, strip_tags( get_bloginfo( 'name' ) ) ); + + return $title; + } + + /** + * This function adds paging details to the title. + * + * @param string $sep Separator used in the title. + * @param string $seplocation Whether the separator should be left or right. + * @param string $title The title to append the paging info to. + * + * @return string + */ + public function add_paging_to_title( $sep, $seplocation, $title ) { + global $wp_query; + + if ( ! empty( $wp_query->query_vars['paged'] ) && $wp_query->query_vars['paged'] > 1 ) { + return $this->add_to_title( $sep, $seplocation, $title, $wp_query->query_vars['paged'] . '/' . $wp_query->max_num_pages ); + } + + return $title; + } + + /** + * Add part to title, while ensuring that the $seplocation variable is respected. + * + * @param string $sep Separator used in the title. + * @param string $seplocation Whether the separator should be left or right. + * @param string $title The title to append the title_part to. + * @param string $title_part The part to append to the title. + * + * @return string + */ + public function add_to_title( $sep, $seplocation, $title, $title_part ) { + if ( 'right' === $seplocation ) { + return $title . $sep . $title_part; + } + + return $title_part . $sep . $title; + } + + /** + * Main title function. + * + * @param string $title Title that might have already been set. + * @param string $separator Separator determined in theme (unused). + * @param string $separator_location Whether the separator should be left or right. + * + * @return string + */ + public function title( $title, $separator = '', $separator_location = '' ) { + if ( is_null( $this->title ) ) { + $this->title = $this->generate_title( $title, $separator_location ); + } + + return $this->title; + } + + /** + * Main title generation function. + * + * @param string $title Title that might have already been set. + * @param string $separator_location Whether the separator should be left or right. + * + * @return string + */ + private function generate_title( $title, $separator_location ) { + + if ( is_feed() ) { + return $title; + } + + $separator = wpseo_replace_vars( '%%sep%%', array() ); + $separator = ' ' . trim( $separator ) . ' '; + + if ( '' === trim( $separator_location ) ) { + $separator_location = ( is_rtl() ) ? 'left' : 'right'; + } + + // This needs to be kept track of in order to generate + // default titles for singular pages. + $original_title = $title; + + // This flag is used to determine if any additional + // processing should be done to the title after the + // main section of title generation completes. + $modified_title = true; + + // This variable holds the page-specific title part + // that is used to generate default titles. + $title_part = ''; + + if ( $this->is_home_static_page() ) { + $title = $this->get_content_title(); + } + elseif ( $this->is_home_posts_page() ) { + $title = $this->get_title_from_options( 'title-home-wpseo' ); + } + elseif ( $this->is_posts_page() ) { + $title = $this->get_content_title( get_post( get_option( 'page_for_posts' ) ) ); + } + elseif ( is_singular() ) { + $title = $this->get_content_title(); + + if ( ! is_string( $title ) || '' === $title ) { + $title_part = $original_title; + } + } + elseif ( is_search() ) { + $title = $this->get_title_from_options( 'title-search-wpseo' ); + + if ( ! is_string( $title ) || '' === $title ) { + $title_part = sprintf( __( 'Search for "%s"', 'wordpress-seo' ), esc_html( get_search_query() ) ); + } + } + elseif ( is_category() || is_tag() || is_tax() ) { + $title = $this->get_taxonomy_title(); + + if ( ! is_string( $title ) || '' === $title ) { + if ( is_category() ) { + $title_part = single_cat_title( '', false ); + } + elseif ( is_tag() ) { + $title_part = single_tag_title( '', false ); + } + else { + $title_part = single_term_title( '', false ); + if ( $title_part === '' ) { + $term = $GLOBALS['wp_query']->get_queried_object(); + $title_part = $term->name; + } + } + } + } + elseif ( is_author() ) { + $title = $this->get_author_title(); + + if ( ! is_string( $title ) || '' === $title ) { + $title_part = get_the_author_meta( 'display_name', get_query_var( 'author' ) ); + } + } + elseif ( is_post_type_archive() ) { + $post_type = get_query_var( 'post_type' ); + + if ( is_array( $post_type ) ) { + $post_type = reset( $post_type ); + } + + $title = $this->get_title_from_options( 'title-ptarchive-' . $post_type ); + + if ( ! is_string( $title ) || '' === $title ) { + $post_type_obj = get_post_type_object( $post_type ); + if ( isset( $post_type_obj->labels->menu_name ) ) { + $title_part = $post_type_obj->labels->menu_name; + } + elseif ( isset( $post_type_obj->name ) ) { + $title_part = $post_type_obj->name; + } + else { + $title_part = ''; // To be determined what this should be. + } + } + } + elseif ( is_archive() ) { + $title = $this->get_title_from_options( 'title-archive-wpseo' ); + + // @todo [JRF => Yoast] Should these not use the archive default if no title found ? + // WPSEO_Options::get_default( 'wpseo_titles', 'title-archive-wpseo' ) + // Replacement would be needed! + if ( empty( $title ) ) { + if ( is_month() ) { + $title_part = sprintf( __( '%s Archives', 'wordpress-seo' ), single_month_title( ' ', false ) ); + } + elseif ( is_year() ) { + $title_part = sprintf( __( '%s Archives', 'wordpress-seo' ), get_query_var( 'year' ) ); + } + elseif ( is_day() ) { + $title_part = sprintf( __( '%s Archives', 'wordpress-seo' ), get_the_date() ); + } + else { + $title_part = __( 'Archives', 'wordpress-seo' ); + } + } + } + elseif ( is_404() ) { + + $title = $this->get_title_from_options( 'title-404-wpseo' ); + + // @todo [JRF => Yoast] Should these not use the 404 default if no title found ? + // WPSEO_Options::get_default( 'wpseo_titles', 'title-404-wpseo' ) + // Replacement would be needed! + if ( empty( $title ) ) { + $title_part = __( 'Page not found', 'wordpress-seo' ); + } + } + else { + // In case the page type is unknown, leave the title alone. + $modified_title = false; + + // If you would like to generate a default title instead, + // the following code could be used + // $title_part = $title; + // instead of the line above. + } + + if ( ( $modified_title && empty( $title ) ) || ! empty( $title_part ) ) { + $title = $this->get_default_title( $separator, $separator_location, $title_part ); + } + + if ( defined( 'ICL_LANGUAGE_CODE' ) && false !== strpos( $title, ICL_LANGUAGE_CODE ) ) { + $title = str_replace( ' @' . ICL_LANGUAGE_CODE, '', $title ); + } + + /** + * Filter: 'wpseo_title' - Allow changing the Yoast SEO output + * + * @api string $title The page title being put out. + */ + + return esc_html( strip_tags( stripslashes( apply_filters( 'wpseo_title', $title ) ) ) ); + } + + /** + * Function used when title needs to be force overridden. + * + * @return string + */ + function force_wp_title() { + global $wp_query; + $old_wp_query = null; + + if ( ! $wp_query->is_main_query() ) { + $old_wp_query = $wp_query; + wp_reset_query(); + } + + $title = $this->title( '' ); + + if ( ! empty( $old_wp_query ) ) { + $GLOBALS['wp_query'] = $old_wp_query; + unset( $old_wp_query ); + } + + return $title; + } + + /** + * Outputs or returns the debug marker, which is also used for title replacement when force rewrite is active. + * + * @param bool $echo Whether or not to echo the debug marker. + * + * @return string + */ + public function debug_marker( $echo = true ) { + $marker = sprintf( + '<!-- This site is optimized with the ' . $this->head_product_name() . '%1$s - https://yoast.com/wordpress/plugins/seo/ -->', + /** + * Filter: 'wpseo_hide_version' - can be used to hide the Yoast SEO version in the debug marker (only available in Yoast SEO Premium) + * + * @api bool + */ + ( ( apply_filters( 'wpseo_hide_version', false ) && $this->is_premium() ) ? '' : ' v' . WPSEO_VERSION ) + ); + + if ( $echo === false ) { + return $marker; + } + else { + echo "\n${marker}\n"; + } + } + + /** + * Output Webmaster Tools authentication strings + */ + public function webmaster_tools_authentication() { + // Bing. + if ( $this->options['msverify'] !== '' ) { + echo '<meta name="msvalidate.01" content="' . esc_attr( $this->options['msverify'] ) . "\" />\n"; + } + + // Google. + if ( $this->options['googleverify'] !== '' ) { + echo '<meta name="google-site-verification" content="' . esc_attr( $this->options['googleverify'] ) . "\" />\n"; + } + + // Pinterest. + if ( $this->options['pinterestverify'] !== '' ) { + echo '<meta name="p:domain_verify" content="' . esc_attr( $this->options['pinterestverify'] ) . "\" />\n"; + } + + // Yandex. + if ( $this->options['yandexverify'] !== '' ) { + echo '<meta name="yandex-verification" content="' . esc_attr( $this->options['yandexverify'] ) . "\" />\n"; + } + } + + /** + * Main wrapper function attached to wp_head. This combines all the output on the frontend of the Yoast SEO plugin. + */ + public function head() { + global $wp_query; + + $old_wp_query = null; + + if ( ! $wp_query->is_main_query() ) { + $old_wp_query = $wp_query; + wp_reset_query(); + } + + /** + * Action: 'wpseo_head' - Allow other plugins to output inside the Yoast SEO section of the head section. + */ + do_action( 'wpseo_head' ); + + echo '<!-- / ', $this->head_product_name(), ". -->\n\n"; + + if ( ! empty( $old_wp_query ) ) { + $GLOBALS['wp_query'] = $old_wp_query; + unset( $old_wp_query ); + } + + return; + } + + + /** + * Output the meta robots value. + * + * @return string + */ + public function robots() { + global $wp_query, $post; + + $robots = array(); + $robots['index'] = 'index'; + $robots['follow'] = 'follow'; + $robots['other'] = array(); + + if ( is_singular() && is_object( $post ) ) { + + $option_name = 'noindex-' . $post->post_type; + $noindex = isset( $this->options[ $option_name ] ) && $this->options[ $option_name ] === true; + $private = 'private' === $post->post_status; + + if ( $noindex || $private ) { + $robots['index'] = 'noindex'; + } + + $robots = $this->robots_for_single_post( $robots ); + + } + else { + if ( is_search() || is_404() ) { + $robots['index'] = 'noindex'; + } + elseif ( is_tax() || is_tag() || is_category() ) { + $term = $wp_query->get_queried_object(); + if ( is_object( $term ) && ( isset( $this->options[ 'noindex-tax-' . $term->taxonomy ] ) && $this->options[ 'noindex-tax-' . $term->taxonomy ] === true ) ) { + $robots['index'] = 'noindex'; + } + + // Three possible values, index, noindex and default, do nothing for default. + $term_meta = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'noindex' ); + if ( is_string( $term_meta ) && 'default' !== $term_meta ) { + $robots['index'] = $term_meta; + } + + if ( $this->is_multiple_terms_query() ) { + $robots['index'] = 'noindex'; + } + } + elseif ( + ( is_author() && $this->options['noindex-author-wpseo'] === true ) || + ( is_date() && $this->options['noindex-archive-wpseo'] === true ) + ) { + $robots['index'] = 'noindex'; + } + elseif ( is_home() ) { + if ( get_query_var( 'paged' ) > 1 && $this->options['noindex-subpages-wpseo'] === true ) { + $robots['index'] = 'noindex'; + } + + $page_for_posts = get_option( 'page_for_posts' ); + if ( $page_for_posts ) { + $robots = $this->robots_for_single_post( $robots, $page_for_posts ); + } + unset( $page_for_posts ); + + } + elseif ( is_post_type_archive() ) { + $post_type = get_query_var( 'post_type' ); + + if ( is_array( $post_type ) ) { + $post_type = reset( $post_type ); + } + + if ( isset( $this->options[ 'noindex-ptarchive-' . $post_type ] ) && $this->options[ 'noindex-ptarchive-' . $post_type ] === true ) { + $robots['index'] = 'noindex'; + } + } + + $is_paged = isset( $wp_query->query_vars['paged'] ) && ( $wp_query->query_vars['paged'] && $wp_query->query_vars['paged'] > 1 ); + $noindex_subpages = $this->options['noindex-subpages-wpseo'] === true; + if ( $is_paged && $noindex_subpages ) { + $robots['index'] = 'noindex'; + } + + if ( $this->options['noodp'] === true ) { + $robots['other'][] = 'noodp'; + } + unset( $robot ); + } + + // Force override to respect the WP settings. + if ( '0' == get_option( 'blog_public' ) || isset( $_GET['replytocom'] ) ) { + $robots['index'] = 'noindex'; + } + + + $robotsstr = $robots['index'] . ',' . $robots['follow']; + + if ( $robots['other'] !== array() ) { + $robots['other'] = array_unique( $robots['other'] ); // TODO Most likely no longer needed, needs testing. + $robotsstr .= ',' . implode( ',', $robots['other'] ); + } + + $robotsstr = preg_replace( '`^index,follow,?`', '', $robotsstr ); + + /** + * Filter: 'wpseo_robots' - Allows filtering of the meta robots output of Yoast SEO + * + * @api string $robotsstr The meta robots directives to be echoed. + */ + $robotsstr = apply_filters( 'wpseo_robots', $robotsstr ); + + if ( is_string( $robotsstr ) && $robotsstr !== '' ) { + echo '<meta name="robots" content="', esc_attr( $robotsstr ), '"/>', "\n"; + } + + return $robotsstr; + } + + /** + * Determine $robots values for a single post + * + * @param array $robots Robots data array. + * @param int $post_id The post ID for which to determine the $robots values, defaults to current post. + * + * @return array + */ + public function robots_for_single_post( $robots, $post_id = 0 ) { + $noindex = WPSEO_Meta::get_value( 'meta-robots-noindex', $post_id ); + if ( $noindex === '1' ) { + $robots['index'] = 'noindex'; + } + elseif ( $noindex === '2' ) { + $robots['index'] = 'index'; + } + + if ( WPSEO_Meta::get_value( 'meta-robots-nofollow', $post_id ) === '1' ) { + $robots['follow'] = 'nofollow'; + } + + $meta_robots_adv = WPSEO_Meta::get_value( 'meta-robots-adv', $post_id ); + + if ( $meta_robots_adv !== '' && ( $meta_robots_adv !== '-' && $meta_robots_adv !== 'none' ) ) { + $meta_robots_adv = explode( ',', $meta_robots_adv ); + foreach ( $meta_robots_adv as $robot ) { + $robots['other'][] = $robot; + } + unset( $robot ); + } + elseif ( $meta_robots_adv === '' || $meta_robots_adv === '-' ) { + if ( $this->options['noodp'] === true ) { + $robots['other'][] = 'noodp'; + } + } + unset( $meta_robots_adv ); + + return $robots; + } + + /** + * This function normally outputs the canonical but is also used in other places to retrieve + * the canonical URL for the current page. + * + * @param bool $echo Whether or not to output the canonical element. + * @param bool $un_paged Whether or not to return the canonical with or without pagination added to the URL. + * @param bool $no_override Whether or not to return a manually overridden canonical. + * + * @return string $canonical + */ + public function canonical( $echo = true, $un_paged = false, $no_override = false ) { + if ( is_null( $this->canonical ) ) { + $this->generate_canonical(); + } + + $canonical = $this->canonical; + + if ( $un_paged ) { + $canonical = $this->canonical_unpaged; + } + elseif ( $no_override ) { + $canonical = $this->canonical_no_override; + } + + if ( $echo === false ) { + return $canonical; + } + + if ( is_string( $canonical ) && '' !== $canonical ) { + echo '<link rel="canonical" href="' . esc_url( $canonical, null, 'other' ) . '" />' . "\n"; + } + } + + /** + * This function normally outputs the canonical but is also used in other places to retrieve + * the canonical URL for the current page. + * + * @return void + */ + private function generate_canonical() { + $canonical = false; + $canonical_override = false; + + // Set decent canonicals for homepage, singulars and taxonomy pages. + if ( is_singular() ) { + $obj = get_queried_object(); + $canonical = get_permalink( $obj->ID ); + + $this->canonical_unpaged = $canonical; + + $canonical_override = WPSEO_Meta::get_value( 'canonical' ); + + // Fix paginated pages canonical, but only if the page is truly paginated. + if ( get_query_var( 'page' ) > 1 ) { + $num_pages = ( substr_count( $obj->post_content, '<!--nextpage-->' ) + 1 ); + if ( $num_pages && get_query_var( 'page' ) <= $num_pages ) { + if ( ! $GLOBALS['wp_rewrite']->using_permalinks() ) { + $canonical = add_query_arg( 'page', get_query_var( 'page' ), $canonical ); + } + else { + $canonical = user_trailingslashit( trailingslashit( $canonical ) . get_query_var( 'page' ) ); + } + } + } + } + else { + if ( is_search() ) { + $search_query = get_search_query(); + + // Regex catches case when /search/page/N without search term is itself mistaken for search term. R. + if ( ! empty( $search_query ) && ! preg_match( '|^page/\d+$|', $search_query ) ) { + $canonical = get_search_link(); + } + } + elseif ( is_front_page() ) { + $canonical = WPSEO_Utils::home_url(); + } + elseif ( $this->is_posts_page() ) { + + $posts_page_id = get_option( 'page_for_posts' ); + $canonical = WPSEO_Meta::get_value( 'canonical', $posts_page_id ); + + if ( empty( $canonical ) ) { + $canonical = get_permalink( $posts_page_id ); + } + } + elseif ( is_tax() || is_tag() || is_category() ) { + + $term = get_queried_object(); + + if ( ! empty( $term ) && ! $this->is_multiple_terms_query() ) { + + $canonical_override = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'canonical' ); + $term_link = get_term_link( $term, $term->taxonomy ); + + if ( ! is_wp_error( $term_link ) ) { + $canonical = $term_link; + } + } + } + elseif ( is_post_type_archive() ) { + $post_type = get_query_var( 'post_type' ); + if ( is_array( $post_type ) ) { + $post_type = reset( $post_type ); + } + $canonical = get_post_type_archive_link( $post_type ); + } + elseif ( is_author() ) { + $canonical = get_author_posts_url( get_query_var( 'author' ), get_query_var( 'author_name' ) ); + } + elseif ( is_archive() ) { + if ( is_date() ) { + if ( is_day() ) { + $canonical = get_day_link( get_query_var( 'year' ), get_query_var( 'monthnum' ), get_query_var( 'day' ) ); + } + elseif ( is_month() ) { + $canonical = get_month_link( get_query_var( 'year' ), get_query_var( 'monthnum' ) ); + } + elseif ( is_year() ) { + $canonical = get_year_link( get_query_var( 'year' ) ); + } + } + } + + $this->canonical_unpaged = $canonical; + + if ( $canonical && get_query_var( 'paged' ) > 1 ) { + global $wp_rewrite; + if ( ! $wp_rewrite->using_permalinks() ) { + if ( is_front_page() ) { + $canonical = trailingslashit( $canonical ); + } + $canonical = add_query_arg( 'paged', get_query_var( 'paged' ), $canonical ); + } + else { + if ( is_front_page() ) { + $canonical = WPSEO_Sitemaps_Router::get_base_url( '' ); + } + $canonical = user_trailingslashit( trailingslashit( $canonical ) . trailingslashit( $wp_rewrite->pagination_base ) . get_query_var( 'paged' ) ); + } + } + } + + $this->canonical_no_override = $canonical; + + if ( is_string( $canonical ) && $canonical !== '' ) { + // Force canonical links to be absolute, relative is NOT an option. + if ( WPSEO_Utils::is_url_relative( $canonical ) === true ) { + $canonical = $this->base_url( $canonical ); + } + } + + if ( is_string( $canonical_override ) && $canonical_override !== '' ) { + $canonical = $canonical_override; + } + + /** + * Filter: 'wpseo_canonical' - Allow filtering of the canonical URL put out by Yoast SEO + * + * @api string $canonical The canonical URL + */ + $this->canonical = apply_filters( 'wpseo_canonical', $canonical ); + } + + /** + * Parse the home URL setting to find the base URL for relative URLs. + * + * @param string $path Optional path string. + * + * @return string + */ + private function base_url( $path = null ) { + $url = get_option( 'home' ); + + $parts = wp_parse_url( $url ); + + $base_url = trailingslashit( $parts['scheme'] . '://' . $parts['host'] ); + + if ( ! is_null( $path ) ) { + $base_url .= ltrim( $path, '/' ); + } + + return $base_url; + } + + /** + * Adds 'prev' and 'next' links to archives. + * + * @link http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html + * @since 1.0.3 + */ + public function adjacent_rel_links() { + // Don't do this for Genesis, as the way Genesis handles homepage functionality is different and causes issues sometimes. + /** + * Filter 'wpseo_genesis_force_adjacent_rel_home' - Allows devs to allow echoing rel="next" / rel="prev" by Yoast SEO on Genesis installs + * + * @api bool $unsigned Whether or not to rel=next / rel=prev + */ + if ( is_home() && function_exists( 'genesis' ) && apply_filters( 'wpseo_genesis_force_adjacent_rel_home', false ) === false ) { + return; + } + + global $wp_query; + + if ( ! is_singular() ) { + $url = $this->canonical( false, true, true ); + + if ( is_string( $url ) && $url !== '' ) { + $paged = get_query_var( 'paged' ); + + if ( 0 == $paged ) { + $paged = 1; + } + + if ( $paged == 2 ) { + $this->adjacent_rel_link( 'prev', $url, ( $paged - 1 ), true ); + } + + // Make sure to use index.php when needed, done after paged == 2 check so the prev links to homepage will not have index.php erroneously. + if ( is_front_page() ) { + $url = WPSEO_Sitemaps_Router::get_base_url( '' ); + } + + if ( $paged > 2 ) { + $this->adjacent_rel_link( 'prev', $url, ( $paged - 1 ), true ); + } + + if ( $paged < $wp_query->max_num_pages ) { + $this->adjacent_rel_link( 'next', $url, ( $paged + 1 ), true ); + } + } + } + else { + $numpages = 0; + if ( isset( $wp_query->post->post_content ) ) { + $numpages = ( substr_count( $wp_query->post->post_content, '<!--nextpage-->' ) + 1 ); + } + if ( $numpages > 1 ) { + $page = get_query_var( 'page' ); + if ( ! $page ) { + $page = 1; + } + + $url = get_permalink( $wp_query->post->ID ); + + // If the current page is the frontpage, pagination should use /base/. + if ( $this->is_home_static_page() ) { + $usebase = true; + } + else { + $usebase = false; + } + + if ( $page > 1 ) { + $this->adjacent_rel_link( 'prev', $url, ( $page - 1 ), $usebase, 'single_paged' ); + } + if ( $page < $numpages ) { + $this->adjacent_rel_link( 'next', $url, ( $page + 1 ), $usebase, 'single_paged' ); + } + } + } + } + + /** + * Get adjacent pages link for archives + * + * @since 1.0.2 + * + * @param string $rel Link relationship, prev or next. + * @param string $url the un-paginated URL of the current archive. + * @param string $page the page number to add on to $url for the $link tag. + * @param boolean $incl_pagination_base whether or not to include /page/ or not. + * + * @return void + */ + private function adjacent_rel_link( $rel, $url, $page, $incl_pagination_base ) { + global $wp_rewrite; + if ( ! $wp_rewrite->using_permalinks() ) { + if ( $page > 1 ) { + $url = add_query_arg( 'paged', $page, $url ); + } + } + else { + if ( $page > 1 ) { + $base = ''; + if ( $incl_pagination_base ) { + $base = trailingslashit( $wp_rewrite->pagination_base ); + } + $url = user_trailingslashit( trailingslashit( $url ) . $base . $page ); + } + } + /** + * Filter: 'wpseo_' . $rel . '_rel_link' - Allow changing link rel output by Yoast SEO + * + * @api string $unsigned The full `<link` element. + */ + $link = apply_filters( 'wpseo_' . $rel . '_rel_link', '<link rel="' . esc_attr( $rel ) . '" href="' . esc_url( $url ) . "\" />\n" ); + + if ( is_string( $link ) && $link !== '' ) { + echo $link; + } + } + + /** + * Output the rel=publisher code on every page of the site. + * + * @return boolean Boolean indicating whether the publisher link was printed + */ + public function publisher() { + + if ( $this->options['plus-publisher'] !== '' ) { + echo '<link rel="publisher" href="', esc_url( $this->options['plus-publisher'] ), '"/>', "\n"; + + return true; + } + + return false; + } + + /** + * Outputs the meta keywords element. + * + * @return void + */ + public function metakeywords() { + global $wp_query, $post; + + if ( $this->options['usemetakeywords'] === false ) { + return; + } + + $keywords = ''; + + if ( is_singular() ) { + $keywords = WPSEO_Meta::get_value( 'metakeywords' ); + if ( $keywords === '' && ( is_object( $post ) && ( ( isset( $this->options[ 'metakey-' . $post->post_type ] ) && $this->options[ 'metakey-' . $post->post_type ] !== '' ) ) ) ) { + $keywords = wpseo_replace_vars( $this->options[ 'metakey-' . $post->post_type ], $post ); + } + } + else { + if ( $this->is_home_posts_page() && $this->options['metakey-home-wpseo'] !== '' ) { + $keywords = wpseo_replace_vars( $this->options['metakey-home-wpseo'], array() ); + } + elseif ( $this->is_home_static_page() ) { + $keywords = WPSEO_Meta::get_value( 'metakeywords' ); + if ( $keywords === '' && ( is_object( $post ) && ( isset( $this->options[ 'metakey-' . $post->post_type ] ) && $this->options[ 'metakey-' . $post->post_type ] !== '' ) ) ) { + $keywords = wpseo_replace_vars( $this->options[ 'metakey-' . $post->post_type ], $post ); + } + } + elseif ( $this->is_posts_page() ) { + $keywords = $this->get_keywords( get_post( get_option( 'page_for_posts' ) ) ); + } + elseif ( is_category() || is_tag() || is_tax() ) { + $term = $wp_query->get_queried_object(); + + if ( is_object( $term ) ) { + $keywords = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'metakey' ); + if ( ( ! is_string( $keywords ) || $keywords === '' ) && ( isset( $this->options[ 'metakey-tax-' . $term->taxonomy ] ) && $this->options[ 'metakey-tax-' . $term->taxonomy ] !== '' ) ) { + $keywords = wpseo_replace_vars( $this->options[ 'metakey-tax-' . $term->taxonomy ], $term ); + } + } + } + elseif ( is_author() ) { + $author_id = get_query_var( 'author' ); + $keywords = get_the_author_meta( 'metakey', $author_id ); + if ( ! $keywords && $this->options['metakey-author-wpseo'] !== '' ) { + $keywords = wpseo_replace_vars( $this->options['metakey-author-wpseo'], $wp_query->get_queried_object() ); + } + } + elseif ( is_post_type_archive() ) { + $post_type = get_query_var( 'post_type' ); + if ( is_array( $post_type ) ) { + $post_type = reset( $post_type ); + } + if ( isset( $this->options[ 'metakey-ptarchive-' . $post_type ] ) && $this->options[ 'metakey-ptarchive-' . $post_type ] !== '' ) { + $keywords = wpseo_replace_vars( $this->options[ 'metakey-ptarchive-' . $post_type ], $wp_query->get_queried_object() ); + } + } + } + + $keywords = apply_filters( 'wpseo_metakey', trim( $keywords ) ); // TODO Make deprecated. + + /** + * Filter: 'wpseo_metakeywords' - Allow changing the Yoast SEO meta keywords + * + * @api string $keywords The meta keywords to be echoed. + */ + $keywords = apply_filters( 'wpseo_metakeywords', trim( $keywords ) ); // More appropriately named. + + if ( is_string( $keywords ) && $keywords !== '' ) { + echo '<meta name="keywords" content="', esc_attr( strip_tags( stripslashes( $keywords ) ) ), '"/>', "\n"; + } + } + + /** + * Outputs the meta description element or returns the description text. + * + * @param bool $echo Echo or return output flag. + * + * @return string + */ + public function metadesc( $echo = true ) { + if ( is_null( $this->metadesc ) ) { + $this->generate_metadesc(); + } + + if ( $echo !== false ) { + if ( is_string( $this->metadesc ) && $this->metadesc !== '' ) { + echo '<meta name="description" content="', esc_attr( strip_tags( stripslashes( $this->metadesc ) ) ), '"/>', "\n"; + $this->add_robot_content_noodp( $this->metadesc ); + } + elseif ( current_user_can( 'manage_options' ) && is_singular() ) { + echo '<!-- ', __( 'Admin only notice: this page doesn\'t show a meta description because it doesn\'t have one, either write it for this page specifically or go into the SEO -> Titles menu and set up a template.', 'wordpress-seo' ), ' -->', "\n"; + } + } + else { + return $this->metadesc; + } + } + + /** + * Generates the meta description text. + */ + private function generate_metadesc() { + global $post, $wp_query; + + $metadesc = ''; + $metadesc_override = false; + $post_type = ''; + $template = ''; + + if ( is_object( $post ) && ( isset( $post->post_type ) && $post->post_type !== '' ) ) { + $post_type = $post->post_type; + } + + if ( is_singular() ) { + if ( ( $metadesc === '' && $post_type !== '' ) && isset( $this->options[ 'metadesc-' . $post_type ] ) ) { + $template = $this->options[ 'metadesc-' . $post_type ]; + $term = $post; + } + $metadesc_override = WPSEO_Meta::get_value( 'metadesc' ); + } + else { + if ( is_search() ) { + $metadesc = ''; + } + elseif ( $this->is_home_posts_page() ) { + $template = $this->options['metadesc-home-wpseo']; + $term = array(); + + if ( empty( $template ) ) { + $template = get_bloginfo( 'description' ); + } + } + elseif ( $this->is_posts_page() ) { + $metadesc = WPSEO_Meta::get_value( 'metadesc', get_option( 'page_for_posts' ) ); + if ( ( $metadesc === '' && $post_type !== '' ) && isset( $this->options[ 'metadesc-' . $post_type ] ) ) { + $page = get_post( get_option( 'page_for_posts' ) ); + $template = $this->options[ 'metadesc-' . $post_type ]; + $term = $page; + } + } + elseif ( $this->is_home_static_page() ) { + $metadesc = WPSEO_Meta::get_value( 'metadesc' ); + if ( ( $metadesc === '' && $post_type !== '' ) && isset( $this->options[ 'metadesc-' . $post_type ] ) ) { + $template = $this->options[ 'metadesc-' . $post_type ]; + } + } + elseif ( is_category() || is_tag() || is_tax() ) { + $term = $wp_query->get_queried_object(); + $metadesc_override = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'desc' ); + if ( is_object( $term ) && isset( $term->taxonomy, $this->options[ 'metadesc-tax-' . $term->taxonomy ] ) ) { + $template = $this->options[ 'metadesc-tax-' . $term->taxonomy ]; + } + } + elseif ( is_author() ) { + $author_id = get_query_var( 'author' ); + $metadesc = get_the_author_meta( 'wpseo_metadesc', $author_id ); + if ( ( ! is_string( $metadesc ) || $metadesc === '' ) && '' !== $this->options['metadesc-author-wpseo'] ) { + $template = $this->options['metadesc-author-wpseo']; + } + } + elseif ( is_post_type_archive() ) { + $post_type = get_query_var( 'post_type' ); + if ( is_array( $post_type ) ) { + $post_type = reset( $post_type ); + } + if ( isset( $this->options[ 'metadesc-ptarchive-' . $post_type ] ) ) { + $template = $this->options[ 'metadesc-ptarchive-' . $post_type ]; + } + } + elseif ( is_archive() ) { + $template = $this->options['metadesc-archive-wpseo']; + } + + // If we're on a paginated page, and the template doesn't change for paginated pages, bail. + if ( ( ! is_string( $metadesc ) || $metadesc === '' ) && get_query_var( 'paged' ) && get_query_var( 'paged' ) > 1 && $template !== '' ) { + if ( strpos( $template, '%%page' ) === false ) { + $metadesc = ''; + } + } + } + + $post_data = $post; + + if ( is_string( $metadesc_override ) && '' !== $metadesc_override ) { + $metadesc = $metadesc_override; + if ( isset( $term ) ) { + $post_data = $term; + } + } + else if ( ( ! is_string( $metadesc ) || '' === $metadesc ) && '' !== $template ) { + if ( ! isset( $term ) ) { + $term = $wp_query->get_queried_object(); + } + + $metadesc = $template; + $post_data = $term; + } + + $metadesc = wpseo_replace_vars( $metadesc, $post_data ); + + /** + * Filter: 'wpseo_metadesc' - Allow changing the Yoast SEO meta description sentence. + * + * @api string $metadesc The description sentence. + */ + $this->metadesc = apply_filters( 'wpseo_metadesc', trim( $metadesc ) ); + } + + /** + * Based on the redirect meta value, this function determines whether it should redirect the current post / page. + * + * @return boolean + */ + function page_redirect() { + if ( is_singular() ) { + global $post; + if ( ! isset( $post ) || ! is_object( $post ) ) { + return false; + } + + $redir = WPSEO_Meta::get_value( 'redirect', $post->ID ); + if ( $redir !== '' ) { + wp_redirect( $redir, 301 ); + exit; + } + } + + return false; + } + + /** + * Outputs noindex values for the current page. + */ + public function noindex_page() { + echo '<meta name="robots" content="noindex" />', "\n"; + } + + /** + * Send a Robots HTTP header preventing URL from being indexed in the search results while allowing search engines + * to follow the links in the object at the URL. + * + * @since 1.1.7 + * @return boolean Boolean indicating whether the noindex header was sent + */ + public function noindex_feed() { + + if ( ( is_feed() || is_robots() ) && headers_sent() === false ) { + header( 'X-Robots-Tag: noindex, follow', true ); + + return true; + } + + return false; + } + + /** + * Adds rel="nofollow" to a link, only used for login / registration links. + * + * @param string $input The link element as a string. + * + * @return string + */ + public function nofollow_link( $input ) { + return str_replace( '<a ', '<a rel="nofollow" ', $input ); + } + + /** + * When certain archives are disabled, this redirects those to the homepage. + * + * @return boolean False when no redirect was triggered + */ + function archive_redirect() { + global $wp_query; + + if ( + ( $this->options['disable-date'] === true && $wp_query->is_date ) || + ( $this->options['disable-author'] === true && $wp_query->is_author ) || + ( $this->options['disable-post_format'] === true && $wp_query->is_tax( 'post_format' ) ) + ) { + wp_safe_redirect( get_bloginfo( 'url' ), 301 ); + exit; + } + + return false; + } + + /** + * If the option to redirect attachments to their parent is checked, this performs the redirect. + * + * An extra check is done for when the attachment has no parent. + * + * @return boolean False when no redirect was triggered + */ + function attachment_redirect() { + global $post; + if ( is_attachment() && ( ( is_object( $post ) && isset( $post->post_parent ) ) && ( is_numeric( $post->post_parent ) && $post->post_parent != 0 ) ) ) { + wp_safe_redirect( get_permalink( $post->post_parent ), 301 ); + exit; + } + + return false; + } + + /** + * Trailing slashes for everything except is_single(). + * + * Thanks to Mark Jaquith for this code. + * + * @param string $url URL string. + * @param string $type Context (such as single). + * + * @return string + */ + function add_trailingslash( $url, $type ) { + if ( 'single' === $type || 'single_paged' === $type ) { + return $url; + } + else { + return trailingslashit( $url ); + } + } + + /** + * Removes the ?replytocom variable from the link, replacing it with a #comment-<number> anchor. + * + * @todo Should this function also allow for relative urls ? + * + * @param string $link The comment link as a string. + * + * @return string + */ + public function remove_reply_to_com( $link ) { + return preg_replace( '`href=(["\'])(?:.*(?:\?|&|&)replytocom=(\d+)#respond)`', 'href=$1#comment-$2', $link ); + } + + /** + * Redirect out the ?replytocom variables when cleanreplytocom is enabled + * + * @since 1.4.13 + * @return boolean + */ + function replytocom_redirect() { + + if ( isset( $_GET['replytocom'] ) && is_singular() ) { + $url = get_permalink( $GLOBALS['post']->ID ); + $hash = sanitize_text_field( $_GET['replytocom'] ); + $query_string = remove_query_arg( 'replytocom', sanitize_text_field( $_SERVER['QUERY_STRING'] ) ); + if ( ! empty( $query_string ) ) { + $url .= '?' . $query_string; + } + $url .= '#comment-' . $hash; + wp_safe_redirect( $url, 301 ); + exit; + } + + return false; + } + + /** + * Removes unneeded query variables from the URL. + * + * @return boolean + */ + public function clean_permalink() { + if ( is_robots() || get_query_var( 'sitemap' ) || empty( $_GET ) ) { + return false; + } + + global $wp_query; + + // Recreate current URL. + $cururl = 'http'; + if ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == 'on' ) { + $cururl .= 's'; + } + $cururl .= '://'; + + if ( $_SERVER['SERVER_PORT'] != '80' && $_SERVER['SERVER_PORT'] != '443' ) { + $cururl .= $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI']; + } + else { + $cururl .= $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; + } + $properurl = ''; + + if ( is_singular() ) { + global $post; + if ( empty( $post ) ) { + $post = $wp_query->get_queried_object(); + } + + $properurl = get_permalink( $post->ID ); + + $page = get_query_var( 'page' ); + if ( $page && $page != 1 ) { + $post = get_post( $post->ID ); + $page_count = substr_count( $post->post_content, '<!--nextpage-->' ); + if ( $page > ( $page_count + 1 ) ) { + $properurl = user_trailingslashit( trailingslashit( $properurl ) . ( $page_count + 1 ) ); + } + else { + $properurl = user_trailingslashit( trailingslashit( $properurl ) . $page ); + } + } + + // Fix reply to comment links, whoever decided this should be a GET variable? + if ( preg_match( '`(\?replytocom=[^&]+)`', sanitize_text_field( $_SERVER['REQUEST_URI'] ), $matches ) ) { + $properurl .= str_replace( '?replytocom=', '#comment-', $matches[0] ); + } + unset( $matches ); + + // Prevent cleaning out posts & page previews for people capable of viewing them. + if ( isset( $_GET['preview'], $_GET['preview_nonce'] ) && current_user_can( 'edit_post' ) ) { + $properurl = ''; + } + } + elseif ( is_front_page() ) { + if ( $this->is_home_posts_page() ) { + $properurl = get_bloginfo( 'url' ) . '/'; + } + elseif ( $this->is_home_static_page() ) { + $properurl = get_permalink( $GLOBALS['post']->ID ); + } + } + elseif ( is_category() || is_tag() || is_tax() ) { + $term = $wp_query->get_queried_object(); + if ( is_feed() ) { + $properurl = get_term_feed_link( $term->term_id, $term->taxonomy ); + } + else { + $properurl = get_term_link( $term, $term->taxonomy ); + } + } + elseif ( is_search() ) { + $s = urlencode( preg_replace( '`(%20|\+)`', ' ', get_search_query() ) ); + $properurl = get_bloginfo( 'url' ) . '/?s=' . $s; + } + elseif ( is_404() ) { + if ( is_multisite() && ! is_subdomain_install() && is_main_site() ) { + if ( $cururl == get_bloginfo( 'url' ) . '/blog/' || $cururl == get_bloginfo( 'url' ) . '/blog' ) { + if ( $this->is_home_static_page() ) { + $properurl = get_permalink( get_option( 'page_for_posts' ) ); + } + else { + $properurl = get_bloginfo( 'url' ) . '/'; + } + } + } + } + + if ( ! empty( $properurl ) && $wp_query->query_vars['paged'] != 0 && $wp_query->post_count != 0 ) { + if ( is_search() && ! empty( $s ) ) { + $properurl = get_bloginfo( 'url' ) . '/page/' . $wp_query->query_vars['paged'] . '/?s=' . $s; + } + else { + $properurl = user_trailingslashit( trailingslashit( $properurl ) . 'page/' . $wp_query->query_vars['paged'] ); + } + } + + // Prevent cleaning out the WP Subscription managers interface for everyone. + if ( isset( $_GET['wp-subscription-manager'] ) ) { + $properurl = ''; + } + + /** + * Filter: 'wpseo_whitelist_permalink_vars' - Allow plugins to register their own variables not to clean + * + * @api array $unsigned Array of permalink variables _not_ to clean. Empty by default. + */ + $whitelisted_extravars = apply_filters( 'wpseo_whitelist_permalink_vars', array() ); + + if ( $this->options['cleanpermalink-googlesitesearch'] === true ) { + // Prevent cleaning out Google Site searches. + $whitelisted_extravars = array_merge( $whitelisted_extravars, array( + 'q', + 'cx', + 'debug', + 'cof', + 'ie', + 'sa', + ) ); + } + + if ( $this->options['cleanpermalink-googlecampaign'] === true ) { + // Prevent cleaning out Google Analytics campaign variables. + $whitelisted_extravars = array_merge( $whitelisted_extravars, array( + 'utm_campaign', + 'utm_medium', + 'utm_source', + 'utm_content', + 'utm_term', + 'utm_id', + 'gclid', + ) ); + } + + if ( $this->options['cleanpermalink-extravars'] !== '' ) { + $extravars = explode( ',', $this->options['cleanpermalink-extravars'] ); + $extravars = array_map( 'trim', $extravars ); + $whitelisted_extravars = array_merge( $whitelisted_extravars, $extravars ); + unset( $extravars ); + } + + foreach ( $whitelisted_extravars as $get ) { + if ( isset( $_GET[ trim( $get ) ] ) ) { + $properurl = ''; + } + } + unset( $get ); + + if ( ! empty( $properurl ) && $cururl != $properurl ) { + wp_safe_redirect( $properurl, 301 ); + exit; + } + } + + /** + * Replaces the possible RSS variables with their actual values. + * + * @param string $content The RSS content that should have the variables replaced. + * + * @return string + */ + function rss_replace_vars( $content ) { + global $post; + + /** + * Allow the developer to determine whether or not to follow the links in the bits Yoast SEO adds to the RSS feed, defaults to true. + * + * @api bool $unsigned Whether or not to follow the links in RSS feed, defaults to true. + * + * @since 1.4.20 + */ + $no_follow = apply_filters( 'nofollow_rss_links', true ); + $no_follow_attr = ''; + if ( $no_follow === true ) { + $no_follow_attr = 'rel="nofollow" '; + } + + $author_link = ''; + if ( is_object( $post ) ) { + $author_link = '<a ' . $no_follow_attr . 'href="' . esc_url( get_author_posts_url( $post->post_author ) ) . '">' . get_the_author() . '</a>'; + } + + $post_link = '<a ' . $no_follow_attr . 'href="' . esc_url( get_permalink() ) . '">' . get_the_title() . '</a>'; + $blog_link = '<a ' . $no_follow_attr . 'href="' . esc_url( get_bloginfo( 'url' ) ) . '">' . get_bloginfo( 'name' ) . '</a>'; + $blog_desc_link = '<a ' . $no_follow_attr . 'href="' . esc_url( get_bloginfo( 'url' ) ) . '">' . get_bloginfo( 'name' ) . ' - ' . strip_tags( get_bloginfo( 'description' ) ) . '</a>'; + + $content = stripslashes( trim( $content ) ); + $content = str_replace( '%%AUTHORLINK%%', $author_link, $content ); + $content = str_replace( '%%POSTLINK%%', $post_link, $content ); + $content = str_replace( '%%BLOGLINK%%', $blog_link, $content ); + $content = str_replace( '%%BLOGDESCLINK%%', $blog_desc_link, $content ); + + return $content; + } + + /** + * Adds the RSS footer (or header) to the full RSS feed item. + * + * @param string $content Feed item content. + * + * @return string + */ + function embed_rssfooter( $content ) { + return $this->embed_rss( $content, 'full' ); + } + + /** + * Adds the RSS footer (or header) to the excerpt RSS feed item. + * + * @param string $content Feed item excerpt. + * + * @return string + */ + function embed_rssfooter_excerpt( $content ) { + return $this->embed_rss( $content, 'excerpt' ); + } + + /** + * Adds the RSS footer and/or header to an RSS feed item. + * + * @since 1.4.14 + * + * @param string $content Feed item content. + * @param string $context Feed item context, either 'excerpt' or 'full'. + * + * @return string + */ + function embed_rss( $content, $context = 'full' ) { + + /** + * Filter: 'wpseo_include_rss_footer' - Allow the RSS footer to be dynamically shown/hidden. + * + * @api boolean $show_embed Indicates if the RSS footer should be shown or not + * + * @param string $context The context of the RSS content - 'full' or 'excerpt'. + */ + if ( ! apply_filters( 'wpseo_include_rss_footer', true, $context ) ) { + return $content; + } + + if ( is_feed() ) { + $before = ''; + $after = ''; + + if ( $this->options['rssbefore'] !== '' ) { + $before = wpautop( $this->rss_replace_vars( $this->options['rssbefore'] ) ); + } + if ( $this->options['rssafter'] !== '' ) { + $after = wpautop( $this->rss_replace_vars( $this->options['rssafter'] ) ); + } + if ( $before !== '' || $after !== '' ) { + if ( ( isset( $context ) && $context === 'excerpt' ) && trim( $content ) !== '' ) { + $content = wpautop( $content ); + } + $content = $before . $content . $after; + } + } + + return $content; + } + + + /** + * Used in the force rewrite functionality this retrieves the output, replaces the title with the proper SEO + * title and then flushes the output. + */ + function flush_cache() { + + global $wp_query; + + if ( $this->ob_started !== true ) { + return false; + } + + $content = ob_get_clean(); + + $old_wp_query = $wp_query; + + wp_reset_query(); + + $title = $this->title( '' ); + + // Find all titles, strip them out and add the new one in within the debug marker, so it's easily identified whether a site uses force rewrite. + $content = preg_replace( '/<title.*?\/title>/i', '', $content ); + $content = str_replace( $this->debug_marker( false ), $this->debug_marker( false ) . "\n" . '<title>' . $title . '', $content ); + + $GLOBALS['wp_query'] = $old_wp_query; + + echo $content; + + return true; + } + + /** + * Starts the output buffer so it can later be fixed by flush_cache() + */ + function force_rewrite_output_buffer() { + $this->ob_started = true; + ob_start(); + } + + /** + * Function used in testing whether the title should be force rewritten or not. + * + * @param string $title Title string. + * + * @return string + */ + function title_test_helper( $title ) { + $wpseo_titles = get_option( 'wpseo_titles' ); + + $wpseo_titles['title_test'] ++; + update_option( 'wpseo_titles', $wpseo_titles ); + + // Prevent this setting from being on forever when something breaks, as it breaks caching. + if ( $wpseo_titles['title_test'] > 5 ) { + $wpseo_titles['title_test'] = 0; + update_option( 'wpseo_titles', $wpseo_titles ); + + remove_filter( 'wpseo_title', array( $this, 'title_test_helper' ) ); + + return $title; + } + + if ( ! defined( 'DONOTCACHEPAGE' ) ) { + define( 'DONOTCACHEPAGE', true ); + } + if ( ! defined( 'DONOTCACHCEOBJECT' ) ) { + define( 'DONOTCACHCEOBJECT', true ); + } + if ( ! defined( 'DONOTMINIFY' ) ) { + define( 'DONOTMINIFY', true ); + } + + if ( $_SERVER['HTTP_USER_AGENT'] === "WordPress/{$GLOBALS['wp_version']}; " . get_bloginfo( 'url' ) . ' - Yoast' ) { + return 'This is a Yoast Test Title'; + } + + return $title; + } + + /** + * Get the product name in the head section + * + * @return string + */ + private function head_product_name() { + if ( $this->is_premium() ) { + return 'Yoast SEO Premium plugin'; + } + else { + return 'Yoast SEO plugin'; + } + } + + /** + * Check if this plugin is the premium version of WPSEO + * + * @return bool + */ + private function is_premium() { + return file_exists( WPSEO_PATH . 'premium/' ); + } + + /** + * Checks whether the user has written a meta-description. If written, makes sure meta robots content is noodp. + * + * @param String $description The content of the meta description. + */ + private function add_robot_content_noodp( $description ) { + if ( ! ( empty( $description ) ) && $this->options['noodp'] === false ) { + $this->options['noodp'] = true; + } + } + + /** + * Getting the keywords + * + * @param WP_Post $post The post object with the values. + * + * @return string + */ + private function get_keywords( $post ) { + $keywords = WPSEO_Meta::get_value( 'metakeywords', $post->ID ); + $option_meta_key = 'metakey-' . $post->post_type; + + if ( $keywords === '' && ( is_object( $post ) && ( isset( $this->options[ $option_meta_key ] ) && $this->options[ $option_meta_key ] !== '' ) ) ) { + $keywords = wpseo_replace_vars( $this->options[ $option_meta_key ], $post ); + } + + return $keywords; + } + + /** + * Check if term archive query is for multiple terms (/term-1,term2/ or /term-1+term-2/). + * + * @return bool + */ + protected function is_multiple_terms_query() { + + global $wp_query; + + if ( ! is_tax() && ! is_tag() && ! is_category() ) { + return false; + } + + $term = get_queried_object(); + $queried_terms = $wp_query->tax_query->queried_terms; + + if ( empty( $queried_terms[ $term->taxonomy ]['terms'] ) ) { + return false; + } + + return count( $queried_terms[ $term->taxonomy ]['terms'] ) > 1; + } +} diff --git a/wp-content/plugins/wordpress-seo/frontend/class-googleplus.php b/wp-content/plugins/wordpress-seo/frontend/class-googleplus.php new file mode 100644 index 0000000..bf16f9e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/frontend/class-googleplus.php @@ -0,0 +1,71 @@ +options = WPSEO_Options::get_options( array( 'wpseo', 'wpseo_social' ) ); + + add_action( 'wpseo_head', array( $this, 'json_ld' ), 90 ); + add_action( 'wpseo_json_ld', array( $this, 'website' ), 10 ); + add_action( 'wpseo_json_ld', array( $this, 'organization_or_person' ), 20 ); + } + + /** + * JSON LD output function that the functions for specific code can hook into + * + * @since 1.8 + */ + public function json_ld() { + do_action( 'wpseo_json_ld' ); + } + + /** + * Outputs code to allow Google to recognize social profiles for use in the Knowledge graph + * + * @since 1.8 + */ + public function organization_or_person() { + if ( '' === $this->options['company_or_person'] ) { + return; + } + + $this->prepare_organization_person_markup(); + + switch ( $this->options['company_or_person'] ) { + case 'company': + $this->organization(); + break; + case 'person': + $this->person(); + break; + } + + $this->output( $this->options['company_or_person'] ); + } + + /** + * Outputs code to allow recognition of the internal search engine + * + * @since 1.5.7 + * + * @link https://developers.google.com/structured-data/site-name + */ + public function website() { + $this->data = array( + '@context' => 'http://schema.org', + '@type' => 'WebSite', + '@id' => '#website', + 'url' => $this->get_home_url(), + 'name' => $this->get_website_name(), + ); + + $this->add_alternate_name(); + $this->internal_search_section(); + + $this->output( 'website' ); + } + + /** + * Outputs the JSON LD code in a valid JSON+LD wrapper + * + * @since 1.8 + * + * @param string $context The context of the output, useful for filtering. + */ + private function output( $context ) { + /** + * Filter: 'wpseo_json_ld_output' - Allows filtering of the JSON+LD output + * + * @api array $output The output array, before its JSON encoded + * + * @param string $context The context of the output, useful to determine whether to filter or not. + */ + $this->data = apply_filters( 'wpseo_json_ld_output', $this->data, $context ); + + if ( is_array( $this->data ) && ! empty( $this->data ) ) { + $json_data = wp_json_encode( $this->data ); + + echo "', "\n"; + } + + // Empty the $data array so we don't output it twice. + $this->data = array(); + } + + /** + * Schema for Organization + */ + private function organization() { + if ( '' !== $this->options['company_name'] ) { + $this->data['@type'] = 'Organization'; + $this->data['@id'] = '#organization'; + $this->data['name'] = $this->options['company_name']; + $this->data['logo'] = $this->options['company_logo']; + return; + } + $this->data = false; + } + + /** + * Schema for Person + */ + private function person() { + if ( '' !== $this->options['person_name'] ) { + $this->data['@type'] = 'Person'; + $this->data['@id'] = '#person'; + $this->data['name'] = $this->options['person_name']; + return; + } + $this->data = false; + } + + /** + * Prepares the organization or person markup + */ + private function prepare_organization_person_markup() { + $this->fetch_social_profiles(); + + $this->data = array( + '@context' => 'http://schema.org', + '@type' => '', + 'url' => WPSEO_Frontend::get_instance()->canonical( false, true ), + 'sameAs' => $this->profiles, + ); + } + + /** + * Retrieve the social profiles to display in the organization output. + * + * @since 1.8 + * + * @link https://developers.google.com/webmasters/structured-data/customize/social-profiles + */ + private function fetch_social_profiles() { + $social_profiles = array( + 'facebook_site', + 'instagram_url', + 'linkedin_url', + 'plus-publisher', + 'myspace_url', + 'youtube_url', + 'pinterest_url', + ); + foreach ( $social_profiles as $profile ) { + if ( $this->options[ $profile ] !== '' ) { + $this->profiles[] = $this->options[ $profile ]; + } + } + + if ( ! empty( $this->options['twitter_site'] ) ) { + $this->profiles[] = 'https://twitter.com/' . $this->options['twitter_site']; + } + } + + /** + * Retrieves the home URL + * + * @return string + */ + private function get_home_url() { + /** + * Filter: 'wpseo_json_home_url' - Allows filtering of the home URL for Yoast SEO's JSON+LD output + * + * @api unsigned string + */ + return apply_filters( 'wpseo_json_home_url', WPSEO_Utils::home_url() ); + } + + /** + * Returns an alternate name if one was specified in the Yoast SEO settings + */ + private function add_alternate_name() { + if ( '' !== $this->options['alternate_website_name'] ) { + $this->data['alternateName'] = $this->options['alternate_website_name']; + } + } + + /** + * Adds the internal search JSON LD code if it's not disabled + * + * @link https://developers.google.com/structured-data/slsb-overview + */ + private function internal_search_section() { + /** + * Filter: 'disable_wpseo_json_ld_search' - Allow disabling of the json+ld output + * + * @api bool $display_search Whether or not to display json+ld search on the frontend + */ + if ( ! apply_filters( 'disable_wpseo_json_ld_search', false ) ) { + /** + * Filter: 'wpseo_json_ld_search_url' - Allows filtering of the search URL for Yoast SEO + * + * @api string $search_url The search URL for this site with a `{search_term_string}` variable. + */ + $search_url = apply_filters( 'wpseo_json_ld_search_url', $this->get_home_url() . '?s={search_term_string}' ); + + $this->data['potentialAction'] = array( + '@type' => 'SearchAction', + 'target' => $search_url, + 'query-input' => 'required name=search_term_string', + ); + } + } + + /** + * Returns the website name either from Yoast SEO's options or from the site settings + * + * @since 2.1 + * + * @return string + */ + private function get_website_name() { + if ( '' !== $this->options['website_name'] ) { + return $this->options['website_name']; + } + + return get_bloginfo( 'name' ); + } + + /** + * Renders internal search schema markup + * + * @deprecated 2.1 + * @deprecated use WPSEO_JSON_LD::website() + */ + public function internal_search() { + _deprecated_function( __METHOD__, 'WPSEO 2.1', 'WPSEO_JSON_LD::website()' ); + + $this->website(); + } +} diff --git a/wp-content/plugins/wordpress-seo/frontend/class-opengraph.php b/wp-content/plugins/wordpress-seo/frontend/class-opengraph.php new file mode 100644 index 0000000..18ab985 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/frontend/class-opengraph.php @@ -0,0 +1,1078 @@ +options = WPSEO_Options::get_option( 'wpseo_social' ); + + if ( isset( $GLOBALS['fb_ver'] ) || class_exists( 'Facebook_Loader', false ) ) { + add_filter( 'fb_meta_tags', array( $this, 'facebook_filter' ), 10, 1 ); + } + else { + add_filter( 'language_attributes', array( $this, 'add_opengraph_namespace' ), 15 ); + + add_action( 'wpseo_opengraph', array( $this, 'locale' ), 1 ); + add_action( 'wpseo_opengraph', array( $this, 'type' ), 5 ); + add_action( 'wpseo_opengraph', array( $this, 'og_title' ), 10 ); + add_action( 'wpseo_opengraph', array( $this, 'site_owner' ), 20 ); + add_action( 'wpseo_opengraph', array( $this, 'description' ), 11 ); + add_action( 'wpseo_opengraph', array( $this, 'url' ), 12 ); + add_action( 'wpseo_opengraph', array( $this, 'site_name' ), 13 ); + add_action( 'wpseo_opengraph', array( $this, 'website_facebook' ), 14 ); + if ( is_singular() && ! is_front_page() ) { + add_action( 'wpseo_opengraph', array( $this, 'article_author_facebook' ), 15 ); + add_action( 'wpseo_opengraph', array( $this, 'tags' ), 16 ); + add_action( 'wpseo_opengraph', array( $this, 'category' ), 17 ); + add_action( 'wpseo_opengraph', array( $this, 'publish_date' ), 19 ); + } + + add_action( 'wpseo_opengraph', array( $this, 'image' ), 30 ); + } + add_filter( 'jetpack_enable_open_graph', '__return_false' ); + add_action( 'wpseo_head', array( $this, 'opengraph' ), 30 ); + } + + /** + * Main OpenGraph output. + */ + public function opengraph() { + wp_reset_query(); + /** + * Action: 'wpseo_opengraph' - Hook to add all Facebook OpenGraph output to so they're close together. + */ + do_action( 'wpseo_opengraph' ); + } + + /** + * Internal function to output FB tags. This also adds an output filter to each bit of output based on the property. + * + * @param string $property Property attribute value. + * @param string $content Content attribute value. + * + * @return boolean + */ + public function og_tag( $property, $content ) { + $og_property = str_replace( ':', '_', $property ); + /** + * Filter: 'wpseo_og_' . $og_property - Allow developers to change the content of specific OG meta tags. + * + * @api string $content The content of the property + */ + $content = apply_filters( 'wpseo_og_' . $og_property, $content ); + if ( empty( $content ) ) { + return false; + } + + echo '', "\n"; + + return true; + } + + /** + * Filter the Facebook plugins metadata + * + * @param array $meta_tags the array to fix. + * + * @return array $meta_tags + */ + public function facebook_filter( $meta_tags ) { + $meta_tags['http://ogp.me/ns#type'] = $this->type( false ); + $meta_tags['http://ogp.me/ns#title'] = $this->og_title( false ); + + // Filter the locale too because the Facebook plugin locale code is not as good as ours. + $meta_tags['http://ogp.me/ns#locale'] = $this->locale( false ); + + $ogdesc = $this->description( false ); + if ( ! empty( $ogdesc ) ) { + $meta_tags['http://ogp.me/ns#description'] = $ogdesc; + } + + return $meta_tags; + } + + /** + * Filter for the namespace, adding the OpenGraph namespace. + * + * @link https://developers.facebook.com/docs/web/tutorials/scrumptious/open-graph-object/ + * + * @param string $input The input namespace string. + * + * @return string + */ + public function add_opengraph_namespace( $input ) { + $namespaces = array( + 'og: http://ogp.me/ns#', + ); + if ( $this->options['fbadminapp'] != 0 || ( is_array( $this->options['fb_admins'] ) && $this->options['fb_admins'] !== array() ) ) { + $namespaces[] = 'fb: http://ogp.me/ns/fb#'; + } + + /** + * Allow for adding additional namespaces to the prefix attributes. + * + * @since 3.9.0 + * + * @param array $namespaces Currently registered namespaces which are to be + * added to the prefix attribute. + * Namespaces are strings and have the following syntax: + * ns: http://url.to.namespace/definition + */ + $namespaces = apply_filters( 'wpseo_html_namespaces', $namespaces ); + $namespace_string = implode( ' ', array_unique( $namespaces ) ); + + if ( strpos( $input, ' prefix=' ) !== false ) { + $regex = '`prefix=([\'"])(.+?)\1`'; + $replace = 'prefix="$2 ' . $namespace_string . '"'; + $input = preg_replace( $regex, $replace, $input ); + } + else { + $input .= ' prefix="' . $namespace_string . '"'; + } + + return $input; + } + + /** + * Outputs the authors FB page. + * + * @link https://developers.facebook.com/blog/post/2013/06/19/platform-updates--new-open-graph-tags-for-media-publishers-and-more/ + * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ + * + * @return boolean + */ + public function article_author_facebook() { + if ( ! is_singular() ) { + return false; + } + + /** + * Filter: 'wpseo_opengraph_author_facebook' - Allow developers to filter the Yoast SEO post authors facebook profile URL + * + * @api bool|string $unsigned The Facebook author URL, return false to disable + */ + $facebook = apply_filters( 'wpseo_opengraph_author_facebook', get_the_author_meta( 'facebook', $GLOBALS['post']->post_author ) ); + + if ( $facebook && ( is_string( $facebook ) && $facebook !== '' ) ) { + $this->og_tag( 'article:author', $facebook ); + + return true; + } + + return false; + } + + /** + * Outputs the websites FB page. + * + * @link https://developers.facebook.com/blog/post/2013/06/19/platform-updates--new-open-graph-tags-for-media-publishers-and-more/ + * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ + * @return boolean + */ + public function website_facebook() { + + if ( 'article' === $this->type( false ) && ! empty( $this->options['facebook_site'] ) ) { + $this->og_tag( 'article:publisher', $this->options['facebook_site'] ); + + return true; + } + + return false; + } + + /** + * Outputs the site owner + * + * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ + * @return boolean + */ + public function site_owner() { + if ( isset( $this->options['fbadminapp'] ) && $this->options['fbadminapp'] != 0 ) { + $this->og_tag( 'fb:app_id', $this->options['fbadminapp'] ); + + return true; + } + else if ( isset( $this->options['fb_admins'] ) && is_array( $this->options['fb_admins'] ) && $this->options['fb_admins'] !== array() ) { + $adminstr = implode( ',', array_keys( $this->options['fb_admins'] ) ); + /** + * Filter: 'wpseo_opengraph_admin' - Allow developer to filter the fb:admins string put out by Yoast SEO + * + * @api string $adminstr The admin string + */ + $adminstr = apply_filters( 'wpseo_opengraph_admin', $adminstr ); + if ( is_string( $adminstr ) && $adminstr !== '' ) { + + $admins = explode( ',', $adminstr ); + + foreach ( $admins as $admin_id ) { + $this->og_tag( 'fb:admins', $admin_id ); + } + + return true; + } + } + + return false; + } + + /** + * Outputs the SEO title as OpenGraph title. + * + * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ + * + * @param bool $echo Whether or not to echo the output. + * + * @return string|boolean + */ + public function og_title( $echo = true ) { + + $frontend = WPSEO_Frontend::get_instance(); + $is_posts_page = $frontend->is_posts_page(); + + if ( is_singular() || $is_posts_page ) { + + $post_id = ( $is_posts_page ) ? get_option( 'page_for_posts' ) : get_the_ID(); + $post = get_post( $post_id ); + $title = WPSEO_Meta::get_value( 'opengraph-title', $post_id ); + + if ( $title === '' ) { + $title = $frontend->title( '' ); + } + else { + // Replace Yoast SEO Variables. + $title = wpseo_replace_vars( $title, $post ); + } + } + else if ( is_front_page() ) { + $title = ( isset( $this->options['og_frontpage_title'] ) && $this->options['og_frontpage_title'] !== '' ) ? $this->options['og_frontpage_title'] : $frontend->title( '' ); + } + elseif ( is_category() || is_tax() || is_tag() ) { + $title = WPSEO_Taxonomy_Meta::get_meta_without_term( 'opengraph-title' ); + if ( $title === '' ) { + $title = $frontend->title( '' ); + } + else { + // Replace Yoast SEO Variables. + $title = wpseo_replace_vars( $title, $GLOBALS['wp_query']->get_queried_object() ); + } + } + else { + $title = $frontend->title( '' ); + } + + /** + * Filter: 'wpseo_opengraph_title' - Allow changing the title specifically for OpenGraph + * + * @api string $unsigned The title string + */ + $title = trim( apply_filters( 'wpseo_opengraph_title', $title ) ); + + if ( is_string( $title ) && $title !== '' ) { + if ( $echo !== false ) { + $this->og_tag( 'og:title', $title ); + + return true; + } + } + + if ( $echo === false ) { + return $title; + } + + return false; + } + + /** + * Outputs the canonical URL as OpenGraph URL, which consolidates likes and shares. + * + * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ + * @return boolean + */ + public function url() { + /** + * Filter: 'wpseo_opengraph_url' - Allow changing the OpenGraph URL + * + * @api string $unsigned Canonical URL + */ + $url = apply_filters( 'wpseo_opengraph_url', WPSEO_Frontend::get_instance()->canonical( false ) ); + + if ( is_string( $url ) && $url !== '' ) { + $this->og_tag( 'og:url', esc_url( $url ) ); + + return true; + } + + return false; + } + + /** + * Output the locale, doing some conversions to make sure the proper Facebook locale is outputted. + * + * Last update/compare with FB list done on 2015-03-16 by Rarst + * + * @see http://www.facebook.com/translations/FacebookLocales.xml for the list of supported locales + * + * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ + * + * @param bool $echo Whether to echo or return the locale. + * + * @return string $locale + */ + public function locale( $echo = true ) { + /** + * Filter: 'wpseo_locale' - Allow changing the locale output + * + * @api string $unsigned Locale string + */ + $locale = apply_filters( 'wpseo_locale', get_locale() ); + + // Catch some weird locales served out by WP that are not easily doubled up. + $fix_locales = array( + 'ca' => 'ca_ES', + 'en' => 'en_US', + 'el' => 'el_GR', + 'et' => 'et_EE', + 'ja' => 'ja_JP', + 'sq' => 'sq_AL', + 'uk' => 'uk_UA', + 'vi' => 'vi_VN', + 'zh' => 'zh_CN', + ); + + if ( isset( $fix_locales[ $locale ] ) ) { + $locale = $fix_locales[ $locale ]; + } + + // Convert locales like "es" to "es_ES", in case that works for the given locale (sometimes it does). + if ( strlen( $locale ) == 2 ) { + $locale = strtolower( $locale ) . '_' . strtoupper( $locale ); + } + + // These are the locales FB supports. + $fb_valid_fb_locales = array( + 'af_ZA', // Afrikaans. + 'ak_GH', // Akan. + 'am_ET', // Amharic. + 'ar_AR', // Arabic. + 'as_IN', // Assamese. + 'ay_BO', // Aymara. + 'az_AZ', // Azerbaijani. + 'be_BY', // Belarusian. + 'bg_BG', // Bulgarian. + 'bn_IN', // Bengali. + 'br_FR', // Breton. + 'bs_BA', // Bosnian. + 'ca_ES', // Catalan. + 'cb_IQ', // Sorani Kurdish. + 'ck_US', // Cherokee. + 'co_FR', // Corsican. + 'cs_CZ', // Czech. + 'cx_PH', // Cebuano. + 'cy_GB', // Welsh. + 'da_DK', // Danish. + 'de_DE', // German. + 'el_GR', // Greek. + 'en_GB', // English (UK). + 'en_IN', // English (India). + 'en_PI', // English (Pirate). + 'en_UD', // English (Upside Down). + 'en_US', // English (US). + 'eo_EO', // Esperanto. + 'es_CL', // Spanish (Chile). + 'es_CO', // Spanish (Colombia). + 'es_ES', // Spanish (Spain). + 'es_LA', // Spanish. + 'es_MX', // Spanish (Mexico). + 'es_VE', // Spanish (Venezuela). + 'et_EE', // Estonian. + 'eu_ES', // Basque. + 'fa_IR', // Persian. + 'fb_LT', // Leet Speak. + 'ff_NG', // Fulah. + 'fi_FI', // Finnish. + 'fo_FO', // Faroese. + 'fr_CA', // French (Canada). + 'fr_FR', // French (France). + 'fy_NL', // Frisian. + 'ga_IE', // Irish. + 'gl_ES', // Galician. + 'gn_PY', // Guarani. + 'gu_IN', // Gujarati. + 'gx_GR', // Classical Greek. + 'ha_NG', // Hausa. + 'he_IL', // Hebrew. + 'hi_IN', // Hindi. + 'hr_HR', // Croatian. + 'hu_HU', // Hungarian. + 'hy_AM', // Armenian. + 'id_ID', // Indonesian. + 'ig_NG', // Igbo. + 'is_IS', // Icelandic. + 'it_IT', // Italian. + 'ja_JP', // Japanese. + 'ja_KS', // Japanese (Kansai). + 'jv_ID', // Javanese. + 'ka_GE', // Georgian. + 'kk_KZ', // Kazakh. + 'km_KH', // Khmer. + 'kn_IN', // Kannada. + 'ko_KR', // Korean. + 'ku_TR', // Kurdish (Kurmanji). + 'ky_KG', // Kyrgyz. + 'la_VA', // Latin. + 'lg_UG', // Ganda. + 'li_NL', // Limburgish. + 'ln_CD', // Lingala. + 'lo_LA', // Lao. + 'lt_LT', // Lithuanian. + 'lv_LV', // Latvian. + 'mg_MG', // Malagasy. + 'mi_NZ', // Maori. + 'mk_MK', // Macedonian. + 'ml_IN', // Malayalam. + 'mn_MN', // Mongolian. + 'mr_IN', // Marathi. + 'ms_MY', // Malay. + 'mt_MT', // Maltese. + 'my_MM', // Burmese. + 'nb_NO', // Norwegian (bokmal). + 'nd_ZW', // Ndebele. + 'ne_NP', // Nepali. + 'nl_BE', // Dutch (Belgie). + 'nl_NL', // Dutch. + 'nn_NO', // Norwegian (nynorsk). + 'ny_MW', // Chewa. + 'or_IN', // Oriya. + 'pa_IN', // Punjabi. + 'pl_PL', // Polish. + 'ps_AF', // Pashto. + 'pt_BR', // Portuguese (Brazil). + 'pt_PT', // Portuguese (Portugal). + 'qu_PE', // Quechua. + 'rm_CH', // Romansh. + 'ro_RO', // Romanian. + 'ru_RU', // Russian. + 'rw_RW', // Kinyarwanda. + 'sa_IN', // Sanskrit. + 'sc_IT', // Sardinian. + 'se_NO', // Northern Sami. + 'si_LK', // Sinhala. + 'sk_SK', // Slovak. + 'sl_SI', // Slovenian. + 'sn_ZW', // Shona. + 'so_SO', // Somali. + 'sq_AL', // Albanian. + 'sr_RS', // Serbian. + 'sv_SE', // Swedish. + 'sw_KE', // Swahili. + 'sy_SY', // Syriac. + 'sz_PL', // Silesian. + 'ta_IN', // Tamil. + 'te_IN', // Telugu. + 'tg_TJ', // Tajik. + 'th_TH', // Thai. + 'tk_TM', // Turkmen. + 'tl_PH', // Filipino. + 'tl_ST', // Klingon. + 'tr_TR', // Turkish. + 'tt_RU', // Tatar. + 'tz_MA', // Tamazight. + 'uk_UA', // Ukrainian. + 'ur_PK', // Urdu. + 'uz_UZ', // Uzbek. + 'vi_VN', // Vietnamese. + 'wo_SN', // Wolof. + 'xh_ZA', // Xhosa. + 'yi_DE', // Yiddish. + 'yo_NG', // Yoruba. + 'zh_CN', // Simplified Chinese (China). + 'zh_HK', // Traditional Chinese (Hong Kong). + 'zh_TW', // Traditional Chinese (Taiwan). + 'zu_ZA', // Zulu. + 'zz_TR', // Zazaki. + ); + + // Check to see if the locale is a valid FB one, if not, use en_US as a fallback. + if ( ! in_array( $locale, $fb_valid_fb_locales ) ) { + $locale = strtolower( substr( $locale, 0, 2 ) ) . '_' . strtoupper( substr( $locale, 0, 2 ) ); + if ( ! in_array( $locale, $fb_valid_fb_locales ) ) { + $locale = 'en_US'; + } + } + + if ( $echo !== false ) { + $this->og_tag( 'og:locale', $locale ); + } + + return $locale; + } + + /** + * Output the OpenGraph type. + * + * @param boolean $echo Whether to echo or return the type. + * + * @link https://developers.facebook.com/docs/reference/opengraph/object-type/object/ + * + * @return string $type + */ + public function type( $echo = true ) { + + if ( is_front_page() || is_home() ) { + $type = 'website'; + } + elseif ( is_singular() ) { + + // This'll usually only be changed by plugins right now. + $type = WPSEO_Meta::get_value( 'og_type' ); + + if ( $type === '' ) { + $type = 'article'; + } + } + else { + // We use "object" for archives etc. as article doesn't apply there. + $type = 'object'; + } + + /** + * Filter: 'wpseo_opengraph_type' - Allow changing the OpenGraph type of the page + * + * @api string $type The OpenGraph type string. + */ + $type = apply_filters( 'wpseo_opengraph_type', $type ); + + if ( is_string( $type ) && $type !== '' ) { + if ( $echo !== false ) { + $this->og_tag( 'og:type', $type ); + } + else { + return $type; + } + } + + return ''; + } + + /** + * Create new WPSEO_OpenGraph_Image class and get the images to set the og:image + * + * @param string|boolean $image Optional image URL. + */ + public function image( $image = false ) { + $opengraph_images = new WPSEO_OpenGraph_Image( $this->options, $image ); + + foreach ( $opengraph_images->get_images() as $img ) { + $this->og_tag( 'og:image', esc_url( $img ) ); + } + + $dimensions = $opengraph_images->get_dimensions(); + + if ( ! empty( $dimensions['width'] ) ) { + $this->og_tag( 'og:image:width', absint( $dimensions['width'] ) ); + } + + if ( ! empty( $dimensions['height'] ) ) { + $this->og_tag( 'og:image:height', absint( $dimensions['height'] ) ); + } + } + + /** + * Fallback method for plugins using image_output + * + * @param string $image Image URL. + */ + public function image_output( $image ) { + $this->image( $image ); + } + + /** + * Output the OpenGraph description, specific OG description first, if not, grab the meta description. + * + * @param bool $echo Whether to echo or return the description. + * + * @return string $ogdesc + */ + public function description( $echo = true ) { + $ogdesc = ''; + $frontend = WPSEO_Frontend::get_instance(); + + if ( is_front_page() ) { + if ( isset( $this->options['og_frontpage_desc'] ) && $this->options['og_frontpage_desc'] !== '' ) { + $ogdesc = wpseo_replace_vars( $this->options['og_frontpage_desc'], null ); + } + else { + $ogdesc = $frontend->metadesc( false ); + } + } + + $is_posts_page = $frontend->is_posts_page(); + + if ( is_singular() || $is_posts_page ) { + $post_id = ( $is_posts_page ) ? get_option( 'page_for_posts' ) : get_the_ID(); + $post = get_post( $post_id ); + $ogdesc = WPSEO_Meta::get_value( 'opengraph-description', $post_id ); + + // Replace Yoast SEO Variables. + $ogdesc = wpseo_replace_vars( $ogdesc, $post ); + + // Use metadesc if $ogdesc is empty. + if ( $ogdesc === '' ) { + $ogdesc = $frontend->metadesc( false ); + } + + // Tag og:description is still blank so grab it from get_the_excerpt(). + if ( ! is_string( $ogdesc ) || ( is_string( $ogdesc ) && $ogdesc === '' ) ) { + $ogdesc = str_replace( '[…]', '…', strip_tags( get_the_excerpt() ) ); + } + } + + if ( is_category() || is_tag() || is_tax() ) { + $ogdesc = WPSEO_Taxonomy_Meta::get_meta_without_term( 'opengraph-description' ); + if ( $ogdesc === '' ) { + $ogdesc = $frontend->metadesc( false ); + } + + if ( $ogdesc === '' ) { + $ogdesc = trim( strip_tags( term_description() ) ); + } + + if ( $ogdesc === '' ) { + $ogdesc = WPSEO_Taxonomy_Meta::get_meta_without_term( 'desc' ); + } + } + + // Strip shortcodes if any. + $ogdesc = strip_shortcodes( $ogdesc ); + + /** + * Filter: 'wpseo_opengraph_desc' - Allow changing the OpenGraph description + * + * @api string $ogdesc The description string. + */ + $ogdesc = trim( apply_filters( 'wpseo_opengraph_desc', $ogdesc ) ); + + if ( is_string( $ogdesc ) && $ogdesc !== '' ) { + if ( $echo !== false ) { + $this->og_tag( 'og:description', $ogdesc ); + } + } + + return $ogdesc; + } + + /** + * Output the site name straight from the blog info. + */ + public function site_name() { + /** + * Filter: 'wpseo_opengraph_site_name' - Allow changing the OpenGraph site name + * + * @api string $unsigned Blog name string + */ + $name = apply_filters( 'wpseo_opengraph_site_name', get_bloginfo( 'name' ) ); + if ( is_string( $name ) && $name !== '' ) { + $this->og_tag( 'og:site_name', $name ); + } + } + + /** + * Output the article tags as article:tag tags. + * + * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ + * @return boolean + */ + public function tags() { + if ( ! is_singular() ) { + return false; + } + + $tags = get_the_tags(); + if ( ! is_wp_error( $tags ) && ( is_array( $tags ) && $tags !== array() ) ) { + + foreach ( $tags as $tag ) { + $this->og_tag( 'article:tag', $tag->name ); + } + + return true; + } + + return false; + } + + /** + * Output the article category as an article:section tag. + * + * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ + * @return boolean; + */ + public function category() { + + if ( ! is_singular() ) { + return false; + } + + $terms = get_the_category(); + + if ( ! is_wp_error( $terms ) && ( is_array( $terms ) && $terms !== array() ) ) { + + // We can only show one section here, so we take the first one. + $this->og_tag( 'article:section', $terms[0]->name ); + + return true; + } + + return false; + } + + /** + * Output the article publish and last modification date + * + * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ + * @return boolean; + */ + public function publish_date() { + + if ( ! is_singular( 'post' ) ) { + /** + * Filter: 'wpseo_opengraph_show_publish_date' - Allow showing publication date for other post types + * + * @api bool $unsigned Whether or not to show publish date + * + * @param string $post_type The current URL's post type. + */ + if ( false === apply_filters( 'wpseo_opengraph_show_publish_date', false, get_post_type() ) ) { + return false; + } + } + + $pub = get_the_date( DATE_W3C ); + $this->og_tag( 'article:published_time', $pub ); + + $mod = get_the_modified_date( DATE_W3C ); + if ( $mod != $pub ) { + $this->og_tag( 'article:modified_time', $mod ); + $this->og_tag( 'og:updated_time', $mod ); + } + + return true; + } +} /* End of class */ + +/** + * Class WPSEO_OpenGraph_Image + */ +class WPSEO_OpenGraph_Image { + + /** + * @var array $options Holds options passed to the constructor + */ + private $options; + + /** + * @var array $images Holds the images that have been put out as OG image. + */ + private $images = array(); + + /** + * @TODO This needs to be refactored since we only hold one set of dimensions for multiple images. R. + * @var array $dimensions Holds image dimensions, if determined. + */ + protected $dimensions = array(); + + /** + * Constructor + * + * @param array $options Options set. + * @param string|boolean $image Optional image URL. + */ + public function __construct( $options, $image = false ) { + $this->options = $options; + + if ( ! empty( $image ) && $this->add_image( $image ) ) { + // Safely assume an image was added so we don't need to automatically determine it anymore. + } + else { + $this->set_images(); + } + } + + /** + * Return the images array + * + * @return array + */ + public function get_images() { + return $this->images; + } + + /** + * Return the dimensions array. + * + * @return array + */ + public function get_dimensions() { + return $this->dimensions; + } + + /** + * Check if page is front page or singular and call the corresponding functions. If not, call get_default_image. + */ + private function set_images() { + if ( is_front_page() ) { + $this->get_front_page_image(); + } + elseif ( is_home() ) { // Posts page, which won't be caught by is_singular() below. + $this->get_posts_page_image(); + } + + if ( is_singular() ) { + $this->get_singular_image(); + } + + if ( is_category() || is_tax() || is_tag() ) { + $this->get_opengraph_image_taxonomy(); + } + + $this->get_default_image(); + } + + /** + * If the frontpage image exists, call add_image + */ + private function get_front_page_image() { + if ( $this->options['og_frontpage_image'] !== '' ) { + $this->add_image( $this->options['og_frontpage_image'] ); + } + } + + /** + * Get the images of the posts page. + */ + private function get_posts_page_image() { + + $post_id = get_option( 'page_for_posts' ); + + if ( $this->get_opengraph_image_post( $post_id ) ) { + return; + } + + if ( $this->get_featured_image( $post_id ) ) { + return; + } + } + + /** + * Get the images of the singular post. + */ + private function get_singular_image() { + global $post; + + if ( $this->get_opengraph_image_post() ) { + return; + } + + if ( $this->get_attachment_page_image( $post->ID ) ) { + return; + } + + if ( $this->get_featured_image( $post->ID ) ) { + return; + } + + $this->get_content_images( $post ); + } + + /** + * Get default image and call add_image + */ + private function get_default_image() { + if ( count( $this->images ) === 0 && isset( $this->options['og_default_image'] ) && $this->options['og_default_image'] !== '' ) { + $this->add_image( $this->options['og_default_image'] ); + } + } + + /** + * If opengraph-image is set, call add_image and return true. + * + * @param int $post_id Optional post ID to use. + * + * @return bool + */ + private function get_opengraph_image_post( $post_id = 0 ) { + $ogimg = WPSEO_Meta::get_value( 'opengraph-image', $post_id ); + if ( $ogimg !== '' ) { + $this->add_image( $ogimg ); + + return true; + } + + return false; + } + + /** + * Check if taxonomy has an image and add this image + */ + private function get_opengraph_image_taxonomy() { + if ( ( $ogimg = WPSEO_Taxonomy_Meta::get_meta_without_term( 'opengraph-image' ) ) !== '' ) { + $this->add_image( $ogimg ); + } + } + + /** + * If there is a featured image, check image size. If image size is correct, call add_image and return true + * + * @param int $post_id The post ID. + * + * @return bool + */ + private function get_featured_image( $post_id ) { + + if ( has_post_thumbnail( $post_id ) ) { + /** + * Filter: 'wpseo_opengraph_image_size' - Allow changing the image size used for OpenGraph sharing + * + * @api string $unsigned Size string + */ + $thumb = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), apply_filters( 'wpseo_opengraph_image_size', 'original' ) ); + + if ( $this->check_featured_image_size( $thumb ) ) { + + $this->dimensions['width'] = $thumb[1]; + $this->dimensions['height'] = $thumb[2]; + + return $this->add_image( $thumb[0] ); + } + } + + return false; + } + + /** + * If this is an attachment page, call add_image with the attachment and return true + * + * @param int $post_id The post ID. + * + * @return bool + */ + private function get_attachment_page_image( $post_id ) { + if ( get_post_type( $post_id ) === 'attachment' ) { + $mime_type = get_post_mime_type( $post_id ); + switch ( $mime_type ) { + case 'image/jpeg': + case 'image/png': + case 'image/gif': + return $this->add_image( wp_get_attachment_url( $post_id ) ); + } + } + + return false; + } + + /** + * Filter: 'wpseo_pre_analysis_post_content' - Allow filtering the content before analysis + * + * @api string $post_content The Post content string + * + * @param object $post - The post object. + */ + private function get_content_images( $post ) { + $content = apply_filters( 'wpseo_pre_analysis_post_content', $post->post_content, $post ); + + if ( preg_match_all( '`]+>`', $content, $matches ) ) { + foreach ( $matches[0] as $img ) { + if ( preg_match( '`src=(["\'])(.*?)\1`', $img, $match ) ) { + $this->add_image( $match[2] ); + } + } + } + } + + /** + * Check size of featured image. If image is too small, return false, else return true + * + * @param array $img_data wp_get_attachment_image_src: url, width, height, icon. + * + * @return bool + */ + private function check_featured_image_size( $img_data ) { + + if ( ! is_array( $img_data ) ) { + return false; + } + + // Get the width and height of the image. + if ( $img_data[1] < 200 || $img_data[2] < 200 ) { + return false; + } + + return true; + } + + /** + * Display an OpenGraph image tag + * + * @param string $img - Source URL to the image. + * + * @return bool + */ + private function add_image( $img ) { + + $original = trim( $img ); + + // Filter: 'wpseo_opengraph_image' - Allow changing the OpenGraph image. + $img = trim( apply_filters( 'wpseo_opengraph_image', $img ) ); + + if ( $original !== $img ) { + $this->dimensions = array(); + } + + if ( empty( $img ) ) { + return false; + } + + if ( WPSEO_Utils::is_url_relative( $img ) === true ) { + $img = $this->get_relative_path( $img ); + } + + if ( in_array( $img, $this->images ) ) { + return false; + } + array_push( $this->images, $img ); + + return true; + } + + /** + * Get the relative path of the image + * + * @param array $img Image data array. + * + * @return bool|string + */ + private function get_relative_path( $img ) { + if ( $img[0] != '/' ) { + return false; + } + + // If it's a relative URL, it's relative to the domain, not necessarily to the WordPress install, we + // want to preserve domain name and URL scheme (http / https) though. + $parsed_url = wp_parse_url( home_url() ); + $img = $parsed_url['scheme'] . '://' . $parsed_url['host'] . $img; + + return $img; + } +} diff --git a/wp-content/plugins/wordpress-seo/frontend/class-primary-category.php b/wp-content/plugins/wordpress-seo/frontend/class-primary-category.php new file mode 100644 index 0000000..bbf6340 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/frontend/class-primary-category.php @@ -0,0 +1,69 @@ +get_primary_category( $post ); + + if ( false !== $primary_category && $primary_category !== $category->cat_ID ) { + $category = $this->get_category( $primary_category ); + } + + return $category; + } + + /** + * Get the id of the primary category + * + * @param WP_Post $post The post in question. + * + * @return int primary category id + */ + protected function get_primary_category( $post = null ) { + $post = get_post( $post ); + + if ( $post === null ) { + return false; + } + + $primary_term = new WPSEO_Primary_Term( 'category', $post->ID ); + + return $primary_term->get_primary_term(); + } + + /** + * Wrapper for get category to make mocking easier + * + * @param int $primary_category id of primary category. + * + * @return array|null|object|WP_Error + */ + protected function get_category( $primary_category ) { + $category = get_category( $primary_category ); + + return $category; + } +} diff --git a/wp-content/plugins/wordpress-seo/frontend/class-twitter.php b/wp-content/plugins/wordpress-seo/frontend/class-twitter.php new file mode 100644 index 0000000..a6a1747 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/frontend/class-twitter.php @@ -0,0 +1,643 @@ +options = WPSEO_Options::get_option( 'wpseo_social' ); + $this->twitter(); + } + + /** + * Outputs the Twitter Card code on singular pages. + */ + public function twitter() { + wp_reset_query(); + + $this->type(); + $this->description(); + $this->title(); + $this->site_twitter(); + $this->image(); + if ( is_singular() ) { + $this->author(); + } + + /** + * Action: 'wpseo_twitter' - Hook to add all Yoast SEO Twitter output to so they're close together. + */ + do_action( 'wpseo_twitter' ); + } + + /** + * Display the Twitter card type. + * + * This defaults to summary but can be filtered using the wpseo_twitter_card_type filter. + * + * @link https://dev.twitter.com/docs/cards + */ + protected function type() { + $this->determine_card_type(); + $this->sanitize_card_type(); + + $this->output_metatag( 'card', $this->type ); + } + + /** + * Determines the twitter card type for the current page + */ + private function determine_card_type() { + $this->type = $this->options['twitter_card_type']; + + // TODO this should be reworked to use summary_large_image for any fitting image R. + if ( is_singular() && has_shortcode( $GLOBALS['post']->post_content, 'gallery' ) ) { + + $this->images = get_post_gallery_images(); + + if ( count( $this->images ) > 0 ) { + $this->type = 'summary_large_image'; + } + } + + /** + * Filter: 'wpseo_twitter_card_type' - Allow changing the Twitter Card type as output in the Twitter card by Yoast SEO + * + * @api string $unsigned The type string + */ + $this->type = apply_filters( 'wpseo_twitter_card_type', $this->type ); + } + + /** + * Determines whether the card type is of a type currently allowed by Twitter + * + * @link https://dev.twitter.com/cards/types + */ + private function sanitize_card_type() { + if ( ! in_array( $this->type, array( + 'summary', + 'summary_large_image', + 'app', + 'player', + ) ) + ) { + $this->type = 'summary'; + } + } + + /** + * Output the metatag + * + * @param string $name Tag name string. + * @param string $value Tag value string. + * @param bool $escaped Force escape flag. + */ + private function output_metatag( $name, $value, $escaped = false ) { + + // Escape the value if not escaped. + if ( false === $escaped ) { + $value = esc_attr( $value ); + } + + /** + * Filter: 'wpseo_twitter_metatag_key' - Make the Twitter metatag key filterable + * + * @api string $key The Twitter metatag key + */ + $metatag_key = apply_filters( 'wpseo_twitter_metatag_key', 'name' ); + + // Output meta. + echo '', "\n"; + } + + /** + * Displays the description for Twitter. + * + * Only used when OpenGraph is inactive. + */ + protected function description() { + if ( is_singular() ) { + $meta_desc = $this->single_description(); + } + elseif ( WPSEO_Frontend::get_instance()->is_posts_page() ) { + $meta_desc = $this->single_description( get_option( 'page_for_posts' ) ); + } + elseif ( is_category() || is_tax() || is_tag() ) { + $meta_desc = $this->taxonomy_description(); + } + else { + $meta_desc = $this->fallback_description(); + } + + /** + * Filter: 'wpseo_twitter_description' - Allow changing the Twitter description as output in the Twitter card by Yoast SEO + * + * @api string $twitter The description string + */ + $meta_desc = apply_filters( 'wpseo_twitter_description', $meta_desc ); + if ( is_string( $meta_desc ) && $meta_desc !== '' ) { + $this->output_metatag( 'description', $meta_desc ); + } + } + + /** + * Returns the description for a singular page + * + * @param int $post_id Post ID. + * + * @return string + */ + private function single_description( $post_id = 0 ) { + $meta_desc = trim( WPSEO_Meta::get_value( 'twitter-description', $post_id ) ); + + if ( is_string( $meta_desc ) && '' !== $meta_desc ) { + return $meta_desc; + } + + $meta_desc = $this->fallback_description(); + if ( is_string( $meta_desc ) && '' !== $meta_desc ) { + return $meta_desc; + } + + return strip_tags( get_the_excerpt() ); + } + + + /** + * Getting the description for the taxonomy + * + * @return bool|mixed|string + */ + private function taxonomy_description() { + $meta_desc = WPSEO_Taxonomy_Meta::get_meta_without_term( 'twitter-description' ); + + if ( ! is_string( $meta_desc ) || $meta_desc === '' ) { + $meta_desc = $this->fallback_description(); + } + + if ( is_string( $meta_desc ) || $meta_desc !== '' ) { + return $meta_desc; + } + + return trim( strip_tags( term_description() ) ); + + } + + /** + * Returns a fallback description + * + * @return string + */ + private function fallback_description() { + return trim( WPSEO_Frontend::get_instance()->metadesc( false ) ); + } + + /** + * Displays the title for Twitter. + * + * Only used when OpenGraph is inactive. + */ + protected function title() { + if ( is_singular() ) { + $title = $this->single_title(); + } + elseif ( WPSEO_Frontend::get_instance()->is_posts_page() ) { + $title = $this->single_title( get_option( 'page_for_posts' ) ); + } + elseif ( is_category() || is_tax() || is_tag() ) { + $title = $this->taxonomy_title(); + } + else { + $title = $this->fallback_title(); + } + + /** + * Filter: 'wpseo_twitter_title' - Allow changing the Twitter title as output in the Twitter card by Yoast SEO + * + * @api string $twitter The title string + */ + $title = apply_filters( 'wpseo_twitter_title', $title ); + if ( is_string( $title ) && $title !== '' ) { + $this->output_metatag( 'title', $title ); + } + } + + /** + * Returns the Twitter title for a single post + * + * @param int $post_id Post ID. + * + * @return string + */ + private function single_title( $post_id = 0 ) { + $title = WPSEO_Meta::get_value( 'twitter-title', $post_id ); + if ( ! is_string( $title ) || $title === '' ) { + return $this->fallback_title(); + } + + return $title; + } + + /** + * Getting the title for the taxonomy + * + * @return bool|mixed|string + */ + private function taxonomy_title() { + $title = WPSEO_Taxonomy_Meta::get_meta_without_term( 'twitter-title' ); + + if ( ! is_string( $title ) || $title === '' ) { + return $this->fallback_title(); + } + + return $title; + } + + /** + * Returns the Twitter title for any page + * + * @return string + */ + private function fallback_title() { + return WPSEO_Frontend::get_instance()->title( '' ); + } + + /** + * Displays the Twitter account for the site. + */ + protected function site_twitter() { + /** + * Filter: 'wpseo_twitter_site' - Allow changing the Twitter site account as output in the Twitter card by Yoast SEO + * + * @api string $unsigned Twitter site account string + */ + $site = apply_filters( 'wpseo_twitter_site', $this->options['twitter_site'] ); + $site = $this->get_twitter_id( $site ); + + if ( is_string( $site ) && $site !== '' ) { + $this->output_metatag( 'site', '@' . $site ); + } + } + + /** + * Checks if the given id is actually an id or a url and if url, distills the id from it. + * + * Solves issues with filters returning urls and theme's/other plugins also adding a user meta + * twitter field which expects url rather than an id (which is what we expect). + * + * @param string $id Twitter ID or url. + * + * @return string|bool Twitter ID or false if it failed to get a valid Twitter ID. + */ + private function get_twitter_id( $id ) { + if ( preg_match( '`([A-Za-z0-9_]{1,25})$`', $id, $match ) ) { + return $match[1]; + } + else { + return false; + } + } + + /** + * Displays the image for Twitter + * + * Only used when OpenGraph is inactive or Summary Large Image card is chosen. + */ + protected function image() { + + if ( is_category() || is_tax() || is_tag() ) { + $this->taxonomy_image_output(); + } + else { + $this->single_image_output(); + } + + if ( count( $this->shown_images ) === 0 && $this->options['og_default_image'] !== '' ) { + $this->image_output( $this->options['og_default_image'] ); + } + } + + /** + * Outputs the first image of a gallery. + */ + private function gallery_images_output() { + + $this->image_output( reset( $this->images ) ); + } + + /** + * @return bool + */ + private function taxonomy_image_output() { + foreach ( array( 'twitter-image', 'opengraph-image' ) as $tag ) { + $img = WPSEO_Taxonomy_Meta::get_meta_without_term( $tag ); + if ( $img !== '' ) { + $this->image_output( $img ); + + return true; + } + } + + return false; + } + + /** + * Takes care of image output when we only need to display a single image. + */ + private function single_image_output() { + if ( $this->homepage_image_output() ) { + return; + } + elseif ( $this->posts_page_image_output() ) { // Posts page, which won't be caught by is_singular() below. + return; + } + + if ( is_singular() ) { + if ( $this->image_from_meta_values_output() ) { + return; + } + + $post_id = get_the_ID(); + + if ( $this->image_of_attachment_page_output( $post_id ) ) { + return; + } + if ( $this->image_thumbnail_output() ) { + return; + } + if ( count( $this->images ) > 0 ) { + $this->gallery_images_output(); + return; + } + if ( $this->image_from_content_output() ) { + return; + } + } + } + + /** + * Show the front page image + * + * @return bool + */ + private function homepage_image_output() { + if ( is_front_page() ) { + if ( $this->options['og_frontpage_image'] !== '' ) { + $this->image_output( $this->options['og_frontpage_image'] ); + + return true; + } + } + + return false; + } + + /** + * Show the posts page image. + * + * @return bool + */ + private function posts_page_image_output() { + + if ( is_front_page() || ! is_home() ) { + return false; + } + + $post_id = get_option( 'page_for_posts' ); + + if ( $this->image_from_meta_values_output( $post_id ) ) { + return true; + } + + if ( $this->image_thumbnail_output( $post_id ) ) { + return true; + } + + return false; + } + + /** + * Outputs a Twitter image tag for a given image + * + * @param string $img The source URL to the image. + * @param boolean $tag Deprecated argument, previously used for gallery images. + * + * @return bool + */ + protected function image_output( $img, $tag = false ) { + + if ( $tag ) { + _deprecated_argument( __METHOD__, 'WPSEO 2.4' ); + } + + /** + * Filter: 'wpseo_twitter_image' - Allow changing the Twitter Card image + * + * @api string $img Image URL string + */ + $img = apply_filters( 'wpseo_twitter_image', $img ); + + if ( WPSEO_Utils::is_url_relative( $img ) === true && $img[0] === '/' ) { + $parsed_url = wp_parse_url( home_url() ); + $img = $parsed_url['scheme'] . '://' . $parsed_url['host'] . $img; + } + + $escaped_img = esc_url( $img ); + + if ( in_array( $escaped_img, $this->shown_images ) ) { + return false; + } + + if ( is_string( $escaped_img ) && $escaped_img !== '' ) { + $this->output_metatag( 'image', $escaped_img, true ); + array_push( $this->shown_images, $escaped_img ); + + return true; + } + + return false; + } + + /** + * Retrieve images from the post meta values + * + * @param int $post_id Optional post ID to use. + * + * @return bool + */ + private function image_from_meta_values_output( $post_id = 0 ) { + foreach ( array( 'twitter-image', 'opengraph-image' ) as $tag ) { + $img = WPSEO_Meta::get_value( $tag, $post_id ); + if ( $img !== '' ) { + $this->image_output( $img ); + + return true; + } + } + + return false; + } + + /** + * Retrieve an attachment page's attachment + * + * @param string $attachment_id The ID of the attachment for which to retrieve the image. + * + * @return bool + */ + private function image_of_attachment_page_output( $attachment_id ) { + if ( get_post_type( $attachment_id ) === 'attachment' ) { + $mime_type = get_post_mime_type( $attachment_id ); + switch ( $mime_type ) { + case 'image/jpeg': + case 'image/png': + case 'image/gif': + $this->image_output( wp_get_attachment_url( $attachment_id ) ); + return true; + } + } + + return false; + } + + /** + * Retrieve the featured image + * + * @param int $post_id Optional post ID to use. + * + * @return bool + */ + private function image_thumbnail_output( $post_id = 0 ) { + + if ( empty( $post_id ) ) { + $post_id = get_the_ID(); + } + + if ( function_exists( 'has_post_thumbnail' ) && has_post_thumbnail( $post_id ) ) { + /** + * Filter: 'wpseo_twitter_image_size' - Allow changing the Twitter Card image size + * + * @api string $featured_img Image size string + */ + $featured_img = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), apply_filters( 'wpseo_twitter_image_size', 'full' ) ); + + if ( $featured_img ) { + $this->image_output( $featured_img[0] ); + + return true; + } + } + + return false; + } + + /** + * Retrieve the image from the content + * + * @return bool + */ + private function image_from_content_output() { + /** + * Filter: 'wpseo_pre_analysis_post_content' - Allow filtering the content before analysis + * + * @api string $post_content The Post content string + * + * @param object $post - The post object. + */ + global $post; + $content = apply_filters( 'wpseo_pre_analysis_post_content', $post->post_content, $post ); + + if ( preg_match_all( '`]+>`', $content, $matches ) ) { + foreach ( $matches[0] as $img ) { + if ( preg_match( '`src=(["\'])(.*?)\1`', $img, $match ) ) { + $this->image_output( $match[2] ); + + return true; + } + } + } + + return false; + } + + /** + * Displays the authors Twitter account. + */ + protected function author() { + $twitter = ltrim( trim( get_the_author_meta( 'twitter', get_post()->post_author ) ), '@' ); + /** + * Filter: 'wpseo_twitter_creator_account' - Allow changing the Twitter account as output in the Twitter card by Yoast SEO + * + * @api string $twitter The twitter account name string + */ + $twitter = apply_filters( 'wpseo_twitter_creator_account', $twitter ); + $twitter = $this->get_twitter_id( $twitter ); + + if ( is_string( $twitter ) && $twitter !== '' ) { + $this->output_metatag( 'creator', '@' . $twitter ); + } + elseif ( $this->options['twitter_site'] !== '' ) { + if ( is_string( $this->options['twitter_site'] ) && $this->options['twitter_site'] !== '' ) { + $this->output_metatag( 'creator', '@' . $this->options['twitter_site'] ); + } + } + } + + /** + * Get the singleton instance of this class + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Displays the domain tag for the site. + * + * @deprecated 3.0 + */ + protected function site_domain() { + _deprecated_function( __METHOD__, 'WPSEO 3.0' ); + } +} /* End of class */ diff --git a/wp-content/plugins/wordpress-seo/frontend/index.php b/wp-content/plugins/wordpress-seo/frontend/index.php new file mode 100644 index 0000000..e94d9a4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/frontend/index.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/images/banner/basic-seo-training.png b/wp-content/plugins/wordpress-seo/images/banner/basic-seo-training.png new file mode 100644 index 0000000000000000000000000000000000000000..3a1828b6411fdf9c3f175e8d8a4c46789fc02dc5 GIT binary patch literal 83980 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

    !{tPQK-RKaCh2#te{szfrHhU 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

  • ;2Z-H`e+G##@M0dHj_?NMiY#X8y|0b4f^_QIs6> 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�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 -K*9pu1>lFva zxSuyM|ILBs`oO5_0u&q;@p1kIb!`<(Z|GIGR`|R+C$3E`WNSbIdD9k2A zV!@8Uhy}&Mu!e!7A0f~@?n@_s%8esnq@o=9TQds3k9!<)Jjp;+i;;%EOKla&e zx3_vOnCI}^#=^&Zz4+!_(RuTo$8}wQgOXaWW5jF>zD$kh+r_T%RNOOkVLKKtmNl=MwNCG4 z&}d z15)u`73`_;UR;NQZSu)ClMg~GOhHfw80(4>*mD7E#F_WTV(f;=<5Eb;nK8w!o@XL} zPrlYgCMd)zRA|nYxyt6%O=9_f6n^xhpKq~Q`0BMnm1Qu!_J zIe(ldT91nY;;9^`Xe(zOAL}6V+)W&C)%wj_`tM>14my6dpvUs-Yt91$n6OFEwV=p4=JegVr@lOrUAz&VvH~6WQ@6Eb}^a=dpG@Tv?QWx@F-r47h+D4Rx?N5 zn6GYVixC$$-4=M^>AZFmMDFl@U=hR>8l(L4SV19V0aY_3O||YJRxG~OYs8Bul8y`RyizO*(OT(v#mfl-{892&GY2c;JK9-8_A=z>W{bV3?xGBy$;F&2QcZaYbUGX(8uOu*`D_0^8@SV?!1vEYt2_D6ieJerHz7w96-Yc4$n!hO&} z-0#?O4e=%poYk)0Mb%G`UCdl8rG3H~ISDP6wv!tv;s*Vs-!^ZA7%Q$pTEX*bF4U|E zFE<_1L;58R#r@hOX``vy#QgAj%sV{cQRAjY8u?Lrg3=pIZDFDO^Tn``b|1Li% zC!VzCjQ|^iBj75^F8Uy)ixaOgIo)Y9DO3P84$Wf6x#fe3Bwk@mLhlSsg22?RsvD&L z-a#946?c(JNhMOsM+unBjhcOk@pNNHpFmQII=G{P<%BRF9UF7eYqFrK<9^x8KQ?^* z>)#)GzRo@G`eEaycQVNt+ZfL*Zfd8Zomj9#U^DK9Nktm(8RM82E>OIV{BpjupExFS zKsy~3UGqwsphD?2sv(YY*H4$!h-xfg&-3)p`5?h3&n(hjpZP$pnm1}paIZ8q*)*Rq zqV{-G<4urtO|eBGS3z}ys4-lWy(4yW?)aDw9y1FE$J0*~a7>t+M>OPTw0UBVS&yvE z)<@2#jT>{4xo_QM>@dIaeDaz%Oq+xa!+r0!^G{1}Ftvr!BrMxqrcJ|5_qgZ35085E zvxmn$?p4zp-h=_LNR!O(Ghf|J8CZ*g1M4w3wgL3~nj5d^kaav3eLtR$1w%mpZb9*!G}H49%HPbX*WpK*!B&;G??#YXQbJN(yh%rO^s zH4DG~_3ws{fBYyEMLp6~3}o@nS&f1GRdX0~&ug`{ieqdNM2nY?t6_^9gccskLE>ZF ztV!ll+%O7biE`6a7`+}fFl-ErWl~&&wK;~$OJ6T->(2l7x{YmYUW2(HiyOoCxQdzY z_4?x45k6HAPUc4t->i9M&^a0MMln>;mLHx!EdIh=zC|3AUOzd#snq;w?SIa2&uI_v zfCsLqlC=@F{ida8w7_Pt9y?6LS`P0erHxNSM%kLyiZGrZG#`*j*v%%u;00000NkvXXu0mjfL09i` literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wordpress-seo/images/banner/configuration-service.png b/wp-content/plugins/wordpress-seo/images/banner/configuration-service.png new file mode 100644 index 0000000000000000000000000000000000000000..5a43c21925e669c75794883aa1f80021e557a2cc GIT binary patch literal 79768 zcmV)XK&`)tP)`-~n+ul$<{GPY{$JB%O{A}d_>oP`pV}!}qCH2;3pV9td*{nf9hxp@pLl%BcK>t!Q2CpQ%gW!3f9z2C z{K*@_=Qc_wuRZm=(*N=A9a$FcTz<@Ay6?{y?l z60ei=+ut?qwBxzgwo#XRAzSjhJ$hK*x8Bxmwr!|3zV2gP-!VcO@eW|OUJvZg>tT=m z8PsR8*YHo>QS0LveBD~t-qX!IAjpCB!86CA7|~Dp_WF@)rF(zsym@WA9;43~&%G*( zgMN9#>gSZ>pY~AsfV54>#Q9e@A$H@~XEb;42>5&3x;**SV)z&F=onFDiQ<>XnaNy6x}g*15r4B?|R_O+Ik<*BBKYVkOB>dI7+&(q4i@>`h3VxHIq;C!b3^f6PzzE-Kod*?2hkfURfq;u^ z>qv$HUmmOMI5rQMLDWWX*r=C5%Qo^{`|1zt&vkxg$%l02+mgp-9r|Xzsx|w?Yx@T= zfFDTw1p@(zM}N-M5ey(HIOPnC_SCspld-i5(HG ze4Y27&rzE&DF)|7AIs~q_rZJ0!~=K#(zIC~0$W6hx7K( zOY*{J=*wpxxu}M+r92?66~RsGSVxc?tyi3U?ie8gD)n1EV63o*YsDf^!Zq^ApZA?R z{0krrgs>svWkEgNCy{P`W@kxzL?l3c*7K6$?~cIw%W1@UVQ{IK8jqnVPP z1^3k?+r5Tg*@-yr{;Dr7A9&YWO63S+H!r^P*Op%Xyq!l9ZoT20NWyPTTv=YWXMUH0 zc=wBf2Q0+E>fxioAkYD*;_$(b)<{GKWJ7Ta9A#56$%lYIHYKvBH$n_;`GIH{i7+_^ zeIj11(>>zxfVMaW+mU_QP)(G(@^LR{Q}No5*U7dBM=NIc!#Pv0VZ$Uzu}Rlpo#bH9 zrwtG}5rzCr3?)-Kza#B`OPjRnd3rvWyPtbaCSE^6zdftyzy6zr$p`QGxv{I>`kJ%9 z@T@28D3b862d@($7%mS?9o&uJ-4TUB4#+-K%eWQ^*pxN^am{iSulL)ZzKa+<440+T zeuM5Ke&iyc3%e~KU8c{_H5rH;FpQQ5efzL~)*ZFeAcO4<9ojMQ*rsb@!h(1eYvhT1 zJalDWwq-A=vujsHHeuUqT{q-d#lB!$Yf^viX9&MX4zi(spzpNf{xJvS=<|Tsp{w{9 z8*88#P5wd@5B8Pnfw-KP*Kuz&W=Tf0We5AyHc*F#{aE|@)z7K_HN=08z4tp_=l{Cl zl9qqD`I>Vk3Ew@jZ+C)sM-+6}1ZV=DWju?45{DYVrhyyJdHCyfNa!+-dQG8i9^wGo z`ia;)fWm&n$QTB=52^Yg$Q6S))@%5{j_MG#LmjFgtw$et&pxn60d9y#YeX&t!tQs} z5AjAVq$BXod_{lQ0}WvU0`fp@vFC72eZ?YDg!xf>X_Ig_s$;)*?5NzvP(-4`X0#$j$v? ztR|p1FCdmCNfeMd?w@>)m{{nLPr$z z7VZJ*?+xlE5+3XZa1#XT!Ul+jt}%@L{jgsrpkuP3VM-mvldLCTC;5tWFki)mXR4EG zuDVL!u~H&d4|f5h?8_I(o8ymk{lh@L5hh)D1*rwma z<%2cT`Lms*cOqW0A>u`Vb`9X)H9+0ntKsL==S;aFHrsP-coEUuaoqQ6wrEcv_YjlN zuwf!bLcarkQK)~Z@gJ|| zFSLz4?7nf2g)VZDf9z461zjsXPZoSwtU6pwHqp!2qE6N@S$Jbdn& z8JKL#YxD0T2I(Uw^-TAQEzY<0=+GB~@DsYWZ89{F9fP&V2F+6(Vp3*a4_> zV8LM4TOdJ8;Eo}!;Ym<}4f)hH28Q2SG~BfYHGr*p@3=AO6`$%uA`&%mt*Yc8W?ur_ zL{~L5xzaijGUf}yAuu(`gHMqjfprFcs2NDEi5+7V@e_dx{{WnP-x;8>h9rymnS>}m ztfx)?%AxaN@+fdb{gJmwBZ1#!*?j_#YTs*~_-t|}=sdw+=t@kCT(4G-Ftb1yybkBk zV-egO))whz~W1KuJX_|@CIdfVz5L0Nk07f6o!nUSls zcF5iJ()X@oUL)n**dyFm{M0(VRVz1>=ri`E8c^h4L{HE3spqn3LIE*ZW-cODY27lS z;2cEo7z;^I6%z>8nDujCv%Qy-Veco)rAHM0=k)xRNy4{H>?crk(h-FQF-Sy*Ti@xq zfdJR?+aMR#lV4wZct~uom9xPqeGU+A*U~jIu(t-8@>T7I5(Eu%*=kGDtK5g=kQ5>HL6vaJt%+39ZHLX3=68o~f;W>D1^9;F1j&V!zyY{Z3{I%`0e7Ik- zE&sN+T}0u39)GO-^NHE=XLB>bXPLWD&z~ar5vjCc|klo=X;S$oyObSN5fs4UC4p7Vv9OD^Cd4 zLzE}3VJFE&HBnrayw)+qqr*)3~NwZtT(}69E=72ads`< z`&dUXR{pfdXZhT*o^8kTh%@riynv_%$vGdHDE#jej&BfxZ@y`|+_8VIIgDSlE}wMG zk@6!4r^`PaJF<0>aB8;v-P9EX|B>X=rfyPfopeM22gu;#0fSFm<3NUd_Q5s`%I$OF8oF-&^f_n} zBG)e8ht0ERUGGKr*tSRiMd4pg%$9FlCkHRv`{@25;9Uo1%P&n&uM>`A@-bZg`^1s* zx09D|nI!z!#8me;6D%E3zyTLHN|M3d81B-QfG_|wM$q+;vfsx2Xv4;!VQCImi+pKd z=~-GMt!?FP$$i4t2)%vG##?;bUY-RSF<{H#Sv{r2CGW^5)lI*VG{ zCfAKT8Y1E^J(DuY2tHc2ler|>;+fTbn<)JIsk!o{*Khyd9C+Qnx$?`?(;I&*iT*7A zb$rGoVPyHlshjP;la441Ij}4KetTrC@f`kjNE(y-6h>e&c! zZ2x-Yv~|+9;_PupK}t$T5io`oTEZG>JzT124&_>Ui)E-!hE z0p$JzN9wu^khHx*<9mT zn$H#*eiqiC6YJNsz8#bNjVjjFwffeU754-8w!hNO(RynT+V^*SW}B{gLuAW(-q)!Q zY==fYaG?*X0-cMYozX^;o`)i5#;E1w`%s`nc1;nO+9rw6RBtw$gZ zf3%kl#U2E5Yeq8$i5ZhJku0!bOBy5HHj?Dzl*VGR|ysD%3jrX5GDhFqrskPzt zZ1h6=Sv5)X!}*KvnbR6FRyj8y@VY46G#dG;V9x)4`t84j7_j^JV{^|H^ zdCR`J3j!uTc+2$v6P3Ax0Q&8bFPywS@!3g76g&(uB=wAgXF~+E9=IOn9`GEfIMlEo zqS)-i1SF3i*IMsELr}MlhyX|l{I3ucbE1Jd;~w@YvN4>5AO_ah;Ae8i8~|c#Bo&Pz zu3jxV4(HzZMF1i~=l*eD(sw+k|GI|j;+glo$qPlKgL!x_gulifUF3R$pNI?Wsjs-E z&Ai7oRue4m2T67|R}d%dd7ZAEt4R!d=J_FA%?PYxj35lEG0v%CB=HbY_`73A%FFqW z6)%9SU3*9%zdiCR6XW*PNk8BsawNGCmm4`NcKxl z1HjL5?Sq9uZykfIhmF?ac}Q;<02;K04-pdy$7gV-AbyH!M_t->UKZCw`3i(Rcm>wX z&%HvNYs%O6%DJZ=`o8M+oQKGr>nu_TJ=^wo!|I=ts~T6&WX5X^?D6U6?fqb)r5KUF z$av57i1=xber+$6+82YcW6#g4dzPGSts6!r?O*#%pTmj&O4LIA^d7QbuhYKFzt@?@ zFA8t<-$b~;^4$~rww)+^%jAKu-$_RlN-qWp21*5i9u9PXLXX!~k~cxwA*kp8dm!}@ z2ZjPa2~+^5h{Z#u7x81*_CheMFm#Y_T_4ZG55Xwb(VoGD@p~WeOQmB1fKs z=$rk51oY5**iFt0e8h7CxWE?mM(m-3v$-J#SL$=0v92a=%1b>$twaVRF4zTG%lj8P z?1za#|ZaLuEy8CU`C;4xrN;Q{0oNkfiiMR0wW*JHy(zCa{aFknjkExGsDJuu@i# z2k$j(;Riq}GFC;krLKlF6~ObUirWxz{8d_$H<# zIwAClH~<#02KM^yCjkyI3Qz%xB53NT!B^yT;Jv`>(DfdO9IUH8qHiE5@eJ3}1v$gM z(-~Ghq9(Az*t{=E;QZF_x{26}kTF)D$Iw-;Nvu^XoLTfhc0pn;E}|fLcT0LTL{c(^^d*M);ez^*q+$Het<4_&_1d59T&c@H}nD#)n{ zY)BN72B`E^5BeZ5acw-OE$a&aOl}x^{)WnYcuf!&X#n`!KlAn5US1m!Gsk7S?6>la z*sSBXRD-pF81dja{K+;z&$`?rj#nhmJ#by=hrUg?R3qCki61~53+?6gWZbl8`yy*C zat_~hjruQQq4QF0+HP9!C7A#?@i_gZGB558e~DJaBi|T*!i3)`iyoQW!T_HvN-? zSd=#1cp#p~*>LB+FmuC-FlL|>##=nZk-TZyDCtq+o5C`+C#zzl!p3W!n3`a5B0keAM&l{!|l_yny&M# zmvm7$wk7#I;a?#|9Okem3Rkuqg0CP*9%woutZx2zm>x$j&iGH8mS_+K0jY%!=EYeX zuLDwzJebhi!X$3^tcUI~i0hk->vY>7+{o=Y5gP~rng9#yg8;ZUhW?$K!gZ?$45TN@ z8zppb+^IJVgvVcgA>@vAckK@+SK7nH{k>6NC0II}H-^`K_f9t6b!(T0(-$rXtr0x? zcWjDsTNqz0N4qMXFW5jJsX#>pk3>3ICooio0va493K2#j0PJ_Mhy2W)EJ%_cPrmwc z_(}Jia7v{kTsBZ5f+IxL^(hJPbeRBpneITD_FI`ws8U>r*2e>BzAFvNlLD^QZStiF z*JC=9jY4KgKiS3N;l%G8p8cg{c)5UQiZqj6X)ELd539sg)2DFSjyWA}yIfCI!ZV6YeTpGq05LDO}vR&Rn@tp24 zXubUQTjAt#dpLJ-myHH!J`jFdBnhwQ!QPJFmKTI$=S_+FI>Ok&ij5-t{h$BH#(DD( ze+ZwQd3E@D`}FYiYp(=9wmo#ek&cU&^hDB7A-fVpfb6AwGFS+qQ$Hab>8CJKZZ#m} zPM6D=2?G&N_W7ePy%0VZ^ZeZfv%-Z-dns?On{4K~$0SG6L_Oj%J*iTZX|>E9J;f27 z5GJAGXBGt&wvmW|#uNPvRvPZzBq3e?2?9xBl+t;fw zFA*fv6lLQnH&0ObF2c_Yf*P0eAj`IF(=II?l-DEfSK zv$@@KCiePZly?2ChQ74A60j8{1g*(3I-*_$X@x|HK zhVLzy87^GXlk8L(hu{D7JY2(w8nzisvLy<0;YNaI91G zGl8S$LfW%+PveN>Nr#q&pEdr-APVP=Ix4*R0T6}MR?z#KT0(y$4p&9ua8iRfjC`V? zjUv-|Pt1)XEa&H<&*Rg*|LgJB2*7LOkpF3M=>B3O44h^fGzXS&KTu zM9Cknc~oFB+(h*K7w?`5%Kb#nUW9k8;34BakH5fh| z!STxxz<$s*8*jWuD1H;e|GamejcWXj(s}5G2&U6658sSndco2j?G()}J?B9pLoSF+ zh~AXWd^%#!L>f6_q5xlftsn|1y_gol6bwdrAXv-5x|IMu{!*e$=UAC0ZI^szgz~XG z>yr#fDdEs`7fG9vv~%U1FALG9ZIGXlEvhr)D`_va`#Exzw~xxGE(wr4sPEX8`Xiw# zY(ttTG^QVhC9g)}fWNT5zWGzOnbV04;xOWf!bFmMXP}*zTx(qJn1pOV_}KE`ePR5H zegoAjR#(H7Yaq+QoSWB%YJ6kgaQ7YIxi?-9spGC^o(!ig>ayYHv4dr{Rr6tU*}wbq zpNwSm#<%=Y5wwn-KQ){awKB!byEkMNl!sf?!zBS6fmLyA8J}{H?HxZAYmYZ@N34_e3@qQM>aEI%J`VU z)Dw--FaoL&FI`=kp`?*azCLu;hre5{Pt~oNul3 zBZnxgYyKF(`EVAjZ5W|I-WXBfhQ*TYm@;AO-Q#2Fu5IC?)2^_2ek^wTRo{G*Ul(V* zdH*Qhzi^-uZocoXpvUuXz8-#4?y!Y{mkpLRJ+|4NV=>(~J7$FA+opwIM%|b6_i4Tq z@a;|Y3vo2z#Bw{pKAk@q3f~&n8?;QBWYZF7V$>oM35!#Gw@+ZhFJoR$h&FvA0;w-lZW+DX9!!rYfGBVr4SQS!dk_i$zNV)#<~^2aegClJNv#jyQeIY{C4eudBMt33GSh{EFTtnWS<*L{3BP9dC;@wca+DO0J3@6&hHOt{=V zvmvi<(s0Wy=kr{daC+6eu1S)w`u?lvvt;~iovNyy`hG~0-#qci>r9sSh$0GDOxPd_ zhe#Skp;EU)oB$D!px@Ln8W__#hNF8qqVS`x+34iS4$>`ekQ0_KwuOy+%)0RgTR(7~ zt$OD;oDTvReMWg#fWwgX@$;ueAnNk)N&hj}_3z$}d|_<@)=?mwrbRv^U2;9a{Y~*D z4wX+Okq(68OFZ{+A>^a9u>Neg{D=bAp(!^E1UeATi2{dnN!+V&`KIlvYJFCMSVyY4 z_Cn8Gs7%BjDKC8{zcX!A%grQHUimtaw?p#aX=dX?=&KnFD?syu5E|) zYJV|;h{B~UM;`V>p)%tB%DO=mCOD8+rSqzCCqU1b05EA_KuduUq*`mZN)$eMfGG49 z9V>+NQ@Z#)KAvZ8SRVLz;}5^bVnds%xOAWt%to?j>5fgsCz^+yQi9EroK#FG z&b@Ko`#A#qH=|yF{>uHk?Td>|58Q1sZT<2vI>z@AjMe*ghTq5eat6kM_@%^}JNAZK z?z=N=y5Hi3iU=cWv|;rHqD5tg-E;6=BrnTQ7M@lN&%`PXk`s!0u@Hj2!T85QSW)1R?Om*{%sND%4?87+m{V8YVaH)QG|li#Kn! z1v)*BcLZ$b-p3vad`wt5V2jz#Ueslv#hoHZf*(&5oBy0#>99qGAP4t7`y_pVQ2&^H z(+#1t?bh&61m)oz$mg$1^NYMzh?HRSrhW0#$a&$+g`EI*?$FuC0&4Ux=AYfGDKE^P%L~?Q&q{w&`}V5J+YHGi1<1AvLQBWJC~Obf5v&Vu;dFO zQ3U!FM$!|VM6lGKo`(ieIH=Myl88csC{Tk_AlJ@;rK0DWP{%gjI|^!SEJG57rM;|6 zIw0*RDq-G@s{$Wu@7#|~eQXhAD?kyW4+L7gUje>G_)eUvIDbix1J1CH%U2KDCPKqK zkXMkIvle$M=-O8vUz&Yw1m3yflBIp@UkmFa5Ooh(zk&S);NJ_~zn1Q+nl8u!-pUy) zm?ZlBq2t14st0MJU{g5n+vi8log7Xqw_*JX>5wwLzMJb1pNH)~EM~<*T6~3py*re= zLhg%S-wgABy;%1Gzv0tbYB&1UufL@{B!8}l+l`w08PsRmKtP6UDurnrae;vO~X;yKRT300Kgn6l?A(H_7@E7^+ zT8n>bWr2;jsQyu=-=;Q-`VxhJVD-Ko`o&C`v2hLTG9P_m_BG*@I2yHV-!2Y@&vPSr zYr{SmwP~X$@W-k+)xgKLhaa%dTt61;3+x9;gYB1A7n|NYpMJtezszsnIZ!SO*>~Iq zxxIN_=)T9Z@C=07K8Zw7TSgd4m!2U!`7zZdDXi-e5`b__V7N`1ZVAWb<>Aam2)BQa z!_UY!5bjGjpZKkP9{G^-hi4;)C|uF<4c{^qRD98oUzy?h*PA7)vqjci4Ka6-F-6262 zwv4AvZSKZZya|+n+&N21$Oixp1SgV~x%LSsJ{SB=1mK_c%rzkTb`%4-{@T<-K3yV; zUcLk(Ly;ShGp-XUpP$fXK1VnV=i8c%o=rC?Q2@vq0XxI|27hbUIw#>wyz>~mUh=SW?QV~7UUa36DUe6y96}HoKYMN{t*H@~i+y}89vtO=B zXCa=S5k(Z{w|wrfCkiuLzA%EoyFnEAZN)@Ep-RBdM4%Q%#Po1OruZCp=&1)E1u)^! z4%Q>Y0gKt_h~PNiR?MHau#-BFp+O6v&2JUBhE4?_fCR!?7|j#TIq*fk2n5(SdC;x- z7i%c^aFTG;+$q>Q0B_N@h;vM}*a#|0T%d>@9x=TVpY`Fsmu}SN?!W)tKHKyuGPmpZf2pl?n7DEfIvwDOcRI`Ifqa@ZL=I-?^hg*x!!BKN&v`CZdckLNIR->IwV8{ zQhEsF<(`Y?nMeTlZ)~%a!-ydY%bP!O*b{~6BaA3CMih$9i-36?H(qM=;~+(2LYQ$B zcbqoX1cA_wAx{)IZ8}qD%bkJ}g>lQ5VyGW)))6$zZd)3(+5!IEl3s==L@*vFVCDID z(9Z%W5gd~|U{kqN>}{B*8=9s}!X{8g5&%5oI1g@{_>G=rNKK!Bhk%I2rO!Ywl=4dh zx%r&+CyBxrBiX|!g8P>JKCUiNF#QZ*ywK48x1(k1BwO!rQn|yx+rmLN+23>9`oPEZ z4Qs+t^ClaC8C!(ssjsfhH-k*rqRLAmF=M|eVEc%Q7dy~XFUrcOIYZn&&-KIi(iBt;ZvgD5NzvKobK%9FoZ9a$p&!+L{{7n^)xGc2zE zroSlD6sg6O$S?2-Zb1a@rKvBBI-K8M3Ezu)F^V&m$fOGcErAg|U&wi7lIPDAT)ADs zcDa`TQ%;v{B=Dy=2_oV?!kLMVgmqHrQa6mp<1q>DgT-_8+7@<>36JpR(jklMoj zCUV82K>2i82jVf1W(g5>`neH>F1Ig9g#Oovf=xZtfICsIa%Ji^sQ>U4!-pnM#HbV2 zj$kx_0gr^rl>W5K7R!QQ6y&dG(}tkO_D3EJt;-fi64!&pkL-5^D+RZVP&?Ijpl1#% zgiqV8_*BAanrf>PDt>7o62as(mkuOjm*hu?F~x(B-gKJ$Tf-!LJVHhkF!z7h5rZd= z_}_3-(?@M<>5E&A9D(57APNdB>1%1U(ul{V@2M`0uS9`|uG4m9L_zc?-SY|%ZNsX1 z50?d%jLuBhg_KuFen?*ZH@5I^HV(qeTkFHcR~WVq14H2CBhn3#G>2;|m;dnN4#($9 z(nJCI)3o20etqi);N$beCtrOT3sAFyKkV}3A^Kx0kO24ZhP(EK)N#+VPle_Cc47f0 zrXujA#(S#YWAlVT+rYy2u}Dop=5u&k zEVqZ&!Ez2%@Fzm(#KrDB0CDP{vclbGSxOO=KBuzC%tPdxJePNqKsh{6RC zl;8LlPdmIB<$pq4%u&ZQ!2LgfC@`q_by~`hbOY0HtTO>%E=m*>9CK-LdUH0e3VdvdUjsDT zUpxETw%HV=oE=esF7AwyVds0;3WX=hf&LQ87x^e3rzb-cCXwyre=UbhStZl$Oq9W( z>ZwmMlqh8F&WtFWN<@JH!t$3YrzupXA!TyVb^dx|b?v*thlXq#Sx%Ql{FDm)I zA+I+dkDurD@O`>|pZd$g3qKNw0=8{_^$?6EU}5APP0gX&{7L&#;k5rmV$dK8iH1^Z z;A4sgMI9Jj)9*pm!3|j$JESgA=z(6BcX!01Z;Px?n6_cHeGTwUd<{Sy`IyYx?O6i; z$a^NN_yqZk=RD|JzQ#(v5C=ZWjVO4yeeo@nM@=yGaGcrG2^$cG%8q?T_oWQ->6Tfz z40IHS;>MN!h)eY#?Z>GAatFRFQ8)!efzl^CGDKu5%E|q$^~C(wJb4mEov>9lc6kIL zL0UNTH9hOF&6sfi^e8rc&|hMET)h2YQz(oY7#YBSR6P3fi-8aP+1OF@reFgmkcDLa zm>`UyYi)#n|Br-(dd?G#eHU0QDo;zOu8UQ;I+NL<%nQY075+EE4{uz~<#V4D{c7#(BP6WgKO}Z^j($9dZL|E@} zJi0$fWlA7Vwn+P@J_y2TR^?@fiIVH(c(_kGsqT7w$l*&A=CyqOppPW1YW{@lZ%BhE zP{#+6PEI-`Z%EQ15D2j@?xb9=H9iNN3{mK19o|Vq;q=QU&%OSt0v4tn006daZY$zZ zC!|E7rS|qI=_JBVQ2>GvP!#vl!}*>s?s#iyaX$FX9)Rs}x;L%YkrM;blPZ=^1u(ab z@kCE>UVi5-_8o{V zw%*1wP6r|&C}|E7aaMaRJ@K2{2jOeBS%`^%z2uz%pLCJ^-u5LO2$xTyy^{_hWJ2g9 z{}e}wilkf1pO6pD$Kgs8MzS2?_NXd)7rQ`W!lqU#${_IfXLVWQ%{4FvqszY9X+%pGzG;sOQHTg|I z5Q0wz$$!OO5!2&lP6py${uY)y@4b&dlqCwDM@ZU_=5w!mW}l8I95rXM0r|;B6vPg% zx2&HC9sa+;^>bME-y47UJ+B4v{4!v2K7=@F`(SWp`^a8uFZVq2#8B&4C@k~~kR`xY z>R$$M-DVGiy6EX>d#1Gb9^%Mvu>~T!wEtl7cHnv|B1&{5|9UNDNa6J!oyA|8u1-Bn z{Mg~Kvj6N+N8?k(gFc$DrRl?xRzn&i3TRj+-ZA02MjWKU+C2hC3rEkr!3*&y!ca$% zAPOHV02On;+)=Y0T;t92_vr9tVHp130pGU+%ukI&yrVr&L=;kQw+{XctVsYWbYrNW z2@m@Sb_!7_@&y3xQ9pYA(s4SYFP8Sy%7jNmXuDt#9n6_y(@iA#nkny!)Nh{E8h5t zs1SIQPo$jMnEchiW8>ZXbm40_a^B={a-}0&I#}ZRtKd&SRu&S#^^EI;oxPlyc**(> z89}o2A?$ayh1w{AsF$gyN%0iisqP6WAo9b$qx?eHHX=$w4!8~y(IfHau7_-bkUxn~ zQeN5jQtu`0L4D?Wm}CeM9ppR{QTXHWM}FX|{m+Q$-`CW1NWN^qzfVef4QUVsYBUTY z4EQD13cW30JS~4~ru?*z?#!{6@&@60n^y00OJgePLMbO@%sy zG*NKSqE0Cp_Hri`Ok9XuS$rKGDDpKsf_`r;9PA-~JS#+@=8Im=gZV;zFt~R|_-@pH zRvZNwJ)q@M4zo6_3M*n5>`;l-_!wsQ=dZ!4YQ$K7+V)c$bsq1%8;QIK?>#qbp?s)3)ST?0_+M)%q z-jr&<;_0CduIV?DvH5|!vDN@1I7ZCej~HQDf7iY+am5nsEE;`Hz{U1*y`rt8KQaBP z@T2H+?1)LkP=TNB6FE3Qz$HB{I|X40H-^c*lN1WiX{%ixPiz!m=I2B}6wry((kLa{ z>O%QvLdAU;=aYdy(|2*d#ll44oe%$SxHp3I*&ooJ0obeHP>}?D`l#tOq(KzCakOej zAPpYZt=fR3ap5_42&|(u3a6t}4;ThUC;!;XFWOFd?=ToN~Z!;1}P1Gu-v`lkX;a#V3PS=0dn~K6lv+pG&=1v43}%f9v|tx8)|Yqq=9C zkr?Cyq(}8D5z+d4<*KE&MnDhLJ>>c3d+&_?yUPSVe1-Cjy7`lyc}7MtE#&o!%MTka zZHRhS-M-swE^WOfth;k>^z(yC@+`fk$rJIP7O{NVuyZ4qw}QR5FKLTuk}iZn+5~<} z91Ekw#zpVzi-5MbjC~S^iBW4BtZ|>7Y5$~p)E}B=Mg5~;MXwMA2i1q;u>a_P@s`Bn zTD}sVJmPfnT zPk$rMtDjhoAc!|TAvLXZ-kf{;7O(4Da=LG;US=r8(DOp<*0)=%(_tQ3~6p_`M!4#61DN)iDzz83~(>C~!X0 zM1lO+>Qcq%(EtH+`dE9{{CQy!n~Oqjss_s?RH07u`P!vXrjAI8-2g}^Ke^Vtb37$45G4vGSV%a(<#UG|JboLc(){T| z`iDmGk8hhE zJ`p=tEOh%?BnUt4od?jtusU_B+TlPFL}6+TRKyoKqM+$e-e~GUL4RqFhZEoBi2{dr zkN_DPw|ud^k-im26ZFtUp3^q0u`e3F4uAt7N#_gSt=zv$b;%UZAHu+%?HIi=aGSDW zwLgmYcch5IP*XTHpCbPyA{TG8D zIUk~2e%{*_4A>*#Iy?H&bz^Gm&Zi#7HqG@(ZVWeJxfOJIiHY=RAxHFC>C{U#V zjfDw(niQqOC&&TLLO=*W^&ZYbI<)V|_5)QVGZI#Gi5;2;p8m*^2F-_w#!<3jc2tBY zi0p0}6)rhMqYGFwa4%0a93oj1iO5hkG^9Zk>)7GX!&C)yViB3Y&2e7yVL6--Ctwm8AM^B`;o|Bd)n$L1{Hd8&8L%B0ZG)ZIga{j2{i@WC|D0f(sr)PT z{m4>rr!Xj z(_^O!5XR!Riw8=S9!n|PDPd6`01o<2jskrE49%B@J*5bH5yECV7wAA3ghd<&ROlMY z50Hx`4z~X#0P%42+wyN=&MR#ERjDn`q0bFJ=$-?xjD%{g0Vn_re#Tx7m-IuYl-Ypi z*K`?SfUcjCF6jMbymt!aXLJdjZHXf&hUXF+Xk4 z;Xc(eMLfjM0+gqXxF8w;?2{_(;pdS|{V1k^JYx|mra1uUup<&%q~rC41bX_Q$I^z6 zu#N%oTo(k_zli!ztaLcZg%9&UmA4=DJs(cPXMVSG+s~7SWc?8ly_x=ne`nI=x}Q$R z+i*#A<^7rLyYfUKFLyUJhrZ^|3~LR;iE-F}LR^C|(EQ2pc+-bIh`)o*?8MlR#)tw$ z07-y8DFYlP2i7Hs#?N(RiL;1y1bHDF>vYPRH@TEoRAg_8!5FMMGEzz1+eK<>qTu`SanXLa?3OS5GLaeK&K%^QcY=ZW$nvIaXqNMHl5 zog_*bWv|sHzHTMbfIMDcdG6+XyAP!vu@FF!|FCs8^sp`?S-HCAKHzkcWhcI+`e^qH z9hv&*c4z7-#o;={z)txQy>zX1s}2ss?SlHJOqq%gAZc45>X)2<%#T^3ke6qV_#fM1 zd3E#0ZJj|^^JhbQ^XEcOBod38KV^T(yuYc1H%|J%X#~Z*O<&Wd>gqiU< z!VKfPcRc&~ zb36=*mDWXpf{`4MX{HV-2ZK5!^$zT#bE&@k?(NrJvJUKZQD{m5 zE=@4aBEy1#7^=n=xo&{bQAKVOOz~FpEgVfbU!IL6@{J`t*e{GjpI8D4|3sz+L%wat z!%ysD({~064U%^nF-t_@%+KL(-%F-!5ckN@w22{uYk6;MHMFq*0AH{+#?EhWA-BY; zZ5a!5GQ6KIB6$xs??&s&_r#|BKsWcdzvE}VLFA`%nwVEjb`8Xr$T&DVcjj8Z>mE%O zu3$-ih!MJ_nj)l0 z~61z0_6TBiDMXv1K@vJ7Jdg@e+xeKC9mawkv_S&kiTu`GCZAU za*pqb`M@@mI5C`Z=PLHbXR!2umHT4uqd%CtRue<+Y7OV;P28z-^6Y|cY+NRcS=S}+ z^|QT%d+uE@M}>DG&qvF+JX`d3EqYJ)Wl;#d>+ppc5-Y8XLKPYXH&_hD4SYCULaitI zZ2;Qn_om44UizaGn>m9Y9b#+Q@z0^-vxS05S#kBU5hAwmA2V!2!~l&za=(#S5F^fx zD=virKgGv)Fy-gtsjdNe?@AsU(KU?Mah-8*kX291IqGH3;6)oFz?6ev*&eABU3o`YEk&%!PVU>9T+R^ z?V@m;#-5_cV5)(#Q1~u}VtDF%6)>_@v=$|D4A zd~2PB8NZij#f)aCkHJ@%d5`@|yADh8;?S<)7yJDloQYE~wT|Q1NPK%?Y8jetWaC5Z zg|}iK{|aC6#J7%h_=W?OK^Gl82r9R+Us&U3VoR-*9}KAD%O^vLdr0mYSA2_X*F(pz z>?fAwCpPk}^1~2iQLh+>3V-rm@h_Y4y?BB(vF#Xk-P~$h-7^Y*>;Zi;e@o*^>!Q%ZWt*qPm4a*D43>~Q=*c&EOIHoqI*XnfK#}2DjXljGdP;Xu zZ1zBkPYm(0)eQ}wYhX4-w)Hz~Y`plw0Iy-eFzuLyijTO&c2U_-UtufWZvMfIJ>yk2 zhQ9an7J6J*_|{lQ`7};7Ji!T8hM>G#{SJ@1!NKC2bMIt^zB$l73u48lFsR>!ws@-U z$PYGKzT(T!jeObgj-b2iYN66u_XE5oZ;t6Ty;!(pQ!{(ADDXEmzHa?>$%WQM!N!yK zCL5kjQL5tV26BT&rHv4HO4ma0D>K3GzzN;ZA9zCG!WKkxoe;LsF~u>rF~z2g{^@Jt z1d&Vp!Jct1{mFqk^|5#yR@fU4p&NOEWuS}UuKm`tJa2^uLT*U&^TIvS>yY)15{EHS z+aZQAHo?s|?s4m!Vo`q5FP6A?FU@`X$K41$r1<-96!wHpuRd)Z-s_@}B730VmWH=H z9S);{Y`*YNoanA*eQEcs^vo z#xc6i7E-<%E3ur!0PLY|#vKC(2ll;RZA$7SQpCC=p#pC`HSd*tUeo_FQ*F7+a~ z&>k-ef4}nIyQB5jCD%oPVjPnHi~dHee?i$6F$!# zy39D2E;`x>c~2aYdG}kM^SbN2i{Z@Lko-Qa{|OKIo!q;5y$or;76s|c2TxoF__`?E z^K{>xv^O8(dlN5p`0epR_bv2DW$$oo?&InA+kSWS`A*(N>Fl<~eO(l!_Z+@pkB9fV zC|op3>2xWKlPbh~%lpZ=dHF5WvYa6g!N<3$p2a3u$9B}KZyk%1#g~PY%elIYtyFsJ zz2cl_^yx$78WVizcm(mEoJsTiETrGY`((oJ_X*C#Q%X!j#!k86U6%COC-}M^rvAi_ zlYXE3lKh)*>lXg1QDwZ}@ELRTH)(T-i@G~CFT87GocsBm8e#I=>7FkNKR!6v>tB~# z7ljnofKF35HLy-;c#%C_D1)?gpxePGj}4P%34id|%uY&oc+}fGGmK&~Uj2@)fuGS; zaiYOjENNoRSMTvNSPFwW!lT{fmORG>ehdiz$Pa^uv%xtr3btYXlSgwawmLKB?Q83S z{HDBT@C^o!PqpQPGg0oag7s(1s#YKX2qiSJTEb?STb7k}`SMZw8Zg@h^Vm zIq}V>=bLl8E#HH%ZHRSKLv>@^8AxEzhOtLiz0b}UGCnmpLK|&Q8oV}}HsojHJ(IXg z!8RPSo!8M_7}y3U-$pjAG4Nwc*_JbQsqu~Z*EV`WgZnV35Ar?jC&Vk*B72Ubc_JdtDS#P}OWVHqkV-9z;3IHw)~7|D^Soz6%@0 zU*EzTx&9u$)4a!4hUEoCzGP~kFmThTqT_<1*CE%wlzHo>F*_PGW{EgE&^un4bl zE*teN`M|f%Pjuo}-aD?ut}(Vh3pK9JXXH9B=Dl)ziP45F{^&%G#fhO7{L2&F(IKYd z4PVzr%Uw{_Q^m95L)}FOyulhfx=vN>yqoDP=hzrO*ij7 zbZJcWt%p@8Jl$aO&B8`c4JjH2O?ngEHfwEeo0n$SJk_jPCpz+O{A$p*zlE{mLDRZy zmU%}<``qUYp88(j7(VC<1*7q1D1&{W_GcmN){u6Yf!A1*$BI**k+YWZZblDFgfT)_ z6nm|MrGPsS!oJH}KciQ?=r#u|R>TD?^Ydp1cJDrX!S3e=S8n^SOKuML?bjvO zMd2vLK*1iRkZHU}^-u0cRgihl&!NbMcaiVG>9BHW95IkKt!H`K_|<=5`y|-4*?xsD zRQ4CjIZM=OFc23ou{f38;*)~iWh2;Qi=lYb{2hOWZ~W<4#dgk&XX83@NIL+K(+A{A zCUi6L0c-3#U~*Qr#YwIj>(MrZAKaPfE6gkyg}reVhSsak&3{Dxs7+!^?Ub+ihP|qd z_NDy|C9W=R){Z$1Z=c5x7Z3Acf8frH{7(Lw+TYGaa3o%>JN)sz7lk)nd)e;OSD&%_ z{lWj;@de>`2mgOz`>oerI&A2#y7uzj&GYlWUiqKfhT*IG_Un@CqL3nAo@q?^mO+$Z zoko`?okFjnZG((Xi!Sdpj^(WRTfQ1vFA4o#!=-!yUwpNh1zY@Mm`6`F)(n=ynugv> z0P=i~&OD>nc!~R{utgus3eB(MV;)*}zL}5mvz8J0Y7nwyaUaHuMq;=;A^aPBjRbQTU-MWZ$zY2cpFn5}}6xqu~A4ht&xyj1jw;0K3zcqv9_#WfIwI>cc8jNVY_->C{VX4#idXcd zDS=i0Y)-}rzI@Z4JZ-95W2zl(*dUGBP2#?Mzljd?hL43Ny6}tG2ahu1b|8y;MB`x^ ze!uf`@LW>t6L<7f9IUIp%bq80;f+1jW02Q>V6aJ zde*%(7shFXVP2n!(|l1_{&T=>`m+d+`hU#y+H?7{t4~{WJtmlbd%k#FU;kR?{aO?z z1AFw{Vt4rWb3AM#CoyC_-%if7uMN+;q2#G8slVb!w&k~Dz1*4kfaK{=P_Kln@toHLi`U$aGGc|_xS6xY39mUE-PyTMb3SwA z8PB;6Vm{AlczKr>BEHle7>MO`QF!m+3vSDz@STIh$E?}EUa@`VO|iq08Ft$81sq$hi_cwPPS8)T zdji;^Z7|l_jaj)bh?nGqXFK!`PV0Q|ZAs}D#+Jm&&)LRv(T!W0NMHJ`c5&}Cx;M0s z=A*`e`+?(q|5dlf8*S33JjUv~#z6B*W9UB*dZ~lHi(lc)n7cWhKrhy{Bql+WD7bQO zOG}>+3K{!`Pss6j<=uDekYu_YyLgTbTG1KxGaj&Abi)SPPH=tfm6vS8 zNyBZ|*%R%=rSqZ<&`J9c-!zKE6my|p2~oma^~6ewEc%!D;_A`$P6-;?rv4=2i=R&# z0|g6NZxR*SsKc`tV?-xxgQOGz^At9~M_n&J7nAzfc=4i-+`|xwuYfA{ zVqve$4_`!|JY#?Lld*B^f-Wy!iHPbUF+r@b7fXr4MXek5DM<*Q`oHhLukiPbh&-SK zr%4i2nnZzxPB&P6!4*&ova(;bZqp}LO>OI5~%Gw0W$@!XrQ8;^}A zkFZ^5W#G4DZsCsrg%<7n8vSrqaDDXU7j59UA-4UDadv#r54)*L{qX@yYzo2{gtO?A zIKUt1!Fn^^zAyhMe3|2dN!3};Xa}Fs@A$kL&zdt)2f&c=tNO%M{AQb>`>PsP=8c~}o*u_evB8~F)-UFy>?0Ykwu%mjyT;zN z--n_(&waqQYNJG9YTK55N))bXS$~ZH(+Qa*t()=P3;c})eoVQxN|Pv5QS?yMV)2db z#XX1t+M`Gj15iat!nqh1=RlF9-jtw$;=<>vigvWqEwIrx*xr=`9*>`m{+n$!b+jG5 za5jr%)SLekMe^@j{*A++Im|OEDg$)oTYE{Nsi2(g&j-pTW7xQ5+!dC%J$xWB2S4A)ev6q-5k8)wW zN%oi@LJYC5(HDCIIn8xq4E+x%YzK*>4X|5ll0&i>Z;6lU4EIVD{C5}hDN&f&wr2kb zQ?-4k@V3V$NoW!U6@WJZDGGsG3kM4e0lQ1|ksPqlYvJh9PiO!MDFXR8(ND7A=w{&y zGQD=Gz4ysS_Su(T*n$i=2aNrPZ9Q#_9kY0L9SIt9*?AU^!;_hIc-Krjb@>8G z9$d$+1lQvNQD9*tkbrmyxq`0}hxnWY6n4e2>c?Txk7e^27XgYOAU)#C@r&m$P6R*d zfKGt7kWFcapKM2)5?CQxvgWW&Kuz>weC!8Zj1k9ktdeZ5MG%l4jK!MKb_nf2d_fNU z9D#3)750y=8_Bu)PU7#|=-SEHz#imrA+p9wR)WYl$t&y~A*rgPyIu2*qz*YDM8TJ5 z2lm<98u9kUH7ldrwz11vH?R{UNoY!wC}0z_sI#zCu(>N}tFS;2Xt?pvrxNvH!^Ugs zsbEuwYmRe^b{cg>!Q8Mx3+(ADI_=P8rtLU$ylpdmtnD{{s-3cIUeUMPjv7Eekcj}2 z$1a*}74aRwUJtItHwwo^a7`2X6NUaE2GRfGI{I1Y!L#DN9vp(urmZu7w=4VzZHytw zT*V~{|FG?%FKRbz3U&m64dEVkhWR*N^Na0_8SW)NVLR7QbP(J_eN8gN$1qU-(%;EM+|X6}$ZPkTIwUx@KPe;d)4) zFprWYpFHti=Vbnse4_yQ7e0~qMjmWw=`X<5lqOLCzz~3Zz$Lh`*t2L6(1R#=5gd5$ z0)A`{!glDcphy)3A`0dYda(Hm8#~e@{Bl14UM?puou7Xlukm;mzh`KlFw8ccJkpL_ z7>EM&11NKFeb5Kj@Qp%6NEYlyJf&ahJ zH&KZFxNgi1wYx&X6P{!3Ft@}A{Zl2Ei5E}FSqSt?&V%3pXro<{cl3wEPkpCdj1%XA z&SD&&(FewWwmU?F{>r`gX#)NdV_zu8?3bUfeHAiqucu zlh|?H;A5jiVNoBwc>jrt34HKj=uxcOL26m;dDg`MCly8QmWD6mkEf{@H7w)x`w zD8;kB!2bDy<;Ej`I5DKc6ptj17K7 z!UJ9Pz~cBa1Vlk&sp9)a|M{$O>1v=Y2l2B05`RB_?AwsdAZe=CAFu1EXYDJ`O2~m; zSN(Nsd_O5+D!;~@KB+8=r#~n4`t8(RJ`aeb=xB&24C$j6FOBNMzoqc&ZFcB)V0gm1 zyV{eT1MIpX?KWuB=DQjCJyF1B=%_n)71t27RYH5QfjdeHUTE+9Pb~wTd+eGA?y;-x zzuQh)I?qmBR(y)bd^%^Xc-ha@58Q3%-+7CjT#P#-8|T>qOD^p8Yr*enf#E zaeOa*$#iAD4AM0!0X62!|LA^crS5-RbXHiiV5j7t<}qUA*>Gk!10;0(nH;ZU;@KHT zn|y#}zB=O}m^1WspR0afmkND{o-X(=wo=Y)P`B!IbJfX#2--r(OZ-D!!o9>xW9aIo zEsYX|@bCI>^zy|^uVv#;>gDePs+;dfD({rHU{2X`j-M1N!-RDfQ{pU{&|LY(p0|dV(UVFv%%yb@-%m^Tv1M7RA zd~E;EF)jne@EeC?7S9P}#QjF$59h7O!LICh;?&CYHS?6l{v2Wo= zPMVY`^um{d{6M-gS$(^2e&W$=y%vNu4Kc6J-x6Sgl*hAlZ#ZORHFTEGSw5zWMD`ee zkd9LE{VR__iCtwr`F(p~cjJ9ahyvuEmeyVog_~O1SO1Sd9k8W6vv5EF-yDRaym9U? z`VA1yJ$6(3_QrxJh`fK{Pp$LFHal&je)cUxlPEwsa~ZUvxJFwJR`Gd$E)k4pe;#Mv za)WL0U-qs7IF4g!|IEw`c9@x&nVDqAmLI<`quGL3mLlm+mO;9JnHe8bn3#a_-2-3G?Cfm)r~uHzOY!tSeehnV$AqQx{i4D#?!@*+ z00eYXUJqzbIXiB7>=Cz_e0$72lv0b~B-vN<=o z9lR|^6(yTF6-(OE!LP36G$j-a#pyeD=X9qed@tX{JPzNwnl z5_DyKndVV|m*;r(owt2`os2g)5ah9}ob^=eYnnzV4=7#dH7%V<9_n#AFOu1dRLbKI z(k5Q1uJvHpthzv6bY!{q-n-o99@r1d-co=b3Z5T+ z{IRp+1|N`M6pXhHFtXJ^0pK?n)9Dk(g!|yfNFKm8a?u>e$A6EyG^9mfv5kMmzimeN zy_=VRoChp?3xUD)mABstU}?bCwtlrcX>wy&P`G8yHG%ia`7=U5!w2-*F$3+h189@K z8Ei^+O*+Da9sfmkKz}9#RImfQ?5n6PKY}eyArRYgLJnIB*SVpc1uJ9Hzs;A^ddJ68 zufFWYFPRt04)VA5vQMAd;vbp(^o!|UdD+iQO?1cjfb;B*0)vMHQ$-Npv-}evP5h>- z)qnH3T~j_#LZ0y(5zvX;h&&^cQIfV9(}xBEEJys6r73b6yT)zZWG4F$t)B$$q%)-> zo!FKrxU=pcN}G}RSK1AT?E{f+;-~z9LS4@`Uc$$la&_M4?Y@V*rFNqv@G@Z(UpQmi zJ_W&-W|R+RKKt=T?!76$7Xk&QN5=oTyL7Le`cm(KK%rEm4k!C<*X(-9?rX3BB3|jV zSgxgI&;j5WfS)$Cshh9VmHygAvv})Z<_kL=?iFSLvMF-vjOte`aC{tFXz&5al?X_% z?J&|u1BKlt`aohzmmb4Ai|$Mxyfmy{q5unU4UZ~LXm9i*Sx?#dWX~H$|16)5b@$yJ zf&&COJ9*H=;}8S^*wX+q0M0*u_yK0|cD2JlUN8Shg8?rJ6d6De2tk)Ky-sO6CP9Ck z!z>LpovO;#Yd|K}a>Q)e47PaM>AEgkj$&Kd%G+`Z9?u9+UO2mxgS!xD?B&a2<8fDd z`JjxbRx0s*J`0G(WS9=x zE;XHiJ?n_{L3go_ukm%tOWQpW|0ggdzJxz44cV;y56h%976gzFrGHTyrTj=o@{tnj zBW0F9Q21^SHePyk!@;>a?!^~w?mqu9P2cAv1QqA(-ZzUIv1THv+oFF)U=XFN_wUp7 z3j=`ygFJOa_+6cyLE12@>J(obt417Rd;sh1HG8Aua?fS+R8VhvbK!7%I!G`vnUNA0D~>nmT#%x&Y3w~Y+3KN@_8Orm>6ai zxNiJ}9x-92A_NIzuMCSOkM;7auqcx3LtdDXqTmrhm=9PcxHG0VlTG9&s<+klKbEG% zb=-ViG{1kb3?K_@>EMKyb+f~jP1*S*7=Eh4)Hr_ICpddh- zpI)Ck2yY#Hqu|$Y!Va`9Ax`gi{88CJVZ^q5`R2wzpkSa-%^g9cBcV=Ih#IrW;l^FU znPkf21c1kuHCMYM0E8U{Yn*}qg*RUBUiesQ4{I9iSa|ENF(S?$KeSROM~^qMk?;SG zzRd0DN4*%0Dv;}pf-T~MzM$f|@`1vaY&HK-Ai{PI@_Fo#t;rZ>Kq)@L`LUPe@yxg@ zF=F>%+)N!ak1`1W19ABUDjV=1(Be*h1oLa)#kP#@vgH`q!g-abKB+B_JQM<@{WDvt z$$p+qKsm!#+e3b_!3Pzsrc*c@U;Xk0j*oGR=Rqf5HjQ}Gf&fbaHv;@12@u$a;ktl| z)m09xxGtE^MwG9ST?3Dl0|)8Ut_0M~E|bH$scqG4Lo9zOe~`5o3S2-GK(Tz|BVA0k z=_ouViviknGNJ&8`Xcrr*~@{O@v{u#rNBqzn4d|Q2;jJ4-V7eqx{dtfhp+(AgFEZU$G9c)x*k(Z8jr6- znhnuFVOJk0V6h|ao2$ z+3qrs#v2J4cnHw0zyBW03WO2n2Q>1m?raMSoj?kRyVs8i&(aTWsl)WO>7tJw zSO>Eu1FZ}I9jF8fvL@ijA{O&y>5Lz`lZ@zN5$HCx2{u|<(z95WkRE3RW9Wm$ zfycF5z(aZv_zaKR5*99oS)ft@Y0UqsSHjOtNRxb21o=bF4$^CQrkBnhA?QSau`dD` z1Q^PLvj7D7U4VsoxPG@~d>M5EA=P)vlVn*svnR+>`BaZcw{963k*`S)%2Ry?B0b42 z0cA_izgb_?hwqC{LD$S~s^6TimLvO&d_}f!-h4K)GBG}qBW)zpshf|=TKr0RR~RT< zzRB(t2MTztvXajG6IsMqDSfhTLwC{MyZu%{Z|zl^ex)9tts87XL6laX^RImj-UETc zaB39tn;H@W2z7AOum!+~s1wV0&!5%d__%1+4Q|`Ikzq<6Q^rWgj~!aquITz=p&yCf z{qz&gjs@A{hr?U1^CL*`Wg}SHzu>u?Noi@ZI^T*AeLZ8Ur9SMDpyAN z0tMQ5>BR~+Ub=DP%0~EaF3^#B)>ZJ_hfB zKw(&{1CdT~n4IN4U2DtIs7&yBBEIJl2+)-A<}_t|&B9rZk3A=j4GYx{Y^lZ0j09RQ zxsCh?a-XIN*#AHSjIa_ud=)YSS+-|+0*uWDoLgf6Yaprqp-yJGJlg15Cowv#lTiPu z9Mx?Q>6QX2)*Hn4bVfn!NRom*+d_FKc+-C7S%DrL2o$;lk*UE~>6it5hE{470J zpl}iZjM60ng`|xuB4EEuCZEz0k!}fI@pr0hh|+cpOP5`R`lM~)z|HdLtw7;k1PZJh z>yq$S+NW~ANB1;c{_DeY>zKY5_W@Djep;g1iUWnAepX@l zruzi?j{juz4>s8=NoQ2L4e~f1t@n&>`u0}63M|id<_lszS@N$429k8)9y|9vfDZ%; zLS*EoQ{Y!AzzP-e%g@itK@9nm`BK*kDLY7}mSd&16hQg>+}?z|K(fvtJTAhc zCOlSxj&Z8FCUX56w_V*xyj6j>S8~y+01Goa`-Pa>OnLHvAq?Bcnhvp;8M zrv?z&?u|9>^y$rkZ|*I>;KvU(Yv30>-mR}iVgY1WPcYPU>x51z@N3NUE+hhlYuvE_ zShkt%OUOSlfUBj2Z+uD)tkd`{^Hvt_H&=|q@IA{01NGNNpGa1rZV4WBk#9v}B*L$k- z!A?$R#DGJ7r+mAwb#j>)pUURCpuR0|ec|?*4Ai-dl+IRS9&0b2L_gA}z_zHKq=Vfj z{S)<;>#o`){!Pdsl5*60@p?dM`(vPR%^|xm==PZ2T|CGQ*;3alRQ|0A?685WHtK_utiXP)GRiQ(;p4nISnj~%wo z9y<)l@;O%?F&vjYet7Qn*PI8U=DJty4aZkfk8}(>t*&^z=7(k_<)Jh8Nf$vroh2;WxXjlpmHLaxG@AO0Q)6r`~#$aLSsYkfm0 zkQi#|G(B~ie2qHgmhgM#MO%lwXt&5jS- zIq-n%YyG|jE#QUj;hYBY#;$bb0)>$_qtL)Wpq)>0R$wUcL`JO%UiJaVe5s(M9Wv}# z@nt(|vVfgW((_7-8I=GX561rPyq@6p_Iw)k4QJT*PP zE}#8qL-$_$?|x;Vu;|eObdPaLpz11|aPOQ28x z$=~D`^1ty@eb4gBhymIY%i}y1P+1SMLja3ypt8(J0F?s(5bI2NMA|6p#Om;{`e~r>^2|ZK z9w^`w)guq%1%$o7rS!)O|0x+D7`2_eao_uSAW+cG6U2>*LC87<1~pF4Jam?8l8vdfJXua1J_3CV97`1^8{~qhi{}lC12CMFWa%$?65$ps9}%h@K2yW;5Ha<)Z%PK!kbK2MOOW zfYE;q{zPZ_uWga}HP0enH)1|XtFkg8z2dg9%#<(GZ$j#G_Pf|*WgX|&vSi(eN?P`! zTYn7{?r)||mwJ)jTQ=AY+h*@vI*dMIX9O1&$$x+PALa@aMjp6rKl1lLpfDubSc_N} zkP-c-28RD-JIa#Ck`504fBe8b4EX%EL)SEQ!`LvAHeQy`j~|$KM5#U7-nnZ;Iz&2o z(6YPIfdY4yyy)`DmtS)GOd9X@yS@gma+)8I2m2`vkmmC)Tg0bcw^R^AogeEtBoZLt z8s`dR5dXDbo-W|WrGhijQE zkmV!ojjqu>NiP9;x89Zq>62{lCDIKC;;<0%jfsR{|-v ziF8W`G3HM?vkaWo&-v_F;_a9QJEjLa0J!RB)rZQKY_W3=UL*M92Q#L*XR#nvjt8E9 z#?8C+S8mbmzj2H2xWz5;bobLwy5}fR#4e5pHrIw%VNXSUQ9pq+VC6c>V5gL>_k5r8 zWa2iYWykG@(i>SIl|vu4Cnk@}M)MK9(zZmdlWhr~h5<}dq=p9cbk935kaHXi-2*XVbgm-1;1pCabt z`qj&9bv%GuWfLzgf)n0d@yH^3pI-H;N&{HbrtkUD?k^sB(3LxG{Kb#mmbKSn1_ZBT zM&w@x`LIWQtiNNt0?gve4m(GDOqACS1Zewbc6?P(rFm5xkVSMwpjEqaA-@5m2fr|ug38x_pYin)7raGM2A-Km89?Jr-1?pn`**nmg>~ouOTY5- zK%f9>r88aYDCmD9HQnqScJD(vq~E4?WcX&pN&Xt!&32qVttFgCE}r9x>sN*ECtNz`CU;_6BR~qf z0j z$F+;*xGU$+@IlN^5XeB+K>IdMaGOrJI+Xd2*NqBtj}9{-%@IE(e4eyHWoWxl9^3<< zDZjQcP%Ll0uDo2f>3TrV#CJ(s2ZL%f{(aiH+d;z9jC zNXYqJ2c{WA|F@s`cpy+XtFzTp2D)h68R6PlSwjhFqyZV9@$zqObSBGq`8v`WFV+%Z zBzUx6xOQY)LwLXcWDh21;h8_ufQR$4Yo1O6sQ9%7M;9B6H;jhQ>}a7*jBL#8!Xpg; z7G4oVzR3Udj?7lEugfo9Pk%-_yoqsObDi7w`kF9{a9|6bk5BwR_RaxVvSbOv&$f-x z+O}S z&TDQq^54Z+ap3s29G6yUozVIE@O9dFbF-NDOU|EcF^77GF9>}K4|vubIMve%3H?Z@ z?>>nUn62;;skE_Gd{s1c#q>!%-kbcunudX zL)$znvSWPU`~f@kwZ5ktg&*>J6?##+_+AIfsTohZ!;%MbKI-e&KAb=1O>sx(2K;Fa zxhI$OtF;o&b3Yj`zL%w^ya8|AjF7*$A#e^Qh7CnOY~DDKh#yDu-^)c^$f?&PZUrz^f}8!T~-r0uR}DEhf7ah23o7R{4Sd~oEn22 z`J+vKmX3T$;FHg(IIU2kkO+&!F(^Lyz-O(q%Xy;t2#Pr{Wf2$jX&h$}7o3Mr=|XCK z@(e$Q3!jBc>llmTCHLeS9MT5&06#+)aUl=VcYoy0bH#Pg6-Rny{a)itx4k^ z0AA^Fjtv}y7?~4t5bsUT7kvmX@No}04&d_~aUJZ|dyVISPYKrIt^nuACHdAE?;7di z{9?}hGZ)0c^FW*QZ+VTIElKY-3i&T7_I#7@uY0~(ZVUq1V*V9+gyW`B(4~Y6RTp>` z945_aTo;QM8C zZSNv3<_x}Bq!BOX?99Lqd363|$2sJ=kH@TegB^+R+L@3zpY8)|d$&9;mhKByohO!e!NkjF0mDGOLv0fhb_Y{@iBaM zeb=RrvQ5tMq5^-$MeshsxucN3fCJOPJH+Fl&^K&O;2f~x30>%!zX`ryJlF0&j>~;w zo$E$x8I$KK=GKL}Wey8I_-+knDfW0DBYxVZaINQx!lG>R7?;?(n0M|4_hUF5AIBib zWx%7|TX^T^UTzfjTyB}3ZW8dl4qeG*lZN&X&&^L1Cg||-pmoOLi?|+_KAsxK=fZ_3 zTl(y_+&;%^eV>>Asrc!aF+vae`pg2Hg+AP`t&@Gbm;;{RC$Etot!F+U;EZD)yYoU! zUbKB3d1D@_AI$r>7bzbr=eFL5W}D;Aq5Jn@QZD4=oO?sL0gvJyam0I0;y$9Y#HNpS zxi@{i`}Q~r_AFOyI5}o^?VM1T`e8ni*QkKg2gJ`otjqI?b<7)t_ZiOy-~H^$Ubf%6 ze@EfZxA*pMJ^bUQ&wCTlXTSN-GzvVFE`DI+f^9k+<3V%#)bY<0`s5gjiWj+3EH1HK z;3>@0FEJJ|c+m;?BZstEwjJk)aqzup15cYPt;agX6Z(xCfEg2U*9~7>+l3F``(+Ng zvs<+3wphHU`3ytsEQj{#mkm^TZ_zgG3y059-^G2G;w)g{UgSN6ci1+2_7jDsNtpTH z>rjvzw*Ka9;dAo5E2e#yTRiQ&_|i?IV3H5Pc*umJn2wKiIoJIf;^eb?3>+`onwj`H ze^HrFj&~nd_w!|`ra7KcEc90#gB1OCJJxO7j;mV^C>J3n=ymDG_^D>Xxva|PqA1Ym zg6D2@UB|JJ+p^vao@X=)O_MN-zSp57H*fomG+`!jm;aIEfh#VW1~!?y(}X;+@8{BY zPxx^9(>d?%_q8tGRyX969H=3uYF z1;OzwHbxt;B>^^z*9GIyHBMm%SoJP{&@me>exv1(n_@w>9o}tZnUzX29RXP{&3%%l5E1YNA(mSq6p#1HMkD}nu znB2M3SG#H!wpnPobl9p3r?W@RnQqzs>*?78Ka+lRGJi!gmOq~JZv9lDX%r-OG2n85 z;1Ct0f*q_e8{_m@&lwT=gmjBrcrNnw{9KqLU*Sd0BEYz-wog83i}r)!20`xZ9X!W{ zfLNf*c)Up}e~xWLHpvHlV4pA!@HP(qg19C0M*&9ShcDxr_Bn1kSnpWqBlPRs5o^5P zm{YE$j<|K3jLG*ueU)?Q_9&j`*hbM8WgPPp$LZq*PAk~tp2C?ZU@kTa+b*(v{Z-5U z*9iY{@38c{n}($CUo5XAk6L5Fbiue0oo3?2Lq3&$e){`o$j^0KeY0s4AmemU@{@;T9G{xk81-1_U<>cM zG_uGC?Z~zSmxDy>D!q5?z;SrsI(p!z(dF<&j%Vt=GgaPeHMH_);TbnEdI!uHDj=4977*Dmp|Xf zI7@oM2gczO*tu8gcg9qoL+4v!3M5nt$0ZHVXNt2-8(eb93>RJBFrT zTsenWL-|H~b<>~!Do9^4~%jvZvK9Rp+a+dhW zjYj@A3*^6P6nJ29sO?hH7<9a#xvm$FcpkoK6Mk6WrAMrG5ow-2X@@!*r(OF@ylifS z)z>Lrj(G#*{_&2&1%Kp*cv&no2eJ4<9pl5fjrRm~SO7hqz($Ej=90MhjzY~sMt+#@ zxKQy4Ou*nz37a(I6or=jQlDZucid>eLq1%ey0q^x`WbN>VcfJ~W8B}CAIoX5cc90d z0#kf$X~)l+t%>(4*E@e~Qv9ANHwu5fbLg!3je+}yrQhE?r1NK*|3V+VE)S33_d4{Y zv^JTmX%r-5bzuGA=kbo{u#C0Cq;m+sVY&FN6;$s!e8?D8i) ziF^qw=Evd^>0kp!UN+LBP3a?caS}98hEe`u6TZNcu*$CDCl^tXM_l5azG)*1uqsE) zAI1!WY$1N|N56Vk9I~%xTx7@@bIx3OJjyL_@Uw7hz4#>VxWOZCVg(lE9lTf2CvVWf zdMn_t2mVk%xrZ$l*k&9&Yqrmk8*9pNe$2n-$hWY_cNXC$24aRT<6!*cz|Rox4$HIV z;m4XJy<-gb1_NBaWeG&k#b>#JUlzfbKk^Xg6zf^=fRV8gKgEiz*@sPX;<}E{`8RzOTs`A8+^^!vF$p_t zaLk)B&z;9)MOU_bzdJ^6Qe+F5v6jsR_7k2G;ITPy;c-_ybJo6-nVI3O~JKNYfm|-|Nu#a`4KFD$mVN6tax5OLk0t+NGHV^U&*vKFgkT z^BA7yhvM_VaiJ`KFt=#;LCAaoD#-cE=mQwEO5S-656u@6Y8Q_4EF>tZxgo}a!qdO!}mn^ z+4HT!8t@iie-?bXw4F!B2ZWkMq6g-!XC={#`H9CH_!XI>M_bxP>S_*=>JrxxaEu zMLx^eEhq5h{(zP7!8bk^aKaDx3E~7F)5Zh*%MbHuycT!>Ce!C<;5PosMaXgZ-XOnO zkGhD*_l@)Dx#oJzxsE+84}RV}zr?F~;Ig%jOXnQ8%DECVjuiDb#ap9zTSaFL`%-X4B(ltcagBJgzuiV2xsc zo;L|`j2=J4ic(wy{$76DP&H?d4H#&dfSa$R@ z4Dur>=OSK9UEqlS1A$GFoOhtJb=numBhE!5=tV$963I2La5%G_q*o&Y}B zcmMXp9)vyZN93smeV!S{QLn{WfWGmzWj%bzqw%ueu^;rhDwNb;*CsY1bu}nu5J)6mT)=iGq+tW7Nxn0>=vox+q@tWkNj`IenIWT(GpGd1A6= zg8CB11H7`WCqHYQ#^jS1J#hmQ3qJ5cUmO6p&4=;1KaH_rLX6NuTxfE@F?FFsedE^b zTC84tIL}xaKh~qUU?I^OHXXEqF~mMytn6(1H^AJYK%JML7(AYm@O~D73GQ;;4j1luE;Hl2W)u( zgdS|gg`a*9a|`pxJ+O|H5FdG_ALc>{92K(g*>6Sfq&aacrrF%4bL|Hxo>ht zKg>DxVmyI;oMUhD;`@dB2|}B$!}s7U#Ahj9Q~Em!+b_0!`q3r5|5p<;#))$i`~OEy zUVpxx{K>*E&Uk-1ex3P&wP_S2x~OoO=}^{1BG0i{P_Hg560LPzi7p$g<7Y{&&r7h@ zWn&@XXTPMa;G*Cm1}n0{QwxidaU?s?t@uvch!=&9dMuo{1oyh(ige3M&!wARe6}sm zq?=xtA_w1kZQ9`c)6*vB52Q`OvGC)aSSoOfc#vz2p(se7wxp+ZUd$P{){-wTh%5qL zxS1>9qJ7PAjRd~2AAuWjfh#r%)Ym)KVGVp)vxQ1o0rp%)R(zlZxD6tu?IVg4neG#3gw{eBgn56EXddy|aLk<4VHt zF*7rV84kmYX8SPA%*n6udYWPZDYXCj5Janko`*J?-0e&>uVe)kkNcfWM-7 z(DvrR#ssgRn~-h#KueAj&v`S!>RKj70{N4!u1U+s`vN@jfbP8&U+F7;f=8^~dwQ$g z^4P<+v}@M2SK8(+!)(WKO;&f_8CHM(8P>C{iFvFAIGx0rL|^y?9{7-s&ZTL{xI?U0{X{qAM;d7y zm35@b9ia5m`k=pemN1@p=>;pgdW~(e)rXyCcR%%n#dY?rH|52{4r3cU=_C$zhaz24 zF(C7DPu+xGdQRoa0DKC3!9Leh-Zam&UYaaGHx zciWDwx9+XYW!|SVMwD(+cE>HyQwl$Y0=p**0@_4l>U02$81W17()6T%dO^(54~&0} z2bBeW3p*AT3jFsKZmzGL4;}qG3d&b2u+KUh+0*#%pqDi`?}6K{T`X&7p@0ohedv=O zOSOc81F`z@Nq?E!M8}yt{F;3E#kS|fvG$t*C)mD|$J^jD7TA<4FR|YbJkeIm3I$$w zJpQPyGW1m2plPsm8Q)ZyYz|e>rBa^N=d=9$SgDQgd*&(QwbI~|ZTD;D zYRO$NS8$K9YS_0_tY;#gP87uHl+CFJe zU-~PAx(s?`w0pGrYap&GsUG@z$$r}R*u2o&dUPH10}aR|dgGq4Od5iV`^pk&slX08 z2Ra3KyjOp#%-ol0UF9B-o=@xUP;sHa4;`PFvV2}eynoROcHo~ks_8;urwr~N^7Um_ zAoxd=Gj{*2?YwFQuNpcF1x@r!;MjN=({q&-Jw^8-}Bq1*nwi%N@lJ-{$SzEHM zZ7((UbLaoQy)VI zjY|ck#~7qelqcHXk|MHXk*@x{Pbmf|NG3)6SS@FTDPmz4`7t z)^h$?UKIN4q|DcKVQ<7DWe&X@bPrQU`j9>n-w;RlsK$uend3~}9omb!I24^REH=a! z5_9xn?6q_}D-G2fw2KRcVmRZNW&WX~|Gx{)yXK*>`)bRiNO-d0OV)R*|K~MKXQ9w@ zLMa1m;OMut1;!^Y4t=s}*)3F8Tyht8NMk2bX-ZJ^1B^jgH%YS*AG$*;rYfj(RH zJLyY2unpi|;47mwhV`|zM)dRIF6^fTXz=!8FZb6vb^Y9b?#IlZjsNRs?g_LahxB!v z{MA=3OYl*h)eemJps(=^{_q?3wCqRnk}*JfkAgR72af8&aoOX-lYA;D6l&l@#}6)9 z(GLA9o+i{T_`g~3seh|*?Frxig#WoyXQ2>Dg9*>aWTT;|K#N1$0fk54G12UFaGC-Aw>A@0eCI)^RPF2sq0m$qdRCJyz>fXU{L#~!tx z^*h#99d@d1Icfxw25cT}YbpQr!#1PqY`ZKub!lyejc6PCjr>(#`X}UrZUK-3MNiPg zdd5@EBjf`O@Iw-c7-ZbgXONx6n)(7hgAVX3VhRPS+y@;LkAcJQ4g9IjN<&VzEl1at z3mU`;`TJ`M_t&{vvKaDZS!*T9c>P|nVZ7+638@|)M3|mSO94%tQfqWTj zQdCTUpJhE`1Tx4u0iaHZ`@j#Lj7fA7VrOyPo+S3Eqm24 zWtZREPM=7=&O#wJHIsag=*Jj0V(O4bKkg-w%UaMSXaT_1<&r)Rw!kHg9;6qtt8OXT z92fTvTHH|19%+4qmnK%wg02gtQ1D05YYgw}f0;rKrA<4izIt$rFX>aP>4CY9@c{+J zA8-UeQTSmE{jFufEdXeyW-B;}7&DX1fe4T|t4@o9HaHwPnF#0%@{XT%}TFPxc7HvCD z0QmVm>72G?Zk{M_e)J)`_vt6?o~JT+`U$(~kq2$w4cFMDfpVR? zWS%X&sZ8tMr=GBTGPwM{yKK^xm)L(MkM+m9{>~r85o8S6+S?K5pW(9Q|Jc#NvnJb) znH=46+%hlcN1;i{Z%$U znHw`45BMx1v>zRr0ZJbP09{=aLx z5B&Q8^?~c+1(yF*)P2Rmj($7uj$6xkPrD5s%Jn}X^PR^?u7}4+#F@mK%XQz=PZ_U? zmtAC2uDHZzUsv{@|-WjdPE^%kT9# zztnb`JT|ja#7YKvEFj*ox9b?=vpvS$5AA#N42^Mza*S`^z8`Yi@XXLyryi;EgZSDH zTc8MVU?CD?&?`WA2CmweG1?O26+BU>g%2GsS;_WXdlT}idDv}@P3@J@pQ~Dta9iJR z`Ohz_C0}QufK3y?1H?f#pR5N=P+V+or6mV#B*>!c(dVDDjY>oFufqKh>w&-iDxvk} zJMY-cYp=B4Z6ouK{=8sNU3%a^^+PhQ*2^xmzcmfE;}*=Y$6tKmW66Bv+-bSYUB)+C zcNR2f%=KiAUoI41|7GtipzJo5y#Ia6%n)WqGh@JPKW1iTaI)bTVh@9d=j}6v%yyWQ zN8!g1dd#%Ur0t)k>-s;{x*Cr&iRYdjol{4;Qg?NAb#>LhLAqD$-JZ<|>(~prn{dur z-%zK|WYdFe=XW*`;E>(7o7P2-gDgMiSt>*7poL2FN}D*juiUr8WB@o+ZDaNcOlw)2 zEe>D-9snfx{4#7HJdoq-Km307)@wgOIn+hL9=7KB47=@+Ma!BRWaUj30E6j@vjs>G zPKIgcp-k78jsJ++xV5>ow+p&2vOZhpPt0z-FVSa7Uid-9b@Y7vGri~Uk1$Yh8y)W- zxs8tet7R<)NWP9ZQb1wvyN(_~*~WkZK}!SI3uADUdyu5#xqs%<_-DoWY&1Na#`)RhcyE!|*s{sdRb+FMa=fsKf4TH{mZXZ@TIPCXa z_sMKd`+7!SR>naE?T>HU$}4p6B6w+_WfY5k2)2yslXm#N`;Zf}7I%jc_2$pqm+cOt z!*2(DR5`-4pXAFSZ`<6*&U`)&MEUTpCWF;g$^;X;KA_vn6w@C1`quP#);uI*a?lR!c0grvly;FJv%#J zhMjjdPzUJ<2zu0zYl@Ar<} z%)*mBC)Q+uyyF9hk5-^C1{8e9=$GG0Wu30%c?lIdyt@Jr_{fc0vKMwWXD6(=Bzt@O zz|fw@9?pZ>$HKGY!~Ka(s|6?sFL7F%K7C*Qdf~BQV;K&Z00gglLSWQ`;J9EzeKxP7 zo{^lZLmCv21O6Pml88fnQFlvrT#(DkxoF3A*~8B~nFLyb1T!Mb1e9>iD3a0d)-YYH zfsVHxjt;@j_!_ZqVSbQzxtmd7se<|fq!tSx@qs|U(ZI$#pokZY`ua?5&gFCiX@?Zz;cixiQ+VRqM@7U5$+a-3HgQKW(ZM)f_ z?Jn7ML#D@JSAIM@GU(QLDxDMC4&6~Fw0?z&Je!o1EG@K#N zk9!{o4x8zAbz*Pc*poZTlY$c>Xfdjs(_WW5HXP5?mTPjS&xmVI9NoPTUfWY%(;8Og z0hSGA1U2&W3L5XX!;h&|JqS7kU*3Hu5WGO^m^<``3uiZuUwugqXwC>hgy3f7z-Mka z-~WxTY8Jk85XxbM+fdOL|@47zup2KM&03gTtosD6Kelz;Fwl0%FZ6l@r zVxTa|$xk|M0|HV!*uz2af|xy^Tx=)EdQCPn*IWG{VAgg2UHPAB0eG+v02)*N+I9r; z$G-JUrpGZst_h6;0M&S{h;6s#);%65AP;1>a`?IR|Fv z_0j&S+xdL6bKzgr#@D1aK2ORhvhj1`EKc+R(*Bf5oBH2&Pw#8}oe%M6s9*h4IaMvM zKax*ZOF-fJcb`*}0kZFvr;JXZFa{K)6LS{o_t(;)tTWkj?)eTKosjY;pFLw;UJnBa zr^jG)VRsYGJqGQz{Jb>$CWzrgm-MzqxgswaVXX*(?5I^25eRT?gR_B;U9J>3)0VC&ggR{nQG6L4oCVMDex1~4PR*=gAt?JST4o0Op zu;^~IwoutTP|!dd>fKV&efI-*sTc&95cnS(;n zg8iai(WSEkt4}G&5a%tr(U}ECxk0Cw(RP3WzDNm(LcaqPg3Ow`F>K>2Pt;pA&BBW7x`Vi~)re z(kUWYXOZhR-%;fZxehLYVTJ3E#*dMaj#_X?ID1Bci$j20QPO$U8N4AGDc{FPnW<5n zCp+l1eE3#m1Tg$UHlyA3$b3dzt7ntq3a1l(`#|{M zQ%`6h6rHwNIpu*v+XX5G3eBcR`083X`X-Qtz`q{ZJx?zSvl}Ki0K_@%a?7TSWA!lOe>n;OCW9Ot3{W=?u-|?6i0M#;d zMSXogEVps9K}h|J5Bid>%}Dx@*^EmkGH`bMq%42W`#L4zBiA(p6k1;~u_gm#_sdTk zwLoDEC`bo1CvJ{SJ7}PRKxp?Xc>={V_c&L0$bAVGb66_|pE5GX*+-tFm7u~| zoQv^f8rkz=q|AtknFn<^1`^0?^}K_1Tp2+j$M_~Tlabfbr9feMN8{kYsdX0zMOnOl zr@@Vx6Q;ZKk$kL+ovQ(b3%Z&_$AcZ-5J9?ViW@Km$O(KK_P4XNsRl8X`DN&7F9HT4RqVvIVWn-=o~+&?pYJPbuhwp= zCnL2Dlexx#!p66btH}Vl>9r?~R-iBj6s!ZOuRt%l-f8TOy$wGR1oKF z-0W5XlG>Y>R{=rlQxZFZyxmHhCwaZC3;A+gJ!=UlYQy-Z*FjR1Dm+bEHlkmU|ol*%Cd)9d2A6GPsG%qU1*J=i(ys)1lUm!%(; z5=8%22WvmdF*04V36=o5EAYMJt6$8XkPit(3e)}nra*yZj)B)ctvt#q0Sef(*4ymR z0$i2$766B=g?+~OyS`cs_`Q4|7CT3Gq)BZ2s(fjK4U10pv@iL*Vz;jTmfz1B_@J%V z)XT^Ra_(8%+C2dwnnz`>*oCF__c&`mt|6fC;5DbzWPp75l0O-xKw%6h&;eZFu})X$ z)b;H1`fCq9G%)yeW~RXz-BftT&aV0VxtP~Q@M1@HX`QT$*Kh4}4%DWX*M(rvVu2uW zgcX@P8{sW=RZ!Gk4iqFv8&yx+&5vY3u#+7$|T$((<=F_$gab7{*~h;nHkc01Atp z&Z+^0xe64VT;(9L@c{cwqXY0#mITMwUt3`3YoeXUx>U1qX4foO7x!sDGvaOB%jSKA zm)WkVSG7FG&kqKKye*XbCDT=Lo>~G5-~Q{`{EotpT7F~1fWr5}=bJA-f8rQW7$K72 zJ}g?62I1kTP$TTIgJcmGG&GM<)f80HC|NHPSx78j{_}Hwe&&eM`UH_)zv)7$5 ze+(!*OJaIG?R@@Tt3C6-{XNgCFkMM-FOjE^ig{UJwRC;(X!Xv)f=5*cx`<#fbO0B5 ziXG3c@?fC(HLb4?&%J(10xdzhDM`C2{GY&ZjtzI;R{3zyq_7v@LKnP;mcgfY?KupP zkp!}P_QzRIvDT1avRrv=t*T(+b*Xv9*)Yv zfY0ak=6*j%K;hPvXN>6Qn~gp+b5>0S$Bnv?afFFaL%)COj1iD?3@F%nX`c)Hef~O9 zNjlC;^_e5qgYEeCPk$mK!^V`CFE0(Oj@L@#g$!w4_#$5%6?+G-!2k!kw9KJf057iR z0p?YGm8TV+axMwd-Fc9fG6w3s=C(cAKeP5;@+n?|=nK1BvZGgDOu%Ewfq=nmf|PIi z9U3U8ZMa~gqkPG`TJmC-scx*T=Mz+2JA3={vm~qc?Wnw3$(tMm%sCzP@#9F1VUIu) zps2cS^e9lkj`n4G{DsUY0AS3fxwi8G*#@L__kAYFtGXnu*F&kDx2(m^OJzYHp0B6U zygq%O*}IY2l<7w6AolL_dLEFJWBPM>F+OR!kp>EHpD;K3?nYZ~7*h_iP@Jm(xcxaVi2feNRh2k-Q= zv2I>)dU<+rrqaO+JN4$U-mJ&e`c?aR4FWlwy{zKk#K9jQM$gm3+U;VgPdb_nK`Q^k zU88d-0z~*-G7=`h-VB>X8zoKIaw0*+fUTMKH~Hb`)cQpp;peB zLNI?`=$;QBmc8ZNIb%R!cqET``)GlmHPqB@9$}T*B|9t+IorjG0nfk`MMDS3U^<2 zx-B(4=hXO;Ni_i!?*GVN62zZ3`cD0C4|AjA7*JSZ&Wp1P0^H}hbRJF5bv%<7GKWAq z>1>wQNO$1NSN|rpgi)l8)FO|H491^p;a3!-j)7O4_Ri&Uf!pf&UgvxXvIKF~spm1x zPWf&YL>(bJ!T}2KlR!Wo$m-x7a18#G(O~&ZXT?CF4rkqqP_u$b1mj-VWL&;LBM1ZvI}Rq6qmd{8XcfyK`}^@L81%M`i= z3Ja0~D)oa`3KZh9#Rbepn9XP)(_Q&-R>#t505Exdki9wt*&IyqHAi%0c}OpIr*%@G z0H6XWkjBU_Jxs2>*r4+RwB43YsX0pU*+*!jc=2!qV79J6)mza_PE-WZ91 z#QJEten}&3PZ`p#)Fa7j{m9Zmme1~$1$Ff^);_+DeetaQA_X8;w$xz|K$kK+a4?&H zmO$ZMljmeV*kVf!&kz0hy3s$Y@X=XQ*>pH`fIqYw9mjxzb=)+-b1lJI0-*&94JMkW za`t)l^V#X9Liraz9M_x>5Eu8gm;-T+K*|ysI`6-;m{*7KG8qJXxB$z#{FM5u2iC`% z2(l6g3P)Qj3HAhVsjuizoLE8L82lR*q**zo4%h1(Dw3j*b0Nh>zRh@B+?2NXp9?kK+pQ4Xx-Aj1%cJCG6C6-zSqq?&^fEIdU?iW~Z(q;G$JBN?7XnZ~WV8*Z=ZJv+a4Yp=~J==bXh5OK{o^5~CznE}|o8E2VKg)a=m*~cBx(6p zKn#YB@G_lnZIsR^Fzp|LpaojXhyFN}KYwd|!^5A=wm3H-7g1eADAQ zZ`jBT1Nz=?3kCEZH){XZPk+LGhxn#MliCY11<0e?WZQ9-f6!JPL z7=#i#w>~p2?=uP(&>42#S8C@h&*kmv^{c_&^eb(@*!+X(+-y7n!?7MxU(PfCL$^swc_4{tp6}3yY4NXQH$L*YO7MF8JKwB;if{br z2O*HJXFmf|t`*1g>McFl_kQv7gx7TsemZNu`_^prt$Xqy`01yjmW8oZ$s)a+~d2y_*vE;0t_Qp zf*t_P*Acqi-e#!;R74{Abxi&pesRuk8?n zQgsm3kknIwA#&5I)LjXIF zAmvd1p>!KS(`T4vF`!!>oPAwJz|N1UYUgd`HtvJ^!P>3&4JACaUn!OP8p!h)Ci!xQ z4HP!KdP4T^ciIP(Mh9(u=Q*PWB)oOpob2gqes?s1gz}A!V?aSVMN5?q+2YR9iS)iv zFVE#(ZwdGa&lZOB%Qki~>I@^Ja=^eQxmA02WJiTSa#ol&X5D^~D;wu~)y=!Iul?YA zrQZo)bhV8{n!7Ib0M2$l`cNL2Hw7Y)DD4W*D8J|fO#I)2fdy|f=FSFy6=>%?Ujdqr~jMI zo|}E)ia#2CAfbGt;}}qIopGUD`}@*SeLkTUs5-A+;U^CK{1D)0hEdjQHg;zh?Yy3V z6h?FRWgp$P6=J;?Cmo#ZrFoE@+O{s_X%dGApXfxxJ)GOpo|Zfab=-41Bg5e6w?b^> z%14VQg>_oisiy^A?Cge@$(Pg-8M~XAc4m_vd2K&MtdGedI*>YF&_mv9$jgjKo_8K) z@?3RFTFMEp;GL4EwQ?Hr=L?0W%8DEW0py|#@>3?yE_Ry+JMX=N`V$B#BY>{(CBl#w zf(JyPJ~x1;3p*OZ^1x4Z?VY?9=#VLCQ^4As(3Y>=)FW*f^dENLzhzTz(ElZY$3WTC zZB|De9~jEp^tAO?B0st^`Qa~mY|18wx>*~Hvo@gZoDG}4^x1-F8?TG9As6ytV|-u= z8)FmVX?0g*6I<5gX|c`e?du7A5ZBmPV$()|2>u1}l07$Kdx8J0`}v2uhd){hby!PX zNFUpKE&A|wsJ9n0+kC$}w5uIhF}8c#?j0$cG*mMBX~%z?wOuOM*SXU`Bf#^+2`?krxM#3f4otr?4ZmrEtM^*>)V)dOC0xP3%*2M|zlbZ8yHK4;#R%2eb1tA~hk)HcpSAbik zUEtdi+5j7=qpsF|(oUuyAs1+@EzlFPVQ1Lb_@*^na}PPNu_)UBkmcT-K-hrUyV|ta z0dgW6Z#@8Ps5|`810Ol!8EIm^VE5RS*+!??hS-wpcUnHO&Be~?Goh>r=sDPWZs!3U z%*4*S%+58KYM?h+nxlS^1=~Ot$!Go51##=^)`sMt8*SW|0qM0p(;&^+$oNYj7rPS~ z^sMb;=^ZIx5Id3nXmWBc0Seu(8=w9AUAELPx`}T%-1y$-|8J;2IDLBd#Me3C5a6NSqhsf7`Y3Ss>|D^G4s60}=rEMTU z$=jK?S^rz@?0l6ikO2>;V|PyN1M+=lL99Dw^Sy`r?I*@eR-Zvul{!m6vEVW zc)hRg6kBSjDf;S$ld?CS{k%-A6KDyz1m2pYz3)8w|2j~xU?~BdYjYgAW05pzP{7%9 z|9{y#3*bnOqznIe%*?Q8_A>8kwQ$T#W@ct))QpT$>zJ9DnVFfHnW1i~)lc!=iwxJc zOe4iOBBM)LSubB^7Fj#$d4Mov+lU?5%|<1A>ACqpU*lnn>9ASIA8`D@K%C@Gc{=0C zPsXo!gu#4i9AlOrT#|Sg);UJ(9=F=?BMfm@T*BiR#d^V8U+0H>{p;xbYyK@0UBo{X zJGs=l^WXBH7WCrsuQwUu9c3WtY-&l`+EZKY#7 z3wfbmSkeUtn|MnXT*A>WE)c}Qd_6#U@yoa75$t`P8Gq!)YKY4+)}PHgJ;4Ke2{>TR zBTlU^@?y>xp3?Hmo=B_KO1ksbOZypWZY#J$=tb*W2N8#H!Wl zLnqz|hwjXi-}mIG)vE^=1uYV7FjJeeZ8kVe(Z=GEj!$4f4?phDFCc!9Niar-x$q2= zIzP0+%K-a#IdGkL187^5=XCYcQD8=mR$&Yc?Kt83%&A`r2VT9&38zYPkq6 z3i$KKnJxLk<1c2qwikpq9eU67+i|>cafZrAPr1Y3GYUP?!rU4xl&w#1#QL^oQM=Jg zC%yW%M))+`sI?w0WXC#Y0cW^miki^SW20yPtic-lC~I=;?U^f8~RH z{5k4#ogb#~#lu;AFc*l6dFi!o`t0Yp_Fj*8p4UR|Rx=2&5lfg)>HUIZoIw}7yKYEAsvEIS@d%lu+hRa0{-DPl5=!q6*7A`F5{D6){{kC!2Awpl& zo4{W|c;(%pK@T^FFSt zkBwt>|8d*>6gY&qeu;|KXgkh@n!sm_S+1A&`(@bUYrj@FzKmh{@r#1wPj8+(D=rED zc=!DDho}Gd)UVsWcEK&{-wHhA$qUj257{-HxM4*)dd;f(Ly0F2El=k@Xi=KzT`FFC z(7n?a&$;!ixg1cwd+E*6)AFB44lWAe0@;$q^)5x5E^YL5{4!3-x9f?2t#P6AC;Qn~ zwef=|#O)l@`zh4(`QER7DFy%On95cBd2P?JHGX%SavEL~-hJlm z_-(>pUwvmgCPij}ljdJ4SE7pR2%xUukCiuhFay8yfXT33eLC-b57%9Ja=@D0T z(ml>Oss3z3eyd;pv$;)it=w;rD{}VS6%Q24Rebn)E<^v`jwQ|~Ial<@7^wHUTJ6I4 zphG*HpN!w}3hNvEgZi0$71l_46V7`{oL9>Qbm#}aIKMG|P;;z7$8iiwH@+wwuyjLy znbC~DDE#r+|Bpj*Aio*=pS1tt^@EE-BRnYU#ZpZ^H`lt}6N_atZG%lMkJ&8SO8Tz) z{a}ZEwgCqpQxP-!As6ZLQ#K85rT#3=8RI=p>GjNb;$wdC#8_~eP(C>}<1xR?0kEJm z?!+(wu6Q>-H&vbbHv#!YNEg28HTh*jd>f-AznQT9(xiJ$y|Cx>`nL$nFTXIYZ{A^n z+%ezKG4H6G=PW)@IY-P6;&HL(xzrE>RGwTC}C*Lu> z{m8r5FK_xm=ceiR*S(L7KX`>Rga@n+rp>;wYg5qS#Dy+9Jtuf*086+Nu%A50;EzA6 zE#bk6@m$QjpvbrSFcupM4n6Y8PwEsi{31`d3^13-sc*P=DmHI7u_1Q(l^ytSv*pji zm~4yt#_^G~rgve;2Y-GsPyQ{zP9{6|q<+!WW#^|=S6-YpjE$sWa1!36Sj{b;Tdc3v z`9+CyK*D*M#pe<7KrGAy!(rWdse~UK6pBGMn9H&^o$`#F6GQeqAb}%W#ibZjbMV3X z2*zLyYAk$W{Y3{Zc}qt>jqqa6b;$a$M&wgLue>w&h=aMuIsy;IVROS`29DJ&3-=Jq zbLpaR)u{M`okNqp9{&KUwF$Ib4hsD(RWS$YUMq4+E{;nB7c@5 zf2QI!2izxp;DkHp7d%b-i>FT6xNLAyfbdY$qETC$!=~I%!KT*;#t=jO>9r?yLt~R~Y1{;iEabTfZHq6?y@dS8i}tLoW13�Mo{M?V=n}h|8z>b>57P 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

    v}h;q~Nwc|^fFxpnG= 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 ?C{i&%#VI)qx}pYHU^QOkVTGX%FkK0)YF1k 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wordpress-seo/images/banner/website-review.png b/wp-content/plugins/wordpress-seo/images/banner/website-review.png new file mode 100644 index 0000000000000000000000000000000000000000..0b47c81e6c16a2237b807c7c79aad050b4714317 GIT binary patch literal 70525 zcmV*0KzYB3P)l8@Vt@2$t>v?Zzm_BQR*s14 z#T~>+ot^*AbK{70F4XbJx!N(hdta)fpXOAVkLH|WJL~oRnjG^Ug2+-SrFK??%oJ^7Max`-UVu?~~r*761IHZ@j-eUz$Zn&{DE}xsiBQ zf!KTw2#LjJhy^0&UYNg8Yyt!vJC_9=hHmJC-RYwz`{1kJ$M^=2>QiIDoCnE1t=yQ! zsZB=apyY4GIkfqR93Xz-i{*~U$bui(E4AN@y>{zU?Cg_vpSuorAneWXU95>-`MjY= zNWC|jwjgPf<1cUIbsxMoqOcJKV*173yZ@DsdC&c`Kk+SJ@!J<)^e#7Yc6RvB%}v6K zZb(7^V-%VGiBa&Oi11m0Dg`8n#gi7!y0{fh7Ho%jXb%Mrfgk{`^}4mc z=cFme^UN5lXW1W;Q2DoYdqT|c*({dY+P^uOgN!yhr@7n(GUg(`<1=ou&_iAF+1$1U zIHPyRpY9RAtDE^hzd1<1bZ#~l_q*f@J(vS~5N%PIW4lqfUqoRe3d)<_$RB>}yX+5d z8E)k1R}a7UybpQ({loL6IDt@16J*PFL6#Gdpg2FdPdB|prg=KZxdGB~lDBv>#)1zq zh)?Y)D&jyf#SODq?cb`?k19jxs;g-{KD;;q;AP z$pd^T;ONg@UNwk@gs1=dLLHR}Ib6sE2oAXjV5g76@Aytq95VBVajIjJVy-OFhxyq{ zfW1DZKL-!TU>iBP-6-5UqOcJKZx;UHgWqWXC*S*NzjyYG&wrN}{>vA=dA&(s^am*m z;%pO7K{Lm2y3XGMec2Wu5x_To1G=oY%!{Z6SvwtXK}?&yZcUv5V89>>>@sdLBuq*0 zavl2#900{a`xv*3S2y9?Y95QfF~iqm9*8IF=Q7}srqVKALJ{bjPKAj{rR-$ zx9Br;tw1rxBIq-KKR|yOcBfrqEkH2zuIw}x^=l~dedqvaqDS~hU(=4xt{=8Tnz4!8 ztZo4#KIW@r(|oA(I>^IyyHU7bL}4Qe%GZDLC++{@bKdJkXNUj0;oraWZD8>hGdE9c z^y&2}pjKZ?3y8kwo`C}TQjBLs{USg*WE9}hN82sH79w7c0Lq8wi{J~uVb=g4{Y+8T zZzbTQa2t~`6VScU@T3XhO5O2&#MOL}m>PFZ%El4!7y`Lfe}TfB%k`_A58YxM@kB2H z9*`sVgQNgpLzc=OeNdm!y%7qZ2Dyc-VJquL{}2e%@SVWyewMsuPCzi2JH}BPXv=+{ z`-+@|1Tubm^{^3z6CetQKXClx4|&`D*|XmNY=5=mx;=!`Fn|nr0#2SPEwC2B=~X1) z!?+j|b8wA+>mTG*I*!7b1!;)I)>GcaLZ78r$7hpQJb*B-9{jB@a}4CglX`p~Ko$Kg zlJUI&&;<|}^KdgE$-$1ApbEYVWMr%nHgeKMmuSm8&KQmOst-AkBu3wd&e*9h^*4lJ z;dCDMLrAMNxJkgz5U~=-7fE@UYyQrgnW3|D>wEXNx#CS51Sb4q>=$zm@&r+&PK>?} z@A<2TjVNqH;Vr)82ls#fey_hjd&c{o0ivAbE)wjOr9K_gKMESBYpz!*h)>4Jnquq; zICTnr0bB`)c6(hf5gPher{^eITyuH~3g752uRvo>z`i_Hhpk}?y3!Z@(ocCJghVCK zU=O~8JS8wQj`$RDjpv~kxrQGkh!RS3X87Ekt4XOk_(!?qUidS}6DQXgkG`%YunT6> zS7xb4>Y3w~)EBap#5u{HG2vNx%QV)JXvJ7w*CDZ|me9v_GpBOhj1S~S5(j~Ncpq;R zHlnZ*1?0dH4n!f?H^5L`Vb)jpULDHpeV?1_1c9JLvQ+p9bqp8@E{PglDwf`j(6PzHpbakp8)RIg^q%~@1bkSaolL| zt{>m|x@vw!FVHH!zH)z%n@PF>KMCRdhRr>yKZ5Wi0VwhxlFED;NApGi2Am?Sn$YCV_xU2`65Ymyh0AtWWYQ!FVw{xRqPKLVqWH9Of{$A3W-1vPW*N5sSB~3 zi+yXN%-mrYal=PJn#{+`jVNqH;k1YXjJZ5{`rA#+GdE<4SN$Q3;{-4V>-jo@GJWc2 zj-U4jEG1iW-!1@Lp&y04;a|v)5_-u^M-BeHP?rJNAz!kY1`*ryVb$Z zo}U=+ATJJqR|iPJH%3(EiLfw?E=CY%*30d!+Eg z+Ro>GpZ?y{|Lnub{A-guY8(CZpEc!rO&yyD8QM3Zun~omA_~_OJ%3k4H4E>xz*!Zm zwR^&)uv@TWZN@?h@;js>`??O}t{KNV*f#oy{-JjP;-Om*r?meS`ZeA zK-d}JjNlJ)CjBz>#^;B*^-IJGfFWMkYA!AlTL63gp8jVJ*Rkz-_=(t;K1tHB=5u|m zzT|YhXCPCdJHS}Zy=E?jZ(>gL!uPC|IhJEXSMn2bu^f8?{E2;Hc|MTi(hm6$;mJN!JoH$_0iw^i?1y@2T_QPg;-Q$ zJ=Q6$$lCU-NW7rynH;4ztc`;WqhC@c~2xLQIJbl)jXL+SB(x)rA6YD|R@TE2_ z@m!MQcS#+<^~iTs?vit%U)rqCuE#t{LRR-Igw%O5Ug1NCy*m2|@LDg@=V5pHU66+4 zK{$Pmekl+|h&5z3{XzfZUp*X(?|u3A;upWTO%(p)KmKEX>i-^l?6H=wo_gx3*BYG% zQAj{d5QyIa5P*N2>;foN09#mp_GhEV^L2Lm1`zD;%}5sEEV`ozuk$Nj zz<%hLU^M!r;6sag*p&r3#-l4hdn2qt>>xR`3sw>b2vzti;*sE&h4zu&*(bnLkV>0l z4MtZ_q>qSQ=1J!3LG(2~!QYQ`8zS)=HbiWbP^7KeSApFS@)@5mvDT8r zdgy_VyqVDFi++>95eIJ?lB`$@(oe?EybL{(TL+Z`RA=VuN;i#_c!!Mo=vv8;WtHl>^ z58Voqfp23Du6BbU1Q6is;_o6tr}Pg#39!mjc=k#1kZVd7`5S{+A3u5n<0*Q9_z{N{ zAWWZ`bGg36CZ7=}aw1}pAT7BLFdy>_Uus8?ZE^`RCOM1T3x9;|5$h!R?5UMo6W4lV zQ~nO|wOg)}doA~-hlQ1cNz5I4$=7`l<;+z{K$0-(6~sQ{?&0IX`VJdW*oeaE5QW^7 z<9jlDuVw*iHt_=Sh%q5aKt`MMgkG@w?3)EXPuvUF&a4Rl1|UR{1!Q8Jb9&lNk^@+# z-=f{3I6h;Y0NK!olUC}Jpd(lm#ZO|F1+*%-tNLVo(~gYklD=nsUK=HV8rv1XTm@$d zRrCwuWnR}eA4y!p_9T$57k(=U3-JTw*989rVoAl4dO>6oQ0w>eIWET_emyq2U$Bv2g$0s^oI!W5Wj4^XyfQ`E-Tym9cAgQr;D&0C}e)Pp$p zDu{;Oy!QpntN3{Wk1+sP`A2Bxj^LByV*LQm0E@7bc`pF01c4-vbsUpWGH?3ElWqEg zzYW0u5XeFYh%~z8oGF=G05AJQaPyQs>`Z@ooe!aoIq(Z>jE%za?a`MSj$ z&#)`@kgr5yztR`lgHH#ZNr8-1P|&CNl^YBvPS_tIgLIzei)&3GvFEnCcsZjKN8%*)#d6S?FX#yIANM7lr9 zn==42#oIS*;8j9?A~8q$PMaY}QCni(B%Y90Y7IV&`OqQyJlJj&HllD!L?JdkVv)4X z0xy{m)HtzH^aRK}@e3$yY}Nv-W30ckzdB6;+!McGe^J|?b2{F+Enay=DmYibmLdQF zLiFRiy0{J?P|S-Ef9RN2qIbAL+StR0TK-9PLf@{*gD)K{IX`WNp8_(AEB-*sI5!zzEjI$H4Kqdg5kX$x!ifWP$X?id~F*y-24zFi{WI{on- z8|U$DlMr;Wojjk$$MO9bF%Dm`#*X&8h<)47)BZkFzsCNX>ZSh1Ac%s0qp%T$zHIV3 zM-;BcW~e}L=SEa=?4(fd=ojEy7An_s)4G1l>9*cJpuAJ;{d z{t}(E1yS%f66@e!3DWLXqJwS{t2$o8FIU75Fhz3w1V|)(`Z3mKO@Ofm?5oV@2ARFm zuS&F=tHe3>nz#emyF~kp*e~ATs ziT8G+aB@UpBMNLbH<9E4;M{owVG#<@-cfL>IU4|7fP4v9S91Uipb9YA0qFDvQ~^+Y zFw>iPV%^lE0^-pgprx+?i((#$-IepF-uQ()Xx>KH9=683UI+OOeR-zdLx=%>kFk;`o-y7%fL%)Hg|EU-_?no8UHUm|4hM;ddCc|p z3E=Y@p#RK4IFKKvtNJ$ch1hBMG(lgriMc5z_NIM0u(U$%gV@7N&v|~+UnYSuC z!8gY|Jx`KF{H1Lv=}_x3qfVnO`U7V}f`Cut4hy{o{Mw$On+Pyw;zIofk>;;62~ApBj&CC6l5 znHS#R>|(EMuO3d0C~U7DWa|kOZ2SZ!i*LPQc^<6alO=!zFncl>bL4e0vg5Xb_OO-0 z1YpJYD7=ix^}=@+OHR&Nd?Z^Xu>lAYy8a}z+mH5mEMM)I&hoaty zy6YcLOgtCZ>{}OHfmuEAllt1P0$k))-$^uU(r3(_OaIiwLmwxA1KK%8osEzAW52l% zB^i=y=kT?LIqR(qpkDjF+}qedn>raY>{T*H70F~L)*DgSh{8q`cyH`xY8Cky>+f4Z zgK^3O5K!7H`nsiSC5DM%!$Yx#GT8rUg6>wZgE%#pE#$s%|O*0vCXv|Ct-7J z>7RJTB5A7QRy|j0uvGFSt&i%l%28wHHr`4eh!10K*Fyp!!EkKdZ!YF_uZ}eLY=4Y> z^ur_%L$+5Br$!VuqR;?Pi%ffSHs)_UvoPJ&+S416Bj@9LU+%yj*Y$aSe%tho^Bphs z$=&a*vHe`R8~?dZcaH16FYZ2n^lNvnkcK_1(cV|g&l-2VcWUz6o`1Vh*zaHd@|W)) zJa}-&vdK$c@{-pjqVRS;dku>E_`Eg7XZOIqo?PC69`xa}zwYI0m2YiVSKHd_y;}3^ z^3~wG6B6w9b9?o00{^yuEuwIKkhj}gh%P%t<2*LndD+hQmelj9pU=+wYh0c)SFWob z>d(4!fK0!-eiI1vaTAm;(bwmWR~&okbH&*7=hP=YKW?sFHxC-Vk2d#&V;p;F4s<{Y zKe!jvDSs=@TemrX=zs2>@R{?HuVH^3BjUh3^D+7Xo9s8!k#XVA_&hP9u>ISJLJ)(- zW>vG<>(W2HTgXdu_y5^93m!R+APNi2v^)7JVP#29RlzwL};I06=ER+Zt>J*fq(T0&1{T z;v{~_+5l*YUs2V*xF&%g#1<-nANvQPh-dd!>x#2YKfG)^Tc#V!_65^z_17=i!ah}7 zGN9eqkc{OVir?Hb#5Z{2utn@MF3-vwR>KZ!iQ^d3_ghu&ZWW; zxS1_$DuqH>8d5047n2GC)~t_r_kqhhUG!hv$j&;u%6u z=1H7e_EmpC#Pmu06kC+6dDG^ZfPigs-<4>$Wa#*QQ#5hELc5I34xVMybtxJ|WVu3L z=7}Op&*QSTS;A<4IN&JEzIMa@( zluW6LjxwWAmIf0FnUI_U4M{J<%ZC0SVFCk%!mkCmj=!jzwe+qC@ChLi{6Y=uB9$tj zgz*A$9vPC5BRL@RKp#oAXqWyV8rZIVaf2ejHZk6ArU0Z0(jaj#UIgmU2jdXuxVNhx zzQnZ5d;dinc~Ylhk2~AA3%l8rD|*mgP0Nobcd{`T6ldYKiufRF zNJ<()jPb^K#mx|3!N@-7UWhP5e@7@ZfAzlod}?Q#S_p;3{Zv5e_zYhk>DkEqjFXZe zZGa#E;lcL|!bAi(#^9Vt%xF8a5zkS6?* z%CAn805^R4aIkSlK?tqAtG1|b#g-3(?-WJOja|u@eld0wYOtB>at|;LWC#H$vYE0=jNt@XzXACN`VLn;=nKal6u_1c}no@P)sFT_<1kJ_X=CyW&&;u7+>%+GN zf$-NkU2WP`^&5Ew_Ht}GyF+`Kes|~N*t9rH3x$4iMz~l09(plFjvp7x=p#2KD_f=*Nrd|F&FD@nT;3s#;Pe8!AIQA?pvmWB}u;f1Ij_@d<=h{#kL>DY^StTdW<2hqZXvVafXWdQ z4%hU@9tMckXh+)jJRMt~ApABZ&hVRrpH3;V37182<&Vj0Ss>Q=H&^PvRSA8U4~n*> z*N3e~(8q7%nB1Q$Efjpa(;^HNcF8&Cv)?c0TK+ul969Z)9m3_H=JN zT}O3EAMd<(ewf|Tc+r0D0pFKWD3s;@T=wnX3!y-Ai$qJY5J5$W3WSr_6olnD`PD;( z;zU7P0V9GR$)+t`c;7MMw*{Mre`q_K+y2IV+lNf7qTP>C?OImI6LwDGmC-1c7uiRy8-Yn`HciHM^d)q(korQN?N3#D9EI2uKH2Y8d zevg?MP0PDsJ5mhFW7%OmvAv9jWoBN7nG+>ez_785ksaYkW{3IZ-PfPKsx#lI^z>?? zw{ecoy*_njtm)ggx~jVB+tqOEOUe;2bt#a7eBd|!DRU$|13Db)nmF$d;7Q6l`HDk7 z^x4kI`_3h8AMSfcc)ok~Ikpw`4+@jT^Fap40($zP+l!+?9tXa#Jj!E?XM0eU2(Y4m z;j?V};m>wi1}0wP_uf|gVpUJE_fyM?eV;F7hP-I!_@w*~u9{z1TMk57(w0EyG~{HU z?MNtdC=l|lcXR(c*lHWkYk20qs~WoQ?+a}+U561Lb;76U2l9bqLO>gfGLhMHkKA6E z%$~gGs^Z|cR}~{?cZ52TS90os1)HHvP2}UjoIV%1b;h<~2m4o`PueHt9gln}Kr}l- zHv7W;W8A+~?w7LIb+m=;ebTP=@eGL3p5NzOi|}j%`_2wT=SQ1t_xDSk#`_$Qae(5` zXF7|+@Jd^w?KZMU!e_AYF3MpSVlU;hv1ipcdKtTHe#qibS52M`iJwsLt>D4gyZScy zbaJ=;ef(w=s;j!5ed$QC_MZ0^TgI;U83pMuG77N~NBLdRcYefb&fe}f$JSzvLZhtm z;W837lGG8UIZ&M7t1mp8ZTvF>{l(r3<`siy)nZ_pur>-nnCivag`Hu0=bkf9lKuY% z4icjm3HW*qe|A~1>$H=Kp)La*E?`Rl*Wh&Ux^ES`PMyUr0UWBy1+c`z!n`cxdg{@> zV(8*|EHIn|4XQh7lWPy);JJ;r^PKkNwIFVXMPH5I_VgD!RF=|a%~VikcbKAh^5$RO zzURjVi=hvl#p1~Lym3Fm7h5-AMSF4=+c+nFxR$9h0#zcTz#0n$UfwR^vrM);&&lVc zz%MeWnGBLs4BQK7)NA0pxyA0&W)(w|(>E6Mp1NwCfw=6&cGW%q`g_3+u_wv)xW1>? z@akpZnKor)HZT6d08=1uyV(5W^uz8(Id9|G3sX}2KGoT>Z}$Jk+@k;eGub&syRF~I z^QE7QKN0;)8x;t<%#WK!jX>d?YK_A2c~u}`_1*6(F23&n7nfZB>kXiwPDwi!q-od* zsNnzw2ne8n>~97@GE)z|Og)_0VRhN_4akY$+HMf1`=92)MrKp(=s}Ipm^Y)X2i7lU}w-nx9V4PEA8NK1p2n+^$!hssl1=u zUCNRj62l=-*)#o=#+P2P{^WL`T^~h%!Z%N6IqI1(!eh~NLECBjp!4qfI@X0-yp%rfP(ATIr}^2Cc%R%WODa=e#>kq?8pc}>Y|0k{@&XZU?qXV$l20&WI9gmLbGNsj}NL&kyFSN zoz$3)k|{auZwhR7f1^CJ;-NX^_EO6Fez7kcc=hnP3s`T1y-mt%4)Rhk6u)mg<9Ep3 zl!srrX%D?NMcbVb0{%=gK?;l%>_IJU7oear(sKQ)>9-A?bE@Z~t9qhdHeav+{i7dj zm)$iDyGi&7v0pdUrqe;98~ZNzSsAOZ+VxOf$2mywKtY0%qG>u54c@@QQ;nhTyD zDBNrr1%QH<^{GSUPoD4V+jRbd7;p$qo5RSJR4yY8(%qz0Upmq}kKPvo2*>V{YNbv_ zVg%hIH#CCS(OvzV3Bag31oK&dnn={i+KM60S6He6D3uw}_9TG9-vAWM*{V!M#vUkW zx;p}ea;Jul_6QyX1P(ePMT{)q8F|xgMs&z&W7z(=Ej*tLi=X~cd3)V6;zVAYgYn#+ zX5KhJiNL?}v^b>@sMJH5+HMULY&7lLtbq(YBQv&ClA+i!nWDDc6Z?L&wt1u;0%Qy( zfRJtpeu>P;u5Ya7Ob5URvSE5B)=L{0X-_oO?E~M;AP?6+B>1GVW=~$VPJs|XFz5@w zQM170!3J~n4S9qBde^%H82szE2N1^8hyLylznX!rCr?D}C=RPJ=j3I8Nc8Q1;d3El@=yTwcmFjyk9xs&0jcN*odfv& zfG6#v_{{i}roJlQg-6LKRBIHf>-Yu<3KY@-*>w`%sXSQ7Qw}K1u#AF#PBP%?cO3~1 zg^|&1lOUo01G6Rrk_5F7AP#+}*@52ozTYC%OIhX92eDAEjdp7ylT5p1MCH@RX=gjb zfPw=|&B6J_oU?TRBp!HF1`kH?28N7~2hN?}m~tS%@HY)?>Kr{u`zW6sF(#aLM#fBk z_%_S6^XscAOTY-=rqr`7Dm8!!5P5NYP%|8iJOPfhS=*r_bB>t~nGgbM$vfE%l^csN z(Gf4V(re(yF1sUuKxCODri+vZM$rUm`UGwAw&t^F`%0dXM+tfZj|v#~_1=ap&?W## zxn?8EtHC4k+W&>+&EV?11)QQ8fLn+00cAiga@EX}w0{cOFhA9#V4*kkQ=UV{Wap{q z+}ePyBPowopYMA@0TzEy=(Q!J;>q4@3PF7+fGlK3Q0L6*NOKadYJ%!!j`$C=dC!Dk%SPzWH5x>+?%>M|F^9Hhp6)DAAS*x_Mw%K_nSLNR+CfGN0wHy{!n?{n>nv%z>Dlonfm3#Kj7xi_ z1{9jxe6(CI62RRFF=bA@+6D!1T0hfA%*~TMGFegPDJjD?SU?Eiim40>j*f3@uLla6 z-4XkBcER7#f$JLwR?aWEo;{$5& z_~iO^x)4}pX8h)Dw-r$6_O|PQmE7Z}9?%KvP_}*mkeBm4>NnITQb01*2gL5RE;k_1 zvSZ!V)I)V0-ylJOf&>X4T)m_79Wy-@p-y!i$^nJHFM)z~$ngXqv5}Dd_QLi)U3@mV zm@7J0dnP1-I~{m%hGZcIyE+tv_%#ZeQD_8R4X`Rh959rURkzP5G^KB)K9yzbQTvuj zXFEO_a5Sr6I|@d=x-zDmS%Xlw`W+xM*(UU^Bq?jHrv-?454=fTqT3c=jCBOrk!W1Y zFi&*R0>pS7a-Y3`%=D~v^S%l6{2=d}U}0P$NGLFQMbi6z>cPuuT7-Gu*+sg(|}IPSU)bwfrqi~Dx*+c$1h0800kNOcxNU- zKM}-T=af;4bgaW3DEzUkQINWu=4L$)GP<7b1yHcS!#usoAT#x#fnOY#%1TEi@&7JB zq=5p92}hSGsL?iOMrH451Sjs>&z^Hxn5Lu8LwBq%201gKtAhY!vQ`kLnFrB{v_VPq z-!j_)h)GPxJf(qLWDHQCjDamzuZ?nPgX2p9WeV(BR;Xrr@~2706#b@9H@0B1NChW; z%YZh~x5&z8#T>s+Ugbvf)b}3AfCK^v`e_AU?nQT$Hq#QZO!*sm_m?7#_o?J$x1yG>P61+SJX~=Bo>Ey5WSGw=02H)NZF|<)5;RpW1Qr}OL1y?XD~lsr z`qCMd@b_IyewW~>83zAc)q7e;dETu3B7?k)<#{c^k)1%84!r65W5z;snB_SKg7fWl zK+(viqnuo&ZdugGV!{xl#V*|T*X?UoST+oB)snBfoE{*V;&XEIK*0fl?krGH+tmP@ z=1cUbvdY_0Cd=9F$PH-HWqk&(wQi#BTz?*|rXH&6b%KN+Z$7{HLhmWX3ok$YrUnW3 z4186Af*&omNiJxlM;5I!3XjG4M}Mz>PTo;7BBd@?e>1Yf32lkQclms;``deGmM8bg zh$Rzbax%*EJVj^hWvG-NU8kSLNQ{ilj>W%Q)UWy$`|kaTiEM+jz32&$l51mo4j#(O zSc6^;DCF9l0U`<%^1)u(I-T}f&>f1 z0v6t!Ac0GPf>9oo#%^BEv;!wy0`P3= z2=ZGk%Qoqj;kNoGJ1S<_)B|OH6}CHNFsybseX6xtmjfylP?+9Tfdl~yrxq{&_X}@I zkl=uV>k#62vSj6^Se`e|c}H|#IrShxt=S=%6Rbln5Xe?QOT#kyYV8C(pKS*j_;f)y z^NhN06W?_%T1I94NoQNr`YGOa(DZF)8yi96>8*W*PjmOjEodFdcGZ1ds;B>BpiqAu z_10Z`bM-3^dek!u=NQ4Wn6a#@X1eow&FG?0ztxeKr&4)FgYsnCF4bl>ES?Q8w!^}d zKffr_^$XX(mP){M^5ESdwte}r(+!M>?dCEH-cEAz>a4X745fbmta@x0l<5l@yHQek zxjsC7pio^END%tkhEBl3n+_x>P$->1AU^%~R7a~z5HpA4sh$86Q^+XrOxHoBKB-gF zw0d}w9m!lb2c6`t$B*a5>MhG1{_ZMW<3ZqIt%d|ixmWKOd1;-k7SZA0;mzApK9JY6-h6-&KI&7^ z;Q|ADHPZS1z$LZ=a$K|5tJ-_Z1DB#Mx-3ZPrw=muAjZ~9-Pthkg%$b&sPc$uIU7N3 ze8Np1Y+BL7QP*YWVTtw!cv8M>4TNkt{ zB&3~QveO=F1r!MGJlg{ULGuKDKSF=@k>&%2IO?@bQ+5c?nM{QSI{`feWf_&({(6F# z%Wl*x5Tu>2JYU+yw23>*0jC*9vPs$1#euruB*9qPCeKp9rMe@K>e0ozFwTR7x`LxL zU`TFbRNf%rBM%ge|2$BTb~;d)uU~adP}WpE0l0jt;bLbeVtWZ)&|U#BYRfXM#rIrB zN(6IsvBO@b4Z*T7# zOclNG!VA9=kl?|>u>c7V4*jU`mjVSBpd~n1M^v()?E!?lS393k8YtKq^)*Q9;2HT5 z`u-L3^%b<75#w)HR_xQ zb!vdz{f*Tzqp*>T!dcwsf|>_AO%%aV%E4Q9r^z+HrHFI>af~zPK0ePA1j`1%+MdarLmdii{yCz#EFK7a++9JmCZJ=-C zWnjFuRQhHkIFnV-egOb_4Wy&`7iIUe7}JxFS;99dh9X^ zx8Htyap8p*zQI({(W6J(1`6wcaXEpweXwv0K|*Hgp&0;3Fc2i|oRS1ay+;FcUG8Cx zfx$`vg<}8`JW%i?qdy@*;Hlpr1rYweLjZ+oT)RHLj0IfGx5kl?)ejiJ8MSi(CKxd> zFJCTF6h|HCz^6O2_XBQ7=dvQ5;Hpl`$wa|I!;ycgQ$~IHi?%&_(ZXUNq@7ziQR-~> z0wnM_WXWv zwC^^5wtk^OwAOXN5GPU5P z)JUhN+L{Ln?w-tupFl1nI#+KdAUhzNoqBNd(a`APj^e;i)@JP|uM6QT*=KzJ(P_MN zTXf{kv>H=&_GU@dRr*kv%Z2rO?tMaJaY1*ezFnBW8jm^;`)lM z!ZXjfCpd0W&1~D_U?@hCtafKH8!PnLnnoS=9Qfr;g4-`$SZs&igbb(`88ElZ;Y9;y z0KC$?k2yX1GOBarKz;BVdHcXD_h#G z*S9N|1V$=HC=1f^0~@VJZC~{ydac$dR6ybNfQ6g3e{vdNVfrB9lIwrH*gSd-x3&iq z==9bp(#}mfNuuK@u!z5_1D1OE4F|^}EYjS&PoG7g4xjNmWPh{o@>?v&g1>M-PQBy- zQoeYHKf4F0A7@UmVu}D_4jyL?(BOA62?R*$LIxJhAp6b~2hZC>eIY2|w5W@Eae4$6 zz>mm6_@OQVPx3c)O5D#PLfW~#tlx+g__Q16$r%TMPm>=M{@#hxwz`bp4xByr#rwBO z`%B*Alu2k)cy1SUPVz*11th$qF>==YwiH=z@AmU6i&=*^Wtj zViBp@yYM73fV8h@e=5tC3w8DC?V8Of9B|8XDCh2PuEz&XbTbrXUD_=+uoY5!SZM7s z{WzZ0wpHh5yC)+nqlUan+cj{3yi|`Gj2nXqvm*!{nqB@cduQPy%X7qWByMx}Z^W^< zArUn0w!6WjIPnCFyE__pcXxNsyWPFGyI`B^;lA+ULl4dTvcG+S>w#kCdaA2Sx~jf2 z?`|G|opgZ=?733|3D+psGTf7IwO9HZg$@+1`0@VlJ$o-;;fjESub;k~B4z*uA?nkS zkT6NQG*J}8@SusLz=S8V(1bH~UhvRRPtk;;$H>EkMdDM($mA1Z`9;O`vd~b@X|`!# zY}GXD-Lg*n3g5v;nqP|K=3L*bwT(}64yn<^hw=I8YV^S< zYt(mfhAtBU&)3gBu&`i;A(RAJPnZN)OYaiIra%gOM7sby7~5m` zO>tFx(L~e;S%6dYX-{;4uUX_N1M4ClEbs&$1XJ|0_6Xud83wa{;^bNU(CeHK1L?y# zY&_vDf4<7UO!-d!1E}$LIIc&4$CyTjeBn11^|&DSv-PG?Nz24FPkZ3U_OdE_(1|V;A2rE zKrjF+ME~mzgml%~lIWUpoEP-O4ZZAuitcdOJg)<2D} zE4k2^oh&@NfrQ*NRB!|uPz=0o?n#byt2JoZ~ND#f#I4aHxAfdZDs}o ze(JS<>Dx*Jknb!9^P<0=dTEzm?OMJYs^(1Zql&);8l;b!F7y(hk^S;Tgdc}6j z*L~~W${XjZWpR#jS-x@XytZZdZQT0o+&|&mkIMiS4gwMk6p*|mk2$egh+E?#6&*Jc ztgm&bk7Zd07ceEi^men5OgAl!8!Y)eJ;(NQj(OVvZJOFTo7dNFxO!XA+!ND4$$I&z z*YPpc{crH;#!5c#hj!!gnCEye+Xv%EoC^K%eP{IE*X{oEi%UBmzxvdN&OpLd$G;x< z*4?g?w+XPz&Dm=hyy$*={}?nmcN($uT6KR2XtaE68Q33=L4z#QphILGJ5cDy|1(&4 z+@Y8MKuS4Suale%P@BA9Y^EPR`>!5&1Y@ z_oW-|Tb9-bc}&E0>-x9-CtGr^&uzrh{+%nsbK-yPza|h7{m*{E+8WatG1j%_X%7GV z(Z?^(LBhvwGk&Y%{I6^5r-?n$vX`;0>uQ~y+l}~&N4Z#^V|zr*V*s^4O25%oYsw!p z_e6V6{Bg4CK%pP|JwEx9SM3cXeD7Buqv$;Vg~-Orynp%g!sF@vWV=U-ZKifU$ZmnrMvNwPgnzv6R+1^5rs8Pbr}wSLbZwoiGxiDg z`IYiUp&$JyA40lJAfXKuQYhO^9Eq(tN`4g)@J`KNajxg35FAs6uU*v0Q|6+Wsu+To zI&rKD7EIPhd~8ZCST&ogfIuKZ1uXKp4tQ0Ny`JZQr}4xlzlNY|!*BJcUg=aV;Pky? z2pN(iaEx_fi}n@vkM}eA#VfsVuY4ckTMxa-?hE(1(fC!wPu^ktkk|N8qVgXRd%OyW+)SM-vcYrgXa0Ol(1tl7$i^7;$;~s=6D_& zDDsZotd1*6eq zbq{l_bH|3|X~eh^8#v>@)C9ycxk-TGKLNFJ;N*X?@)I{Ih)I_;MY~ zv=8YUG&MG!?04Hio_b^BJcAF*8)>r~#{b`iWI7gJpYjX{oFkqq5L~T2(SiQa911W3Yp`_ zwFU<4V7X)D4}x3Jr^UhfiyVxhD2j&998V*kk}jrDaO)Mye7-q}8t95-d_ zXy91SJ>;F&kuOA&BN-y=;ry)oQeaSdBbg$Br0PB9AMS~(Kp#i!{mZ<}UejM;9 zf8I#2V0yxPZ?gNzZ$Ia0`v(ec7Sj!MP(vGV-73gVR*iZ6)*A@%&m`M2V@`YQ^3yP9 zT>c&QvfgP!78`v1-rzB>*={y7bZ6sh>O2Xa#Xr+-=h=Q^@3r1f zZJ^ZBa|j@tlyR~;>Oi3%hX)G+2|xYa7sz@5pg>yc4B9Z6bia&kaIJ={H8iHR8zh|u z={!JJ5_DNYXI$6$ZJWt<;Tk$^AdBPjt$d*|6M2`BVcY4GR!l&O$HqRN*;F=^v9#>` z3>#q2d~i1#1lmsdKz6k9MC0&r+egdxe&1OCmQA`AkMg;(Hf^wP>?7&q+_YYj>%0Ip zbhQ1FIU8ha?#Z$Pg?=0!EF2Of2q+9}Vjvdv6egTm(3apsbKL06@y$|HY4{s7QUQR- zz;(L-*T-}XJvMBZ@<$q(b#?OwPnidQOcrth7Z>H|Wt&{gt9*)2;#F-llRk=H*z~2N zi>uboo*Jfsp7(~=sr>AHEZ_=o64{DDd_v&GxdN4lZ}^JLYLnC$jr1sSD1%=&wB>Uj4S71oVA7^lH-$2d{EB9R@V&ZE*}eoiNxQ(qtK5-AK(7P z2g~mx90nu^C?sjoT%15iv=mP!tqUa@fts8OM0lORLmF!Ifo?4H&0{B9rTzV#l@g($;M zd5X20iDHBO|bb)SvLO;dUZPzs3KCO@?^PXRhM zTs!(BhP0LYG54M>&7^!xVZqKakHRO zA2w;pAMK*v1`e><1z11{zK~C|1{y7jbIvGgoIC0Wa*;JyGnkT}<*Uet?-hUOL4DES zan`q$Q5;~Hch z7Ax!QCoX{->&ND5y~)3l9yI_ZpvX1q@$`H*f9qtwr_jqMic1YF(g&K0ar?`AJ48A3 zE3d1zFi&cYD$QR_T{=>}bBVI#A2c(7R03VBp=QUNCNVFeZ_e7E+TQ{=YUUXOz=d4` z*s;g)hfk#wQj4jPORoLDyJTOX3=8w@$mEW@@(7Ud4s zoBPbZ6M0NJN%qz}03cpR@^o$A;rb%}(?dTxP;fG=okZqoKQVjE^DJvzb3M)1D%z$N zpYFHEt#8{_`?O+r#zTt<5V4@#A#-w%J}hUB&9HBn3wkI=W3o+lh+q27(Z%c9*As<) z;c*jq7EL=_ds}>nS9||V&h?t!Beu2T(7%Gv(va5k0?b8y16jab$6i}?-w0Z zT-o4!wl7EmLbktNtg$}U5D;)oye8rXe#)r(pMFx@Dh&=X(^&S<5$!7!U-F(~2_IDm zdjvYlXVXnszQ#BSywSYCLC* zBR|3~-cZ(+-Xzu+0kt~lHF)1Ud2pWaz${^O`!i z`DvaDGj%nfVNHoI&@S#0d^M9&vp}dxM{nQ+dp;Sue^Y50J2K!f7I+=h9Yv z!-M%)U#}CP3(q6533y$C8iF1J7#3<0dm@yT4(DuH&a<66Sl8%RN> z>VfybQ3neBxOhMT$qRCGMUivDyV>R%PdtD5#9Md&`sufK|NP0fcfWqa^LIbK|8;ji zebDuGCu&l9#mB<0f+!tK*3Yus;7xu#>G=RVYOc_28vM9fQZM`JNAcA|tse_^Avahz z6jFF5W2k$!5xNr;S-ydyx{N>Xhvir@8AG7<_iypK4 zZIiCsKVPYJqyvS1Tr8mQ(DP*A z(<-k)C+Ae=oL~(1F&|?pz(0NCYjz*I&DD1QW#24x=E#8{e0=wlHP3R)%*>p4UnNiS zN0qiM(Vp{c0BGbx2tMqH~YSy%xC`#<@))V7I~^p zB2>v4m!gaXf=Q)Do>R{Q2F=rxJk-uuP4%(Td2Q5$po**XL1XX9*hw!S77^yC;S>o| z6${C;%oDXIo17wG&KUT8`fm`7C1h@0%W@q2aXKIUZQ875shNd4as674{+ag!2h81Q zKll-)ZVau-uXhv^n)u=acjA(#>+$Eepr-YWLd*2h@w zwOFYz4x_1(8%3&$jv6SrM(Zf|B5c^y=(T(uj7!j`DH;(nVvwwOMq7(D8iM_jIqbh3 z7zN11u7wewWad?)u>Sp*^Y$+$^2xtuP}q_y!p59O>Zej$V{v6+hyLR=)^oD|)vVf_ zD;&ak`41f2Z*bqpSh_t79AaxxzAJm?+<3iFXpi=df|7tGz@`v#2_XX_Zy}2~I0xeQ z&YbxD8%RV!WMOXI>`Hz@xFpPKQj&;%i7T^$t z^r+S+>*pFiSpSGd0kAh?6?>Bpy-`^9+6#H(M=$4Ne@u&D@tYCG5cVkb!i?k*gRNR6*IsV@@F&V86yy6 z6l35R&I|G2zSEpM(?UkcpO<^GH45!9c1A&oip1U{X1-ntl%Lezd2t|q1EWwUFeM;! zUmmM@l8^^^dX}1mh#p+OG|c_hsUvyqdoPvO$K_s3P&DrIiNTu%6fe&x6jN2iDs=+X zCV5C`-9DiP9&g5>2-gD$n&(nXyXIOog)As&2sz}wi2b((d%+n*O#A5i@>zVNFf*VZ zs)#^4qt-}cgO4YF#`7a#hY`loxVka&@5^=7u@7W$;Ioj`C|o~rBrkvc#k}d`zESvN zx{?o?DXvH6>;gWn0i<))yhiT<&4q&B2#ywAG*84S_2{-nVO)>aC|vLfXZRg_kG-p4 zljFv=k4!Ue`(Hc?KW27phuPFU%e;nVW@h|gY4RAu%p5aLhTYRKO%hXHm=mpzs_yog zliPAXJA-^xtlDEm~033%ddCx=7-`_1t1 zH5aG*_)kVTcvXLThQ0aLlM!w&?dU=z-$U`SH0XU|U~SS1IehCSq`OAC$!F2=>|`rg zdVF^)Z2rW`F!;GuVfWWphX=mBCduBPyf9HeLb=aQEw?9@Yoc6Zp4soU)e)mF zyH}nP4#a&F+>Vd!SQ`$+w!Hr{4U|P4$m{ocUz^;(c09^wcA-snuR105(<3pIuKIUD z|FX9J&LVXedf9H(%XVi3ZO7MPzW;H3?fd2$=#D$ z>I>JUW6#&E_Nt#P`re;^x+E#8oApbcW?w}Vs&woS1)5;y6(SP{4HP>E!T&sA=|pGW z+a%_K-@eQGvqrw~)DvOy^8PSzes6m5jZMBSh}lMU8<7E^S;#+^4&HlX7=Hap#RkKM z`H_wU^xdV$#|FZ-vwOm>NCKYO_e#t4VucB!k%=hGNx;@3V7LAP7`+(VDwiIM^^B}p z6oz9oqq)LBkHjG<+oN50l<&~h{YTXQ9+sr`WkrciLvdWd)|?wImss+3qK|!se1A0w*80W^@KJX#N&@;8-u7YQMf)5g?lU- zRqBEG*Q;7G{D zT8|U@1pqnJA@%pQ#WoLio1Q+jKMa1To?fam4&49)p5VJo504Cl+u|m*y_fdC@^XJY zD{NTY6GkIpVN#_;VQg6&Tw0KfzfT=}IZ!_T^g6X?-|$aU}d^s2D` z?i=$CsQwSs0hWj`@O4le2}~ZFmfgK20Fyqt#t>C`GDZ)&P5U?B8*YtlkC!Te;Beb3 zQ5Z|@)dr0RzR;LLavr+tM(9Gc0EE%n7ts>xYY+w8wnBXz$*}(9zVKGuI4Uu)b}%A? z|8Z1e-`3Io-^M-l72AQ&OjdLuVfIKlSy=dU2j!zaBrqm1`*9>aWCxM_42dC|**~g- zeQ39(wKv&W5rrxpTSP%`AJ71?$%hC7P5M4lr-4TUi~xwh006M-|N6ta*Pn{r<>?u7 z>e>mM|{;hDspUr^1AO{fGjeE~{sv)gV{cg6J>mn3*=s4S(wsi43u?_g-*( z;p_4m_3Jz#bkt7~5cfo1Hos>@xVh{n_-t*->9O4t;m+vK_H%kc>LjGB{iJp$-5I;l zM*v}-yxZ5Lk|qH2j<0<@+;Zk|@%lpl&rIY8HXn%B)5s6Mp8Q#R>KsH`peIWd%#TSS z2@gh+fPRH8kdC2?5TQzKidzzFk3|$vpMkVHUaU`eRc+%@NxYI~0yzB7LSvSXoCjq% zdVwR8J-!C1Ec?;NN71ch0N;_1RF3-AY_QKJYC97mDJON2tumLsh@?Cx`}QWc8x(3<1&pP4|Yo{$WN1)TgG~Z-f+?sU-#W{L%8ejXQMr=PSfl56LjN=4FEWF<5mgE zn*IC!eQG~}oZW*}^My469Z1gZ0%R?8k2V>4y<>Omqx(`HO$7qnZs636q{$F?6Y+x`J133n1nSU9J=jnN)c4}Q1p@9t~=FI*q< zg7A(mnJd66;3h}=UkEaRBbOmv6j87v#Oxywb;yO*!(n@_kI4+z!32owVZS(^34{H7 z-yS3-<%3s z>m$Hnb&34sTgUs%DSWIG35j2B4wdu7BMLK;A0P@g!SeoziT^D?5hP*D89hZ?*4sL< z|Khn?aboZm8-4rok(qe? zR1t+L9a}^}2A&Me32#DabVnRojkZ1opqmySmnPv2i!tf@ljQ_974}aB3WSl@F2H86 zxn@I}z&YL7w*a>WBIpCmajT*;8NyC@OM7p>0iXqdv!^Y(0DRx~Ji##ArCcLJ6eyyg z{@!xNak$-(Kyh>l*(7=yW{%iiP ze4FGPTZxx;_c?YaFgM*Ep!jy58||(a*T_Dv|I^AH;9dB~`tX_CX2N{Q5QWwU7Ii@q zpo8_ze>qXWHJ|#@#s}m`04nx-Wg4j;OlNM)^8YfvIS<#9Co+7Vd^elKcAXo1U#U+d zf0ks3k0$b2^0S{(j=!gTRYc+FO;vjCg{Q;C>)#TZ2iFl%Xz)OgLD`V+F{pTQZ3tjA ztc(smntDl(TjmS!%jHyJz4Uz)Jy1UH>pUg`5ol*cbb( zp<$$JQTFd=VK3285 zLShhLy$t4vLZFOSH{WLA3E%qG^dEM7wUnsYkv;f)R1<|NRV2Zr15w~fng^5)GFutYInu-5+eD%h@C}&k zi-h*kSnXk@2LRLwmBl7WP8&bAGOcn4&P6n$$maw8oCNr+pFs}g z4!Z%Qg*4oLGBN?cCjcP8EdatNQ>^<{wmZEUGm)41 zPXEueYm3_#b`Wut>(*&|JTZYyuDVeZ`f=-NFg>nI07^uZ>$EiV%};Ew%YKKL!_!KNHMn!qzFT1NcM~C`_s=lnz9}?wbo(W&EXxf}Wpl zIt0Kads>}H8Mif0pe(sIN|BjYmnd8(cKiJgVkH1!{|ixQY1`AIo|+!rH4$z*>-aJ% zU~M8I(F%Sq#Z7kGq#z0m_yWXiV-C!f@F;14Fv0hA`PXB1%(D)$oBxM6^>g%1?dIqJ z!L?zv9VJg(@c+-f=nK9Trg3+ACkq zZOdkTdc+8Nak~VMcA`x;s4PkXV#ePi1dbOYVP)JMN%8INiYPQayZ_kiR@)%#3!Nvs z$Cjzhd~Nk8QOsXw>_4Tk(oVdWgA)h~>_%TU>kgQaetUEiM4=#|y>@MhU0shYZhO@4 zmyxl{pSuTjzs>Z2wXLaTRcFQ@&CB)aoRn`Tzwet_`}2NPM4?K@1W8b$(Cjo&r%XgV zQRoDuW&8mRqQLJ%u*dlffSPqGXaDm=tD$9z7~s)7Uj5zhXETe!MhFcRev25GQR6v4jbUq9zN!X56V5Z{>G{P{%LW~KD|gPw#lf;5(s~u zmyRR!9YWvfYOAyZ`{NTOyh#x@ z;%$+5$_6i%;=1lW?|8gv6NHQPYFp!4P5WMO+hGVqQQMHB1Jr*4lnTh)Ckkv3`Rsw9 zh^w2&rU&K?wULPn=VL$f3k~gW8MiWa?C99!`pPQSS6d<<=Efn zo_wOc6MqS}rA(ro`pG9LN)+7u-H;;7m$MuC{p&ApZc`912*Yj#(C*4LlfO>c3|Nm6SmBlo`3oX~ z&2k`KF&`o+(l=xie20G^QOL&=a-JyAWGs3ChAvSk!t7-CqKw@&r(J4}-8I-v=V`AA z_dkAZ@|+&zcduvY#Q&_TTcULM)=L7Xt)E(z@(nMcwwJzy-vjSl7w@Z({k6FK`F@O1GyR)Yv3RU{)(se^$4gb91t>J|ipZldI3775o z1Q7)p6g%xm-?;;ffr!fKccw=-GxELw{DkrSUt1mad}DRk_s!Me;MM)%xx@Pdr{N!b zJ%Z0~Ayi!g`OEFw_pJgfm|RR=e@SS5Wp&t1x}StC@^i#^BO{^-nCwA9)L*qHJ*xMG zRbltn3%&dQ`rB@^GyR1L#`Ti$Udp`7E z-%LI~wqtEDTb>vnKpU2THJAFcd!V#3*6)5qVU`gE%h$EtXcyn^o@jRwDZsVG*CO(3 z|37rsjbU&6b<16`y(eQN0C^sdIsw|ymwx#(+K7J3kTh&qq-(zDE8eg09Ej{W$ERPZ z1xcT(r$B7W#uzd}fM0lmC z(E&}5jSWPQC?7Xmin3+7&vjF-2j$=wgEha!l2@zL?lpjF_x=(n7mp>jHxf2;BxNCh zlJh~Pf;2+wIig_X)2^Xu+x^$G@D2sszA1DO5aQnd{;T@C*7wNhK)CboXBjz!zK;G6 zoBwpZwcgHAtm54exGk25?6N|irZIbm2(II$E|8O0U3{J+AWU3%Owzb01(7d4=aT@l z$8^?8oh0o#D4+F%jT;F0V0o-=8?St1P^WzEyaN3O^bjlivO3I8KEf8ZTiU>UHhtXI z)EA>GDxxs`RFMQF3%`scfqy-+J-7w%d18=3OA!YM4=x*oJV7y0NbkzWPVxv;GsE~7 zSBHnUt__-aquAQj%dv|cKk}4bq62^!rvbi`C&4HIC`+oF0KxiLA`0|-8?c#y4pQ3vrjx?tH0>US z-2?_xCja*=3J31K5fO!~P9tII$%_kmU7~OUM{}qy^9fNQPOuZVTtGN+Ej}~Znz|>W zv7jUh7I}cprJ(3oB#3TBVx$C28R z79pgI35iOLNfFn>-$OV1LUSDvBF@kHtgJ&6kZ&~pUlE0Arivu^WZ{>9B*0E12}~4> z{nLb?s{|I8$EOX6 zSV3YU-+E?m0*CSCR0o9v89;Gc0uwuSq7Qzk9`5_hs<5rp3%R4z4YGo#7dD^KlK^dO z8QV?ukgw1?w0cn(jP`CX?cMOM6-gh+4E%zhJB7p`bUnCgA^SJS#N=-+MJ2YseIfg+J|`QYZ{5P#Xdk;(!oUMNu)(mX`|peP8MDUsnacUDm8JDbw#wpJS z(zYZ;9VSZFWZp1am2imfLeR-BJ#RWpI8s1*$yNyY&t%EBlWiapVr9mvh{8{wDw3dN z;TKL4BoR^Ia2^j*9*iU@?16J(|6Hu-(N^ZK>V}{^^5Gp2cxIpc zh3~1ZXmf9Df9Q+#EhRq*bjM;_3|ZaCyJRlfhk%9q7(xVRNva=Z%RWXK2LR}Z_Cg&~ z?B?qLcAwo-+Fc{N^}6JCK^qn}U_&deC2J3Bchm*{MvAs2dur@I+RCmE5+R!^6azE z{+PY9(2;Db!teu3^*jeW4Nmn`;1O_lhzE@ajp6R@5!|7>x(l}$62Wb3-~8z>A8T0E zw|Wk?PqK2V_FlHvUh;Rrz4vgCa5z|42qYLNluhHvWWJV1Yx-Q;8_oLsM*b~*W5|p( z%3G&(d5y#9{5ZM?h!_J={H1K|`xp=x`i8&et>ZJ!8M)z$?aMEa{O}rV;Jj%%2g~`o8~M4RU(&;MoS$bU_073Bi|mk3GWt$g^6*^JsWsaw?#gzv1|Hk@ zS}1$;p^4dszBpEl3GM**i#KG<6F%hmc*oDIIhRr=h2N5iPQ`)uCqHEiaoZtpT~qyi zM7|&PbseSd41Qc2+V6%w^K#=HVGnX_tgr5W6DUleu;(*|{^4L@d5~bBpvI;~v{B>K zo1lQraO|=1xX?FfuviQ204#RVLI2!9!MlSV6nJ>E51Sa`c!O7Gt(s``ps|fOz$f^M zp^(7`fZ;);IIH0yCLCsJ_^}he7+c7(dGg%J4}qg%c>8-7Hp8=%@ zK@EsP0>D|Le%__@!gmeL9d*TKkslS9+rcNiFZ>;3JIH10bp3AVn{%HzamIMj@MFGti z#ixS7_cRL)ITfpmkqyX$7O~AvVjMhw~sdyzFT(c-XQ*fQRb@Nju8G4u-25 zv(G&Etp|4zdx$XzKuEIjn>r{j5Tc>73a2WI%C6ZYNIp$oY|5Wzb(;84!tjD?>9 zgY-M{1aH3c*uq_7;OQLnM?=oMiAmlX+PaJENpH@;;YdG~^8(=-n2{BT)({SXM>P|Q z9)U{4r0xZ*dG`(W4kO=maoSc>M0+D?J+gAvGoqH|aOIfqU@N2Q(P_sCC)J0Q3Nt z-SFUD+4Emos`;Nd&>U8@!pdw|i}HxK)^o)ly4n>@T-i^?s5 zB;Big7Oy}z&Z77dTxXs9cnj3W=KMur0)+?juWf$o*PnJcSXcri7%0>O5l!Dz5A%IV z_6qP&^ME>@ve-phZ}&L3xlVsPG@6E6HDotE@0-kP+m(&ZM-RT5*J}b@=Ba-scFxth zos%9^_TPFzvL(Rc`?OERP_s`4Na1bcCmqhckmXI5HE`6O*a!3X0HCVfMz20+VEbNt zm(HWAUqMH&PavVY7twb9qA-ENvS49JkWd4Ka~JRx(7E-+j@P(OnH!Bx$uuOr*B^M_ zxGtNQ((7|UFLj8|et6xw^S@ygc*2$R?PL_QPGV%=DGj`sRP6$okT zS8K?n=+^zTx?CIf*LOl&8^;UztUbS>tLq_wLR<6>_ZB$NZ)o zVg@SCV%r<%&q^||<(x(C_*o0HDqIpQECvz;6x;+>9;im${O$(f;o&uqbPJmM)ph<)#QFsNUyRUxNdmUHMuJTKnugSKL(-t_=@WtidP9Q)dlye1ELF zJ^!+&P4@-lZUvlESMnKlAk*adJ$VHr|GhxrZ-4vStv~+pj|TOjCKdt<2hbOP z{FazH2q>u0hBVO7>}#@|$%Tjl_r4pYhO!2(?2<=7!VOx3PQzb(E6ZuH zxk=d%?n?*x>6cuGg>d;!h`V(p{k8&KAe@~gQofwxvhJhrLxH2^?h{?hl^*LP2~e18|G zcW45I`CKJf_{ho2{&PTrfx=me;rOB`&IYNVj$KULiw^H${}?*?IX2s2u!1h?w!T$J zYt{!n$A0^KI*V+@_p#@O>hJc6v8GPP+kTYsL7eM`2Y(Z{mG9ee^LOP*;@ptVaOQzU zT{uhpwG9o6CU3D$e#z_I?wx_0JI-g=18INcHu4uS&c5%2wt4^LF_EXaC)wL;sQUcK z=elnwE?UEzr1Pr|bWZhxf91DpOmRz2o*vI%6y~%1e`#_#kYJ#IrW`_1uz{nv(ZItq zbg)@V-{8GNZqjUuY+xR0**^wYKx5_b3ok$febqoVxX>V@j0aO})4#Hz0Yr@$#5eD| zQ91^cal@o+VvRFMUolYO8~oR>mTc}VGWict;Z6<6syN~^NRHLwQ>R3l%&U&U5_4YJ^)v@EC z+~sG)O}bRuV~sVZdS^dDFN1vUD|L|?SpI){n9l?Y%Yg&~g*2WNkN^UT3vV{kA?v}M zriBI_8-v`)qYr*y@WMvkY?x}sX=d9S!A^Mb=9w;R zqv89^I130ip(E?CrADhe(NG6);F`~)`_iyg-W+)ldEnr##Vc?Hx$NOC-SiC>VS{&= zyA?3f{lZT85MQ1rJie>J?*XsD7M+7!NAc5s>ofBaXAlDG`YHJ3gFxWP@zDed^SQ6jXLqmJ4bZ&7(cX zMCT}TDkMN!#ME|WPx}BRJ_~))cL0~V-c3zkfo||<9rvI$_}%(c>zF`cKFfoJ#X*9B z!cp05xB6c5RmH9EYpoUhTiK9Z^7b~@|ID+EALbRGd<{{z*CZ!-tu_8D?)E``j&s#I z$;9dt26FUFPX)WZUOOr(bpIJ^Fb_&Xsmm z8{&oi{!G>{k}db9*miwdujP8b>U*C+VLr=)h2=qle^F3ly(q@58%hchv|ZmN6e09& z-E`bcEGHcy*;nDyPc^djXjbt9{2rXc4tN2WU>|2Lniu`mFphqmEw&&Fd*Frt*1M%` z4@)=48dw=X@ZK9#p+_FYnJFh_+7F*C$Yz&tlK#fAEH-K|&1_Jn&KYX|`;<8V+uj8nPK6(08E+ zcG>jkg9{hKC+qUDki#Bz`!Aq0VGTC6;Jw@&yg{BU>rj=7)0~79)mCq1KkI|CkDO?072@74p3w;kOkayKe{uYMLM!C zkOKf}aEV%RO=YbHrlITu*x($Dok5E0kFwB(IN;2Vy#NRF=^cLrR#krnA?xHS-;%+d zDP{s1(P5Af9gF{>FrWF1|Ffb&!css1O%crk&0NDzdnxh&eK>}>a57<>K zFk}>`LG;-J!$aIW_EC3$H4YB=enj7~x3XV6rw1bPTIVn*r7yk%#+`tIXSGj=Z4G+p zTjGs;=U|m?#VrKzDPG5+r~!jo<%RBxZ|P^QIfn$6;HU0DvN#*`!9V%N{Nb-p`o-g9 zJ%Pe}mVdtVR{1&jEj-Lq0>^F%^(0Vrby1!H>7k zEbt>9$uZ~UhX!8AXA!S~n|TOIeD<1-K&U0CF!_1Q|G_<`&z)@Z}=_awN7?_|9rOIH?JK`JpgX}YV*x&&AXw1g+}Ik z|4+Xt%x40H)Aec)i{kXLCoCvNfj95lH+{GL-+cOAw|>9-&Y)ks=~cJB_3&%AzWby1x&V_yXOZEY5IL6UD}O^L7fTk3u8{b=jlbfi83 z|8Z)SSZgNv832lY1@|M75@Ba z`rn=DKhpG9QBLWv@(lvf$Oq#M+i0`r%*QmzuEwV^#T>>XI3Ifao@1b&{-kyr8Ebxn zAsx95$Z`HnGd{Vk+`m$P;g`Mhe66jFL}9!(8&OyZ7MK+%fO2IJr0hAM&k7BCKe_fY z8TRMTKb9vCUn`l@_F)?b?W<$BIfvUMaeZ~(5U~IL)o1eK zi{~CI5ARNb0KIDg@}9%ryv%VmXx` z-w=?O*RQ?0+_l?WdF9cIKR<_Y@ zBONJdw@Fr>N94Y?-fwyVuCTWiKjaT_01@DQ$meuU0^o=l;+qpf)T`aA&2*by`I?VQ z*4#1@h4I=V3+$5uU+@rs#IdHL_ERcBFx_TDT!RDM33HFKT zgw4%1Y0o2K$c>#o>Kz3@&NTsK)b06yZ35)CPvZ9IL5pS0i9%wp1Genvuh>NY9aVoN zA}0i6NgDw|zDAxS5q=;;J3`tUG2jAsH;oyY|#0Ho zY0how8uX<-FMs~#iMvX@zI%1GJhe0lP) zrLuNn7B|if-nV^h%SOlK_TXJVykJk+*t13eZD+>_)^(& zVyj@W(RZPC{l1FX)&Uf>A@TMB$~XzX2A#>6nV?>p92ASX@v`@EZhNdYDJ`6Tox3RdcY@;s!!u zdV_ti-|EZjp6j^|`rf%8ZDPipnjY2P5TN(^RwSrHTOYpnUWBn;0&fAqo4qPZN9>1LbLeYlq zw#g=J0Kv^kbGSjhbHN$1Fy>@vS*ZLGJ}ud%kd>%HQi0Qt^y2IN(jfe~|_d}GXMPDK7a zA#wr(!fWKjb7y3y?U!P2v8Ha1pXLh8bx*Pdz>NgNO)q>=z1lqcW)rfd{N{Uwe8G3l z`co_z6V#u_1*cX3dH;s^EfDb0C;eV~PVzv!qp(*0Vec%zTg(PnZ3*; zGK!Xr!>p%e2IKII_sjBnn3+dpkYus+NHSZ@GJ651`uO!j5&Sn7RYON8DUua z8`IP~56~qzWFrI6qFq_>54>qbbK+xfZk`_9)JyNP4~{n{R)4TL`jIy`d)}}@y;e;P z6#b!7;kCUnuV)VIX}10I@@DL&q2}S&4K@4UxT4utWKSUziYJi`l6_@sr{e4PhyG%L z)-;6OvX?+d`_0DB78@n9@le_Gzx(;;YjwW1j9RY|y?OX#?@bdnqCgrj=uXg zP4$Eyiab@)lOK9pIhT|)6gKn_WGcj{q*wfKve+*B)Ap0{uk`+_^lFPJ-xCMONr3$K zrbp6;~ySkWuL?2=!WXh%ufm$n%>Y9%6P7yUC7KkNZWFs^)d_u!7G)K09IC3Xf#%Q&c@Mu z5A69rj75xJEYl93y!hAPc73%>eeC$t z^LixU3y1a&>_Dwu(E5WNm(S_}hSDS;9s1Clo2_NqWaNrjNhaJM0`7rqJh@?2Gjh#& z&FGb;-5vPb>Xm_~jrg>VOfbCp($nsb>m2|O55R2qCy7esnc~1shIKnVpY=Ax2@dm( zbP?Y2k^KB;7dTKzbEzY z7mAHVM@4T8_q**5&{2JOCdaE4UER!M;O&Ibs4CiT2hCn2Yw9;H1V^X6&P(;76K+fJg;jVMg5t0M~a zhGCgk7Cnpm?rKG>S6q^TyRVzu8xGzOjW^hP{Z|60m4 z5dkf_)8fVI5cimVhpleo;k#Eh_Y7TC(s)j@@|TP5UoAlP+_^onLE!yL`MiGdInCAu zr^v!G^X)R&0AQ1jeI-v@{`@M9&?p~~#`7W#UQZX0R=(tK5ggg<<*4EK94(L^Hx}EK z*YwZ2Mdvh+ypOiW=#Zw7q*rSXSbme)yr<|`U;L2eCSta=`XCbRvFOz=Tb=$v+xUpP%dEUH0KAQ!71~C54>T{$UlFu`) z1mUQIVe3FAJ(&*6le+Ww^jn0XEuJ5@akuWYlQuGZm2`MG{MH{g?KG*_jPUN4_K_8q z3+ z7w}bYH_l5q^5Hj=Xvn^@-SIii<`P~#dX0K)FS4^p8BHiQm;AN?5*B01M&Rah>a+ zd@KL*gVNgnHu|j*Y2hf2^k#WxT3Q29^vvvy0^M0e`P{M~Y*+7IK61Sp9TFiMzB~bX za+^06n>7U?LZfhU1MiMwlm+}5*2`7C z5=q+8BL?!H)@p>^d?&t){BHTDS8BvTWKHFm?@ZO^P4j|`sjT=u%C09zCZ<4+ZQCfD zMYL4Td^alu4!~pYoJLAygGRG-@K@L{Q7+oDyZ^s$Xn3u@bWXGG_vGV}egZ9tRtUkU z2uU@4XQO5|D!{S;LC@y^d?y4Iq5yjpKYv45iKPv2b+VAYVj3ZQjyr^Ya62+CZKiF^ z58E~7353ka8b>jhCJEQrvW_TBp{pYbteg~9Og2>gB*5ZX7;j*-N}lt(+2h|B+tpGB zMhCE{QDI`GdtU>iT?oAHyk>6m$ueD_Ub;xa?xk+0-zAe1g*!zQ3Ls{DCsB2xFu9GI z(h%t99Q$q#55v~aLifSDRtAvI*Xe@rv)Q1Y`Nu9eOFi?jLjVSyjQ8l8Z<_9r?K!PN z@WAIF3$i)wcEE9;h=9b2n=y65FuXo9|L3yTFVMxiG@BsNH#)O=;hYu%RT)uG-lUIZ z16`VKSf9WTU(pUtp^?yv+{9=PeByv-z@25@-xKzFja%N2yz4g3w3LD z*TYuRaIvY4dV2n>CZ2A+y>W4nciUWl{aMw%ZbYHGI-)R{ES0o39J?xU^0)h6cs_ez zS_J2SMA4!@Ho`U>9+LJvjg|QOKKTI+>1+NxMiVS7WtV@i5CsjfBb>#r0@9#1PHO9Z zn?L`!;_8fv%Ne)dhO}M1Y`2$k-17X%Q`12^Bi?C?dg!uQQyL@++HpXiD4((!qZ#3s zAcgd|`=l~r5sM0I<+A?wXQU0%t+HVlFLO$bm`xD4y5B10J=^OJfA{benT>GJQ}-w1 z)SnG*kEe?`v+L=2UQSoP%i!%mU8W{c=&p_^utAZa0tGp+=lLw-%*uu*!&{gTPA6#E zK@GbW93J@K?ah&Lh|Muc+4Fx?QaSKs{%4i71S5y^Z;c z?;PKsw1IiEI_P(b1Apc2faqzOov_i<@UU43f0JQ}$5)9O9 zq+MxqqMfxO#n${IU;-t!;?HiFLY;p z3?Dg>O8XH9dCWBO{jQKN{(h<~N2kz;LU(mU0gZrFC%OUJ(1L+L`1}#0Xw2}F#5rwnZ_%q)GvUWg<1$mSFo;C*Y@rKmxa-yK~1vce; z_|ghlfen+DS&baA(baU29|Wao6zyKw@vqB!vi9;hngY@&j36N zV_`u?U<=cNzoE~_h3Aj)@w*cdkIUz@hd|wKSKggaGLMYsI=pR@Ff77P$q|L_>WD&H zMRgF(=c;gg&hHe(hduy|wk{T+Ti*K*h3x{DiU@#wr@)+D!Fd~H$8PPct+HtUR_m69;^_B0Z5+t+r;BK38=gqy)fzb zzOu`+Jp}r)SK;Gc7p1MEvo(t3bqaR^l7p*4$-AXiuj`6eb86%TT>*5h#rutovOZ05wAk zA4N!X5~Xa?qSLB9;{fSO*;RoI=QNmpCjoVz`1_;vBl^csO>-%nWcbSboOen8Gm!-4 zz2EKuo++M0b+HS0xIlz^L%2(U^=|4U>=f0pp(!pZ#c72s*flL1d1@9 z?I0~X2}tyV*$DroZuu3uX_I^?q7aK2X8!e<6%^rXC*4Z`ocRuB7!rj(!hkSdhO!6G#%V|D3ejiN$?w$R-(f#H2GR$6 zVK?tc7k)t+UJu>Bkq&>OjvDw&JRkgx^%^?hCl5cm~yDcLNO{QOJfp^Om0tkPM_n zX!@oP(#C0FQo%} zLFNm;haIpTVnCbWVXvi&-;s_HX_712ir@2@ktM{FWLUI^AS}?IWjFF|ntJH2jwDFF z?PLKYp_X0}1@uJF_+^g?jfxWkRvJ_!i`(B5U8xiA(Cf4GP&q?y-XF)%u>Pni5AG2F zX1LE<&vfl&b7JA+q6~uu$%xT7fbQUb-@u-~Kr@LA?P8-d`7nEod}KbE580>#dX$g! zg*8+X5SIkfIMGpHm%1~&+rWMO-hcw^>f}h_yd2lP@=v+zB0&kgW74#Zd(v$qb@Lu$16C-Yt|L zfDYhoJ#7G_jaEnif*}BM-JLKXZrYWk(CapJ#&?L53Fe7;B{(Y%eoX9=fX|2@c-hZj#{XIZ4q_cn?;9vu@FxTwG?vChpQJ z{V~tqp4QIS|4WQuEL6`w?X&z=dh;6MPCwpjqa$JCIXVHb*vPW5X&bB!kPla<4;KN5 zszhNX{p#R0=^6!%SY&v&J5C{-UTmPw0CAPOU-#1|K@^<1g*^QMj>Db>GGygqHn8XZ;9o3Y9z_!MPor8eDnc6nXJG)B?~uw#@0iLk!?^%} z?H%%R2N|`v7S?;-2=Aj3KKci}o{o>Qv0Y%;w2`3AQ3AKuM-nVA5GP!)#YX`8>Wt?J zalDOdFAJub`rHR2-{z@@?&?T_gZH`EPlQL;t!nm`e;a)0wL{Im|GXg&bCPXZm9Hrb5ssoKZNgAL z0D9LgLp>djynd*+ZbIR6eMKFRzS%!}-ms$2#)F^wKy&}Ahnk097y5PZ)MtxrydIAu znKchDy_&=K2C)W;URJ#Oh(e5_7*SxD+(!7|?Qd!xculdn*uCcsL(R#uU^B~H|E_rG z(;r}&wc6v08Mziie~47Myx28pdmC83JL8W1j zDWB`^JwNn@wclPKm%UJca+QQYVo@V|dpvbed6399o$@&7_2m8I+I=wryyzv?uBRRt zZ|*7i*wOa|g8_4p3JJ2hfs^2$HrG$9wD(*7 z5E&S}Y(OSf#db=O;MAu);@%G4WBKl)d~{cw{H!oxXFkg?)WtY@R;$;tsaofu+igbL zNJIC0=Ha|8aev^meuMpO>B?s<@ys{S0XyARPuuLU@TqI~3`Z2YtGk}Q{%V5rz~KGu zB?(CHl`rih3KL|30Fnei;*DB{m*81`2B=^G-r4%Q=rYVMkV7R@+%{r@MpEJ<6vJgo zAm^lW_*-d@O84^l&GGfCdf?+1$VLK3tZ=`K`6#RE|K%DH0!Cr4d*X1Nh^I9Y)!s83 zBH253{dwxCibPFni`r!}1 zc{0E1xkg_!zh6jUEL!EL42eQEz6s=b$mkr+`{XfM$%dgV9nb-vqq%7-`1HaNB(4qcOWD`C!9P{VI zeKARo!lA73JmNAQ!)6`u&!)%8NZy?ccpKvN-N^}j=0pUx=x*Q5-;saZ&ChJ}bax+G zzE}psi_eTGbXRwM;|pJCp1$@^zO7`TLK5oob3f61dF|>6qL7V@?k&QG!x{lTPqM)I z+4!u+SUo+>@e9;9{6X~G`zmgKZvbgzn3w|=F;K5s0HOPq@?DKPfKcC+PMkAv^H4K< zV;0;xlyL`Lt(ixhHfnU=v@~O&tntW68rY*3_ zW0aZf(HR+fMxYYN%Vw2@?i$I^T7#{Ba!xZ=e82OCOeg%J6FTJ=5j<_Pm7TF(!$CxM zm5Y3Wa+xO^(uV*K5IOlw>sz+HcwQ-+p(qzf+M)MAcHjNG(_-pjk-guc(};qPAmAD8 z!EboKGjBfXz~=_~3D5vr04qr&;}IM|7|m`^JJZW>uE*OJ*}?ev-1P(a-M2`C@jPwR z0SU?kpWUX^i+qoCM4`LBAIQQPkOZz#U?T$YhSu1=|7HyUe-o&w5f`{?Er39EG%I{1 z&FnF?h0$q?0!-=C)g;KwLy3>`EPIkTc&pIdOZ@p|FZm zMDevMzt|CJWSW^@rMImIc9=5{o!($3D9H{1b=nqo#`K2rD!$e;U%!uLnaM9vX7PNH>C^8@yOgJF&x4!fd*xk#y;12z z8s--RS%OiEPn5<^*w6xu31A8%0x6%U{6%siue$RclFrN076=J%JGpB~7enCH@}`(B z-Z5P7;o9pv$s|dJ*I5z|+M3T?zjr{GUTb(KHl8jz8MG1khFwO6_#B_}ULiT(CnE~o z)sclWAqh?t+NDAs3}7rA8#{kq(Z}DsLGs>(>%n(>4xkWNLE^i>hz&}+-Ow=#9S)){ zBw_V@6EGz|l=evgs%IwS|Igl8_{NePaX9q!cAP&Y%*+giFf%hV3Brt`FbTrU%wRZX zW@e_2x1P83=~GYoMy6+JRx0gGcNbSz{k+NDweoDc9B? z7(XLec*ToLx#5QG0to^NXmb3klk46$4Lx^=&S(#f8RwU5lWpAsTCy!(tNUTz!7*F% zyZ!Y!#-$;*>Jy$D=ZE{=%C+}pOQSZ1Y&H`od&1$_4(nr*~e-#guTt--_a(;4DXh?IVux5K*$3E+rSWnM7?{wXV{yT$jtp$xh;UN2rU}394f`CE{#2{bVY~;FR8h~h~ zzEo(iIFDyHXI*aV2C&c&fsRg1P|r)9ZKweeG)&6yAdn9nI;7<7;7eaD>=SJlFVCd? z9qh-sSci>j%(VLu11Z%7z*Nf3bBbs3)ZaZkjCe|(%c9X#?Qe97Pb;32q>WGpt=ph<=`ir~6{){@FhmNiSFf`Nz zNYuDwmztdaT20+<=GI?pP##G1Nd(^*3&cP}q{C3s;Hi>h?*Yad^Y%XeJN&PzhkEy z>RI{LJ;7b;Xh+?5=Rq=PH|v~h8Q1jB@#%cG3|{$88+}JyUyftXoe-Fj?3JbQ7lniD zGyZ=TUi|zaAR+!`PuKq9XVP2;3jM>ygGY^7^B!_rw{0!RHuTuHD4Fptd&M`@Zml=++|ajJ@eO`A?~in?&HQ%^hx^c~f7Dm2 z7QNP21MbXdq~Wl5Jk;>I4$P4>u*pfkO|n5C`hSw+0D)q^{Pm z)tNc@>ZWMhVVfI%-!RF1CWxG^!S^_ap{v{@t`&ebCF#mM<5|4&)p}u1>Q5iI=lnY! zuH*X9kvxMV#nSmi%~DU=E4vYQ>8TGu#?!f0E?7hKTXH+ZwQ^7D`rIRQHv~plU)+-p z?K8LR6RH`l(;xFY&x<2a7=glG1PcQ|f`9^>LSD`_T%>GZ8_hfi;u4-Q;5OE95!F1& z+t-+>)6K|#ol-t@%l>L3Q8Nx(yvE_Nh5-gp0A4k<*%=Lm)F&TPe(r^g`hY_$J?Pf* zykdaHU-Rb>`X*lJ3F4X52N}q@bkS}P-Htv}U&?W9Vo!OdKd3c>O4eb1qpsi|h7$aO zJPumj4T4&L1H@u>Hf^Bo;8E^*Hh4XZ3B2$e>$E%lqTTX6zM;!tnrEexeFkwi&mqo* zYZvj7UgQ|GBzxfhTGcMdfi9d2T3MPKfx-wB_7+$e2oeMoG?3z%gG3h^mu!PH)Z?7q z)pXG0JSY=<(1w|AHW33C*bksG0#0Wqtc_p9z(g*M$P6P$a znPVz|l0G61@`JGfA7o1|V=cQ4?mB=_669+TvsNh2=dli(v2QTPczPJncI1tE$Zs8o zFc$*Mc-Gz0nt%*t!DihR-A4`UkZYR_DD|t2^Xi&T9Rzr^lS3ErM-8d2^(z$Xi#4EL zquRn?NBrcAYmh+FadF@By;vT9Q5b>3UIGilL4tsSnlF%f^>TS#O?%V>yjl^`2s9nX=ctpe=uS zokpNA0)^cG3zt0YNrQpHH9!2`P*nm73%CFabMd~)_eH!1&E-44QHlAU7#%+`WD0=#B-J_8*GPsNZqjCd~U|8Qwn=G^v>+oH{%w3%1g+Q&Q0l0k3q+2CYHg0(6C4vBug^JQ3r}QRcvY9f%j|a@F>!E?4=S@phagPkHXIYu7G) zAg}9MHbR&3p_sS8iS1$R9UtE*_Mn$GB$CMr||hmSKIWxqR1Ml)s3* za*R5YuOR!{jX+^nXaov39D8)R@Sb-W3>5S)Wf~3?Ru?>MYJ@?xfWaKZhQM_U3N|CI zW5};czhr4Yn={VOfe+7UE_p5p=iEqw{OrM(d(uOH%@1BRKE)_`;U@+Q;;^XP(MAke z#TfP}c35{~T~&T0kKiZQJa9RnRs~Qs1PJ&v0HBlhCu#5pIVPw<_!2RtY}Wz#5F31_ z4#`)(Xb=6SKFVdS_SmIit@_lRmN@ChSJ$3x#(R`K;6YUiZFb<}eXR zund!Ju}sB40Km3^1Sl-qYxdK2t!a=oNWcyG6u7GUZE$7VC0hebB#;8RveRU{>^oz1 z%zK_)PWb3+%W2>IR5|kpUn!@4<5T6ok3I08pI(`-=16|Y7Yzv8Vi4_h-={;LcgJ$p z55H2bz3|+)fETU)qa6N@XCL^lbcTH<>$R-|<0fAXL>*hlpj~&$uXGw%)PO)EE59r?OPmCKJktX#HEH(Yf^Z;>DMnfH~yK6HN! zH; zKO;~Wfx_Mb2?h&;fC4VVBrgG*>WbcH`zsj6!8acRIQMct_d4utoZH~Z!5#0`0~>+> zQm7+zQ?G2cJu^Gv%p~p07!XX@hV+@uDTjTYP5JOmO;GU;;+oDu=S;`U?;!h6{gCC{ z#xn>pRxXfB12N~9wZz!wH)5Z;g|BIgn*SvJGQT;Wf4}E7e^*YNv;vgU~PB**WT0q_^a~kd+#fMd-#6*`XM_)j%>)Lb=UXHsx$)7^=s-``P8pAATkNO1$QRb8T;| zU3$!6<*Z+Qublk#PnAPo{mAm4$7XZgpd1GA6ZE>Qpi8H8%+}LCA2m7f*XrXv_&dZv zAP06H@w!LG5V?5mALYu*U!0e$>p1VPzb?mr;eDZJ`EgxYp7#)C%$+|BXg<3cVo+#c z3M_B{c{mV2OaR32jk<_$^U!X`4L(eBd(qn8n??S^JKnnd{2sR{e|hK>C`>dUC(?nu z!Cnt%#&}iFibJmZ*93mfKl0G>)4Sff{Qd#^4%8CwU=F8zH&}J85rpdw3RohiNysa~ z3HTI`*}Znp5Xh4~tCnL>Lw@pwjiFO}0ywH^_>5SR7lhbjPqjVScAzkR#*ab5Zh!>? z1rshL*Vr6*slO z6J$M;0sLO~o~eG$0PKJ4odu8NMi7Mq3zvTqW@em?GIN43i^9yz%wmNj4s(tfmuAAu z%z}U@==5vL+h3`sZzApSxuufrHWa$*b+>nRd}<98>b4ev1pQ9J(@#w9UsU%73gxIc z?wf?F53SNDHf~$yMNGxHm9G0gFYWu+oT!o3Se(tgCNd3j_9wfUAmODKCi^d{ zdjo|I0RaomL_t6iK@k$^SpD`IQFXpb@F`gfB=93Njso9&;J#x12?vMd*;h>8xv!Yp z+^Trv-s_65!&+{)_TBjMi4obzp(t`HBw^(J+NCEHUrc*ug(JF=YtAV~1C3uB=(=;m zR;2y%_`@e2^~(ZZd>W^=X9l3KyfK*U#l(rEzM^9B$;(emhN#E1o%)JJCm&M0`_O$l zm%V5F!sFw*_Sj*1e)53`fWReFjI1H2_qCCqK4x)lJw!M*@+O%)&`8B4+KuuPT$i%`v~0GE^~Gl&SAxym z`-)|U3}|Ud*Www*j>*O-Y9081vgp{{M;jY|Q)d)^0yU8X08TC^gVn==r;f`fqORbC zan1Ni``Vgk@|*}V5;TJV1jw`Uhs%j$HBhMA+65BSRx(&1P(VTVq<$74_94mgx|BT8 zpRRf1q;0!`gfAD&iiP*(9m~YIVBZ0)Er((_5DVhcu>Jh$N4pmKsvwLG4H~)HdZ7b& z`0`oaXWQK44vIW=|Dyc|ip2*6+J7*RwmKdx#!qeJN36St5o=>G=?xoI^z(8S2@5vF zU-D~;eBRzAPkjZyJm@=o)YirCVFsaF`!(Dm3lZ zQ~?a$lL|YIeJt2yYypnFpU(jwfEdou*tmF9z)LpOl)kPf56GU5Z6EpCKI-6s5@e=s z%_+rOSDaA1dDD5t@cG9V({?VupO~|UzM&A{OCZ1&PsqzcPG8Vh-j@Uc-XG8deFO^D zP6VY!SNaZH#+sG0n;sy72OCRPKJrHl`8a}1#y8#1+Zb{2S_6f;tz{r#rGo_m1y|In zQH`jL#N!HyKiBB1*^oaf-P{Mb@+C;uaZIgAKr1EySH=KwXx7I*e9;> zb^|z$r~BY-=e__4#8cDR6>Wz7DF8PB3ZcNy4vBua;R>76Hv^0`?Hr0le=PVK`HF9+ znRI^RtVZz{c(Z*Ko+19SSGx&&=ltRJ-PY~9zGmucQ&%1P`)w>W+3)S;_j}8eYr|Kc z6Kq=o&e0G{J@xW3=k4b2>1kt;e54OxmmX9CQu%ziq4@I8a56Nr@>xP0WaP>Fs<++g z|DN)+-8DV!w)s)54V)oPHi^1%Xt0$#XOltt-b) z$uDx#(-_fLAH0=+oJtkz7ZM89+pN;2+pQ&&K6=W!dk@P8BMr_Zc)2*T*G$Coq0nnaV95co zAXG`3z{dZ%rTgHm{LaAY%4AB}{gQ`@w63Ad?_G1^3YRqdi_4Obpr^`ooo>%0W;$oWO z;y}fP=WFAXI%VZ`_UZrxS^pE{rfa=Ulq2&ldENP3@+8QkuX$Y#D0*N4P^B&9qs|%I zSZaA&Te|^RfgDIcT(v#;^gaPN%g2}lUkM<%I7!>lRt*%^vQ~qHl@AsYP{7OClX3|* zlOP=ZF#FjoP|)al{@(f^5rxz9jX%w+Zw@|w^3me$2k+Ceg9@(x3Lpzy&>Y`5E1+WE z81(ueF}`(fqj>-J^WqwF=lXMtg(n>xXCfAAYP*z~gg<}uJYU#O>(gnuBj*FkqM!WD zwV6X(PzPUpdpz6q^`r!bRIJ|(Bm1#xlXW?8&ww&>*-6tvk zNy=q!m|<-{`D!7|u^nc3R1jung*kppXkoTIDPm6 z%CG?sK zMwUZr02llQV91?&0y4!;r~u0Pbl2wre(+rxkv0n-BVF!UOz7_dW_oukTtBl*X@+4x z(UV@TzibpOuu}x!p@oeWcS^j?E~ zpW{Dw(`5lf=sS`Zfr00{ZJW&gSx2y69@OSa!vK} z^XK=zW(F|d3vy{+&hj|^t>R1ETJCGTpnKOLxsRl0xzFTuQl3ue+LJet-`BD@^(g@g zLm0xxUwU!;&glzZ21wXGu<*fu{>L=+5W+MifiHGNI!c{9Msy z19~H);xC?H3ZUgF3BD;ijN$6V&{Tj1b~YR*4c-Y-{4fyJf;Wsd3nAg7I95&rOpPZ> zJ<sZrwt@l;cXAz6I)?pjSA_KR%$o$q33uZ&b19V8XAw+O7v~# zALIa`S2p{=$jR;-6${f1poe~NJ&*vW()F^L?l7H_bccgC2fpH$`>^^Sn)lDrN&c?7# zul5vi5SP3fWuWhAod*Ea`?K;_dBZUH^dUS8mFFkLYujt77n7+ZM`yn6f^yoa;;(fu zES6mZzb?xK0OBCCcNcXHxWDzQc89zM$TnGZ4~F$8(;pd>6CX-4*z=##N&P#eWjxaR zkn-k$TydO_^YFfU=KvJ8KMY_YgM@7d3l0(-C}bha#>?+B<##oz?|p|+Q5Ej}%h_(O z{Z(yrR`as_6?v@{_mvl%7ds~A_f7cL$XpkctM|YBJ1ccptfUvfWG@COrI&s?sa~sa zRdcoD%C6h1DvPeM6}9(Jtdqa}a~L_+hja$^{4f}AKDk`&Xkm0qyY|+fkHj-LI2Gxg zr}P4JJowkMn|g|vntJw%BLP01z2P$2pf`;GT3`AqfYyfckhi&deQ5WK%6IC}1>?uw zIBRuMt&d@SjnZ-gB<$%0YUKHzzxciJy&VC@HsnveD_>TYs!Z>0XL}GA0K}OOec_>h z`5W3o-myY|lyYmjqvlb{r=DF>%ac>B_v-tV0Vr&57{EdX3EK-6GDyfk;kX+k=n}}D zUBa~)ZZqD*<6gokMWJ^*E~Ni9b18EQ;;rGzMfr$NN>|TBdd}7JR2Xg)Jcb*?6Lb45 zzd@EJ6!}mYA*HD@8xN>JAJ&J;(F%r1%QO! zxH^M_Jaa1P6aRiBZx7W1VXdKvG~}&wkl^5hesoQ%Z@yzfnclRJ-nI7uZve8DizX#A zUKWv_aaH?EhFsRTPjb$)3=Hx>!by53w_!H;uCx5z%sc0c`@y5ItziHQ86<2wSP)1k zfWnj;WK$-|KsV#XwY_gf*`6DS5I+}kzWliP{O!HtxOj9&V(S7hPLgLGIz; z%aOfGE)+axHyjWcZ~)@Er$`M$wD_aRny@ ztE-fw(zEul_Gd?dfw>HHFbwT9!AT4pMzI7jcpugb*36{Js`P45qV&Fm^l))^bHn7d zGTibMwL`SDmStr$*)6i1Er1qlM=ZK zpayW43y^?kijzDs#l2iLWMgmI!EWiuipM_W;+`MvE z9H~56+UCo8+ zMb*4M$NWCpc`%;pR&qakc}G|HRTQhoQN%1>tjf(Q_tG$EX9uHA=L0!U2VM>q06i6d zjK|#G3GxY#ntxK<(CIviHDf3v!by;e4d|Fr+{!e73}Q={^!5NS%JgvQV+=9)UY6&J zk3j(xZp2g6#q&A7J&Q7_*As`SWXd<<%DGsxz#dz>k{0z45f zylwz#YioYr(;XB2$dTE|4+bCai?{LpKYh4=+in9q$Q+9l1?rwQaGz!LDg#(93l0*p z%+!?oe@zAi?6=)}`VJ&2ozBdQgCHNHR3Dz zo;tK={Jv*pkm~U6?pp^Zx)s)o?TF)S^j5PmO!O%TC}rH(0G3>4mA5qHas|iE1XiJ| z9A3XhtHyT~+5-POSeO}KA;ci}C^;#A@l~4^Ku4ok8AHBBLH<16JwH0L1%rr3!TMEq zeeu|3rE5LX+i&R^G2*VKcw#C*o+69yA$va5KH(`@53~wTkw(>%)~->X<$4tX6ED~4 zPBz@5llzd44JWN!FOpM$C<`;;z0$ls2GaYz3GL%*>gTGvm-6{14$3$J9iSjUVibMb z`@?t_#Dh)&9+RS==g~$|#`aZPParKgLJB*kM6lM{CBr1PWRU;0AWJm=+*B zefv@3Fug<@lSkX4yN>uDQeT7c43wShB4 ze~BL>>*sFFqsn^k`P|p;Zu8?(NSU`t2JGbpl)5i^TutTmI#4Kpf=0+9ud}R}QhnD8 zL1mB^#NX=QNqNoBUOc*SJ3Myne`paVi}RX+a!^(pM9Qthpm<-zXO~MC_?kE2qK)!j zdj`UAe`zz^rrf!{W${?AA&$j`KBBht%*f{QwQr4Jyk#JXlSc0;Ey}0`kR}t=T93Ai zA>t?vkqo5wt1PGFr{sNe^Hg}BQ@`k)9&$jJ0I>4V*B?EdpcJR*yVf?AUe;GReyWp= zdE0=dM^2&T0VoV%X90!DMpIiPy<3cgoeIH)7@^+xtFMcLc~Yo8uiV_KlPOjkx)G;^ig(?vUe6Bb?i8SNa^t<7bV;d)&QTt$ z?Th+czIew0g&_8j^$q!TaWK|H-@&-6Q7q~Ee9_PTqh4)M83 z3Th_!K-u^)8mbI8bIb6-D6xkgYQO(0-TI|062x%ja_Ju08c<*rdajqar`~jLSJio8 zTs1F`0Ion$ztRRMr1+`bHlWA;q&84G^>Jk+KAumFRJU#redkM+UbL`Zvy&ee+Y4l!uW*X4M6X$a0vdHiC{VN&$Tn?S@ z(WV^$V%37!~bnS&nla z({t)(0189cp+F%7O#&4(nFL$UO=xr<xeEfvXnOwK}kL_}xhSl&(h0m4S+U@ALLjKd45|GKl8^wx~-P0ZvP-4Wa`o%d6_7 zS|k|t{JAZ@%FcCjK&NRE8zE0Ru*t^KM${cBNqxEUdff3N2OGcud?|mm2V%{0@oG1& zSx&wGxWS!FvXJV$O)Wk2N53$BbLtDZeoy|^&+&fSdBI1wCe+_dFPI_sejU#@&SU=V zZQlo=GeBBj4_uWWT}_6axA=KHPq%?o@m;!T0189cNkG8?g8kOjJOzf_%`j)9Z?v9w zj??&>5{XgZH}4+5IDd50?UUDhc4vf|OI&G~B4KAmX^`9~$arQ0t+Mu%i~n`qsz*V5 zv(kj5Ty@oZY}qUg4a_rZ zT0?+graet&vb>rM8bEZ9NR}hYQv^*Tu_l3huwJK~;Q&B#knWU#bjqjh71ziH8bMii zIFBr^4p@r5?>sE7$1C0+fWi=VC{QQ_N!J)cI^B$r#V4=2rus>|8HJal=xf*9?Kz*B)~B(|!*Mqh;z*`6a#^ zdUU*;`Mw-YDd*(n-~Okory~1ETsprKNgZn%PM}VF&|IZ~>lirQDRXT<(zWC4i+b(elBwkJ^YZ8^@R)z&o;!vRD~h!Ff6KteDb};k?EcGOB&O?TKFj z7;V{9o*v}=qK>W(g9uRYdVy5WdA&de8rrU>azox`li7%SeDi>8+@=^#>RX2%Esd-% zTmRjP*JEz~gye>LtozPdzLN2iOhVrFCc_2q4f97CIe?0~BwajVfHyoK)a%MfX{b)E zuUX%)XAb0h0G#O^mkae>J@<01zlw+RR9+llnA{rp^?sJ+Q1RM(i!-0LV}QaC2B3hz z2oT8d8ROyr?crb|H`U3{dJs@_? zUV;R=h<^+54_Lh$__^-DuC?_b3#5^ZSzHsqNI=899t|{ZsU6tK!PF9Ea6_gvv!Ud_ z8ic6KfPz~N9Uu+BYA z@qnxyBukzj=ab~t^Wt@Uxy-&3<4QY!p$2{#DB#+5Wv@P3#|JcJpy2>m z*X(Wb`jn>$Bd)a+4luR2^N!dBqx|K*Q?A2EKm*zo5L>-?xkO181;)3?8{h(TzCSm4uy-;KPfO|LcM}*fBVXz-2Rb>ABEMf6JPJeD zaUKO|Bq4|u{un~LH(~YnT!;!VkON9~e!nX{Ie>$+nESM$WMYIGX;NW7N4Z8QH-4HRS;Wq6mS zbAN!egP~fOXyqMk6(~3`apQ*vV|EK`BA5~&PCxa0W1@kZ^W*y;9v<(2p0+~*Fadj# z6_XLJl(Q_OgIm=l092s{#A-iiO8vK>sfss%j&&h`Bgtd~!rfKns;TVDs-G=Um7c(P zPGe;8Y91D+O2haR{1$iG8igSYKtW2*1ySV2M#Qt~onc(*J`4zR*D{DoJK|az zl^b^nrTdu<6sD9vM&b3`xmKNzl=r06QkkAH;Gu(`w784Wm)_-b%hmTDVlO=9E)|vP zvEL9s)(n@nsV!#EWqe$bFSmOcnA1Ph4@4e_Pef~Hi5m|6?rj^UT4H% zBU=Ls%4-k+uwEn>=K<_BqcXBQt4@k~#bdDax`Vl`nR38b1N0g=OrX+?kjhx@Pzms* zxRJNom|I;gTe(C58eAqN3l(q?IMTx2u3X->xi3kk`v8E|Z;F$3gx||>PeB$(WW4QJ z1q_xq%7gcX9(|R|;ce>g^K5Z6coc@PgMfl5Q8Vz#*tpQ9ck(kQo^AALUzBca4~vC; ziFe|cMt|AhYXqv%nbIxyjq6Nc~ZeE?Px1l1;b@AvQ z|3a^F*IfBgGhCK$Co7xkcxwjg1v5~11=hEFsuu@wHgd)wdiz%M<&mC7+w1dPZh2kX zg6jRsjDpvV1Hari0S4aB=6>{GJH{H`8g=)`P1y(J&C)?d-rp$O6a62NBKc;ryG?FaXJL#G6srh~%={tyhv0-p09X zJnJ1@6Rw}x)g3AnV5qK_6s|q6%R!vSs}8~qi`f zCBTul;L>04RK(cMubp)t`mg+pY$3nX*ddmlY zcx&2i{%dywb_}44a=GGJ{y+cD)Z2be1voA!^K;pCeiLPy3xh{t2s;TVsPixR)#(7w zxK8M|PAlYDdk2zYnrM6`dX46Zw(aiLHrKl(9^xxw`4h=lCWRZW;27;H-UR7#Ee%Q< zomqal=Ca$OHVe16-3B+e-3Fwoy1||Q(az}g8H;0=>}m(rcv|{B!HBd53GpE!>JNjU zI#>Psy_XM~uyoXBrNPID$P2D#w`+X3Fk z3y}QF{Md-W(rOdhU*+asOynFR{yDzdRKaQQj)N)aC2(e?KyQ z@;{D@-*$RA1Jal_xp8J!`wl}_egh)%qEzb@p1S_B;Qdrb@APswU};k^03J=n7+{ht z>9-ko?$h(EUmQrRrbF>k#5dMYA0(We@{TL4-i!W zgU1KDHVY5_^(<2~0jdNF@BeS4_sG8-iBbM$;rY3vq}O?S_?o85>c%0i81xE^Qr~Tq z9qTOI$UzBw=zjr)I?yjxUVn&w94>#=%j&o69>15h3RNgT#Py>9(M;dq9S~4Z-n5&e z4h6tvy+(ZNAv{{)-AKmP`W0l)GnnwfNjBUTFW0*R1nbYvL+NK3aPk3x4Tw_OrUymb zzhXTKLm0x_-uKM-*N$B{zT?rqTn`jPe%~ix`5mY99Jl4x6<;yZ!4rVnmgxpQ#KYD` zMyN__`$L+(&^m{`J!O|N`o`Vk7wYd;RDgu-bfks%g86rOAyPV73H$H5eVrcv+gS%T zCBS*8)xop3*JZosFWCLyhGi`e=ae4a0@7P}?ZNV0wlR_((g+sxuCuzX({%Uso>>WpK!C0+KSq0BxGDdbNKo%~t5RhY# z!;Rh2y649aZ+iu%H5P3lBMawL9}}uG{npCxv)_~W-VttHTTx#hp{teloQ%k7`f_#)r2>Nxp!RS6{uoO0c#cLCyUmn)lNJkAHG(?7uxE}q8LMY zBwRLR)KwP9Jr1kiyl4E@)5{x`M}XH1ZUcU)-FWuMk=br4<(^*Sji(8ISHiE!2laEu zg?K1TUR&Ero)_@KeZ%hYWB+!f{8B5^Iq;8L(If&8&7<2|Eb~Ui@FcuBo zc43TS&MHAu5>l-Ee?!Oj+Rr8~SB#X=XG8v*_wdK$Z zMfoSODuH)tTY%81Ux;^Uzm6yeA5PNfb1koKz~X*h>Am5T>D_qI zuBZ#@8i0V|zm4?Z^Xl-_bc^<06Yt-&_U>8Zdke<0t%(p=BOUc|2S)TK7KKvZYHQM? z-YJ{%*-O*@j()fH`ug3}33=@5@4(r99p%B`GHnGAG4SGGv+-tXi@wjA7S&DaD@>07 z#PG6F9+O)$c1czjqU=%c9oXA7KGAsJxh8{v)ZkB@l3(hdIF!wSvHGO0Q0jmDws&1t z^p5hJjkNL(DW2~2uK%BZ2Y;n$@gM__4yvW^avZ0*>A|BggjY65aG-!dm@t_j^$4Ba zo8mF!=mM=c_CHDnWrJ}5IH24xBq(M^LqT5}MhN#Q%9Mp^Qc%e-x*%h);5mUS7ru#j z#%QSBU-+NwnFo&KY!QYD{(r7QxB;o%`zwnxa0>Dj$e=*F0Se^Ibk9mClQYUh1#->} z=3O%nk6u~cu{4ZEZmHyHf0e7gs&{*5p8S0^eSdOxHStoW{2jkCaARM-F<)8AIm;rR z{XpEIFT5h}PlsXROUzj2u;pdNnyGH`2}3?-9OyT|>pUjrX_3ai)N0DrS+P(2Q|`a; zs_;#5P5C^JgX)IGAzx!JU@AIdZ_0IY@ht3tAG{M7yMDwRF}7#9lo;m}6M7^7g1zhI z#9XQN$!V5xdi<5o#K$>*=^f;SJ`r@rzsZ*=uH+_qJ~!oez9VCLAH9O7fjxYmo|FFc ziV1cq7ONa5YkdU4o^_e;7WIm3a$!By-U^$3Z(W6YJ*BJjiX2amxqr9*)+?r4#Hd_azk6^C zN#Clz?L0pBd+Ra(GFhi-|3zW{JZz94pzv73NtY$`h(kQjocntp0+l55*o47I-VkI> z;?a=PpoSjU={hx3wR}U+5q;!y%=XhcrH<&wuQKu@`Fg~Kf-^5O_~^LWFoz!LqMoM1 zJ&^n(HsuBHDln5=uc3LJlkOMd(0j13|f7g(DtF4vsXtuCU-5=d)=s7>ye^J;!4;LgDD3pco3pD)iMQ#NC@aPGO zE)EjwFi6o;w#0{lFa4HrtP}CQ;{){pDc$g;$05=3m`Sk7atU?Td5i zT8al`J+jvT81vbeG@g#f^{|Z3{d6wvr}OA#=w5+b@0*?j+jG3GnZb$q8G~ahcNip_ z>TCI?*chM4wRf*DU$)~qNX|Xtcb-MA)oBL``{yBp1OtUW{Jgk0z=r|=23^tt7uD33 z<}ll|T&L=X29(ciw+}SXAl-xP+ZX2pdY<$9Znw${q!sFZo9M$t%(wl*fOcJ-2j|3j zb}X&7lJCnyJR$>xLdpSs^TO)Dz;####m=F0`Mc|29R~DGzQ1cAOFgMN_4sYyi@x3~ z*$~-ocsp?DwO+2B{e*ty9WgAPhjyT_e;znU=s>~LFIA;$@#o(8YdUZR; zRd+`E)Ss3+F88(kSG}5Fl0B|C@Aj;FL+^`csTS4Vu&$>xBi6^U1BLzb@IgWc3JVu* zad98(W!K=odG-P5fmXVc?us9+n_?`E$aovU|_+yuT5ZDYD zQnLMD-huw(%yA!$v3 z&#@-17itmeIln$4UyR4`G0$_1thM#dzP1?L3$CAhF%Y30$IaIM+jw9oq^(2h7Gt6s1??@IUyoRLS&Fvy;c&+b6sR-YXteBev3 zy}aYl3Q`sfW%-~h|ty8Ik;xHRI^Ajs2vv<3aJjlqcF)2V`( z==WlCOkFP*ZHc!JN7!hC*WgOuxs3RPeJ#@Jw?GMWX;EuQIxis&-3BTK*T8wSPmM1& z7VA&K@K!GY0N}kAA958EpZlCSkPha&A{c^L~V+&7T$u}Ks_ zL4)c1wcm#e?~(m~fu<6vFZY2EE967Nc~&9h=zjFB`pAG?kk-`HY*Dj$^Z!t1=l z*17m~PFy-GeE|PuTX9)`kL4`=`mT6d?HpJ4Uq0QYzvahr4Rx<*-0ika8?#%c*Enk8@Rlcv0--)6d^30=s9~D1pohS7n|I8}^;)q^pJuu>FppqQq@AwRzToO1> z3>@}1b+aAzjr&nxIeB3(I)2m>{n>yr^lHf=ro_RXiodLBp7hOq?)wWp=wJ89h`x2d z`))T77hSktzW4lpy#^Kl4t@T6V+3g%un89^yh7G|YTf z7G7*Qe+DmDRN|q|*?-#0cj%(;H?b2O8T6pu$blBW@+JTXzf}|ZYPpfQMop!Q^`85S z=kd`t&3k!Xo~so{y-U@?_<&N&w|fQ9|U-7pW9WQg%lXUkFa z$Oq=jzOWwdmw`Hbj{2+Sv<3aD0sgTd-Qc6|=nu`VfxP=K3fn(BNa$eUUVsDx1q=%> z$Z~<(W%K#b{L-PPNIqy0T2A(?-@clcgTC80zjRrjhLGYCzvI!sUCOJMAQy`Lp)N01 z#RDGY%lt*w{!3oI32cc^%e~Y}a$a!m7m{N%uv*h+SlrP?or+PvY?T@**Y1I?*Sw{N z0UpaTFFjFv2>{+PNCrN@cBeWElndKP-@3ONSXcr;{H26^?k~xSzBvB>fWmKo``gP; ze)5x@?wJ1m_rE_?o&NrhzZxWL2Mc!w5)2gPi>N_!>PuYTJ9XKvtN-13x6hZ^-qA+@18?r0<~TT5!1Cw&mrIeYB0$?+o15`(oREx-Kj4(rNo$ z>T=fIZG@WNoxkQ_ImR-x4()!fjGMBSXUz8iD17d7pS!&N^{?OQj_H@b{N+>E>Qmo- zn-}wXuy6+;;VmD3+2z|m`(n{#px_H~@G!#n1J3pSB>pT|P#uiYbLecNSMS(w>Q#QdC`it+@&!K- zht4an>*Urom1pITwH2SpacF+%Z`DLH z?(g1PAo#afXOR6h0ek@{yl4jsJ5X5l`TY0ZyB#dtHApZ}IQ0eKLF1tv;@}v``$7*= z%INQjSHo#Zw{(?3ros3^`cGRV4P}#f6kEtXdKk-Z>X6<($jYEZzP*I&lJs!4o>0r5 zYGFH&kv##yF4O((b@#IA!=E;LjAMDGA0?L@lzxzX=EXe{dG-ry7k=dlBz}RXa)(;K z8fe*1+c&saSnkx_=Si)3@p;a@^H%`2sQXa>Vv*^+S>_#hzHr!oQP_dP`p@YH@81p< z?i3^#C}^03Uf3_4iRT!2CNCPx*F~_PNBkNf@g@G)9(}}eRjhp}b{l;`&^Opt?B=z; zbJ0_4B$BMC>hS`^yPW^%Qy;$k>bu|g4}I@L@3?&7mBZzWuVO8n?@k7Gu4~VmawoFi zy}xLWOFCr0woG0mSa8Uh{#O4vXYP9gTGeYQ-h~C)d8OMu!87~bsoPXvxkuN}4cFHF zVUkSEN&Qt!dCznIuZJBd+&x&hbC6)5uyE=B#ok$e*KuswKf2D}^0FLeOAh>C=L^F; z6BuT2hIuA93=e)9bcWG!NUu-LlW54{_7Dur7uVIsO4<7yWzK-hYYnhrYRKk2+i37A zaDwfN9;yTLfx_;YMu$Ru&lMK!m>Vd*@owt|&ad&se*;C!zMO(Uq zmr-`w40c!BW$(6qJ^G64gk3@&CI|AU$-mHlM1Evu(B)6#WAGkR|06 zkw3-&`7nN14(k(gM4bUB3_#&Xw+G++yJG?tKK*a}`u|I+rliN!@P`K@^QMbQeRan0CEt}AX^+c<4@VUx@ z03PBRZA=@AQU@lm?AO#Ol1JDCz>57PfGYeHcGG#vLwh7pxc%%=H+%l5TiR|u_POPz zO_9W^wxbSty<&TSGmImY%P~*jMt{4FAe1R}Sugr-^l$5ozU6k!8@?p)4WFSs%0@fU zZj_tgj5c2yfWiP2j$(V{J^yr6VBxc0{z&(S2mjB+^?!5UIo+X8Jkl1b4HPhl5TtMp zgFBLx2fxc@y$V1;S(IbF02XM&$1lI@`huwXS+0WX(k1;pL&}!zGdQ4)lrLxTOnR=D z2>`szAMK+}$ixJ$p3foqyt}}-E7AM-_owMS??-D5NIen_T*K)Li+#t`a4-O{H9Jk+5E zD54$nS?b?D8Gyn76gB}YoG_3;ppXM01I6UO+hvlnEY368*2{hPzJ*TPr(S-po4ue< zSQm|yT$2}%lUFmT*6ZS21ZKeEFn!LKJ^~A^x^1erQz3$lwv6T01A)SsQvwQF zF0b0SO|1mXfZxz*f@IWguV!BYiw2lTK4TMky$`&9?$$9tf&6OyswR7TthMdmIBv&- z*0^Z!OTGyV)1Ga)a<#H$695NNqfT4LrOSsEg#jpR4p=xbAR&RmWvBMEJ_sypAGBN@ zK&XEidFZ$Js9p{@mIr~~awC9!<&z&P4|4R0_4c!-y4mwanu)uf+HJ_ewxO@jq5d*# zlX8^u(2K|I#4CcFEqyAoQr>nzwhk<78}OXuplm$X*N+v2018W&iWg)GyZe~e(vFg` zb`5rdyu~Nzvus}kJy|b&>oU~$vXIr3GQ;Q8%RHCqFV}%B-o59R22jZM(8gu8G01b! zh4o!GbSmdXt_Q!PKE?-Z1bbtQV4S&p_Q8-%*Q?_zjw^nv_1jv1iQ|Y%Xg_QV-?2T> z(q)^sqM(Fz=+L1POauMrfBt88JhrDkaHqbGIC1hnAs``v0t18toP(x*XF^#HV1Q(T zKn=C$8mwOPCz#5Mye(|c#+b3UoP6?|d))^!w27K|cENtiUTJkv+*C`X^;O`7V zObFHiz<~0&{*z68EF1UMOTTGv$`^?d`nY|{Zh0)9_w;jpMPbw(yu`saZ2Q%^OwO<^ zep@EU9`)G=PK6Fh_H%+1w*ebQUtu2=(I%8V`+4@!Lhu9XT7CkBPxL;&)j(m|HV|13 z+LSi)@01aGz+RBm#BpZ(;5dL3Z9?sEe*DRY^qj#eedykW?$E#7(mj3CwX3t#gQ|zNMS7j=3-5cg^Y+>IzS%wa>$|!~ ze{)y&T%{#(QIR3^kxWnYWhBF!|9VSj8Q!=5*6vXM`>~(9x=(<* z|IXkKodGDG?D^;ww`coy^=*NJu$A(KtZoa-uum4yVq`c2kj_5iyeRdYWpC7Aovr&V0KI0 z)V6e!j?(LK@x280Kwn{^m2c!1kGdVn6VE>--g{n#_$_#2cT`*#1(~M8^A)FuG@ERf`p?63K--J4oDJ>ftuwq z_>&Z574-k}OJAHwz>hxhPp(`PVSHV&=pD!6Up$o zzP*Qk<|-`*E2&c#1`saE_ic{4g>54xva#|mU$e7&{Q6zp=Qpa)wk_Sl^k_Bd-+#om zETDl&Cld;Z*DF9l-&1JH;M*yWtlANYJ(5dMTQ~5%|9f|?@vZ4Ya5K4Yv`Vr#b1Y=a zaRXin6wc^@LRm#37_BGQhL74~)#qB{l!;nKWyt%*9EuD*uKs; z`PTap>zME202GGpIDv&FX-O?>1W02H~@tS=wJ?@n9a4yE3sv8<}A9l zed!Y)TV0O5yARx&old$r_}+eYU-yC%d@ZYHq~qH9k4h5Ix%;oZs++%94@=f{Wis0T ze@|2SW?t3 zfkJZ}HIgX!lUjAs_jxV*$2u@(-Lf9z1Ab!K^Ww z+z-v}Q2<^|MtjdJ0d!%eyak{{^D2_;$NM0w2f>tl^$?(vsYpB(@b|3&1-{FadR3Nv`O_Qs4Q(W<%k*74 zRBvLLn2fZ4_NHA46x1$OuRNyGP9t0^o<>Y+=+x}{Y4hZ{2|!`k2C%SMAR$*2I8Y)G^+DbH00g4y zfW)!sD+r$hHay!-rBkWiL_w-=zW*wY*Tvb*{q znCghn{Isa>JFvY3M*!9q7@= z)RW1u0IjpEW6_O1cscCYmoIjlUf)-Adx_gUKXs*aQ!=)XiY-+48@6^|h8?uJAz#jK z!-_@QHx0} zlCPe<@Cu1;Wi5W))?OCbV5It7K~tYrpK=>af|;~47Wf>KD(a;#&6~;CaU`zSCn1=; zj9dqMo%5b?hVA>@Xgz<|7xBDFva$`-=UCZ%pfGF$SU8R#A%Ox1TAMi7lQM{n_?zu2 z_?HLaE+|23sqi&_k%E1Htz6f!$nEMuvifXngmyz7@D_>hypu2ZQ#S_v2YzjrfK6HA zMu3vcOh!&fvsaYW5+yGslLOnOr*-i%`51jpw?4FQ(XDCA0;X(#)qyQV0w?<2@E`1y ze*R48`OKfb-5^B(q_huSZkx|yy!a2hm1N7Rf|3~mw{E9!)^3on?;`7Vc%ORVo!3(w zt*Z2ZXv&F@GPiv*L*GD$noI>GXk|zC^b8&{U6(QmKuLapZvYVSEvr4f?Ba=Xjqyc4 zeF!Ta?^{{u0mqcUi*(ULum%zWc3L$lx1VN$FA}o(*V~(v#81Tf^+^R+NuuxN?{-YO zEZT^=Raschgm{$pV7bLh2cR%)$A5eIBP)7?VG}??0tE~VQDZ=2-=-|5V8x{CWKm06 z?KawpH3oO?1B|rWBLGl>Q*zPFlQI)1KtJE>Zs_QCrO)p1`as5|iEKG0$dzjVWl3%S zQ%@(IJzE7*{2a)5zVF+=r}OsuU3DTO61TF$C^RW43 zzNzcomMQFOYRlyERiJP;Y$9s)T^{R}gTNS9CH-jButg$2x#%*!&>gMwwR>&GPX(m(7* zf-B|CFPFESK+DXn9yBFe8z_{SamXsF+R}2F?-G0o+ZF%ldcSXi1nB4A))UWClq9&# zd}$ZkeU$nsDf%`}saFAid&;dTEtN}F_7Ns`$wUxhyUP|T-|)?pXZf}dkLxmREi(Bb z#Zt~=0N|u96Z(32rL-eZSOr{DlAHDurHoY{-TO^j2~hOhiU5tqgzTr+H~D;tZoL>N zVVqR@DX&LAVx3Zseu{YFYst@ivab^0ig-TwrcGGi@&xbD6Z&KuONw@R~ zRc)~S(OTP-N5{1l1uY|&8I;>i0N~@0*}UCmS+4#0tMnWLW@!crnoSmPL-54J@ZRNx zwPy_0oN4qe75dJ)L_Vs>WMDKR zps1}VxD0?BWQ%=*;>Y@a%YO01A6{2@P8S{@ymx_e^{XmnrDL(kL_nE+!usNvV5aQZ zr^<1Ff0M2gxZ38fM?P*R0YC+StV{Sfmy-a>MLF0O_*s7R6#<1)2cWPi+W-~-5>6mc zaB@YE7jcj-W#VNbcXCI-@t#RqfsFV4`HI=Q@7~kh|9w0AS)ONJyq{nA`1p_#Pc^Yx zPRJ5^SjQLpd&%!BAKPiYE{9tW2>*nMtVBXcdokH3n5e9`bINtf+zH6 zfYW0p)9Gqc`o7g4MNH`BmWEb2%Jm9B#4MlS;c#I5eBZCR+N6gswQ?r_axZRC_+d-Q zH7}rk3HTSPfGGcFqBkK%SY}^iQU(}9j4&_w0&N!pz&5Ea+JsD&5qzS3f_=(B9Uv3y zmvaM97`9E>-u=nP4H8Z;P+*WRdr%~7QGf|jtG?P%zRf3SLoA0%kk)1S(w_>>v+kZ7tw49X1U>rlc~NEe#lK&x)_( z*u-fmDGm`q{+WdUXP5 zIE1%?1QzuD2;FLtpYGu;in3Co)sEte?U==br}uSWNjZ6*^}si;fe3=g2W|UYjH_zj z1u(A5$nyj%00wa1w08W}r}(9vie+OZ?j_=ebY9b=@1*+XGMcOXVMa{GqCF zAL-98e(hEQ2GiIX>io8r9(Xz&D;aw5OZRj2KE3GfD^Bxw6~sGN6bKY-he$>&*RqG} zkDGC8dAwY2*iyF97aJ$A>HiQo?nM~_}!i6CheV?F!eoK4DcQ)p~Ylm(#Xv}F?d!t}7#%QGu`bElJFVAy}Zlfw!yWO_@6Y{jp5fc|qx@Q!IZ2$^L9GY!0Sn0Y5 z06~<439KaetVPOWrZM(?7Z9~gePo)0V0(B83NRz*m zU}Ve1uh9pi+O|BvfJfh%Z;?6tJWfyfk-=1a7*wfW&iXCGdft1=tC5mfZS++3vmzg_ z?v?mOE>nCbd%!md6fCoCD=Ky^RKIOuna*|lrQJf5(K4@HzW_41Pxj>RVF)PfEkMC- z%Z8CCAumB5Y^^K zccLIr@N86kt!KTQ<)JNbj6m9)aZCOThSrPc?7#AT2-=db>goQxA7D#gfIpL_!Cy^J z1BFsPlY;jN6bOXe&$!z2p~oH)Z~0xTC9=0{QT8+X&2v7leYxg-*uGtoU^u~8MW!Nm zFB95!`=%mCk#oBIE)ST}CPhZQw)lE~o8aIzJIYr=Ab%00sQ!=Ny3v1TzE%J^06M`6sS)fb8oS6qy_#JmbTR(n)5Tb;bY%uRMfZO|)fo z#(j=In!~#0hx2vc6~HsS-j;i9%QB;epOO##Q(rlOo=zCalm5zk_Fgfe4LlQGe>;f* zzD5M5+E+mwSA}TPx}S0he~)FFrfsr*QY82Q%<_X?oh)A{)o;{s0tRIpwvBEnu)li6 zOk+p-@@uC0GNnEQC0j_J^3kbCu4DD#s$t!3dAopRT%Tph8(`X0DIY+|M9`3+hi#<% z1Yapr)`wl@x1UVUC=A;G6mk&YI1xAkLgSd|yUx2s&%fik`cvcEm{b}-;V_U=KH1Fe zU-e%KxF>8Gse|jZ0D!3t6x!6*Cuf*#TiWg{`$El@B}r!j5aBojd=n^CxZ0pd_%lp>#IBvI@0CwZ@v}H>mme-=r!T=Obx@`ao4LXp= z?cdzDX(o@$ll*TevEV)`6N}20&*b7GItqG7tOr7lTv0gq<5&7Cizz1)%w#}erVSKm z3+qR{+xnz^!q(>3phFE?X5BWm^xU#xASC_f0<3UpTnSCHUfPkqrCmfDm$}hTCzYv@ zRMXE%diy|j(M(@||2uf6Pk%%DTWdp-X$5 zPEH)#la-w~*3|87N`7tMr0#9I4=V~M^)>*7nFvzei)sTd>s8B$rn>j;-_t$t{X5Id zNmKz9etnBesG7wwxv7mz{Ez+qbqai(=}{-~Rj}m!=01>~Qr<70hU{wp8@Dp>W|HxD z^b21nqn9ULQJ7kv2%7r9#;7k_-d}9l)704Dz4DExbziR7vfOepKT)5Gl#Y z#|JhD6zosV;OQrUriXrGmzL&f%Sa5xey{9)yL{<#lDY1i)9st=w{@_qKASQ9MnC#b1BXoJpnt1wP0&1}NP1)dX4(IvKR8 z`uyfw`n=LFAD0K?j^36^5(iSYNJtqht9qV(ik7yer|W~KlZ-weoIv4}0u(NeK;PHl zZ71HY&|5LjNY5LJEi@DV*b@)gZhAvS$y?y6*uBV5k=eeDdWn5~)4f z*BkvUn+PmWp6~&ZGyql)WGXu;hWhJ) z!qzpPUR?MlKoQu{EPK+;iQBJJ&J}q?6%codeCXATOahtIj*U!yU=TXy#_x12Y=a#$ z5yC&Pxd5cVfj~goQ5(pKvg_yDK|r%IK7rpzYJQJiw+EC^yv!SI zOm&a^>{UvjV}tbGGf%-&-GyHJ=iTE1zRqiASNLhOk=%Yc0 zy~$#Kx4{h)K_*_2PlUxdK4b_bGS1j)=TfuB}7OzvJRt4cyo5GB*H)lWrS;0t4fb29N2o+_@0^ z{96G~A2hme*Oj{Wy!JK3pE7l`s|i~7P?e;Wgfu%+fQvu_63>iVd0M+ZuiNE$*&eeIzuh|=H1>GdCW{@n$GTi6!Lea12 z^F2Gq=<`;R6Tz0SW2tl3&bPTv*it@nn+>1VkJWBPPhB(L8mWxrRUOqez=-}+@vT07 zwS3JEJr_{y0h%pJOVlDbh&%9emyMEU2Y zw+ukxKV06(5HMNVM*x00f?3_IKl5>+9J|_r<@4X%W<7?K5KUpV!^;zy( z)Z8mb5%qrbF>6K!!0j8V0_4=S{oJjI7P*R977 zsN?=dVgFnbQOE&q;7fDwhT-As#u@;r2GGr-bP7Nlz_VugQcbVc_bo#oe1W?Tf9wIc zG~1FivOI79ZPpD84Ki7?o0Q<)z6oUbQozx#g9RXS8+)5b>ZohmDBohU>K%U|W6Z5M zh?VEbbImmmy-!14JLl9Tk~k{P5JJ`|fNl~My&8`l_c{537(x2ji@siO|2%7+!G7z| zI{hp;Dv)&_LoWK}Z=tqdx#mp5@vx8Wij4Q|1AD5D)wZSd6!uGtVSe zHcrV~)viI@m=KB5q%JnqNgmUf(L*4F>KYrlAy#}x1cA0kO|>y5Nq``){u`*sS@i3y z=(D!TFK@L9psk0b*?dqh&*``p=7w7PD;)dmDQZd%Lfjmefb?_fG$E(S-zMfx!l;j# zzY~T1b5TSAVB*^E8MvrBzMkLbwR^^%`#j>9&*t~@ab-1*ac<_%l$G2oi)+nmyr{?b ze19z1#@^jzjft;w`^$R+aZfIgEBrolJ!E+g=+i>})Lq|K^Xrw~Fn_*&zmkV}&bX%k zsK38a*gqFW6rOvK8l>NIKRncF>d$+u^ac2=les+s;1D109?5|W#VKoG$qbM&FVeQq5U=Mp2f#{2s&y3tP!qMv+bEcO$FxnN!W ziCz6uZ;|lF-|Qv7AJ6$F)SNuK?}-6@_9yXW?(uH_W5)e+K}5j=ki*$PP6JLO%d_0K zjWp)A_dK>56zg02BND(mHUoWs-i;EUYW*SzG?c_c{KWVmG(_faKsktwhR;0Krf~vx z)%^Lc_*1v|YMvTUN8k#mC6|a}`eXg|6B0oz@s&N7cp@3gwctZ2d3nB{pXD14<@?3Ybu-VuIXaM;JV5_0ACN^`3ZCEzZCLOuf5B(A3 z0X>0{9MEtw7C+k_YsOCL2qJB-{J<8Vvc(?>pceSMX2ho4YZ&KK^9>mb@U?viW9AwY z{%!iXZu?yWK`q|`Z2WfLcKi?}auwaI3xFg)02Z+TjEP6zAfwdZz3d(kK(l_nC5ezL z_f`4lzB2cmDbIm(;#2z~nfC`u+jkFYUjmT*GTyJF7$Dd?QMkCz{zgHd6PUvEGnT{H z0#I__WBD~QYC<%fvWu?~fi(>*pprEk==3u(CM-w*h2~|W6~xEi$%Xn#0LA?HE8Mv@ zY#Xn&>bwnJ)en7}fQFz=V;8&yEPf4}GxKkKvo|2S_}6QgmjDX)0r1H94T}Jj`Mtgp zFz+$-@oTWhL$Fvg*8r-1x<^~wBjf!Jp`7R$Td%KP@=UBv0COK*YC->5@Mk9qm-pG< zD0tWx!G-5E1;)-28ry=fUgoEH@EsAj1pK+5(ye0?HP_c#u8Y8@Q13D6IR89NNN@wK_3(PZhnb%VyuRuuKjht9=ec74DWO-mCO-blP82TbvlE49w*kRExPm^-LXZ$71=*g5 zUK;3_9K;6CbExBMY$T@kzvY?0(esJP=0vl_k3+>KfRo>IK&i>e1T^!^JY!GLpOL{a zAV_Y^NAAhv0kTG2sEK=E`_?D?Al{4vGOlIb<5$;!J&P~q5wg&67&HDdzw~22_Y$?v zm-Y3`rUztx-Qy4I_ma)R|hQL z8}Qm-x49Wdf4h!wcp(ooy>Wwz-D-}m4M07LK9zpv0w$FU>BiIa~NBF%YDUA@gdD_=;{x_N6h6-!2|% z9{C#k2nnMGE!vG8dWgA-O^CwnP82Tcvl9iHwqO?!3Lr=#+D7g@xM>7}Hit2UK=R@` z<6l*h3D)%2+(F;khsd}wM$dK3Y4XxOWUctyx%F*I%^@!#dgfH{VO<+9^U&pa`!od6 z%1K0`AeaM)xmQPUV?RvDYWtD>CGn8}3O?qGG1lb`7a*0lE7rbk9wc?xt+@grdryCj z*)wMDBx)J6E+NAQ2%Pqs0I|+Yh(q$=zNBWJz4(a!_I%hIcA{{hpPeX-59mQsFaYE+ zkP3PQlGqE7+4v+Yn+Pn?6;ub{%K8fcijT9ojw!|^c#_=v>*o{DUb5#ia^QIa;2}4>9Rh#{L}ToS zBvdk{m=k-E_w(Gd=QDPH_hcsum-E?)!T_w-8uAJ-qBj?HR>5~wcQ()Kx!&C7`M%Bl z8T+zQKlIP^W&VA}8Z*CF?vbg@$PvA>W$e?r&ld8^_`F8Qay%1Xme1f>z8qKb5>W>m ze6Q@C^)r8oZxr^=P82*0H}Ac_8632XML)X7O)rg@gI~I=gKgG~%^p8a8b8+x>qQT{ zTRas<`);1hRU|&vJp8t)W$nz#b!_E3zI7~*v2xkTZUzW&EfU-1*a_7New>=L5T2RKbh zFayw!)pU*pFx!0t1vYLTfk?1F1h9?)quh7H8r!fzZqLSzG0iUac%JyWdG-3GL*vrN z=nB9CKyLupzH=XaNLG9T7>?$*b7ou;zRp2vR(`erW0DBTv0*0`!0V9l)F(L-Pz1B+ zqEtTRrin;@)b#}?xpO9I=A>fsZDgVr|`j;*pKvx z*zvqT5{Qxf<#~D$V)%qPyOLF&>(Lf;`i^p!!(zFGO_ohV$K>_j04#YUEUq``s)+>I=@!}Mv` zhv?++)38d9UpRm&emn?GBQZs`Bd3KTq*YzB=ZOBG!SdZAQXRPmePHf4AF|ltT(RJ2KkDBG1y#uKu zr&Y(;u3ADWeY4m8RXuj1a8a@og&e*HW|+RsDN_3WvxCGTATJODBE5e6h>g}0up86? zr3iDX8KmLX+=y#dV>Cw{SK_s~IzA*0Ar##E&jZv%G9}qE4_!lYgYQM6Ac!S-ZnKU6 zK3SJ}4Fo>(*Jca8MIT#&0ia*k<}%Opi9P3>fKBfg|GB9A5xfWI4j@h)nG<`|g1Q5= zo-OuZ=0eV0(_in=r~Z)+|b|AS-+21JGAbc$t zLANDiHnbUl2s(pn82xZf{Q|IUY|NptIj8S!TKJ+wk0y*Q;^4ZPwRUZ2b9;hM?6y7E z79asFMY6^`=geal(5PU0`OZ-{v1voG&XP}TO5lu1!kc;K2R~Qy?Y@T~ zKt`##zP6tc>niaw|I{A)!+DT-&OLrvFW>%{-+#Wnls5{y>_p*}htvJ_yn!g{*zD9( z1hSUKHuJ5JATAy+D7xRGb`*qLg>s-wHx=*gx^3N~%8--nV`P8ra{?qTg>SIoaKYHy) zo&M<^8(FwtX^z+1_x(-2x9dl;vDqn|?fIMx2vTM1`iix&SGxLqFYv|Z*xK&fu1!H( z=H;oxn-AEed)KKe(Cj}aXS3k&1e4m-@a)(IFJPnAq@`@rm>^f z^OOeI$L|8~YY%;-z!9NAG>{M%Aa27ie;Ql`&g%lL*g$C36LOR~++PQ9>bv4HuhhbE z^ED-g$xCuW&I2mZ1F#p~8fgceIXI;*fJ@csD*4Q~`4GIfapsvDL4>_TeskYGR_r0G z*Z7jLvclX;Wj%m2nm1^?lf7km6LVclFO z7a@-J8i*G)da2(i?6S+Jf7SP$e*4uQdwSpq4@BYc8}Isz|M<(-HMnx%u^*=h}~-61GUz z4^Uud6MUqh=G(eLASUAysSqQ9B0fm?DlSOqCV(U4C_34ztdTmF9{_m!TQy;w*e+kJ z^;Owvu$63BLjlwRweEbXfnYVn=>DS)%ng8)Z4u^;TeCKz(`}2S2jUV@a zAqxRi06dLIkhvNH-jT*684x6BU;wLrbQAKK&BggNrM8#&@ew=2UphAYnj2kmD`Sb)C#xhzozneb#o}*mZq<6HL%yEZ@X} z&*sG(m|ym&Bm*HH$^JMN?`xmq6W^@chn)HNvNV zdP#}GF8iB=pMTS5pMLv|AOC;f`R(ui{1oflSPhNF6{q36$+aEX< z7<*Xe4YGyiiVa23XHA;CARAG~81#9(?#(gXPu1GdYSuat(p*#_sD2nfp`q;ig`fKI!RjG zW9G+kVwjw9ebXm(C3nu1B&h59i#jjO-ze;|%O`#H51n55rQdP-&YO3g{@_&~b^6VB ze)@lW&$m8(SKYHzxhyQC|ZxUX}q2>Pp(25ono9-mQ00000NkvXXu0mjfA%51x literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wordpress-seo/images/banner/woocommerce-seo.png b/wp-content/plugins/wordpress-seo/images/banner/woocommerce-seo.png new file mode 100644 index 0000000000000000000000000000000000000000..0a9ba8014c463d113f01ad51afe36ee02b42c327 GIT binary patch literal 94032 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

    UrabKFK4MMl)Sq)J5AfV;9dSF2{>`5DM*0 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

    2gePYTVghszuUncE}Fi>5>gkED%uI0}}3OMkq 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wordpress-seo/images/extensions-news.png b/wp-content/plugins/wordpress-seo/images/extensions-news.png new file mode 100644 index 0000000000000000000000000000000000000000..f05ea47b22ab862b2ac2c68fa59e6c352a149b51 GIT binary patch literal 3353 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 VGWXyZ@Y6;jIorG075#!H{s-;bTKfP1 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wordpress-seo/images/extensions-woo.png b/wp-content/plugins/wordpress-seo/images/extensions-woo.png new file mode 100644 index 0000000000000000000000000000000000000000..45c615653fc1fcc01950d1baefb54366344af9d5 GIT binary patch literal 5573 zcmb_gdpy(M|92T#luM)%CKKI|Ys@f;DHM{jq$`oT+=ehpDHVBjY%hAy48padYY=dN?3>-G8_^C+2j_1 zg1{nB5vU=S^E1S9A$a~a5cqH7O#WTKnf_lcKs)tlx5ovqS9}+)R{h10baL1jt$cOE zKCnZq#o+js+tcdB0kBHr@VF8;0@J&v>y>;}h{tHR)!QcXI;X@u{i5sXTnHmhhQT4LEx>0pvlH^$;xF$ZMVEc zY--r$7mIfRMfpQ7g|05v-Z>&1)FdV#7BZOfhgvHr4_5f%x$MCXT}MvuJtP8c`Ax@V z9*3U$IiRzCW4)ee7fS52a6G)$-yvryD*~l1HYkN&zZ?fMbvvkezIfHGdn>E}gaOT6 zDG^V6H($35e`mbyOS5xkF@N%4qD~K?dU^ADl?K)BzN(KD_xKZ1qWC0^S^kO-1lByi zE|?b-*wuES(8_0Ml4hVbwl7-rp*HfZiAsyX$XZFCqY1Xl^n5A^6LrXs5_+fnLT@Jk zQ;*UlK7bK>Gy;-sqBErLwxra0Uh})%>)&P=kmr^1{ivMJ4D!j9Swrl6Xb%72GSfsf z+19H$sS%bY0!2R~9XMZXWzV{Cj~(Kh^b3r5r~T*m{RJB7xjoC0(pR)saIb*apWh!+ zZ0E+qk}oeWaAQESSH4}~>?y8yaCCH>1%{$-4UJL)B?H|Z9NZ%0kvB_=w`@J70wBo# zd-svVvf>-Uq3ky~t_l$32(vSCpMN3QWC~mwhqsM}MA&+ICP0j_UuikPCZ0B7F?y)| z2n8IvcR*afnr>%qnV$K6 zz?nSGY_D`Zx~I=PdA!u*VmlSKyYu6&s?aJ4=Y5zcNX9>_-1>$;su|2XK-eJ8+rT6> z#vEDxCDOoTq81@Ihe-VD@TB1iIaCU;-fKt-m0UJot7b>`^>&j(j)4EDSGur zSFoh?J$qJJ{>A!i7hOp%5iu-vNXl{h<#+XZ!)^VE4wZQZE1EWZ$>T@A{qEs#EaX+Z z-{ox^(tFcPQDH)QK-ts$U2hCRUO4p9GT#Jx)8Mcwaf6?oSF^e%%uj^zLZH}n`4CGc zG%47-!zOYzN&Tisr-PHa)f~oQ|Fd-Sz$V!@tYt5%=K>;w5$>^(|$c(Wb`EF)v zZ%5vfY%ifF!>V)qm1L5e=NoXwdV0yX)rI0SgXT8ku_iV4Y51q3jrujpgw2e9k^XE1 zF8lc2%!vA|QTkJVs8PPY{pH5M8ULEANJCdeVUv=fPQ{r6OVPQL0zLQe0SuyaTy!8$Id@I4)P-vmY~@u0;**c5Y3gIp&HB! zwcSersg8C-&Ahj7j~mBirAxI{$Er&TMS*ht?N2-8&Ot3gMh&xMUoxf>O07&+OEO{) zFMhaerC+SQt1djdTf#smXVTVt0+WIb@9|)c`dB^HjV*|4Tf?)z{1~ex&R+f5s9t@j zUuh&lA}K$_@Vd|ZfW2&*AY1ntujCO?0NI1oCV~|7OY%gBz!j3_@ZptJiFopWXz^d@D_DSn3m;vej! zg>AQR34oOc*q=Y=`7e^0It>-0lAi5WN%AoTd|s(6DhOU6(&Si7{Dk^h1w&QBC+bh@HN( zf3t)gJ685|xxZ;M`SKyy(Fb_?w-X6v@$(BaC5lSWpPl!dkNRjJ&!tuF6|r_QbPec@ zm-JXs5v|;06uoMI6CL}+4@SjxImS38yeobv;)}Sp7oZH=%!>P*0d?TVq1WBzAL9es zo7T-1+uW!(3=#~aOiw{_KO4C!-pW{?YU(iK2LfIS?0(|W5sX=c+nU8TrwC$XCVnpog0y zw{=&38suq+#PWy{rr!H6j>ao$G4$@wl?!ew>G@t=z^5APpU8dWM?H8~ZW&R@rUal+Nee5#XPbT54TuU&o z5ysqtxfMb=bJ4A*Y|g{-9QUl1OY7n$d`eBIM8Mzxuv9`OL3{$UBX%EdNSY@7J2F;Z zhcOax-X|lfwywQJTDQDIBgZ#M>R3nFax_|N_e#{V=ZPfuzK2=&!vP1LZT%*ETGF~% z2FAa(aQ=ejIpv&bxC2XvsI{Bn-@?ajgmFVM@ob&`K9iwnSxA)`Hrlc&Zlc(Ko7Am0K_9B)ytVAH?TRW@i@A*9ISrevir8HGu(wVEc|M zd-l!hsDuQNsiZS){B7xrX-kSPPl>E454{L}f5rXwwbu8t(YcyzfAe8DoPMdeeJQ6} zVOunX1F2I}eMw3tl`u6-shfsePK-_V{s`mQSf)=K@7;_zqoaM-e+R>omdY z3!|vLP<{6f9=ZOwr5b+)myeynyC(XnA96M*qc4yZfuzu6K^{)BA=-L|(hYPQ%bG=8 zdQo5I`m)sj+Haj<=@{>sII@a8B2+t|s-kU`>Q$+W77EFC= zkkmpH87qXRuL+$A+%-YwmWyyScj&;1;v6X1>pB@fE_u7qs4nHl_2{u|3K{xq*kfl+V#?D8IHg}Ot0h1$=De@-Q#bp z7`jdd_tNI;uj0_KTm99K>aL4$!m+dfO%uccNh(7%Bwg_KUt?AP@9-5{&-DrjM>1}l zgDT3|l)^aDjW5^FiKC`+^fh!%Lif^QRu=exmEC_=MsSzf8T__&r2xSKAasr+1M9lT z5*>)T@Cz&ORy~3sQK*>V-h5(m=J2Z9P)t@->#Z=9&Q4sui71a_K?%OLp1waCEZs@Y zroi^8|7_>;n{Kgz1sGQV0xweiQBCZzl7$PWJd`NT-}!X@>P+e>pg++ITBCyz6Njx|AuC`Fs5i$GH$bSSq>PB3@X_KHvwg#_pc` z4F4uRU`i$9xZA&ho$J44N0vU3e^RLGxL~T3UNKs#g^v?z$C~8`f=<&dt28Uq(3OHw z{2m}VzM{PR*T1Y;D@;m`l1u`T;VZ6jM^&<}vYbxEEqIjw_FyFKM~a{tj~w^O z;1QR4o0(6%d$mf?`5pHJmhKn6ywXd%`5(x&{V0(@?%RLMAzAxZ^ufVP#Xcw<4je$< z89gQZyT+s_cy2T@HdEiL`fQa}bLs^LugS1pRI;B*#5=4oAsUSm?*@_twD$lEaE3i`BZj4y)67tsKLhD%vim>3YcOVHCa zWV2b&+02av{bQM!mGPGM}A9qB6LawKAJ}EiM>5^4l4WO*x|YuC8Ujy1II)cuGpj zKpY5{euC2IMQV5yZVI9|f$2gdhKlSOmaR0%oDoN;qzKY87#LR}IAx>&ivvhd#jehcjh0#9s*&9?d~ zJJnYzv?U0LonzkcYjPo0ZTKNL2Vtu)vbKQOd;hC*vA|(B`tRT^vUayL)SL;h=kO~O zG{TNlu#3;!L(T0`z<@5yei?p7Lwhy}iyiJq_dTN#A;4qh#yHz@urD~0Lx)8d5KE?} zP$K>k<@~uew+9o2lUDynxd}ZdD+ll<2d%CN9bT&5sOAv?xV5DR*=#el5ht1zEk zSBwxCQLtEDdQly4fic8FiroM?F|WBeA|cLm0mL#OdB8=kXSTm4A9PHXqlUL^1tgI( z2*^jdf(ya-%(IM-+glGSZjMI;3I(Qj*oLq~yg1+c`5g##ND zkyD0PRRWF7z(U43^gXt=CwE(eIp%^dEK)G9g*g|CFN9m)$Pd;Cx9JHkK8*T{8BP40 z-IN23nSqVZW<2GPBC^}a$B=Pj>`gY_*jf&`3e*zPM01U>M>!Ho1Cnr9@0e((=LnQc zmD}mTK<%JzR<>0nHw1WybksBkOwc4LJkTu!6jeB~8e+fh^s0n?z%A`>Z_eaYTDEF} zDIR)kdg75$A$<$wM?QW>+Vvqw)l=JZe4L8R|6h-(Ex-R#I)qU^8ZgSvhavNCY&_hK z&oA@TU3fl3Qh}bl4OB^@0i67LXC7~VJgT^*vDKD*?|6Uqo~3g5%J4uK+on;rs3NRL zO%AEL?^w)(x2xM(u#uIrKWPhW(>80Icu{is-FbqapeGsi=8zF~-YcflKccZZCJa`A zh-U99RHgGKq~3kd`!k$cd3*bJ zBQFL-vXf?P*5DQ{QAZImVASAOhw*2hAjtWN@#$EZ3F*1(I>@1q#R1;G0u%S`77$Z@ zsk_jIL!AGj$EahcJkbZ({?>=P%F!#_u(uUEhNa6cCKzIo^L5RR>ComZR{6qtbNbxyGb>vWGafYvFsCL~#IHcxDFhv8d;+auRzKI>>&E+>J3})^& z2JX&*+ZaTQ{pY>bAtss~HJl=wrbK~#MjNMw2H<$ROTbz_x~)pDPA&q17<|~VTv-|1 zn~g#2CV04VAuxelLETF}m0_)rdb`J|TO-D@fKO!#!~U3+b^0ppR{m${@NN;P*hAry zo`4E7jJJPYFAX*o&ZQt+Kkn6=z4WJ9@O_hQ$n`M~T@YB!G^m{%kf;7<*ExWK z>W}C8em|sT1jKrTtV1C{D00lsX+TBjZxaBl$Z4F(|6;+|P6;(}YmNK7agcKsR3Z#0 P&vKcavpidDbQAM`JL;K8 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wordpress-seo/images/index.php b/wp-content/plugins/wordpress-seo/images/index.php new file mode 100644 index 0000000..e94d9a4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/images/index.php @@ -0,0 +1,4 @@ +xzWxc5CQq3$ciw`9i~rVRW-fZQa8gn&A6s)z zd3~_#T-MNVn{#zv?H2x+Q8nelshwX|O!ibTT+w$WKtR^)!_z;F+{v#}j9t5pXZ_1O zxSaRT#@M@CA1`jqHy85Ry~2K4!1m`?PTnp2*Y)Lf!4#pb!m}1#DJqp-dhOM3DX**T33sDj@83w;PQQ@kX| zFPMQ(P)I>Z%igWLzNdG_;#Ip39zS#U-G`@6zrO>ORC~HOhDcma?e`QqtRTRAyP@geyQG$Q=wf#0ZEe5JCckV7NpM zmBWaj2r6PZN-0tmZ9!0?*88Yhini)L-L}u}y5Z?Q&+b0U?)*FR{ANC%ci!*&`Um>C zvy!O@D&hkI@$uuwD-WK_MlO#o-EW_ncac$Vce0OIm@E;dQHwGpB5HDGa&dNEa+*U%Zh9WV{5J@P*F8mF zJ7n#pUeHT}Yk{`0Csx>;xu$L#sazj!)L%8nuznoQSALQqpy79FVtDTJy+vgN_(N9TRUo=#UH7;8<;$j`&n#q`&Z8$MGfxkf=Zu? zeKJxRc{d#w8E>0dOA6mEB(%t|wf6PZk$63Pje?1#p|e9hR5E~uf(v5@t3l4z!gvr# zoJfv35RAlAnRSz7aDQpRM3Yt4aS{@8a+bNf;g;_#-8xjca5C{2|JoPuL=p^YCVn7b z>@~z~!L1W7=Py>-wifVbKfF49%xXu0g-*Y&a5v=uc<YW>6$|zz1*kyv9?-y`VeFQ5|e?YuSZX@ux5m7mu&{(VYeL z6E8PrzDZ6zZ@R&i0m#3+8zT$LlTfH z9Bt!WuxSbYX`UiPM-5iZD6Z$BQD~B-1WP-Z4};+a5?o*?7Xe(*U;^306Zn1@phHo~ zeuK?SBucI~LTpXWx}q1!>(-boyVWb}jvRf+SNrdJ4L_zx8o_T7yXwxVJ~R`eYA2!eZ)~6&RFbFT1TW z|H#=g8w_`1>tUa6wF&1_i$<7g!0n#w4{9EsAAR)L(x3w{h?r|=iEphO0-$cK6DxWqG{u_4`d(Nah%-1Xib;Nw0CajU2)<+VK)v( zD#8A*w(NpGC-YY@4hNP~Qic@29iF}3z5ai{*8iMSYlY`A^pp1L8|P!ssQBna$ixFO>wc*r|$2DO^U2 z3^6BwkzmkCcr-DZ5}Zy#`=N-yk@IBF zRBp2#v9o9I%XwXz7xVLL9_r$3@4<(C~u%VgQUy&8e$_z$=caxb?xY2xS=qQ?w$s>?_oZ9H?D&h^dB46=*W zs5|kc#DJ>_u41VR<)D;k?X(|6hJvU~n0Nr^m!t;}(%{{w6e-k3)Qtg!*rA1pk(;=y z;6gX1f^2 z;SGy0dCzK9632@^XJdam+oj-KedFb8*ljk4qz^vD=a-!AkmfOP8*Cs8cX^k?9BkNm zznv4^Z`o(D5v4WR;wq83B+C4wolqrRVLG&RyRYYzA<_G(kDDdxWx@Iu z)*|s=neaz5EIpfgYX$yT8(7(c)h!Ah6^x7C-`adVm)U64QeR#Pvsp%m0J93bs6O{< zVlu<B>N#a0A_v0Dc$nHAjb!%UZ)H zRA8VM(>i}?eN2uH|M(MIeXj4Rf!aEgV-GXS|1##G8Xn*vqp_#5k_w`jiN#W4jPn|O zHW`y)m$2D61(%a9=1Ln#Ax9KpU8I`K!h@Xr!tTrla4-llG+0oW5j4~vT?9u^@bT7% zNLUeVLN`YkXFJ0%ydKgG21OxDT-M&|Te`Vmf>YM@T?OajROwh?Zt`_?2)}r7yYcxE z1ukWv{gU*c$S(5w&2BxkoA0^}u(k`Wm7dKrN?-RaVVFo9fE*rMJMhzoug02e9jy6&8!HDpi1ZHuM(b!SzJwiPO?=;$h z@1C}&(w$W*C&n>zwgFIWU6x%6D0NAZ=6A@kZG^Dx%7|W)DhW$N<@pl!ok#*`_>dt? zss`dXaL2&J*pkRHR4@Xmm+OMfq|fA`%0~Iq-QRwr$wNCi%d1nthmYK;ac-a%_nD?dBr9STn-7d8CA2uS1 false ) ); + if ( is_array( $categories ) && $categories !== array() ) { + foreach ( $categories as $category ) { + $category_nicename = $category->slug; + if ( $category->parent == $category->cat_ID ) { + // Recursive recursion. + $category->parent = 0; + } + elseif ( $taxonomy->rewrite['hierarchical'] != 0 && $category->parent != 0 ) { + $parents = get_category_parents( $category->parent, false, '/', true ); + if ( ! is_wp_error( $parents ) ) { + $category_nicename = $parents . $category_nicename; + } + unset( $parents ); + } + + $category_rewrite[ $blog_prefix . '(' . $category_nicename . ')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]'; + $category_rewrite[ $blog_prefix . '(' . $category_nicename . ')/' . $wp_rewrite->pagination_base . '/?([0-9]{1,})/?$' ] = 'index.php?category_name=$matches[1]&paged=$matches[2]'; + $category_rewrite[ $blog_prefix . '(' . $category_nicename . ')/?$' ] = 'index.php?category_name=$matches[1]'; + } + unset( $categories, $category, $category_nicename ); + } + + // Redirect support from Old Category Base. + $old_base = $wp_rewrite->get_category_permastruct(); + $old_base = str_replace( '%category%', '(.+)', $old_base ); + $old_base = trim( $old_base, '/' ); + $category_rewrite[ $old_base . '$' ] = 'index.php?wpseo_category_redirect=$matches[1]'; + + return $category_rewrite; + } +} /* End of class */ diff --git a/wp-content/plugins/wordpress-seo/inc/class-upgrade.php b/wp-content/plugins/wordpress-seo/inc/class-upgrade.php new file mode 100644 index 0000000..70c469e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/class-upgrade.php @@ -0,0 +1,242 @@ +options = WPSEO_Options::get_option( 'wpseo' ); + + WPSEO_Options::maybe_set_multisite_defaults( false ); + + if ( version_compare( $this->options['version'], '1.5.0', '<' ) ) { + $this->upgrade_15( $this->options['version'] ); + } + + if ( version_compare( $this->options['version'], '2.0', '<' ) ) { + $this->upgrade_20(); + } + + if ( version_compare( $this->options['version'], '2.1', '<' ) ) { + $this->upgrade_21(); + } + + if ( version_compare( $this->options['version'], '2.2', '<' ) ) { + $this->upgrade_22(); + } + + if ( version_compare( $this->options['version'], '2.3', '<' ) ) { + $this->upgrade_23(); + } + + if ( version_compare( $this->options['version'], '3.0', '<' ) ) { + $this->upgrade_30(); + } + + if ( version_compare( $this->options['version'], '3.3', '<' ) ) { + $this->upgrade_33(); + } + + if ( version_compare( $this->options['version'], '3.6', '<' ) ) { + $this->upgrade_36(); + } + + if ( version_compare( $this->options['version'], '4.0', '<' ) ) { + $this->upgrade_40(); + } + + // Since 3.7. + $upsell_notice = new WPSEO_Product_Upsell_Notice(); + $upsell_notice->set_upgrade_notice(); + + /** + * Filter: 'wpseo_run_upgrade' - Runs the upgrade hook which are dependent on Yoast SEO + * + * @deprecated Since 3.1 + * + * @api string - The current version of Yoast SEO + */ + do_action( 'wpseo_run_upgrade', $this->options['version'] ); + + $this->finish_up(); + } + + /** + * Run the Yoast SEO 1.5 upgrade routine + * + * @param string $version Current plugin version. + */ + private function upgrade_15( $version ) { + // Clean up options and meta. + WPSEO_Options::clean_up( null, $version ); + WPSEO_Meta::clean_up(); + + // Add new capabilities on upgrade. + wpseo_add_capabilities(); + } + + /** + * Moves options that moved position in WPSEO 2.0 + */ + private function upgrade_20() { + /** + * Clean up stray wpseo_ms options from the options table, option should only exist in the sitemeta table. + * This could have been caused in many version of Yoast SEO, so deleting it for everything below 2.0 + */ + delete_option( 'wpseo_ms' ); + + $this->move_pinterest_option(); + } + + /** + * Detects if taxonomy terms were split and updates the corresponding taxonomy meta's accordingly. + */ + private function upgrade_21() { + $taxonomies = get_option( 'wpseo_taxonomy_meta', array() ); + + if ( ! empty( $taxonomies ) ) { + foreach ( $taxonomies as $taxonomy => $tax_metas ) { + foreach ( $tax_metas as $term_id => $tax_meta ) { + if ( function_exists( 'wp_get_split_term' ) && $new_term_id = wp_get_split_term( $term_id, $taxonomy ) ) { + $taxonomies[ $taxonomy ][ $new_term_id ] = $taxonomies[ $taxonomy ][ $term_id ]; + unset( $taxonomies[ $taxonomy ][ $term_id ] ); + } + } + } + + update_option( 'wpseo_taxonomy_meta', $taxonomies ); + } + } + + /** + * Performs upgrade functions to Yoast SEO 2.2 + */ + private function upgrade_22() { + // Unschedule our tracking. + wp_clear_scheduled_hook( 'yoast_tracking' ); + + // Clear the tracking settings, the seen about setting and the ignore tour setting. + $options = get_option( 'wpseo' ); + unset( $options['tracking_popup_done'], $options['yoast_tracking'], $options['seen_about'], $options['ignore_tour'] ); + update_option( 'wpseo', $options ); + } + + /** + * Schedules upgrade function to Yoast SEO 2.3 + */ + private function upgrade_23() { + add_action( 'wp', array( $this, 'upgrade_23_query' ), 90 ); + add_action( 'admin_head', array( $this, 'upgrade_23_query' ), 90 ); + } + + /** + * Performs upgrade query to Yoast SEO 2.3 + */ + public function upgrade_23_query() { + $wp_query = new WP_Query( 'post_type=any&meta_key=_yoast_wpseo_sitemap-include&meta_value=never&order=ASC' ); + + if ( ! empty( $wp_query->posts ) ) { + $options = get_option( 'wpseo_xml' ); + + $excluded_posts = array(); + if ( $options['excluded-posts'] !== '' ) { + $excluded_posts = explode( ',', $options['excluded-posts'] ); + } + + foreach ( $wp_query->posts as $post ) { + if ( ! in_array( $post->ID, $excluded_posts ) ) { + $excluded_posts[] = $post->ID; + } + } + + // Updates the meta value. + $options['excluded-posts'] = implode( ',', $excluded_posts ); + + // Update the option. + update_option( 'wpseo_xml', $options ); + } + + // Remove the meta fields. + delete_post_meta_by_key( '_yoast_wpseo_sitemap-include' ); + } + + /** + * Performs upgrade functions to Yoast SEO 3.0 + */ + private function upgrade_30() { + // Remove the meta fields for sitemap prio. + delete_post_meta_by_key( '_yoast_wpseo_sitemap-prio' ); + } + + /** + * Performs upgrade functions to Yoast SEO 3.3 + */ + private function upgrade_33() { + // Notification dismissals have been moved to User Meta instead of global option. + delete_option( Yoast_Notification_Center::STORAGE_KEY ); + } + + /** + * Performs upgrade functions to Yoast SEO 3.6 + */ + private function upgrade_36() { + global $wpdb; + + // Between 3.2 and 3.4 the sitemap options were saved with autoloading enabled. + $wpdb->query( 'DELETE FROM ' . $wpdb->options . ' WHERE option_name LIKE "wpseo_sitemap_%" AND autoload = "yes"' ); + } + + /** + * Move the pinterest verification option from the wpseo option to the wpseo_social option + */ + private function move_pinterest_option() { + $options_social = get_option( 'wpseo_social' ); + + if ( isset( $option_wpseo['pinterestverify'] ) ) { + $options_social['pinterestverify'] = $option_wpseo['pinterestverify']; + unset( $option_wpseo['pinterestverify'] ); + update_option( 'wpseo_social', $options_social ); + update_option( 'wpseo', $option_wpseo ); + } + } + + /** + * Runs the needed cleanup after an update, setting the DB version to latest version, flushing caches etc. + */ + private function finish_up() { + $this->options = WPSEO_Options::get_option( 'wpseo' ); // Re-get to make sure we have the latest version. + update_option( 'wpseo', $this->options ); // This also ensures the DB version is equal to WPSEO_VERSION. + + add_action( 'shutdown', 'flush_rewrite_rules' ); // Just flush rewrites, always, to at least make them work after an upgrade. + WPSEO_Sitemaps_Cache::clear(); // Flush the sitemap cache. + + WPSEO_Options::ensure_options_exist(); // Make sure all our options always exist - issue #1245. + } + + /** + * Removes the about notice when its still in the database. + */ + private function upgrade_40() { + $center = Yoast_Notification_Center::get(); + $notification = $center->get_notification_by_id( 'wpseo-dismiss-about' ); + + if ( $notification ) { + $center->remove_notification( $notification ); + } + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/class-wpseo-features.php b/wp-content/plugins/wordpress-seo/inc/class-wpseo-features.php new file mode 100644 index 0000000..c54c823 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/class-wpseo-features.php @@ -0,0 +1,29 @@ +is_premium(); + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/class-wpseo-installation.php b/wp-content/plugins/wordpress-seo/inc/class-wpseo-installation.php new file mode 100644 index 0000000..4fda27d --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/class-wpseo-installation.php @@ -0,0 +1,45 @@ +is_first_install(); + + if ( $is_first_install && WPSEO_Utils::is_api_available() ) { + add_action( 'wpseo_activate', array( $this, 'set_first_install_options' ) ); + } + } + + /** + * When the option doesn't exist, it should be a new install. + * + * @return bool + */ + private function is_first_install() { + return ( get_option( 'wpseo' ) === false ); + } + + /** + * Sets the options on first install for showing the installation notice and disabling of the settings pages. + */ + public function set_first_install_options() { + $options = get_option( 'wpseo' ); + + $options['enable_setting_pages'] = false; + $options['show_onboarding_notice'] = true; + $options['first_activated_on'] = time(); + + update_option( 'wpseo', $options ); + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/class-wpseo-meta.php b/wp-content/plugins/wordpress-seo/inc/class-wpseo-meta.php new file mode 100644 index 0000000..ddfaf0e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/class-wpseo-meta.php @@ -0,0 +1,1083 @@ + (string) field type. i.e. text / textarea / checkbox / + * radio / select / multiselect / upload / snippetpreview etc + * (required) 'title' => (string) table row title + * (recommended) 'default_value' => (string|array) default value for the field + * IMPORTANT: + * - if the field has options, the default has to be the + * key of one of the options + * - if the field is a text field, the default **has** to be + * an empty string as otherwise the user can't save + * an empty value/delete the meta value + * - if the field is a checkbox, the only valid values + * are 'on' or 'off' + * (semi-required) 'options' => (array) options for used with (multi-)select and radio + * fields, required if that's the field type + * key = (string) value which will be saved to db + * value = (string) text label for the option + * (optional) 'autocomplete' => (bool) whether autocomplete is on for text fields, + * defaults to true + * (optional) 'class' => (string) classname(s) to add to the actual tag + * (optional) 'description' => (string) description to show underneath the field + * (optional) 'expl' => (string) label for a checkbox + * (optional) 'help' => (string) help text to show on mouse over ? image + * (optional) 'rows' => (int) number of rows for a textarea, defaults to 3 + * + * (optional) 'placeholder' => (string) Currently only used by add-on plugins + * (optional) 'serialized' => (bool) whether the value is expected to be serialized, + * i.e. an array or object, defaults to false + * Currently only used by add-on plugins + * + * @static + * + * @internal + * - Titles, help texts, description text and option labels are added via a translate_meta_boxes() method + * in the relevant child classes (WPSEO_Metabox and WPSEO_Social_admin) as they are only needed there. + * - Beware: even though the meta keys are divided into subsets, they still have to be uniquely named! + */ + public static $meta_fields = array( + 'general' => array( + 'snippetpreview' => array( + 'type' => 'snippetpreview', + 'title' => '', // Translation added later. + 'help' => '', // Translation added later. + 'help-button' => '', // Translation added later. + ), + 'focuskw_text_input' => array( + 'type' => 'focuskeyword', + 'title' => '', // Translation added later. + 'default_value' => '', + 'autocomplete' => false, + 'help' => '', // Translation added later. + 'description' => '

    ', + 'help-button' => '', // Translation added later. + ), + 'focuskw' => array( + 'type' => 'hidden', + 'title' => '', + ), + 'title' => array( + 'type' => 'hidden', + 'title' => '', // Translation added later. + 'default_value' => '', + 'description' => '', // Translation added later. + 'help' => '', // Translation added later. + ), + 'metadesc' => array( + 'type' => 'hidden', + 'title' => '', // Translation added later. + 'default_value' => '', + 'class' => 'metadesc', + 'rows' => 2, + 'description' => '', // Translation added later. + 'help' => '', // Translation added later. + ), + 'linkdex' => array( + 'type' => 'hidden', + 'title' => 'linkdex', + 'default_value' => '0', + 'description' => '', + ), + 'content_score' => array( + 'type' => 'hidden', + 'title' => 'content_score', + 'default_value' => '0', + 'description' => '', + ), + 'metakeywords' => array( + 'type' => 'metakeywords', + 'title' => '', // Translation added later. + 'default_value' => '', + 'class' => 'metakeywords', + 'description' => '', // Translation added later. + ), + 'pageanalysis' => array( + 'type' => 'pageanalysis', + 'title' => '', // Translation added later. + 'help' => '', // Translation added later. + 'help-button' => '', // Translation added later. + ), + ), + 'advanced' => array( + 'meta-robots-noindex' => array( + 'type' => 'select', + 'title' => '', // Translation added later. + 'default_value' => '0', // = post-type default. + 'options' => array( + '0' => '', // Post type default - translation added later. + '2' => '', // Index - translation added later. + '1' => '', // No-index - translation added later. + ), + ), + 'meta-robots-nofollow' => array( + 'type' => 'radio', + 'title' => '', // Translation added later. + 'default_value' => '0', // = follow. + 'options' => array( + '0' => '', // Follow - translation added later. + '1' => '', // No-follow - translation added later. + ), + ), + 'meta-robots-adv' => array( + 'type' => 'multiselect', + 'title' => '', // Translation added later. + 'default_value' => '-', // = site-wide default. + 'description' => '', // Translation added later. + 'options' => array( + '-' => '', // Site-wide default - translation added later. + 'none' => '', // Translation added later. + 'noodp' => '', // Translation added later. + 'noimageindex' => '', // Translation added later. + 'noarchive' => '', // Translation added later. + 'nosnippet' => '', // Translation added later. + ), + ), + 'bctitle' => array( + 'type' => 'text', + 'title' => '', // Translation added later. + 'default_value' => '', + 'description' => '', // Translation added later. + ), + 'canonical' => array( + 'type' => 'text', + 'title' => '', // Translation added later. + 'default_value' => '', + 'description' => '', // Translation added later. + ), + 'redirect' => array( + 'type' => 'text', + 'title' => '', // Translation added later. + 'default_value' => '', + 'description' => '', // Translation added later. + ), + ), + 'social' => array(), + /* Fields we should validate & save, but not show on any form */ + 'non_form' => array( + 'linkdex' => array( + 'type' => null, + 'default_value' => '0', + ), + ), + ); + + + /** + * @var array Helper property - reverse index of the definition array + * Format: [full meta key including prefix] => array + * ['subset'] => (string) primary index + * ['key'] => (string) internal key + * @static + */ + public static $fields_index = array(); + + + /** + * @var array Helper property - array containing only the defaults in the format: + * [full meta key including prefix] => (string) default value + * @static + */ + public static $defaults = array(); + + /** + * @var array Helper property to define the social network meta field definitions - networks + * @static + */ + private static $social_networks = array( + 'opengraph' => 'opengraph', + 'twitter' => 'twitter', + ); + + /** + * @var array Helper property to define the social network meta field definitions - fields and their type + * @static + */ + private static $social_fields = array( + 'title' => 'text', + 'description' => 'textarea', + 'image' => 'upload', + ); + + + /** + * Register our actions and filters + * + * @static + * @return void + */ + public static function init() { + + $options = WPSEO_Options::get_option( 'wpseo_social' ); + foreach ( self::$social_networks as $option => $network ) { + if ( true === $options[ $option ] ) { + foreach ( self::$social_fields as $box => $type ) { + self::$meta_fields['social'][ $network . '-' . $box ] = array( + 'type' => $type, + 'title' => '', // Translation added later. + 'default_value' => '', + 'description' => '', // Translation added later. + ); + } + } + } + unset( $options, $option, $network, $box, $type ); + + /** + * Allow add-on plugins to register their meta fields for management by this class + * add_filter() calls must be made before plugins_loaded prio 14 + */ + $extra_fields = apply_filters( 'add_extra_wpseo_meta_fields', array() ); + if ( is_array( $extra_fields ) ) { + self::$meta_fields = self::array_merge_recursive_distinct( $extra_fields, self::$meta_fields ); + } + unset( $extra_fields ); + + $register = function_exists( 'register_meta' ); + + foreach ( self::$meta_fields as $subset => $field_group ) { + foreach ( $field_group as $key => $field_def ) { + if ( $field_def['type'] !== 'snippetpreview' ) { + /** + * Function register_meta() is undocumented and not used by WP internally, wrapped in + * function_exists as a precaution in case they remove it. + */ + if ( $register === true ) { + register_meta( 'post', self::$meta_prefix . $key, array( __CLASS__, 'sanitize_post_meta' ) ); + } + else { + add_filter( 'sanitize_post_meta_' . self::$meta_prefix . $key, array( __CLASS__, 'sanitize_post_meta' ), 10, 2 ); + } + + // Set the $fields_index property for efficiency. + self::$fields_index[ self::$meta_prefix . $key ] = array( + 'subset' => $subset, + 'key' => $key, + ); + + // Set the $defaults property for efficiency. + if ( isset( $field_def['default_value'] ) ) { + self::$defaults[ self::$meta_prefix . $key ] = $field_def['default_value']; + } + else { + // Meta will always be a string, so let's make the meta meta default also a string. + self::$defaults[ self::$meta_prefix . $key ] = ''; + } + } + } + } + unset( $subset, $field_group, $key, $field_def, $register ); + + add_filter( 'update_post_metadata', array( __CLASS__, 'remove_meta_if_default' ), 10, 5 ); + add_filter( 'add_post_metadata', array( __CLASS__, 'dont_save_meta_if_default' ), 10, 4 ); + } + + + /** + * Retrieve the meta box form field definitions for the given tab and post type. + * + * @static + * + * @param string $tab Tab for which to retrieve the field definitions. + * @param string $post_type Post type of the current post. + * + * @return array Array containing the meta box field definitions + */ + public static function get_meta_field_defs( $tab, $post_type = 'post' ) { + if ( ! isset( self::$meta_fields[ $tab ] ) ) { + return array(); + } + + $field_defs = self::$meta_fields[ $tab ]; + + switch ( $tab ) { + case 'non-form': + // Prevent non-form fields from being passed to forms. + $field_defs = array(); + break; + + + case 'general': + $options = WPSEO_Options::get_option( 'wpseo_titles' ); + if ( $options['usemetakeywords'] === true ) { + /* Adjust the link in the keywords description text string based on the post type */ + $field_defs['metakeywords']['description'] = sprintf( $field_defs['metakeywords']['description'], '', '' ); + } + else { + /* Don't show the keywords field if keywords aren't enabled */ + unset( $field_defs['metakeywords'] ); + } + /** + * Filter the WPSEO metabox form field definitions for the general tab, backward compatibility + * + * @deprecated 1.5.0 + * @deprecated use the 'wpseo_metabox_entries_general' filter instead + * @see WPSEO_Meta::get_meta_field_defs() + * + * @param array $field_defs Metabox orm definitions. + * + * @return array + */ + $field_defs = apply_filters( 'wpseo_metabox_entries', $field_defs ); + break; + + + case 'advanced': + global $post; + + $options = WPSEO_Options::get_options( array( 'wpseo', 'wpseo_titles', 'wpseo_internallinks' ) ); + + if ( ! current_user_can( 'manage_options' ) && $options['disableadvanced_meta'] ) { + return array(); + } + + $post_type = ''; + if ( isset( $post->post_type ) ) { + $post_type = $post->post_type; + } + elseif ( ! isset( $post->post_type ) && isset( $_GET['post_type'] ) ) { + $post_type = sanitize_text_field( $_GET['post_type'] ); + } + + /* Adjust the no-index 'default for post type' text string based on the post type */ + $field_defs['meta-robots-noindex']['options']['0'] = sprintf( $field_defs['meta-robots-noindex']['options']['0'], ( ( isset( $options[ 'noindex-' . $post_type ] ) && $options[ 'noindex-' . $post_type ] === true ) ? 'noindex' : 'index' ) ); + + /* Adjust the robots advanced 'site-wide default' text string based on those settings */ + if ( $options['noodp'] !== false ) { + $robots_adv = array(); + if ( $options['noodp'] === true ) { + // Use translation from field def options - mind that $options and $field_def['options'] keys should be the same! + $robots_adv[] = $field_defs['meta-robots-adv']['options']['noodp']; + } + $robots_adv = implode( ', ', $robots_adv ); + } + else { + $robots_adv = __( 'None', 'wordpress-seo' ); + } + $field_defs['meta-robots-adv']['options']['-'] = sprintf( $field_defs['meta-robots-adv']['options']['-'], $robots_adv ); + unset( $robots_adv ); + + + /* Don't show the breadcrumb title field if breadcrumbs aren't enabled */ + if ( $options['breadcrumbs-enable'] !== true && ! current_theme_supports( 'yoast-seo-breadcrumbs' ) ) { + unset( $field_defs['bctitle'] ); + } + + global $post; + + if ( empty( $post->ID ) || ( ! empty( $post->ID ) && self::get_value( 'redirect', $post->ID ) === '' ) ) { + unset( $field_defs['redirect'] ); + } + break; + } + + /** + * Filter the WPSEO metabox form field definitions for a tab + * {tab} can be 'general', 'advanced' or 'social' + * + * @param array $field_defs Metabox form definitions. + * @param string $post_type Post type of the post the metabox is for, defaults to 'post'. + * + * @return array + */ + + return apply_filters( 'wpseo_metabox_entries_' . $tab, $field_defs, $post_type ); + } + + + /** + * Validate the post meta values + * + * @static + * + * @param mixed $meta_value The new value. + * @param string $meta_key The full meta key (including prefix). + * + * @return string Validated meta value + */ + public static function sanitize_post_meta( $meta_value, $meta_key ) { + $field_def = self::$meta_fields[ self::$fields_index[ $meta_key ]['subset'] ][ self::$fields_index[ $meta_key ]['key'] ]; + $clean = self::$defaults[ $meta_key ]; + + switch ( true ) { + case ( $meta_key === self::$meta_prefix . 'linkdex' ): + $int = WPSEO_Utils::validate_int( $meta_value ); + if ( $int !== false && $int >= 0 ) { + $clean = strval( $int ); // Convert to string to make sure default check works. + } + break; + + case ( $field_def['type'] === 'checkbox' ): + // Only allow value if it's one of the predefined options. + if ( in_array( $meta_value, array( 'on', 'off' ), true ) ) { + $clean = $meta_value; + } + break; + + + case ( $field_def['type'] === 'select' || $field_def['type'] === 'radio' ): + // Only allow value if it's one of the predefined options. + if ( isset( $field_def['options'][ $meta_value ] ) ) { + $clean = $meta_value; + } + break; + + + case ( $field_def['type'] === 'multiselect' && $meta_key === self::$meta_prefix . 'meta-robots-adv' ): + $clean = self::validate_meta_robots_adv( $meta_value ); + break; + + + case ( $field_def['type'] === 'text' && $meta_key === self::$meta_prefix . 'canonical' ): + case ( $field_def['type'] === 'text' && $meta_key === self::$meta_prefix . 'redirect' ): + // Validate as url(-part). + $url = WPSEO_Utils::sanitize_url( $meta_value ); + if ( $url !== '' ) { + $clean = $url; + } + break; + + + case ( $field_def['type'] === 'upload' && $meta_key === self::$meta_prefix . 'opengraph-image' ): + // Validate as url. + $url = WPSEO_Utils::sanitize_url( $meta_value, array( 'http', 'https', 'ftp', 'ftps' ) ); + if ( $url !== '' ) { + $clean = $url; + } + break; + + + case ( $field_def['type'] === 'textarea' ): + if ( is_string( $meta_value ) ) { + // Remove line breaks and tabs. + // @todo [JRF => Yoast] verify that line breaks and the likes aren't allowed/recommended in meta header fields. + $meta_value = str_replace( array( "\n", "\r", "\t", ' ' ), ' ', $meta_value ); + $clean = WPSEO_Utils::sanitize_text_field( trim( $meta_value ) ); + } + break; + + case ( 'multiselect' === $field_def['type'] ): + $clean = $meta_value; + break; + + + case ( $field_def['type'] === 'text' ): + default: + if ( is_string( $meta_value ) ) { + $clean = WPSEO_Utils::sanitize_text_field( trim( $meta_value ) ); + } + + if ( $meta_key === self::$meta_prefix . 'focuskw' ) { + $clean = str_replace( array( + '<', + '>', + '"', + '`', + '<', + '>', + '"', + '`', + ), '', $clean ); + } + break; + } + + $clean = apply_filters( 'wpseo_sanitize_post_meta_' . $meta_key, $clean, $meta_value, $field_def, $meta_key ); + + return $clean; + } + + + /** + * Validate a meta-robots-adv meta value + * + * @todo [JRF => Yoast] Verify that this logic for the prioritisation is correct + * + * @static + * + * @param array|string $meta_value The value to validate. + * + * @return string Clean value + */ + public static function validate_meta_robots_adv( $meta_value ) { + $clean = self::$meta_fields['advanced']['meta-robots-adv']['default_value']; + $options = self::$meta_fields['advanced']['meta-robots-adv']['options']; + + if ( is_string( $meta_value ) ) { + $meta_value = explode( ',', $meta_value ); + } + + if ( is_array( $meta_value ) && $meta_value !== array() ) { + $meta_value = array_map( 'trim', $meta_value ); + + if ( in_array( 'none', $meta_value, true ) ) { + // None is one of the selected values, takes priority over everything else. + $clean = 'none'; + } + elseif ( in_array( '-', $meta_value, true ) ) { + // Site-wide defaults is one of the selected values, takes priority over individual selected entries. + $clean = '-'; + } + else { + // Individual selected entries. + $cleaning = array(); + foreach ( $meta_value as $value ) { + if ( isset( $options[ $value ] ) ) { + $cleaning[] = $value; + } + } + + if ( $cleaning !== array() ) { + $clean = implode( ',', $cleaning ); + } + unset( $cleaning, $value ); + } + } + + return $clean; + } + + + /** + * Prevent saving of default values and remove potential old value from the database if replaced by a default + * + * @static + * + * @param null $null Old, disregard. + * @param int $object_id ID of the current object for which the meta is being updated. + * @param string $meta_key The full meta key (including prefix). + * @param string $meta_value New meta value. + * @param string $prev_value The old meta value. + * + * @return null|bool true = stop saving, null = continue saving + */ + public static function remove_meta_if_default( $null, $object_id, $meta_key, $meta_value, $prev_value = '' ) { + /* If it's one of our meta fields, check against default */ + if ( isset( self::$fields_index[ $meta_key ] ) && self::meta_value_is_default( $meta_key, $meta_value ) === true ) { + if ( $prev_value !== '' ) { + delete_post_meta( $object_id, $meta_key, $prev_value ); + } + else { + delete_post_meta( $object_id, $meta_key ); + } + + return true; // Stop saving the value. + } + + return null; // Go on with the normal execution (update) in meta.php. + } + + + /** + * Prevent adding of default values to the database + * + * @static + * + * @param null $null Old, disregard. + * @param int $object_id ID of the current object for which the meta is being added. + * @param string $meta_key The full meta key (including prefix). + * @param string $meta_value New meta value. + * + * @return null|bool true = stop saving, null = continue saving + */ + public static function dont_save_meta_if_default( $null, $object_id, $meta_key, $meta_value ) { + /* If it's one of our meta fields, check against default */ + if ( isset( self::$fields_index[ $meta_key ] ) && self::meta_value_is_default( $meta_key, $meta_value ) === true ) { + return true; // Stop saving the value. + } + + return null; // Go on with the normal execution (add) in meta.php. + } + + + /** + * Is the given meta value the same as the default value ? + * + * @static + * + * @param string $meta_key The full meta key (including prefix). + * @param mixed $meta_value The value to check. + * + * @return bool + */ + public static function meta_value_is_default( $meta_key, $meta_value ) { + return ( isset( self::$defaults[ $meta_key ] ) && $meta_value === self::$defaults[ $meta_key ] ); + } + + + /** + * Get a custom post meta value + * Returns the default value if the meta value has not been set + * + * @internal Unfortunately there isn't a filter available to hook into before returning the results + * for get_post_meta(), get_post_custom() and the likes. That would have been the preferred solution. + * + * @static + * + * @param string $key Internal key of the value to get (without prefix). + * @param int $postid Post ID of the post to get the value for. + * + * @return string All 'normal' values returned from get_post_meta() are strings. + * Objects and arrays are possible, but not used by this plugin + * and therefore discarted (except when the special 'serialized' field def + * value is set to true - only used by add-on plugins for now). + * Will return the default value if no value was found.. + * Will return empty string if no default was found (not one of our keys) or + * if the post does not exist. + */ + public static function get_value( $key, $postid = 0 ) { + global $post; + + $postid = absint( $postid ); + if ( $postid === 0 ) { + if ( ( isset( $post ) && is_object( $post ) ) && ( isset( $post->post_status ) && $post->post_status !== 'auto-draft' ) ) { + $postid = $post->ID; + } + else { + return ''; + } + } + + $custom = get_post_custom( $postid ); // Array of strings or empty array. + + if ( isset( $custom[ self::$meta_prefix . $key ][0] ) ) { + $unserialized = maybe_unserialize( $custom[ self::$meta_prefix . $key ][0] ); + if ( $custom[ self::$meta_prefix . $key ][0] === $unserialized ) { + return $custom[ self::$meta_prefix . $key ][0]; + } + else { + $field_def = self::$meta_fields[ self::$fields_index[ self::$meta_prefix . $key ]['subset'] ][ self::$fields_index[ self::$meta_prefix . $key ]['key'] ]; + if ( isset( $field_def['serialized'] ) && $field_def['serialized'] === true ) { + // Ok, serialize value expected/allowed. + return $unserialized; + } + } + } + + // Meta was either not found or found, but object/array while not allowed to be. + if ( isset( self::$defaults[ self::$meta_prefix . $key ] ) ) { + return self::$defaults[ self::$meta_prefix . $key ]; + } + else { + /* + Shouldn't ever happen, means not one of our keys as there will always be a default available + for all our keys + */ + return ''; + } + } + + + /** + * Update a meta value for a post + * + * @static + * + * @param string $key The internal key of the meta value to change (without prefix). + * @param mixed $meta_value The value to set the meta to. + * @param int $post_id The ID of the post to change the meta for. + * + * @return bool whether the value was changed + */ + public static function set_value( $key, $meta_value, $post_id ) { + return update_post_meta( $post_id, self::$meta_prefix . $key, $meta_value ); + } + + /** + * Deletes a meta value for a post + * + * @static + * + * @param string $key The internal key of the meta value to change (without prefix). + * @param int $post_id The ID of the post to change the meta for. + * + * @return bool Whether the value was changed + */ + public static function delete( $key, $post_id ) { + return delete_post_meta( $post_id, self::$meta_prefix . $key ); + } + + /** + * Used for imports, this functions imports the value of $old_metakey into $new_metakey for those post + * where no WPSEO meta data has been set. + * Optionally deletes the $old_metakey values. + * + * @static + * + * @param string $old_metakey The old key of the meta value. + * @param string $new_metakey The new key, usually the WPSEO meta key (including prefix). + * @param bool $delete_old Whether to delete the old meta key/value-sets. + * + * @return void + */ + public static function replace_meta( $old_metakey, $new_metakey, $delete_old = false ) { + global $wpdb; + + /* + Get only those rows where no wpseo meta values exist for the same post + (with the exception of linkdex as that will be set independently of whether the post has been edited) + @internal Query is pretty well optimized this way + */ + $query = $wpdb->prepare( + " + SELECT `a`.* + FROM {$wpdb->postmeta} AS a + WHERE `a`.`meta_key` = %s + AND NOT EXISTS ( + SELECT DISTINCT `post_id` , count( `meta_id` ) AS count + FROM {$wpdb->postmeta} AS b + WHERE `a`.`post_id` = `b`.`post_id` + AND `meta_key` LIKE %s + AND `meta_key` <> %s + GROUP BY `post_id` + ) + ;", + $old_metakey, + $wpdb->esc_like( self::$meta_prefix . '%' ), + self::$meta_prefix . 'linkdex' + ); + $oldies = $wpdb->get_results( $query ); + + if ( is_array( $oldies ) && $oldies !== array() ) { + foreach ( $oldies as $old ) { + update_post_meta( $old->post_id, $new_metakey, $old->meta_value ); + } + } + + // Delete old keys. + if ( $delete_old === true ) { + delete_post_meta_by_key( $old_metakey ); + } + } + + + /** + * General clean-up of the saved meta values + * - Remove potentially lingering old meta keys + * - Remove all default and invalid values + * + * @static + * @return void + */ + public static function clean_up() { + global $wpdb; + + /** + * Clean up '_yoast_wpseo_meta-robots' + * + * Retrieve all '_yoast_wpseo_meta-robots' meta values and convert if no new values found + * + * @internal Query is pretty well optimized this way + * + * @todo [JRF => Yoast] find out all possible values which the old '_yoast_wpseo_meta-robots' could contain + * to convert the data correctly + */ + $query = $wpdb->prepare( + " + SELECT `a`.* + FROM {$wpdb->postmeta} AS a + WHERE `a`.`meta_key` = %s + AND NOT EXISTS ( + SELECT DISTINCT `post_id` , count( `meta_id` ) AS count + FROM {$wpdb->postmeta} AS b + WHERE `a`.`post_id` = `b`.`post_id` + AND ( `meta_key` = %s + OR `meta_key` = %s ) + GROUP BY `post_id` + ) + ;", + self::$meta_prefix . 'meta-robots', + self::$meta_prefix . 'meta-robots-noindex', + self::$meta_prefix . 'meta-robots-nofollow' + ); + $oldies = $wpdb->get_results( $query ); + + if ( is_array( $oldies ) && $oldies !== array() ) { + foreach ( $oldies as $old ) { + $old_values = explode( ',', $old->meta_value ); + foreach ( $old_values as $value ) { + if ( $value === 'noindex' ) { + update_post_meta( $old->post_id, self::$meta_prefix . 'meta-robots-noindex', 1 ); + } + elseif ( $value === 'nofollow' ) { + update_post_meta( $old->post_id, self::$meta_prefix . 'meta-robots-nofollow', 1 ); + } + } + } + } + unset( $query, $oldies, $old, $old_values, $value ); + + // Delete old keys. + delete_post_meta_by_key( self::$meta_prefix . 'meta-robots' ); + + + /** + * Remove all default values and (most) invalid option values + * Invalid option values for the multiselect (meta-robots-adv) field will be dealt with seperately + * + * @internal some of the defaults have changed in v1.5, but as the defaults will be removed and + * new defaults will now automatically be passed when no data found, this update is automatic + * (as long as we remove the old values which we do in the below routine) + * + * @internal unfortunately we can't use the normal delete_meta() with key/value combination as '' + * (empty string) values will be ignored and would result in all metas with that key being deleted, + * not just the empty fields. + * Still, the below implementation is largely based on the delete_meta() function + */ + $query = array(); + + foreach ( self::$meta_fields as $subset => $field_group ) { + foreach ( $field_group as $key => $field_def ) { + if ( $field_def['type'] === 'snippetpreview' || ! isset( $field_def['default_value'] ) ) { + continue; + } + + if ( $key === 'meta-robots-adv' ) { + $query[] = $wpdb->prepare( + "( meta_key = %s AND ( meta_value = 'none' OR meta_value = '-' ) )", + self::$meta_prefix . $key + ); + } + elseif ( isset( $field_def['options'] ) && is_array( $field_def['options'] ) && $field_def['options'] !== array() ) { + $valid = $field_def['options']; + // Remove the default value from the valid options. + unset( $valid[ $field_def['default_value'] ] ); + $valid = array_keys( $valid ); + + $query[] = $wpdb->prepare( + "( meta_key = %s AND meta_value NOT IN ( '" . implode( "','", esc_sql( $valid ) ) . "' ) )", + self::$meta_prefix . $key + ); + unset( $valid ); + } + elseif ( is_string( $field_def['default_value'] ) && $field_def['default_value'] !== '' ) { + $query[] = $wpdb->prepare( + '( meta_key = %s AND meta_value = %s )', + self::$meta_prefix . $key, + $field_def['default_value'] + ); + } + else { + $query[] = $wpdb->prepare( + "( meta_key = %s AND meta_value = '' )", + self::$meta_prefix . $key + ); + } + } + } + unset( $subset, $field_group, $key, $field_def ); + + $query = "SELECT meta_id FROM {$wpdb->postmeta} WHERE " . implode( ' OR ', $query ) . ';'; + $meta_ids = $wpdb->get_col( $query ); + + if ( is_array( $meta_ids ) && $meta_ids !== array() ) { + // WP native action. + do_action( 'delete_post_meta', $meta_ids, null, null, null ); + + $query = "DELETE FROM {$wpdb->postmeta} WHERE meta_id IN( " . implode( ',', $meta_ids ) . ' )'; + $count = $wpdb->query( $query ); + + if ( $count ) { + foreach ( $meta_ids as $object_id ) { + wp_cache_delete( $object_id, 'post_meta' ); + } + + // WP native action. + do_action( 'deleted_post_meta', $meta_ids, null, null, null ); + } + } + unset( $query, $meta_ids, $count, $object_id ); + + + /** + * Deal with the multiselect (meta-robots-adv) field + * + * Removes invalid option combinations, such as 'none,noarchive' + * + * Default values have already been removed, so we should have a small result set and + * (hopefully) even smaller set of invalid results. + */ + $query = $wpdb->prepare( + "SELECT meta_id, meta_value FROM {$wpdb->postmeta} WHERE meta_key = %s", + self::$meta_prefix . 'meta-robots-adv' + ); + $oldies = $wpdb->get_results( $query ); + + if ( is_array( $oldies ) && $oldies !== array() ) { + foreach ( $oldies as $old ) { + $clean = self::validate_meta_robots_adv( $old->meta_value ); + + if ( $clean !== $old->meta_value ) { + if ( $clean !== self::$meta_fields['advanced']['meta-robots-adv']['default_value'] ) { + update_metadata_by_mid( 'post', $old->meta_id, $clean ); + } + else { + delete_metadata_by_mid( 'post', $old->meta_id ); + } + } + } + } + unset( $query, $oldies, $old, $clean ); + + do_action( 'wpseo_meta_clean_up' ); + } + + + /** + * Recursively merge a variable number of arrays, using the left array as base, + * giving priority to the right array. + * + * Difference with native array_merge_recursive(): + * array_merge_recursive converts values with duplicate keys to arrays rather than + * overwriting the value in the first array with the duplicate value in the second array. + * + * array_merge_recursive_distinct does not change the data types of the values in the arrays. + * Matching keys' values in the second array overwrite those in the first array, as is the + * case with array_merge. + * + * Freely based on information found on http://www.php.net/manual/en/function.array-merge-recursive.php + * + * @internal Should be moved to a general utility class + * + * @return array + */ + public static function array_merge_recursive_distinct() { + + $arrays = func_get_args(); + if ( count( $arrays ) < 2 ) { + if ( $arrays === array() ) { + return array(); + } + else { + return $arrays[0]; + } + } + + $merged = array_shift( $arrays ); + + foreach ( $arrays as $array ) { + foreach ( $array as $key => $value ) { + if ( is_array( $value ) && ( isset( $merged[ $key ] ) && is_array( $merged[ $key ] ) ) ) { + $merged[ $key ] = self::array_merge_recursive_distinct( $merged[ $key ], $value ); + } + else { + $merged[ $key ] = $value; + } + } + unset( $key, $value ); + } + + return $merged; + } + + /** + * Get a value from $_POST for a given key + * Returns the $_POST value if exists, returns an empty string if key does not exist + * + * @static + * + * @param string $key Key of the value to get from $_POST. + * + * @return string Returns $_POST value, which will be a string the majority of the time + * Will return empty string if key does not exists in $_POST + */ + public static function get_post_value( $key ) { + return ( array_key_exists( $key, $_POST ) ) ? $_POST[ $key ] : ''; + } + + /** + * Counts the total of all the keywords being used for posts except the given one + * + * @param string $keyword The keyword to be counted. + * @param integer $post_id The is of the post to which the keyword belongs. + * + * @return array + */ + public static function keyword_usage( $keyword, $post_id ) { + + if ( empty( $keyword ) ) { + return array(); + } + + $get_posts = new WP_Query( + array( + 'meta_key' => '_yoast_wpseo_focuskw', + 'meta_value' => $keyword, + 'post__not_in' => array( $post_id ), + 'fields' => 'ids', + 'post_type' => 'any', + + /* + * We only need to return zero, one or two results: + * - Zero: keyword hasn't been used before + * - One: Keyword has been used once before + * - Two or more: Keyword has been used twice before + */ + 'posts_per_page' => 2, + ) + ); + + return $get_posts->posts; + } +} /* End of class */ diff --git a/wp-content/plugins/wordpress-seo/inc/class-wpseo-primary-term.php b/wp-content/plugins/wordpress-seo/inc/class-wpseo-primary-term.php new file mode 100644 index 0000000..24b46c2 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/class-wpseo-primary-term.php @@ -0,0 +1,74 @@ +taxonomy_name = $taxonomy_name; + $this->post_ID = $post_id; + } + + /** + * Returns the primary term ID + * + * @return int|bool + */ + public function get_primary_term() { + $primary_term = get_post_meta( $this->post_ID, WPSEO_Meta::$meta_prefix . 'primary_' . $this->taxonomy_name, true ); + + $terms = $this->get_terms(); + + if ( ! in_array( $primary_term, wp_list_pluck( $terms, 'term_id' ) ) ) { + $primary_term = false; + } + + $primary_term = (int) $primary_term; + return ( $primary_term ) ? ( $primary_term ) : false; + } + + /** + * Sets the new primary term ID + * + * @param int $new_primary_term New primary term ID. + */ + public function set_primary_term( $new_primary_term ) { + update_post_meta( $this->post_ID, WPSEO_Meta::$meta_prefix . 'primary_' . $this->taxonomy_name, $new_primary_term ); + } + + /** + * Get the terms for the current post ID. + * When $terms is not an array, set $terms to an array. + * + * @return array + */ + protected function get_terms() { + $terms = get_the_terms( $this->post_ID, $this->taxonomy_name ); + + if ( ! is_array( $terms ) ) { + $terms = array(); + } + + return $terms; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/class-wpseo-rank.php b/wp-content/plugins/wordpress-seo/inc/class-wpseo-rank.php new file mode 100644 index 0000000..99adb5e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/class-wpseo-rank.php @@ -0,0 +1,192 @@ + array( + 'start' => 0, + 'end' => 0, + ), + self::BAD => array( + 'start' => 1, + 'end' => 40, + ), + self::OK => array( + 'start' => 41, + 'end' => 70, + ), + self::GOOD => array( + 'start' => 71, + 'end' => 100, + ), + ); + + /** + * @var int + */ + protected $rank; + + /** + * @param int $rank The actual rank. + */ + public function __construct( $rank ) { + if ( ! in_array( $rank, self::$ranks ) ) { + $rank = self::BAD; + } + + $this->rank = $rank; + } + + /** + * Returns the saved rank for this rank. + * + * @return string + */ + public function get_rank() { + return $this->rank; + } + + /** + * Returns a CSS class for this rank + * + * @return string + */ + public function get_css_class() { + $labels = array( + self::NO_FOCUS => 'na', + self::NO_INDEX => 'noindex', + self::BAD => 'bad', + self::OK => 'ok', + self::GOOD => 'good', + ); + + return $labels[ $this->rank ]; + } + + /** + * Returns a label for this rank + * + * @return string + */ + public function get_label() { + $labels = array( + self::NO_FOCUS => __( 'Not available', 'wordpress-seo' ), + self::NO_INDEX => __( 'No index', 'wordpress-seo' ), + self::BAD => __( 'Bad', 'wordpress-seo' ), + self::OK => __( 'OK', 'wordpress-seo' ), + self::GOOD => __( 'Good', 'wordpress-seo' ), + ); + + return $labels[ $this->rank ]; + } + + /** + * Returns a label for use in a drop down + * + * @return mixed + */ + public function get_drop_down_label() { + $labels = array( + self::NO_FOCUS => __( 'SEO: No Focus Keyword', 'wordpress-seo' ), + self::BAD => __( 'SEO: Bad', 'wordpress-seo' ), + self::OK => __( 'SEO: OK', 'wordpress-seo' ), + self::GOOD => __( 'SEO: Good', 'wordpress-seo' ), + self::NO_INDEX => __( 'SEO: Post Noindexed', 'wordpress-seo' ), + ); + + return $labels[ $this->rank ]; + } + + /** + * @return int The starting score for this rank. + */ + public function get_starting_score() { + // No index does not have a starting score. + if ( self::NO_INDEX === $this->rank ) { + return -1; + } + + return self::$ranges[ $this->rank ]['start']; + } + + /** + * @return int The end score for this rank. + */ + public function get_end_score() { + // No index does not have an end score. + if ( self::NO_INDEX === $this->rank ) { + return -1; + } + + return self::$ranges[ $this->rank ]['end']; + } + + /** + * Returns a rank for a specific numeric score + * + * @param int $score The score to determine a rank for. + * + * @return self + */ + public static function from_numeric_score( $score ) { + // Set up the default value. + $rank = new self( self::BAD ); + + foreach ( self::$ranges as $rank_index => $range ) { + if ( $range['start'] <= $score && $score <= $range['end'] ) { + $rank = new self( $rank_index ); + break; + } + } + + return $rank; + } + + /** + * Returns a list of all possible SEO Ranks + * + * @return WPSEO_Rank[] + */ + public static function get_all_ranks() { + return array_map( array( 'WPSEO_Rank', 'create_rank' ), self::$ranks ); + } + + /** + * Converts a numeric rank into a WPSEO_Rank object, for use in functional array_* functions + * + * @param string $rank SEO Rank. + * + * @return WPSEO_Rank + */ + private static function create_rank( $rank ) { + return new self( $rank ); + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/class-wpseo-replace-vars.php b/wp-content/plugins/wordpress-seo/inc/class-wpseo-replace-vars.php new file mode 100644 index 0000000..3ea367c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/class-wpseo-replace-vars.php @@ -0,0 +1,1215 @@ + '', + 'name' => '', + 'post_author' => '', + 'post_content' => '', + 'post_date' => '', + 'post_excerpt' => '', + 'post_modified' => '', + 'post_title' => '', + 'taxonomy' => '', + 'term_id' => '', + 'term404' => '', + ); + + /** + * @var object Current post/page/cpt information + */ + protected $args; + + /** + * @var array Help texts for use in WPSEO -> Titles and Meta's help tabs + */ + protected static $help_texts = array(); + + /** + * @var array Register of additional variable replacements registered by other plugins/themes + */ + protected static $external_replacements = array(); + + + /** + * Constructor + * + * @return \WPSEO_Replace_Vars + */ + public function __construct() { + } + + + /** + * Setup the help texts and external replacements as statics so they will be available to all instances + */ + public static function setup_statics_once() { + if ( self::$help_texts === array() ) { + self::set_basic_help_texts(); + self::set_advanced_help_texts(); + } + + if ( self::$external_replacements === array() ) { + /** + * Action: 'wpseo_register_extra_replacements' - Allows for registration of additional + * variables to replace + */ + do_action( 'wpseo_register_extra_replacements' ); + } + } + + + /** + * Register new replacement %%variables%% + * For use by other plugins/themes to register extra variables + * + * @see wpseo_register_var_replacement() for a usage example + * + * @param string $var The name of the variable to replace, i.e. '%%var%%' + * - the surrounding %% are optional. + * @param mixed $replace_function Function or method to call to retrieve the replacement value for the variable + * Uses the same format as add_filter/add_action function parameter and + * should *return* the replacement value. DON'T echo it. + * @param string $type Type of variable: 'basic' or 'advanced', defaults to 'advanced'. + * @param string $help_text Help text to be added to the help tab for this variable. + * + * @return bool Whether the replacement function was succesfully registered + */ + public static function register_replacement( $var, $replace_function, $type = 'advanced', $help_text = '' ) { + $success = false; + + if ( is_string( $var ) && $var !== '' ) { + $var = self::remove_var_delimiter( $var ); + + if ( preg_match( '`^[A-Z0-9_-]+$`i', $var ) === false ) { + trigger_error( __( 'A replacement variable can only contain alphanumeric characters, an underscore or a dash. Try renaming your variable.', 'wordpress-seo' ), E_USER_WARNING ); + } + elseif ( strpos( $var, 'cf_' ) === 0 || strpos( $var, 'ct_' ) === 0 ) { + trigger_error( __( 'A replacement variable can not start with "%%cf_" or "%%ct_" as these are reserved for the WPSEO standard variable variables for custom fields and custom taxonomies. Try making your variable name unique.', 'wordpress-seo' ), E_USER_WARNING ); + } + elseif ( ! method_exists( __CLASS__, 'retrieve_' . $var ) ) { + if ( ! isset( self::$external_replacements[ $var ] ) ) { + self::$external_replacements[ $var ] = $replace_function; + self::register_help_text( $type, $var, $help_text ); + $success = true; + } + else { + trigger_error( __( 'A replacement variable with the same name has already been registered. Try making your variable name more unique.', 'wordpress-seo' ), E_USER_WARNING ); + } + } + else { + trigger_error( __( 'You cannot overrule a WPSEO standard variable replacement by registering a variable with the same name. Use the "wpseo_replacements" filter instead to adjust the replacement value.', 'wordpress-seo' ), E_USER_WARNING ); + } + } + + return $success; + } + + + /** + * Replace `%%variable_placeholders%%` with their real value based on the current requested page/post/cpt/etc + * + * @param string $string the string to replace the variables in. + * @param array $args the object some of the replacement values might come from, + * could be a post, taxonomy or term. + * @param array $omit variables that should not be replaced by this function. + * + * @return string + */ + public function replace( $string, $args, $omit = array() ) { + + $string = strip_tags( $string ); + + // Let's see if we can bail super early. + if ( strpos( $string, '%%' ) === false ) { + return WPSEO_Utils::standardize_whitespace( $string ); + } + + $args = (array) $args; + if ( isset( $args['post_content'] ) && ! empty( $args['post_content'] ) ) { + $args['post_content'] = WPSEO_Utils::strip_shortcode( $args['post_content'] ); + } + if ( isset( $args['post_excerpt'] ) && ! empty( $args['post_excerpt'] ) ) { + $args['post_excerpt'] = WPSEO_Utils::strip_shortcode( $args['post_excerpt'] ); + } + $this->args = (object) wp_parse_args( $args, $this->defaults ); + + // Clean $omit array. + if ( is_array( $omit ) && $omit !== array() ) { + $omit = array_map( array( __CLASS__, 'remove_var_delimiter' ), $omit ); + } + + $replacements = array(); + if ( preg_match_all( '`%%([^%]+(%%single)?)%%?`iu', $string, $matches ) ) { + $replacements = $this->set_up_replacements( $matches, $omit ); + } + + /** + * Filter: 'wpseo_replacements' - Allow customization of the replacements before they are applied + * + * @api array $replacements The replacements + */ + $replacements = apply_filters( 'wpseo_replacements', $replacements ); + + // Do the actual replacements. + if ( is_array( $replacements ) && $replacements !== array() ) { + $string = str_replace( array_keys( $replacements ), array_values( $replacements ), $string ); + } + + /** + * Filter: 'wpseo_replacements_final' - Allow overruling of whether or not to remove placeholders + * which didn't yield a replacement + * + * @example add_filter( 'wpseo_replacements_final', '__return_false' ); + * + * @api bool $final + */ + if ( apply_filters( 'wpseo_replacements_final', true ) === true && ( isset( $matches[1] ) && is_array( $matches[1] ) ) ) { + // Remove non-replaced variables. + $remove = array_diff( $matches[1], $omit ); // Make sure the $omit variables do not get removed. + $remove = array_map( array( __CLASS__, 'add_var_delimiter' ), $remove ); + $string = str_replace( $remove, '', $string ); + } + + // Undouble separators which have nothing between them, i.e. where a non-replaced variable was removed. + if ( isset( $replacements['%%sep%%'] ) && ( is_string( $replacements['%%sep%%'] ) && $replacements['%%sep%%'] !== '' ) ) { + $q_sep = preg_quote( $replacements['%%sep%%'], '`' ); + $string = preg_replace( '`' . $q_sep . '(?:\s*' . $q_sep . ')*`u', $replacements['%%sep%%'], $string ); + } + + // Remove superfluous whitespace. + $string = WPSEO_Utils::standardize_whitespace( $string ); + + return trim( $string ); + } + + + /** + * Retrieve the replacements for the variables found. + * + * @param array $matches variables found in the original string - regex result. + * @param array $omit variables that should not be replaced by this function. + * + * @return array retrieved replacements - this might be a smaller array as some variables + * may not yield a replacement in certain contexts. + */ + private function set_up_replacements( $matches, $omit ) { + + $replacements = array(); + + // @todo -> figure out a way to deal with external functions starting with cf_/ct_. + foreach ( $matches[1] as $k => $var ) { + + // Don't set up replacements which should be omitted. + if ( in_array( $var, $omit, true ) ) { + continue; + } + + // Deal with variable variable names first. + if ( strpos( $var, 'cf_' ) === 0 ) { + $replacement = $this->retrieve_cf_custom_field_name( $var ); + } + elseif ( strpos( $var, 'ct_desc_' ) === 0 ) { + $replacement = $this->retrieve_ct_desc_custom_tax_name( $var ); + } + elseif ( strpos( $var, 'ct_' ) === 0 ) { + $single = ( isset( $matches[2][ $k ] ) && $matches[2][ $k ] !== '' ) ? true : false; + $replacement = $this->retrieve_ct_custom_tax_name( $var, $single ); + } // Deal with non-variable variable names. + elseif ( method_exists( $this, 'retrieve_' . $var ) ) { + $method_name = 'retrieve_' . $var; + $replacement = $this->$method_name(); + } // Deal with externally defined variable names. + elseif ( isset( self::$external_replacements[ $var ] ) && ! is_null( self::$external_replacements[ $var ] ) ) { + $replacement = call_user_func( self::$external_replacements[ $var ], $var, $this->args ); + } + + // Replacement retrievals can return null if no replacement can be determined, root those outs. + if ( isset( $replacement ) ) { + $var = self::add_var_delimiter( $var ); + $replacements[ $var ] = $replacement; + } + unset( $replacement, $single, $method_name ); + } + + return $replacements; + } + + + + /* *********************** BASIC VARIABLES ************************** */ + + /** + * Retrieve the post/cpt categories (comma separated) for use as replacement string. + * + * @return string|null + */ + private function retrieve_category() { + $replacement = null; + + if ( ! empty( $this->args->ID ) ) { + $cat = $this->get_terms( $this->args->ID, 'category' ); + if ( $cat !== '' ) { + $replacement = $cat; + } + } + + if ( ( ! isset( $replacement ) || $replacement === '' ) && ( isset( $this->args->cat_name ) && ! empty( $this->args->cat_name ) ) ) { + $replacement = $this->args->cat_name; + } + + return $replacement; + } + + /** + * Retrieve the category description for use as replacement string. + * + * @return string|null + */ + private function retrieve_category_description() { + return $this->retrieve_term_description(); + } + + /** + * Retrieve the date of the post/page/cpt for use as replacement string. + * + * @return string|null + */ + private function retrieve_date() { + $replacement = null; + + if ( $this->args->post_date !== '' ) { + $replacement = mysql2date( get_option( 'date_format' ), $this->args->post_date, true ); + } + else { + if ( get_query_var( 'day' ) && get_query_var( 'day' ) !== '' ) { + $replacement = get_the_date(); + } + else { + if ( single_month_title( ' ', false ) && single_month_title( ' ', false ) !== '' ) { + $replacement = single_month_title( ' ', false ); + } + elseif ( get_query_var( 'year' ) !== '' ) { + $replacement = get_query_var( 'year' ); + } + } + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt excerpt for use as replacement string. + * The excerpt will be auto-generated if it does not exist. + * + * @return string|null + */ + private function retrieve_excerpt() { + $replacement = null; + + if ( ! empty( $this->args->ID ) ) { + if ( $this->args->post_excerpt !== '' ) { + $replacement = strip_tags( $this->args->post_excerpt ); + } + elseif ( $this->args->post_content !== '' ) { + $replacement = wp_html_excerpt( strip_shortcodes( $this->args->post_content ), 155 ); + } + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt excerpt for use as replacement string (without auto-generation). + * + * @return string|null + */ + private function retrieve_excerpt_only() { + $replacement = null; + + if ( ! empty( $this->args->ID ) && $this->args->post_excerpt !== '' ) { + $replacement = strip_tags( $this->args->post_excerpt ); + } + + return $replacement; + } + + /** + * Retrieve the title of the parent page of the current page/cpt for use as replacement string. + * Only applicable for hierarchical post types. + * + * @todo - check: shouldn't this use $this->args as well ? + * + * @return string|null + */ + private function retrieve_parent_title() { + $replacement = null; + + if ( ! isset( $replacement ) && ( ( is_singular() || is_admin() ) && isset( $GLOBALS['post'] ) ) ) { + if ( isset( $GLOBALS['post']->post_parent ) && 0 !== $GLOBALS['post']->post_parent ) { + $replacement = get_the_title( $GLOBALS['post']->post_parent ); + } + } + + return $replacement; + } + + /** + * Retrieve the current search phrase for use as replacement string. + * + * @return string|null + */ + private function retrieve_searchphrase() { + $replacement = null; + + if ( ! isset( $replacement ) ) { + $search = get_query_var( 's' ); + if ( $search !== '' ) { + $replacement = esc_html( $search ); + } + } + + return $replacement; + } + + /** + * Retrieve the separator for use as replacement string. + * + * @return string + */ + private function retrieve_sep() { + return WPSEO_Utils::get_title_separator(); + } + + /** + * Retrieve the site's tag line / description for use as replacement string. + * + * @return string|null + */ + private function retrieve_sitedesc() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $description = trim( strip_tags( get_bloginfo( 'description' ) ) ); + if ( $description !== '' ) { + $replacement = $description; + } + } + + return $replacement; + } + + + /** + * Retrieve the site's name for use as replacement string. + * + * @return string|null + */ + private function retrieve_sitename() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $sitename = WPSEO_Utils::get_site_name(); + if ( $sitename !== '' ) { + $replacement = $sitename; + } + } + + return $replacement; + } + + /** + * Retrieve the current tag/tags for use as replacement string. + * + * @return string|null + */ + private function retrieve_tag() { + $replacement = null; + + if ( isset( $this->args->ID ) ) { + $tags = $this->get_terms( $this->args->ID, 'post_tag' ); + if ( $tags !== '' ) { + $replacement = $tags; + } + } + + return $replacement; + } + + /** + * Retrieve the tag description for use as replacement string. + * + * @return string|null + */ + private function retrieve_tag_description() { + return $this->retrieve_term_description(); + } + + /** + * Retrieve the term description for use as replacement string. + * + * @return string|null + */ + private function retrieve_term_description() { + $replacement = null; + + if ( isset( $this->args->term_id ) && ! empty( $this->args->taxonomy ) ) { + $term_desc = get_term_field( 'description', $this->args->term_id, $this->args->taxonomy ); + if ( $term_desc !== '' ) { + $replacement = trim( strip_tags( $term_desc ) ); + } + } + + return $replacement; + } + + /** + * Retrieve the term name for use as replacement string. + * + * @return string|null + */ + private function retrieve_term_title() { + $replacement = null; + + if ( ! empty( $this->args->taxonomy ) && ! empty( $this->args->name ) ) { + $replacement = $this->args->name; + } + + return $replacement; + } + + /** + * Retrieve the title of the post/page/cpt for use as replacement string. + * + * @return string|null + */ + private function retrieve_title() { + $replacement = null; + + if ( is_string( $this->args->post_title ) && $this->args->post_title !== '' ) { + $replacement = stripslashes( $this->args->post_title ); + } + + return $replacement; + } + + /** + * Retrieve primary category for use as replacement string. + * + * @return bool|int|null + */ + private function retrieve_primary_category() { + $primary_category = null; + + if ( ! empty( $this->args->ID ) ) { + $wpseo_primary_category = new WPSEO_Primary_Term( 'category', $this->args->ID ); + + $term_id = $wpseo_primary_category->get_primary_term(); + $term = get_term( $term_id ); + + if ( ! is_wp_error( $term ) && ! empty( $term ) ) { + $primary_category = $term->name; + } + } + + return $primary_category; + } + + + /* *********************** ADVANCED VARIABLES ************************** */ + + /** + * Determine the page numbering of the current post/page/cpt + * + * @param string $request 'nr'|'max' - whether to return the page number or the max number of pages. + * + * @return int|null + */ + private function determine_pagenumbering( $request = 'nr' ) { + global $wp_query, $post; + $max_num_pages = null; + $page_number = null; + + $max_num_pages = 1; + + if ( ! is_singular() ) { + $page_number = get_query_var( 'paged' ); + if ( $page_number === 0 || $page_number === '' ) { + $page_number = 1; + } + + if ( isset( $wp_query->max_num_pages ) && ( $wp_query->max_num_pages != '' && $wp_query->max_num_pages != 0 ) ) { + $max_num_pages = $wp_query->max_num_pages; + } + } + else { + $page_number = get_query_var( 'page' ); + if ( $page_number === 0 || $page_number === '' ) { + $page_number = 1; + } + + if ( isset( $post->post_content ) ) { + $max_num_pages = ( substr_count( $post->post_content, '' ) + 1 ); + } + } + + $return = null; + + switch ( $request ) { + case 'nr': + $return = $page_number; + break; + case 'max': + $return = $max_num_pages; + break; + } + + return $return; + } + + + /** + * Determine the post type names for the current post/page/cpt + * + * @param string $request 'single'|'plural' - whether to return the single or plural form. + * + * @return string|null + */ + private function determine_pt_names( $request = 'single' ) { + global $wp_query; + $pt_single = null; + $pt_plural = null; + + if ( isset( $wp_query->query_vars['post_type'] ) && ( ( is_string( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] !== '' ) || ( is_array( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] !== array() ) ) ) { + $post_type = $wp_query->query_vars['post_type']; + } + else { + // Make it work in preview mode. + $post_type = $wp_query->get_queried_object()->post_type; + } + + if ( is_array( $post_type ) ) { + $post_type = reset( $post_type ); + } + + if ( $post_type !== '' ) { + $pt = get_post_type_object( $post_type ); + $pt_plural = $pt_single = $pt->name; + if ( isset( $pt->labels->singular_name ) ) { + $pt_single = $pt->labels->singular_name; + } + if ( isset( $pt->labels->name ) ) { + $pt_plural = $pt->labels->name; + } + } + + $return = null; + + switch ( $request ) { + case 'single': + $return = $pt_single; + break; + case 'plural': + $return = $pt_plural; + break; + } + + return $return; + } + + /** + * Retrieve the attachment caption for use as replacement string. + * + * @return string|null + */ + private function retrieve_caption() { + return $this->retrieve_excerpt_only(); + } + + + /** + * Retrieve a post/page/cpt's custom field value for use as replacement string + * + * @param string $var The complete variable to replace which includes the name of + * the custom field which value is to be retrieved. + * + * @return string|null + */ + private function retrieve_cf_custom_field_name( $var ) { + global $post; + $replacement = null; + + if ( is_string( $var ) && $var !== '' ) { + $field = substr( $var, 3 ); + if ( ( is_singular() || is_admin() ) && ( is_object( $post ) && isset( $post->ID ) ) ) { + $name = get_post_meta( $post->ID, $field, true ); + if ( $name !== '' ) { + $replacement = $name; + } + } + } + + return $replacement; + } + + + /** + * Retrieve a post/page/cpt's custom taxonomies for use as replacement string + * + * @param string $var The complete variable to replace which includes the name of + * the custom taxonomy which value(s) is to be retrieved. + * @param bool $single Whether to retrieve only the first or all values for the taxonomy. + * + * @return string|null + */ + private function retrieve_ct_custom_tax_name( $var, $single = false ) { + $replacement = null; + + if ( ( is_string( $var ) && $var !== '' ) && ! empty( $this->args->ID ) ) { + $tax = substr( $var, 3 ); + $name = $this->get_terms( $this->args->ID, $tax, $single ); + if ( $name !== '' ) { + $replacement = $name; + } + } + + return $replacement; + } + + + /** + * Retrieve a post/page/cpt's custom taxonomies description for use as replacement string + * + * @param string $var The complete variable to replace which includes the name of + * the custom taxonomy which description is to be retrieved. + * + * @return string|null + */ + private function retrieve_ct_desc_custom_tax_name( $var ) { + global $post; + $replacement = null; + + if ( is_string( $var ) && $var !== '' ) { + $tax = substr( $var, 8 ); + if ( is_object( $post ) && isset( $post->ID ) ) { + $terms = get_the_terms( $post->ID, $tax ); + if ( is_array( $terms ) && $terms !== array() ) { + $term = current( $terms ); + $term_desc = get_term_field( 'description', $term->term_id, $tax ); + if ( $term_desc !== '' ) { + $replacement = trim( strip_tags( $term_desc ) ); + } + } + } + } + + return $replacement; + } + + /** + * Retrieve the current date for use as replacement string. + * + * @return string + */ + private function retrieve_currentdate() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $replacement = date_i18n( get_option( 'date_format' ) ); + } + + return $replacement; + } + + /** + * Retrieve the current day for use as replacement string. + * + * @return string + */ + private function retrieve_currentday() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $replacement = date_i18n( 'j' ); + } + + return $replacement; + } + + /** + * Retrieve the current month for use as replacement string. + * + * @return string + */ + private function retrieve_currentmonth() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $replacement = date_i18n( 'F' ); + } + + return $replacement; + } + + /** + * Retrieve the current time for use as replacement string. + * + * @return string + */ + private function retrieve_currenttime() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $replacement = date_i18n( get_option( 'time_format' ) ); + } + + return $replacement; + } + + /** + * Retrieve the current year for use as replacement string. + * + * @return string + */ + private function retrieve_currentyear() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $replacement = date_i18n( 'Y' ); + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt's focus keyword for use as replacement string. + * + * @return string|null + */ + private function retrieve_focuskw() { + $replacement = null; + + if ( ! empty( $this->args->ID ) ) { + $focus_kw = WPSEO_Meta::get_value( 'focuskw', $this->args->ID ); + if ( $focus_kw !== '' ) { + $replacement = $focus_kw; + } + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt ID for use as replacement string. + * + * @return string|null + */ + private function retrieve_id() { + $replacement = null; + + if ( ! empty( $this->args->ID ) ) { + $replacement = $this->args->ID; + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt modified time for use as replacement string. + * + * @return string|null + */ + private function retrieve_modified() { + $replacement = null; + + if ( ! empty( $this->args->post_modified ) ) { + $replacement = mysql2date( get_option( 'date_format' ), $this->args->post_modified, true ); + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt author's "nice name" for use as replacement string. + * + * @return string|null + */ + private function retrieve_name() { + $replacement = null; + + $user_id = $this->retrieve_userid(); + $name = get_the_author_meta( 'display_name', $user_id ); + if ( $name !== '' ) { + $replacement = $name; + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt author's users description for use as a replacement string. + * + * @return null|string + */ + private function retrieve_user_description() { + $replacement = null; + + $user_id = $this->retrieve_userid(); + $description = get_the_author_meta( 'description', $user_id ); + if ( $description != '' ) { + $replacement = $description; + } + + return $replacement; + } + + /** + * Retrieve the current page number with context (i.e. 'page 2 of 4') for use as replacement string. + * + * @return string + */ + private function retrieve_page() { + $replacement = null; + + $max = $this->determine_pagenumbering( 'max' ); + $nr = $this->determine_pagenumbering( 'nr' ); + $sep = $this->retrieve_sep(); + + if ( $max > 1 && $nr > 1 ) { + $replacement = sprintf( $sep . ' ' . __( 'Page %1$d of %2$d', 'wordpress-seo' ), $nr, $max ); + } + + return $replacement; + } + + /** + * Retrieve the current page number for use as replacement string. + * + * @return string|null + */ + private function retrieve_pagenumber() { + $replacement = null; + + $nr = $this->determine_pagenumbering( 'nr' ); + if ( isset( $nr ) && $nr > 0 ) { + $replacement = (string) $nr; + } + + return $replacement; + } + + /** + * Retrieve the current page total for use as replacement string. + * + * @return string|null + */ + private function retrieve_pagetotal() { + $replacement = null; + + $max = $this->determine_pagenumbering( 'max' ); + if ( isset( $max ) && $max > 0 ) { + $replacement = (string) $max; + } + + return $replacement; + } + + /** + * Retrieve the post type plural label for use as replacement string. + * + * @return string|null + */ + private function retrieve_pt_plural() { + $replacement = null; + + $name = $this->determine_pt_names( 'plural' ); + if ( isset( $name ) && $name !== '' ) { + $replacement = $name; + } + + return $replacement; + } + + /** + * Retrieve the post type single label for use as replacement string. + * + * @return string|null + */ + private function retrieve_pt_single() { + $replacement = null; + + $name = $this->determine_pt_names( 'single' ); + if ( isset( $name ) && $name !== '' ) { + $replacement = $name; + } + + return $replacement; + } + + /** + * Retrieve the slug which caused the 404 for use as replacement string. + * + * @return string|null + */ + private function retrieve_term404() { + $replacement = null; + + if ( $this->args->term404 !== '' ) { + $replacement = sanitize_text_field( str_replace( '-', ' ', $this->args->term404 ) ); + } + else { + $error_request = get_query_var( 'pagename' ); + if ( $error_request !== '' ) { + $replacement = sanitize_text_field( str_replace( '-', ' ', $error_request ) ); + } + else { + $error_request = get_query_var( 'name' ); + if ( $error_request !== '' ) { + $replacement = sanitize_text_field( str_replace( '-', ' ', $error_request ) ); + } + } + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt author's user id for use as replacement string. + * + * @return string + */ + private function retrieve_userid() { + $replacement = ! empty( $this->args->post_author ) ? $this->args->post_author : get_query_var( 'author' ); + + return $replacement; + } + + + + /* *********************** HELP TEXT RELATED ************************** */ + + /** + * Create a variable help text table + * + * @param string $type Either 'basic' or 'advanced'. + * + * @return string Help text table + */ + private static function create_variable_help_table( $type ) { + if ( ! in_array( $type, array( 'basic', 'advanced' ), true ) ) { + return ''; + } + + $table = ' + '; + + foreach ( self::$help_texts[ $type ] as $replace => $help_text ) { + $table .= ' + + + + '; + } + + $table .= ' +
    %%' . esc_html( $replace ) . '%%' . $help_text . '
    '; + + return $table; + } + + /** + * Create the help text table for the basic variables for use in a help tab + * + * @return string + */ + public static function get_basic_help_texts() { + return self::create_variable_help_table( 'basic' ); + } + + + /** + * Create the help text table for the advanced variables for use in a help tab + * + * @return string + */ + public static function get_advanced_help_texts() { + return self::create_variable_help_table( 'advanced' ); + } + + + /** + * Set the help text for a user/plugin/theme defined extra variable. + * + * @param string $type Type of variable: 'basic' or 'advanced'. + * @param string $replace Variable to replace, i.e. '%%var%%'. + * @param string $help_text The actual help text string. + */ + private static function register_help_text( $type, $replace, $help_text = '' ) { + if ( is_string( $replace ) && $replace !== '' ) { + $replace = self::remove_var_delimiter( $replace ); + + if ( ( is_string( $type ) && in_array( $type, array( + 'basic', + 'advanced', + ), true ) ) && ( $replace !== '' && ! isset( self::$help_texts[ $type ][ $replace ] ) ) + ) { + self::$help_texts[ $type ][ $replace ] = $help_text; + } + } + } + + + /** + * Set/translate the help texts for the WPSEO standard basic variables. + */ + private static function set_basic_help_texts() { + self::$help_texts['basic'] = array( + 'date' => __( 'Replaced with the date of the post/page', 'wordpress-seo' ), + 'title' => __( 'Replaced with the title of the post/page', 'wordpress-seo' ), + 'parent_title' => __( 'Replaced with the title of the parent page of the current page', 'wordpress-seo' ), + 'sitename' => __( 'The site\'s name', 'wordpress-seo' ), + 'sitedesc' => __( 'The site\'s tag line / description', 'wordpress-seo' ), + 'excerpt' => __( 'Replaced with the post/page excerpt (or auto-generated if it does not exist)', 'wordpress-seo' ), + 'excerpt_only' => __( 'Replaced with the post/page excerpt (without auto-generation)', 'wordpress-seo' ), + 'tag' => __( 'Replaced with the current tag/tags', 'wordpress-seo' ), + 'category' => __( 'Replaced with the post categories (comma separated)', 'wordpress-seo' ), + 'primary_category' => __( 'Replaced with the primary category of the post/page', 'wordpress-seo' ), + 'category_description' => __( 'Replaced with the category description', 'wordpress-seo' ), + 'tag_description' => __( 'Replaced with the tag description', 'wordpress-seo' ), + 'term_description' => __( 'Replaced with the term description', 'wordpress-seo' ), + 'term_title' => __( 'Replaced with the term name', 'wordpress-seo' ), + 'searchphrase' => __( 'Replaced with the current search phrase', 'wordpress-seo' ), + 'sep' => sprintf( + /* translators: %s: wp_title() function */ + __( 'The separator defined in your theme\'s %s tag.', 'wordpress-seo' ), + 'wp_title()' + ), + ); + } + + /** + * Set/translate the help texts for the WPSEO standard advanced variables. + */ + private static function set_advanced_help_texts() { + self::$help_texts['advanced'] = array( + 'pt_single' => __( 'Replaced with the post type single label', 'wordpress-seo' ), + 'pt_plural' => __( 'Replaced with the post type plural label', 'wordpress-seo' ), + 'modified' => __( 'Replaced with the post/page modified time', 'wordpress-seo' ), + 'id' => __( 'Replaced with the post/page ID', 'wordpress-seo' ), + 'name' => __( 'Replaced with the post/page author\'s \'nicename\'', 'wordpress-seo' ), + 'user_description' => __( 'Replaced with the post/page author\'s \'Biographical Info\'', 'wordpress-seo' ), + 'userid' => __( 'Replaced with the post/page author\'s userid', 'wordpress-seo' ), + 'currenttime' => __( 'Replaced with the current time', 'wordpress-seo' ), + 'currentdate' => __( 'Replaced with the current date', 'wordpress-seo' ), + 'currentday' => __( 'Replaced with the current day', 'wordpress-seo' ), + 'currentmonth' => __( 'Replaced with the current month', 'wordpress-seo' ), + 'currentyear' => __( 'Replaced with the current year', 'wordpress-seo' ), + 'page' => __( 'Replaced with the current page number with context (i.e. page 2 of 4)', 'wordpress-seo' ), + 'pagetotal' => __( 'Replaced with the current page total', 'wordpress-seo' ), + 'pagenumber' => __( 'Replaced with the current page number', 'wordpress-seo' ), + 'caption' => __( 'Attachment caption', 'wordpress-seo' ), + 'focuskw' => __( 'Replaced with the posts focus keyword', 'wordpress-seo' ), + 'term404' => __( 'Replaced with the slug which caused the 404', 'wordpress-seo' ), + 'cf_' => __( 'Replaced with a posts custom field value', 'wordpress-seo' ), + 'ct_' => __( 'Replaced with a posts custom taxonomies, comma separated.', 'wordpress-seo' ), + 'ct_desc_' => __( 'Replaced with a custom taxonomies description', 'wordpress-seo' ), + ); + } + + + + + /* *********************** GENERAL HELPER METHODS ************************** */ + + /** + * Remove the '%%' delimiters from a variable string + * + * @param string $string Variable string to be cleaned. + * + * @return string + */ + private static function remove_var_delimiter( $string ) { + return trim( $string, '%' ); + } + + /** + * Add the '%%' delimiters to a variable string + * + * @param string $string Variable string to be delimited. + * + * @return string + */ + private static function add_var_delimiter( $string ) { + return '%%' . $string . '%%'; + } + + /** + * Retrieve a post's terms, comma delimited. + * + * @param int $id ID of the post to get the terms for. + * @param string $taxonomy The taxonomy to get the terms for this post from. + * @param bool $return_single If true, return the first term. + * + * @return string either a single term or a comma delimited string of terms. + */ + public function get_terms( $id, $taxonomy, $return_single = false ) { + + $output = ''; + + // If we're on a specific tag, category or taxonomy page, use that. + if ( is_category() || is_tag() || is_tax() ) { + $term = $GLOBALS['wp_query']->get_queried_object(); + $output = $term->name; + } + elseif ( ! empty( $id ) && ! empty( $taxonomy ) ) { + $terms = get_the_terms( $id, $taxonomy ); + if ( is_array( $terms ) && $terms !== array() ) { + foreach ( $terms as $term ) { + if ( $return_single ) { + $output = $term->name; + break; + } + else { + $output .= $term->name . ', '; + } + } + $output = rtrim( trim( $output ), ',' ); + } + } + unset( $terms, $term ); + + /** + * Allows filtering of the terms list used to replace %%category%%, %%tag%% and %%ct_%% variables + * + * @api string $output Comma-delimited string containing the terms + */ + return apply_filters( 'wpseo_terms', $output ); + } +} /* End of class WPSEO_Replace_Vars */ + + +/** + * Setup the class statics when the file is first loaded + */ +WPSEO_Replace_Vars::setup_statics_once(); diff --git a/wp-content/plugins/wordpress-seo/inc/class-wpseo-statistics.php b/wp-content/plugins/wordpress-seo/inc/class-wpseo-statistics.php new file mode 100644 index 0000000..5ebb81d --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/class-wpseo-statistics.php @@ -0,0 +1,138 @@ +get_rank() ) { + $posts = array( + 'meta_query' => array( + 'relation' => 'OR', + array( + 'key' => WPSEO_Meta::$meta_prefix . 'focuskw', + 'value' => 'needs-a-value-anyway', + 'compare' => 'NOT EXISTS', + ) + ), + ); + } + elseif ( WPSEO_Rank::NO_INDEX === $rank->get_rank() ) { + $posts = array( + 'meta_key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', + 'meta_value' => '1', + 'compare' => '=', + ); + } + else { + $posts = array( + 'meta_key' => WPSEO_Meta::$meta_prefix . 'linkdex', + 'meta_value' => array( $rank->get_starting_score(), $rank->get_end_score() ), + 'meta_compare' => 'BETWEEN', + 'meta_type' => 'NUMERIC', + ); + } + + $posts['fields'] = 'ids'; + $posts['post_status'] = 'publish'; + + if ( current_user_can( 'edit_others_posts' ) === false ) { + $posts['author'] = get_current_user_id(); + } + + $posts = new WP_Query( $posts ); + + return $posts->found_posts; + } + + /** + * Returns the amount of posts that have no focus keyword + * + * @deprecated + * + * @return int + */ + public function get_no_focus_post_count() { + _deprecated_function( 'get_no_focus_post_count', 'WPSEO 3.0', 'WPSEO_Statistics::get_post_count' ); + + return $this->get_post_count( new WPSEO_Rank( WPSEO_Rank::NO_FOCUS ) ); + } + + /** + * Returns the amount of posts that have a bad SEO ranking + * + * @deprecated + * + * @return int + */ + public function get_bad_seo_post_count() { + _deprecated_function( 'get_bad_seo_post_count', 'WPSEO 3.0', 'WPSEO_Statistics::get_post_count' ); + + return $this->get_post_count( new WPSEO_Rank( WPSEO_Rank::BAD ) ); + } + + /** + * Returns the amount of posts that have a poor SEO ranking + * + * @deprecated + * + * @return int + */ + public function get_poor_seo_post_count() { + _deprecated_function( 'get_poor_seo_post_count', 'WPSEO 3.0', 'WPSEO_Statistics::get_post_count' ); + + return $this->get_post_count( new WPSEO_Rank( 'poor' ) ); + } + + /** + * Returns the amount of posts that have an ok SEO ranking + * + * @deprecated + * + * @return int + */ + public function get_ok_seo_post_count() { + _deprecated_function( 'get_ok_seo_post_count', 'WPSEO 3.0', 'WPSEO_Statistics::get_post_count' ); + + return $this->get_post_count( new WPSEO_Rank( WPSEO_Rank::OK ) ); + } + + /** + * Returns the amount of posts that have a good SEO ranking + * + * @deprecated + * + * @return int + */ + public function get_good_seo_post_count() { + _deprecated_function( 'get_good_seo_post_count', 'WPSEO 3.0', 'WPSEO_Statistics::get_post_count' ); + + return $this->get_post_count( new WPSEO_Rank( WPSEO_Rank::GOOD ) ); + } + + /** + * Returns the amount of posts that have no SEO ranking + * + * @deprecated + * + * @return int + */ + public function get_no_index_post_count() { + _deprecated_function( 'get_no_index_post_count', 'WPSEO 3.0', 'WPSEO_Statistics::get_post_count' ); + + return $this->get_post_count( new WPSEO_Rank( WPSEO_Rank::NO_INDEX ) ); + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/class-wpseo-utils.php b/wp-content/plugins/wordpress-seo/inc/class-wpseo-utils.php new file mode 100644 index 0000000..04f78a9 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/class-wpseo-utils.php @@ -0,0 +1,969 @@ +get_names(); + + return $roles; + } + + /** + * Standardize whitespace in a string + * + * Replace line breaks, carriage returns, tabs with a space, then remove double spaces. + * + * @param string $string String input to standardize. + * + * @return string + */ + public static function standardize_whitespace( $string ) { + return trim( str_replace( ' ', ' ', str_replace( array( "\t", "\n", "\r", "\f" ), ' ', $string ) ) ); + } + + /** + * First strip out registered and enclosing shortcodes using native WordPress strip_shortcodes function. + * Then strip out the shortcodes with a filthy regex, because people don't properly register their shortcodes. + * + * @static + * + * @param string $text Input string that might contain shortcodes. + * + * @return string $text string without shortcodes + */ + public static function strip_shortcode( $text ) { + return preg_replace( '`\[[^\]]+\]`s', '', strip_shortcodes( $text ) ); + } + + /** + * Recursively trim whitespace round a string value or of string values within an array + * Only trims strings to avoid typecasting a variable (to string) + * + * @static + * + * @param mixed $value Value to trim or array of values to trim. + * + * @return mixed Trimmed value or array of trimmed values + */ + public static function trim_recursive( $value ) { + if ( is_string( $value ) ) { + $value = trim( $value ); + } + elseif ( is_array( $value ) ) { + $value = array_map( array( __CLASS__, 'trim_recursive' ), $value ); + } + + return $value; + } + + /** + * Translates a decimal analysis score into a textual one. + * + * @static + * + * @param int $val The decimal score to translate. + * @param bool $css_value Whether to return the i18n translated score or the CSS class value. + * + * @return string + */ + public static function translate_score( $val, $css_value = true ) { + $seo_rank = WPSEO_Rank::from_numeric_score( $val ); + + if ( $css_value ) { + return $seo_rank->get_css_class(); + } + + return $seo_rank->get_label(); + } + + /** + * Emulate the WP native sanitize_text_field function in a %%variable%% safe way + * + * @see https://core.trac.wordpress.org/browser/trunk/src/wp-includes/formatting.php for the original + * + * Sanitize a string from user input or from the db + * + * check for invalid UTF-8, + * Convert single < characters to entity, + * strip all tags, + * remove line breaks, tabs and extra white space, + * strip octets - BUT DO NOT REMOVE (part of) VARIABLES WHICH WILL BE REPLACED. + * + * @param string $value String value to sanitize. + * + * @return string + */ + public static function sanitize_text_field( $value ) { + $filtered = wp_check_invalid_utf8( $value ); + + if ( strpos( $filtered, '<' ) !== false ) { + $filtered = wp_pre_kses_less_than( $filtered ); + // This will strip extra whitespace for us. + $filtered = wp_strip_all_tags( $filtered, true ); + } + else { + $filtered = trim( preg_replace( '`[\r\n\t ]+`', ' ', $filtered ) ); + } + + $found = false; + while ( preg_match( '`[^%](%[a-f0-9]{2})`i', $filtered, $match ) ) { + $filtered = str_replace( $match[1], '', $filtered ); + $found = true; + } + unset( $match ); + + if ( $found ) { + // Strip out the whitespace that may now exist after removing the octets. + $filtered = trim( preg_replace( '` +`', ' ', $filtered ) ); + } + + /** + * Filter a sanitized text field string. + * + * @since WP 2.9.0 + * + * @param string $filtered The sanitized string. + * @param string $str The string prior to being sanitized. + */ + + return apply_filters( 'sanitize_text_field', $filtered, $value ); + } + + /** + * Sanitize a url for saving to the database + * Not to be confused with the old native WP function + * + * @todo [JRF => whomever] check/improve url verification + * + * @param string $value String URL value to sanitize. + * @param array $allowed_protocols Optional set of allowed protocols. + * + * @return string + */ + public static function sanitize_url( $value, $allowed_protocols = array( 'http', 'https' ) ) { + return esc_url_raw( sanitize_text_field( rawurldecode( $value ) ), $allowed_protocols ); + } + + /** + * Validate a value as boolean + * + * @static + * + * @param mixed $value Value to validate. + * + * @return bool + */ + public static function validate_bool( $value ) { + if ( ! isset( self::$has_filters ) ) { + self::$has_filters = extension_loaded( 'filter' ); + } + + if ( self::$has_filters ) { + return filter_var( $value, FILTER_VALIDATE_BOOLEAN ); + } + else { + return self::emulate_filter_bool( $value ); + } + } + + /** + * Cast a value to bool + * + * @static + * + * @param mixed $value Value to cast. + * + * @return bool + */ + public static function emulate_filter_bool( $value ) { + $true = array( + '1', + 'true', + 'True', + 'TRUE', + 'y', + 'Y', + 'yes', + 'Yes', + 'YES', + 'on', + 'On', + 'ON', + + ); + $false = array( + '0', + 'false', + 'False', + 'FALSE', + 'n', + 'N', + 'no', + 'No', + 'NO', + 'off', + 'Off', + 'OFF', + ); + + if ( is_bool( $value ) ) { + return $value; + } + else if ( is_int( $value ) && ( $value === 0 || $value === 1 ) ) { + return (bool) $value; + } + else if ( ( is_float( $value ) && ! is_nan( $value ) ) && ( $value === (float) 0 || $value === (float) 1 ) ) { + return (bool) $value; + } + else if ( is_string( $value ) ) { + $value = trim( $value ); + if ( in_array( $value, $true, true ) ) { + return true; + } + else if ( in_array( $value, $false, true ) ) { + return false; + } + else { + return false; + } + } + + return false; + } + + /** + * Validate a value as integer + * + * @static + * + * @param mixed $value Value to validate. + * + * @return int|bool int or false in case of failure to convert to int + */ + public static function validate_int( $value ) { + if ( ! isset( self::$has_filters ) ) { + self::$has_filters = extension_loaded( 'filter' ); + } + + if ( self::$has_filters ) { + return filter_var( $value, FILTER_VALIDATE_INT ); + } + else { + return self::emulate_filter_int( $value ); + } + } + + /** + * Cast a value to integer + * + * @static + * + * @param mixed $value Value to cast. + * + * @return int|bool + */ + public static function emulate_filter_int( $value ) { + if ( is_int( $value ) ) { + return $value; + } + else if ( is_float( $value ) ) { + if ( (int) $value == $value && ! is_nan( $value ) ) { + return (int) $value; + } + else { + return false; + } + } + else if ( is_string( $value ) ) { + $value = trim( $value ); + if ( $value === '' ) { + return false; + } + else if ( ctype_digit( $value ) ) { + return (int) $value; + } + else if ( strpos( $value, '-' ) === 0 && ctype_digit( substr( $value, 1 ) ) ) { + return (int) $value; + } + else { + return false; + } + } + + return false; + } + + /** + * Clears the WP or W3TC cache depending on which is used + * + * @static + */ + public static function clear_cache() { + if ( function_exists( 'w3tc_pgcache_flush' ) ) { + w3tc_pgcache_flush(); + } + elseif ( function_exists( 'wp_cache_clear_cache' ) ) { + wp_cache_clear_cache(); + } + } + + /** + * Flush W3TC cache after succesfull update/add of taxonomy meta option + * + * @static + */ + public static function flush_w3tc_cache() { + if ( defined( 'W3TC_DIR' ) && function_exists( 'w3tc_objectcache_flush' ) ) { + w3tc_objectcache_flush(); + } + } + + /** + * Clear rewrite rules + * + * @static + */ + public static function clear_rewrites() { + delete_option( 'rewrite_rules' ); + } + + /** + * Do simple reliable math calculations without the risk of wrong results + * + * @see http://floating-point-gui.de/ + * @see the big red warning on http://php.net/language.types.float.php + * + * In the rare case that the bcmath extension would not be loaded, it will return the normal calculation results + * + * @static + * + * @since 1.5.0 + * + * @param mixed $number1 Scalar (string/int/float/bool). + * @param string $action Calculation action to execute. Valid input: + * '+' or 'add' or 'addition', + * '-' or 'sub' or 'subtract', + * '*' or 'mul' or 'multiply', + * '/' or 'div' or 'divide', + * '%' or 'mod' or 'modulus' + * '=' or 'comp' or 'compare'. + * @param mixed $number2 Scalar (string/int/float/bool). + * @param bool $round Whether or not to round the result. Defaults to false. + * Will be disregarded for a compare operation. + * @param int $decimals Decimals for rounding operation. Defaults to 0. + * @param int $precision Calculation precision. Defaults to 10. + * + * @return mixed Calculation Result or false if either or the numbers isn't scalar or + * an invalid operation was passed + * - for compare the result will always be an integer + * - for all other operations, the result will either be an integer (preferred) + * or a float + */ + public static function calc( $number1, $action, $number2, $round = false, $decimals = 0, $precision = 10 ) { + static $bc; + + if ( ! is_scalar( $number1 ) || ! is_scalar( $number2 ) ) { + return false; + } + + if ( ! isset( $bc ) ) { + $bc = extension_loaded( 'bcmath' ); + } + + if ( $bc ) { + $number1 = number_format( $number1, 10, '.', '' ); + $number2 = number_format( $number2, 10, '.', '' ); + } + + $result = null; + $compare = false; + + switch ( $action ) { + case '+': + case 'add': + case 'addition': + $result = ( $bc ) ? bcadd( $number1, $number2, $precision ) /* string */ : ( $number1 + $number2 ); + break; + + case '-': + case 'sub': + case 'subtract': + $result = ( $bc ) ? bcsub( $number1, $number2, $precision ) /* string */ : ( $number1 - $number2 ); + break; + + case '*': + case 'mul': + case 'multiply': + $result = ( $bc ) ? bcmul( $number1, $number2, $precision ) /* string */ : ( $number1 * $number2 ); + break; + + case '/': + case 'div': + case 'divide': + if ( $bc ) { + $result = bcdiv( $number1, $number2, $precision ); // String, or NULL if right_operand is 0. + } + elseif ( $number2 != 0 ) { + $result = ( $number1 / $number2 ); + } + + if ( ! isset( $result ) ) { + $result = 0; + } + break; + + case '%': + case 'mod': + case 'modulus': + if ( $bc ) { + $result = bcmod( $number1, $number2 ); // String, or NULL if modulus is 0. + } + elseif ( $number2 != 0 ) { + $result = ( $number1 % $number2 ); + } + + if ( ! isset( $result ) ) { + $result = 0; + } + break; + + case '=': + case 'comp': + case 'compare': + $compare = true; + if ( $bc ) { + $result = bccomp( $number1, $number2, $precision ); // Returns int 0, 1 or -1. + } + else { + $result = ( $number1 == $number2 ) ? 0 : ( ( $number1 > $number2 ) ? 1 : - 1 ); + } + break; + } + + if ( isset( $result ) ) { + if ( $compare === false ) { + if ( $round === true ) { + $result = round( floatval( $result ), $decimals ); + if ( $decimals === 0 ) { + $result = (int) $result; + } + } + else { + $result = ( intval( $result ) == $result ) ? intval( $result ) : floatval( $result ); + } + } + + return $result; + } + + return false; + } + + /** + * Trim whitespace and NBSP (Non-breaking space) from string + * + * @param string $string String input to trim. + * + * @return string + */ + public static function trim_nbsp_from_string( $string ) { + $find = array( ' ', chr( 0xC2 ) . chr( 0xA0 ) ); + $string = str_replace( $find, ' ', $string ); + $string = trim( $string ); + + return $string; + } + + /** + * Check if a string is a valid datetime + * + * @param string $datetime String input to check as valid input for DateTime class. + * + * @return bool + */ + public static function is_valid_datetime( $datetime ) { + + if ( substr( $datetime, 0, 1 ) === '-' ) { + return false; + } + + try { + return new DateTime( $datetime ) !== false; + } catch ( Exception $exc ) { + return false; + } + } + + /** + * Format the URL to be sure it is okay for using as a redirect url. + * + * This method will parse the URL and combine them in one string. + * + * @param string $url URL string. + * + * @return mixed + */ + public static function format_url( $url ) { + $parsed_url = wp_parse_url( $url ); + + $formatted_url = ''; + if ( ! empty( $parsed_url['path'] ) ) { + $formatted_url = $parsed_url['path']; + } + + // Prepend a slash if first char != slash. + if ( stripos( $formatted_url, '/' ) !== 0 ) { + $formatted_url = '/' . $formatted_url; + } + + // Append 'query' string if it exists. + if ( isset( $parsed_url['query'] ) && '' != $parsed_url['query'] ) { + $formatted_url .= '?' . $parsed_url['query']; + } + + return apply_filters( 'wpseo_format_admin_url', $formatted_url ); + } + + + /** + * Get plugin name from file + * + * @param string $plugin Plugin path relative to plugins directory. + * + * @return string|bool + */ + public static function get_plugin_name( $plugin ) { + $plugin_details = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); + + if ( $plugin_details['Name'] != '' ) { + return $plugin_details['Name']; + } + + return false; + } + + /** + * Retrieves the sitename. + * + * @return string + */ + public static function get_site_name() { + return trim( strip_tags( get_bloginfo( 'name' ) ) ); + } + + /** + * Retrieves the title separator. + * + * @return string + */ + public static function get_title_separator() { + $replacement = WPSEO_Options::get_default( 'wpseo_titles', 'separator' ); + + // Get the titles option and the separator options. + $titles_options = WPSEO_Options::get_option( 'wpseo_titles' ); + $seperator_options = WPSEO_Option_Titles::get_instance()->get_separator_options(); + + // This should always be set, but just to be sure. + if ( isset( $seperator_options[ $titles_options['separator'] ] ) ) { + // Set the new replacement. + $replacement = $seperator_options[ $titles_options['separator'] ]; + } + + /** + * Filter: 'wpseo_replacements_filter_sep' - Allow customization of the separator character(s) + * + * @api string $replacement The current separator + */ + return apply_filters( 'wpseo_replacements_filter_sep', $replacement ); + } + + /** + * Check if the current opened page is a Yoast SEO page. + * + * @return bool + */ + public static function is_yoast_seo_page() { + static $is_yoast_seo; + + if ( $is_yoast_seo === null ) { + $current_page = filter_input( INPUT_GET, 'page' ); + $is_yoast_seo = ( substr( $current_page, 0, 6 ) === 'wpseo_' ); + } + + return $is_yoast_seo; + } + + /** + * Check if the current opened page belongs to Yoast SEO Free. + * + * @param string $current_page the current page the user is on. + * + * @return bool + */ + public static function is_yoast_seo_free_page( $current_page ) { + $yoast_seo_free_pages = array( + 'wpseo_dashboard', + 'wpseo_titles', + 'wpseo_social', + 'wpseo_xml', + 'wpseo_advanced', + 'wpseo_tools', + 'wpseo_search_console', + 'wpseo_licenses', + ); + + return in_array( $current_page, $yoast_seo_free_pages ); + } + + /** + * Determine if Yoast SEO is in development mode? + * + * Inspired by JetPack (https://github.com/Automattic/jetpack/blob/master/class.jetpack.php#L1383-L1406). + * + * @return bool + */ + public static function is_development_mode() { + $development_mode = false; + + if ( defined( 'WPSEO_DEBUG' ) ) { + $development_mode = WPSEO_DEBUG; + } + elseif ( site_url() && false === strpos( site_url(), '.' ) ) { + $development_mode = true; + } + + /** + * Filter the Yoast SEO development mode. + * + * @since 3.0 + * + * @param bool $development_mode Is Yoast SEOs development mode active. + */ + + return apply_filters( 'yoast_seo_development_mode', $development_mode ); + } + + /** + * Retrieve home URL with proper trailing slash. + * + * @param string $path Path relative to home URL. + * @param string|null $scheme Scheme to apply. + * + * @return string Home URL with optional path, appropriately slashed if not. + */ + public static function home_url( $path = '', $scheme = null ) { + + $home_url = home_url( $path, $scheme ); + + if ( ! empty( $path ) ) { + return $home_url; + } + + $home_path = parse_url( $home_url, PHP_URL_PATH ); + + if ( '/' === $home_path ) { // Home at site root, already slashed. + return $home_url; + } + + if ( is_null( $home_path ) ) { // Home at site root, always slash. + return trailingslashit( $home_url ); + } + + if ( is_string( $home_path ) ) { // Home in subdirectory, slash if permalink structure has slash. + return user_trailingslashit( $home_url ); + } + + return $home_url; + } + + /** + * Returns a base64 URL for the svg for use in the menu + * + * @param bool $base64 Whether or not to return base64'd output. + * + * @return string + */ + public static function get_icon_svg( $base64 = true ) { + $svg = ''; + + if ( $base64 ) { + return 'data:image/svg+xml;base64,' . base64_encode( $svg ); + } + + return $svg; + } + + /** + * Returns the language part of a given locale, defaults to english when the $locale is empty + * + * @param string $locale The locale to get the language of. + * @returns string The language part of the locale. + */ + public static function get_language( $locale ) { + $language = 'en'; + + if ( ! empty( $locale ) && strlen( $locale ) >= 2 ) { + $language = substr( $locale, 0, 2 ); + } + + return $language; + } + + /** + * Returns the user locale for the language to be used in the admin. + * + * WordPress 4.7 introduced the ability for users to specify an Admin language + * different from the language used on the front end. This checks if the feature + * is available and returns the user's language, with a fallback to the site's language. + * Can be removed when support for WordPress 4.6 will be dropped, in favor + * of WordPress get_user_locale() that already fallbacks to the site’s locale. + * + * @returns string The locale. + */ + public static function get_user_locale() { + if ( function_exists( 'get_user_locale' ) ) { + return get_user_locale(); + } + return get_locale(); + } + + /** + * Checks if the WP-REST-API is available. + * + * @since 3.6 + * + * @param string $minimum_version The minimum version the API should be. + * + * @return bool Returns true if the API is available. + */ + public static function is_api_available( $minimum_version = '2.0' ) { + return ( defined( 'REST_API_VERSION' ) + && version_compare( REST_API_VERSION, $minimum_version, '>=' ) ); + } + + /** + * Wrapper for the PHP filter input function. + * + * This is used because stupidly enough, the `filter_input` function is not available on all hosts... + * + * @deprecated Passes through to PHP call, no longer used in code. + * + * @param int $type Input type constant. + * @param string $variable_name Variable name to get. + * @param int $filter Filter to apply. + * + * @return mixed + */ + public static function filter_input( $type, $variable_name, $filter = FILTER_DEFAULT ) { + return filter_input( $type, $variable_name, $filter ); + } + + /** + * Adds a hook that when given option is updated, the XML sitemap transient cache is cleared + * + * @deprecated + * @see WPSEO_Sitemaps_Cache::register_clear_on_option_update() + * + * @param string $option Option name. + * @param string $type Sitemap type. + */ + public static function register_cache_clear_option( $option, $type = '' ) { + WPSEO_Sitemaps_Cache::register_clear_on_option_update( $option, $type ); + } + + /** + * Clears the transient cache when a given option is updated, if that option has been registered before + * + * @deprecated + * @see WPSEO_Sitemaps_Cache::clear_on_option_update() + * + * @param string $option The option that's being updated. + */ + public static function clear_transient_cache( $option ) { + WPSEO_Sitemaps_Cache::clear_on_option_update( $option ); + } + + /** + * Clear entire XML sitemap cache + * + * @deprecated + * @see WPSEO_Sitemaps_Cache::clear() + * + * @param array $types Set of sitemap types to invalidate cache for. + */ + public static function clear_sitemap_cache( $types = array() ) { + WPSEO_Sitemaps_Cache::clear( $types ); + } + + /** + * Wrapper for encoding the array as a json string. Includes a fallback if wp_json_encode doesn't exist. + * + * @deprecated 3.3 Core versions without wp_json_encode() no longer supported, fallback unnecessary. + * + * @param array $array_to_encode The array which will be encoded. + * @param int $options Optional. Array with options which will be passed in to the encoding methods. + * @param int $depth Optional. Maximum depth to walk through $data. Must be greater than 0. Default 512. + * + * @return false|string + */ + public static function json_encode( array $array_to_encode, $options = 0, $depth = 512 ) { + return wp_json_encode( $array_to_encode, $options, $depth ); + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/index.php b/wp-content/plugins/wordpress-seo/inc/index.php new file mode 100644 index 0000000..e94d9a4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/index.php @@ -0,0 +1,4 @@ +get_defaults(); + * @internal Note: Some of the default values are added via the translate_defaults() method + */ + protected $defaults = array( + 'breadcrumbs-404crumb' => '', // Text field. + 'breadcrumbs-blog-remove' => false, + 'breadcrumbs-boldlast' => false, + 'breadcrumbs-archiveprefix' => '', // Text field. + 'breadcrumbs-enable' => false, + 'breadcrumbs-home' => '', // Text field. + 'breadcrumbs-prefix' => '', // Text field. + 'breadcrumbs-searchprefix' => '', // Text field. + 'breadcrumbs-sep' => '»', // Text field. + + /** + * Uses enrich_defaults() to add more along the lines of: + * - 'post_types-' . $pt->name . '-maintax' => 0 / string + * - 'taxonomy-' . $tax->name . '-ptparent' => 0 / string + */ + ); + + /** + * @var array Array of variable option name patterns for the option + */ + protected $variable_array_key_patterns = array( + 'post_types-', + 'taxonomy-', + ); + + + /** + * Get the singleton instance of this class + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + + /** + * Translate strings used in the option defaults + * + * @return void + */ + public function translate_defaults() { + $this->defaults['breadcrumbs-404crumb'] = __( 'Error 404: Page not found', 'wordpress-seo' ); + $this->defaults['breadcrumbs-archiveprefix'] = __( 'Archives for', 'wordpress-seo' ); + $this->defaults['breadcrumbs-home'] = __( 'Home', 'wordpress-seo' ); + $this->defaults['breadcrumbs-searchprefix'] = __( 'You searched for', 'wordpress-seo' ); + } + + + /** + * Add dynamically created default options based on available post types and taxonomies + * + * @return void + */ + public function enrich_defaults() { + + // Retrieve all the relevant post type and taxonomy arrays. + $post_type_names = get_post_types( array( 'public' => true ), 'names' ); + $taxonomy_names_custom = get_taxonomies( array( 'public' => true, '_builtin' => false ), 'names' ); + + if ( $post_type_names !== array() ) { + foreach ( $post_type_names as $pt ) { + $pto_taxonomies = get_object_taxonomies( $pt, 'names' ); + if ( $pto_taxonomies !== array() ) { + $this->defaults[ 'post_types-' . $pt . '-maintax' ] = 0; // Select box. + } + unset( $pto_taxonomies ); + } + unset( $pt ); + } + + if ( $taxonomy_names_custom !== array() ) { + foreach ( $taxonomy_names_custom as $tax ) { + $this->defaults[ 'taxonomy-' . $tax . '-ptparent' ] = 0; // Select box;. + } + unset( $tax ); + } + } + + + /** + * Validate the option + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array Validated clean value for the option to be saved to the database + */ + protected function validate_option( $dirty, $clean, $old ) { + + $allowed_post_types = $this->get_allowed_post_types(); + + foreach ( $clean as $key => $value ) { + + $switch_key = $this->get_switch_key( $key ); + + switch ( $switch_key ) { + /* text fields */ + case 'breadcrumbs-404crumb': + case 'breadcrumbs-archiveprefix': + case 'breadcrumbs-home': + case 'breadcrumbs-prefix': + case 'breadcrumbs-searchprefix': + case 'breadcrumbs-sep': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = wp_kses_post( $dirty[ $key ] ); + } + break; + + + /* 'post_types-' . $pt->name . '-maintax' fields */ + case 'post_types-': + $post_type = str_replace( array( 'post_types-', '-maintax' ), '', $key ); + $taxonomies = get_object_taxonomies( $post_type, 'names' ); + + if ( isset( $dirty[ $key ] ) ) { + if ( $taxonomies !== array() && in_array( $dirty[ $key ], $taxonomies, true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + elseif ( (string) $dirty[ $key ] === '0' || (string) $dirty[ $key ] === '' ) { + $clean[ $key ] = 0; + } + elseif ( sanitize_title_with_dashes( $dirty[ $key ] ) === $dirty[ $key ] ) { + // Allow taxonomies which may not be registered yet. + $clean[ $key ] = $dirty[ $key ]; + } + else { + if ( isset( $old[ $key ] ) ) { + $clean[ $key ] = sanitize_title_with_dashes( $old[ $key ] ); + } + if ( function_exists( 'add_settings_error' ) ) { + /** + * @todo [JRF => whomever] maybe change the untranslated $pt name in the + * error message to the nicely translated label ? + */ + add_settings_error( + $this->group_name, // Slug title of the setting. + '_' . $key, // Suffix-id for the error message box. + sprintf( __( 'Please select a valid taxonomy for post type "%s"', 'wordpress-seo' ), $post_type ), // The error message. + 'error' // Error type, either 'error' or 'updated'. + ); + } + } + } + elseif ( isset( $old[ $key ] ) ) { + $clean[ $key ] = sanitize_title_with_dashes( $old[ $key ] ); + } + unset( $taxonomies, $post_type ); + break; + + + /* 'taxonomy-' . $tax->name . '-ptparent' fields */ + case 'taxonomy-': + if ( isset( $dirty[ $key ] ) ) { + if ( $allowed_post_types !== array() && in_array( $dirty[ $key ], $allowed_post_types, true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + elseif ( (string) $dirty[ $key ] === '0' || (string) $dirty[ $key ] === '' ) { + $clean[ $key ] = 0; + } + elseif ( sanitize_key( $dirty[ $key ] ) === $dirty[ $key ] ) { + // Allow taxonomies which may not be registered yet. + $clean[ $key ] = $dirty[ $key ]; + } + else { + if ( isset( $old[ $key ] ) ) { + $clean[ $key ] = sanitize_key( $old[ $key ] ); + } + if ( function_exists( 'add_settings_error' ) ) { + /** + * @todo [JRF =? whomever] maybe change the untranslated $tax name in the + * error message to the nicely translated label ? + */ + $tax = str_replace( array( 'taxonomy-', '-ptparent' ), '', $key ); + add_settings_error( + $this->group_name, // Slug title of the setting. + '_' . $tax, // Suffix-id for the error message box. + sprintf( __( 'Please select a valid post type for taxonomy "%s"', 'wordpress-seo' ), $tax ), // The error message. + 'error' // Error type, either 'error' or 'updated'. + ); + unset( $tax ); + } + } + } + elseif ( isset( $old[ $key ] ) ) { + $clean[ $key ] = sanitize_key( $old[ $key ] ); + } + break; + + + /* + Boolean fields + */ + + /* + Covers: + * 'breadcrumbs-blog-remove' + * 'breadcrumbs-boldlast' + * 'breadcrumbs-enable' + */ + default: + $clean[ $key ] = ( isset( $dirty[ $key ] ) ? WPSEO_Utils::validate_bool( $dirty[ $key ] ) : false ); + break; + } + } + + return $clean; + } + + + /** + * Retrieve a list of the allowed post types as breadcrumb parent for a taxonomy + * Helper method for validation + * + * @internal don't make static as new types may still be registered + * + * @return array + */ + protected function get_allowed_post_types() { + $allowed_post_types = array(); + + $post_types = get_post_types( array( 'public' => true ), 'objects' ); + + if ( get_option( 'show_on_front' ) == 'page' && get_option( 'page_for_posts' ) > 0 ) { + $allowed_post_types[] = 'post'; + } + + if ( is_array( $post_types ) && $post_types !== array() ) { + foreach ( $post_types as $type ) { + if ( $type->has_archive ) { + $allowed_post_types[] = $type->name; + } + } + } + + return $allowed_post_types; + } + + + /** + * Clean a given option value + * + * @param array $option_value Old (not merged with defaults or filtered) option value to + * clean according to the rules for this option. + * @param string $current_version (optional) Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * @param array $all_old_option_values (optional) Only used when importing old options to have + * access to the real old values, in contrast to the saved ones. + * + * @return array Cleaned option + */ + protected function clean_option( $option_value, $current_version = null, $all_old_option_values = null ) { + + /* Make sure the old fall-back defaults for empty option keys are now added to the option */ + if ( isset( $current_version ) && version_compare( $current_version, '1.5.2.3', '<' ) ) { + if ( has_action( 'init', array( 'WPSEO_Options', 'bring_back_breadcrumb_defaults' ) ) === false ) { + add_action( 'init', array( 'WPSEO_Options', 'bring_back_breadcrumb_defaults' ), 3 ); + } + } + + /* + Make sure the values of the variable option key options are cleaned as they + may be retained and would not be cleaned/validated then + */ + if ( is_array( $option_value ) && $option_value !== array() ) { + + $allowed_post_types = $this->get_allowed_post_types(); + + foreach ( $option_value as $key => $value ) { + $switch_key = $this->get_switch_key( $key ); + + // Similar to validation routine - any changes made there should be made here too. + switch ( $switch_key ) { + /* 'post_types-' . $pt->name . '-maintax' fields */ + case 'post_types-': + $post_type = str_replace( array( 'post_types-', '-maintax' ), '', $key ); + $taxonomies = get_object_taxonomies( $post_type, 'names' ); + + if ( $taxonomies !== array() && in_array( $value, $taxonomies, true ) ) { + $option_value[ $key ] = $value; + } + elseif ( (string) $value === '0' || (string) $value === '' ) { + $option_value[ $key ] = 0; + } + elseif ( sanitize_title_with_dashes( $value ) === $value ) { + // Allow taxonomies which may not be registered yet. + $option_value[ $key ] = $value; + } + unset( $taxonomies, $post_type ); + break; + + + /* 'taxonomy-' . $tax->name . '-ptparent' fields */ + case 'taxonomy-': + if ( $allowed_post_types !== array() && in_array( $value, $allowed_post_types, true ) ) { + $option_value[ $key ] = $value; + } + elseif ( (string) $value === '0' || (string) $value === '' ) { + $option_value[ $key ] = 0; + } + elseif ( sanitize_key( $option_value[ $key ] ) === $option_value[ $key ] ) { + // Allow post types which may not be registered yet. + $option_value[ $key ] = $value; + } + break; + } + } + } + + return $option_value; + } + + /** + * With the changes to v1.5, the defaults for some of the textual breadcrumb settings are added + * dynamically, but empty strings are allowed. + * This caused issues for people who left the fields empty on purpose relying on the defaults. + * This little routine fixes that. + * Needs to be run on 'init' hook at prio 3 to make sure the defaults are translated. + */ + public function bring_back_defaults() { + $option = get_option( $this->option_name ); + + $values_to_bring_back = array( + 'breadcrumbs-404crumb', + 'breadcrumbs-archiveprefix', + 'breadcrumbs-home', + 'breadcrumbs-searchprefix', + 'breadcrumbs-sep', + ); + foreach ( $values_to_bring_back as $key ) { + if ( $option[ $key ] === '' && $this->defaults[ $key ] !== '' ) { + $option[ $key ] = $this->defaults[ $key ]; + } + } + update_option( $this->option_name, $option ); + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-ms.php b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-ms.php new file mode 100644 index 0000000..f259e61 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-ms.php @@ -0,0 +1,220 @@ +get_defaults(); + */ + protected $defaults = array( + 'access' => 'admin', + 'defaultblog' => '', // Numeric blog ID or empty. + ); + + /** + * @var array $allowed_access_options Available options for the 'access' setting + * Used for input validation + * + * @static + * + * @internal Important: Make sure the options added to the array here are in line with the keys + * for the options set for the select box in the admin/pages/network.php file + */ + public static $allowed_access_options = array( + 'admin', + 'superadmin', + ); + + + /** + * Get the singleton instance of this class + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Only run parent constructor in multisite context. + */ + public function __construct() { + if ( is_multisite() ) { + parent::__construct(); + } + } + + /** + * Add filters to make sure that the option default is returned if the option is not set + * + * @return void + */ + public function add_default_filters() { + // Don't change, needs to check for false as could return prio 0 which would evaluate to false. + if ( has_filter( 'default_site_option_' . $this->option_name, array( $this, 'get_defaults' ) ) === false ) { + add_filter( 'default_site_option_' . $this->option_name, array( $this, 'get_defaults' ) ); + } + } + + + /** + * Remove the default filters. + * Called from the validate() method to prevent failure to add new options + * + * @return void + */ + public function remove_default_filters() { + remove_filter( 'default_site_option_' . $this->option_name, array( $this, 'get_defaults' ) ); + } + + + /** + * Add filters to make sure that the option is merged with its defaults before being returned + * + * @return void + */ + public function add_option_filters() { + // Don't change, needs to check for false as could return prio 0 which would evaluate to false. + if ( has_filter( 'site_option_' . $this->option_name, array( $this, 'get_option' ) ) === false ) { + add_filter( 'site_option_' . $this->option_name, array( $this, 'get_option' ) ); + } + } + + + /** + * Remove the option filters. + * Called from the clean_up methods to make sure we retrieve the original old option + * + * @return void + */ + public function remove_option_filters() { + remove_filter( 'site_option_' . $this->option_name, array( $this, 'get_option' ) ); + } + + + /* *********** METHODS influencing add_uption(), update_option() and saving from admin pages *********** */ + + + /** + * Validate the option + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array Validated clean value for the option to be saved to the database + */ + protected function validate_option( $dirty, $clean, $old ) { + + foreach ( $clean as $key => $value ) { + switch ( $key ) { + case 'access': + if ( isset( $dirty[ $key ] ) && in_array( $dirty[ $key ], self::$allowed_access_options, true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + elseif ( function_exists( 'add_settings_error' ) ) { + add_settings_error( + $this->group_name, // Slug title of the setting. + '_' . $key, // Suffix-id for the error message box. + /* translators: %1$s expands to the option name and %2$sexpands to Yoast SEO */ + sprintf( __( '%1$s is not a valid choice for who should be allowed access to the %2$s settings. Value reset to the default.', 'wordpress-seo' ), esc_html( sanitize_text_field( $dirty[ $key ] ) ), 'Yoast SEO' ), // The error message. + 'error' // Error type, either 'error' or 'updated'. + ); + } + break; + + + case 'defaultblog': + if ( isset( $dirty[ $key ] ) && ( $dirty[ $key ] !== '' && $dirty[ $key ] !== '-' ) ) { + $int = WPSEO_Utils::validate_int( $dirty[ $key ] ); + if ( $int !== false && $int > 0 ) { + // Check if a valid blog number has been received. + $exists = get_blog_details( $int, false ); + if ( $exists && $exists->deleted == 0 ) { + $clean[ $key ] = $int; + } + elseif ( function_exists( 'add_settings_error' ) ) { + add_settings_error( + $this->group_name, // Slug title of the setting. + '_' . $key, // Suffix-id for the error message box. + esc_html__( 'The default blog setting must be the numeric blog id of the blog you want to use as default.', 'wordpress-seo' ) . '
    ' . sprintf( esc_html__( 'This must be an existing blog. Blog %s does not exist or has been marked as deleted.', 'wordpress-seo' ), '' . esc_html( sanitize_text_field( $dirty[ $key ] ) ) . '' ), // The error message. + 'error' // Error type, either 'error' or 'updated'. + ); + } + unset( $exists ); + } + elseif ( function_exists( 'add_settings_error' ) ) { + add_settings_error( + $this->group_name, // Slug title of the setting. + '_' . $key, // Suffix-id for the error message box. + esc_html__( 'The default blog setting must be the numeric blog id of the blog you want to use as default.', 'wordpress-seo' ) . '
    ' . esc_html__( 'No numeric value was received.', 'wordpress-seo' ), // The error message. + 'error' // Error type, either 'error' or 'updated'. + ); + } + unset( $int ); + } + break; + + default: + $clean[ $key ] = ( isset( $dirty[ $key ] ) ? WPSEO_Utils::validate_bool( $dirty[ $key ] ) : false ); + break; + } + } + + return $clean; + } + + + /** + * Clean a given option value + * + * @param array $option_value Old (not merged with defaults or filtered) option value to + * clean according to the rules for this option. + * @param string $current_version (optional) Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * @param array $all_old_option_values (optional) Only used when importing old options to have + * access to the real old values, in contrast to the saved ones. + * + * @return array Cleaned option + */ + + /* + Protected function clean_option( $option_value, $current_version = null, $all_old_option_values = null ) { + + return $option_value; + } + */ +} diff --git a/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-permalinks.php b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-permalinks.php new file mode 100644 index 0000000..e2ae859 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-permalinks.php @@ -0,0 +1,131 @@ +get_defaults(); + */ + protected $defaults = array( + 'cleanpermalinks' => false, + 'cleanpermalink-extravars' => '', // Text field. + 'cleanpermalink-googlecampaign' => false, + 'cleanpermalink-googlesitesearch' => false, + 'cleanreplytocom' => false, + 'cleanslugs' => true, + 'redirectattachment' => false, + 'stripcategorybase' => false, + 'trailingslash' => false, + ); + + + /** + * Add the actions and filters for the option + * + * @todo [JRF => testers] Check if the extra actions below would run into problems if an option + * is updated early on and if so, change the call to schedule these for a later action on add/update + * instead of running them straight away + * + * @return \WPSEO_Option_Permalinks + */ + protected function __construct() { + parent::__construct(); + add_action( 'update_option_' . $this->option_name, array( 'WPSEO_Utils', 'clear_rewrites' ) ); + } + + + /** + * Get the singleton instance of this class + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + + /** + * Validate the option + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option (not used here as all fields will always be in the form). + * + * @return array Validated clean value for the option to be saved to the database + */ + protected function validate_option( $dirty, $clean, $old ) { + + foreach ( $clean as $key => $value ) { + switch ( $key ) { + /* text fields */ + case 'cleanpermalink-extravars': + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + $clean[ $key ] = sanitize_text_field( $dirty[ $key ] ); + } + break; + + /* + Boolean (checkbox) fields + */ + + /* + Covers: + * 'cleanpermalinks' + * 'cleanpermalink-googlesitesearch' + * 'cleanpermalink-googlecampaign' + * 'cleanreplytocom' + * 'cleanslugs' + * 'hide-rsdlink' + * 'hide-wlwmanifest' + * 'hide-shortlink' + * 'hide-feedlinks' + * 'redirectattachment' + * 'stripcategorybase' + * 'trailingslash' + */ + default: + $clean[ $key ] = ( isset( $dirty[ $key ] ) ? WPSEO_Utils::validate_bool( $dirty[ $key ] ) : false ); + break; + } + } + + return $clean; + } + + + /** + * Clean a given option value + * + * @param array $option_value Old (not merged with defaults or filtered) option value to + * clean according to the rules for this option. + * @param string $current_version (optional) Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * @param array $all_old_option_values (optional) Only used when importing old options to have + * access to the real old values, in contrast to the saved ones. + * + * @return array Cleaned option + */ + + /* + Protected function clean_option( $option_value, $current_version = null, $all_old_option_values = null ) { + + return $option_value; + } + */ +} diff --git a/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-rss.php b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-rss.php new file mode 100644 index 0000000..8c9898a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-rss.php @@ -0,0 +1,69 @@ +get_defaults(); + * @internal Note: Some of the default values are added via the translate_defaults() method + */ + protected $defaults = array( + 'rssbefore' => '', // Text area. + 'rssafter' => '', // Text area. + ); + + + /** + * Get the singleton instance of this class + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + + /** + * Translate strings used in the option defaults + * + * @return void + */ + public function translate_defaults() { + $this->defaults['rssafter'] = sprintf( __( 'The post %s appeared first on %s.', 'wordpress-seo' ), '%%POSTLINK%%', '%%BLOGLINK%%' ); + } + + + /** + * Validate the option + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array Validated clean value for the option to be saved to the database + */ + protected function validate_option( $dirty, $clean, $old ) { + foreach ( $clean as $key => $value ) { + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = wp_kses_post( $dirty[ $key ] ); + } + } + + return $clean; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-social.php b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-social.php new file mode 100644 index 0000000..414bea6 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-social.php @@ -0,0 +1,319 @@ +get_defaults(); + */ + protected $defaults = array( + // Non-form fields, set via procedural code in admin/pages/social.php. + 'fb_admins' => array(), // Array of user id's => array( name => '', link => '' ). + + // Non-form field, set via translate_defaults() and validate_option() methods. + 'fbconnectkey' => '', + // Form fields: + 'facebook_site' => '', // Text field. + 'instagram_url' => '', + 'linkedin_url' => '', + 'myspace_url' => '', + 'og_default_image' => '', // Text field. + 'og_frontpage_title' => '', // Text field. + 'og_frontpage_desc' => '', // Text field. + 'og_frontpage_image' => '', // Text field. + 'opengraph' => true, + 'pinterest_url' => '', + 'pinterestverify' => '', + 'plus-publisher' => '', // Text field. + 'twitter' => true, + 'twitter_site' => '', // Text field. + 'twitter_card_type' => 'summary', + 'youtube_url' => '', + 'google_plus_url' => '', + // Form field, but not always available: + 'fbadminapp' => '', // Facebook app ID. + ); + + /** + * @var array Array of sub-options which should not be overloaded with multi-site defaults + */ + public $ms_exclude = array( + /* privacy */ + 'fb_admins', + 'fbconnectkey', + 'fbadminapp', + 'pinterestverify', + ); + + + /** + * @var array Array of allowed twitter card types + * While we only have the options summary and summary_large_image in the + * interface now, we might change that at some point. + * + * @internal Uncomment any of these to allow them in validation *and* automatically add them as a choice + * in the options page + */ + public static $twitter_card_types = array( + 'summary' => '', + 'summary_large_image' => '', + // 'photo' => '', + // 'gallery' => '', + // 'app' => '', + // 'player' => '', + // 'product' => '', + ); + + + /** + * Get the singleton instance of this class + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + + /** + * Translate/set strings used in the option defaults + * + * @return void + */ + public function translate_defaults() { + /* Auto-magically set the fb connect key */ + $this->defaults['fbconnectkey'] = self::get_fbconnectkey(); + + self::$twitter_card_types['summary'] = __( 'Summary', 'wordpress-seo' ); + self::$twitter_card_types['summary_large_image'] = __( 'Summary with large image', 'wordpress-seo' ); + } + + + /** + * Get a Facebook connect key for the blog + * + * @static + * @return string + */ + public static function get_fbconnectkey() { + return md5( get_bloginfo( 'url' ) . rand() ); + } + + + /** + * Validate the option + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array Validated clean value for the option to be saved to the database + */ + protected function validate_option( $dirty, $clean, $old ) { + + foreach ( $clean as $key => $value ) { + switch ( $key ) { + /* Automagic Facebook connect key */ + case 'fbconnectkey': + if ( ( isset( $old[ $key ] ) && $old[ $key ] !== '' ) && preg_match( '`^[a-f0-9]{32}$`', $old[ $key ] ) > 0 ) { + $clean[ $key ] = $old[ $key ]; + } + else { + $clean[ $key ] = self::get_fbconnectkey(); + } + break; + + + /* Will not always exist in form */ + case 'fb_admins': + if ( isset( $dirty[ $key ] ) && is_array( $dirty[ $key ] ) ) { + if ( $dirty[ $key ] === array() ) { + $clean[ $key ] = array(); + } + else { + foreach ( $dirty[ $key ] as $user_id => $fb_array ) { + /* + * @todo [JRF/JRF => Yoast/whomever] add user_id validation - + * are these WP user-ids or FB user-ids ? Probably FB user-ids, + * if so, find out the rules for FB user-ids + */ + if ( is_array( $fb_array ) && $fb_array !== array() ) { + foreach ( $fb_array as $fb_key => $fb_value ) { + switch ( $fb_key ) { + case 'name': + /** + * @todo [JRF => whomever] add validation for name based + * on rules if there are any + * Input comes from: $_GET['userrealname'] + */ + $clean[ $key ][ $user_id ][ $fb_key ] = sanitize_text_field( $fb_value ); + break; + + case 'link': + $clean[ $key ][ $user_id ][ $fb_key ] = WPSEO_Utils::sanitize_url( $fb_value ); + break; + } + } + } + } + unset( $user_id, $fb_array, $fb_key, $fb_value ); + } + } + elseif ( isset( $old[ $key ] ) && is_array( $old[ $key ] ) ) { + $clean[ $key ] = $old[ $key ]; + } + break; + + /* text fields */ + case 'og_frontpage_desc': + case 'og_frontpage_title': + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + $clean[ $key ] = WPSEO_Utils::sanitize_text_field( $dirty[ $key ] ); + } + break; + + + /* url text fields - no ftp allowed */ + case 'facebook_site': + case 'instagram_url': + case 'linkedin_url': + case 'myspace_url': + case 'pinterest_url': + case 'plus-publisher': + case 'og_default_image': + case 'og_frontpage_image': + case 'youtube_url': + case 'google_plus_url': + $this->validate_url( $key, $dirty, $old, $clean ); + break; + + case 'pinterestverify': + $this->validate_verification_string( $key, $dirty, $old, $clean ); + break; + + /* twitter user name */ + case 'twitter_site': + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + $twitter_id = sanitize_text_field( ltrim( $dirty[ $key ], '@' ) ); + /** + * From the Twitter documentation about twitter screen names: + * Typically a maximum of 15 characters long, but some historical accounts + * may exist with longer names. + * A username can only contain alphanumeric characters (letters A-Z, numbers 0-9) + * with the exception of underscores + * + * @link https://support.twitter.com/articles/101299-why-can-t-i-register-certain-usernames + * @link https://dev.twitter.com/docs/platform-objects/users + */ + if ( preg_match( '`^[A-Za-z0-9_]{1,25}$`', $twitter_id ) ) { + $clean[ $key ] = $twitter_id; + } + elseif ( preg_match( '`^http(?:s)?://(?:www\.)?twitter\.com/(?P[A-Za-z0-9_]{1,25})/?$`', $twitter_id, $matches ) ) { + $clean[ $key ] = $matches['handle']; + } + else { + if ( isset( $old[ $key ] ) && $old[ $key ] !== '' ) { + $twitter_id = sanitize_text_field( ltrim( $old[ $key ], '@' ) ); + if ( preg_match( '`^[A-Za-z0-9_]{1,25}$`', $twitter_id ) ) { + $clean[ $key ] = $twitter_id; + } + } + if ( function_exists( 'add_settings_error' ) ) { + add_settings_error( + $this->group_name, // Slug title of the setting. + '_' . $key, // Suffix-id for the error message box. + sprintf( __( '%s does not seem to be a valid Twitter user-id. Please correct.', 'wordpress-seo' ), '' . esc_html( sanitize_text_field( $dirty[ $key ] ) ) . '' ), // The error message. + 'error' // Error type, either 'error' or 'updated'. + ); + } + } + unset( $twitter_id ); + } + break; + + case 'twitter_card_type': + if ( isset( $dirty[ $key ], self::$twitter_card_types[ $dirty[ $key ] ] ) && $dirty[ $key ] !== '' ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + + /* boolean fields */ + case 'opengraph': + case 'twitter': + $clean[ $key ] = ( isset( $dirty[ $key ] ) ? WPSEO_Utils::validate_bool( $dirty[ $key ] ) : false ); + break; + } + } + + /** + * Only validate 'fbadminapp', so leave the clean default. + */ + if ( isset( $dirty['fbadminapp'] ) && ! empty( $dirty['fbadminapp'] ) ) { + $clean['fbadminapp'] = $dirty['fbadminapp']; + } + + + return $clean; + } + + + /** + * Clean a given option value + * + * @param array $option_value Old (not merged with defaults or filtered) option value to + * clean according to the rules for this option. + * @param string $current_version (optional) Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * @param array $all_old_option_values (optional) Only used when importing old options to have + * access to the real old values, in contrast to the saved ones. + * + * @return array Cleaned option + */ + protected function clean_option( $option_value, $current_version = null, $all_old_option_values = null ) { + + /* Move options from very old option to this one */ + $old_option = null; + if ( isset( $all_old_option_values ) ) { + // Ok, we have an import. + if ( isset( $all_old_option_values['wpseo_indexation'] ) && is_array( $all_old_option_values['wpseo_indexation'] ) && $all_old_option_values['wpseo_indexation'] !== array() ) { + $old_option = $all_old_option_values['wpseo_indexation']; + } + } + else { + $old_option = get_option( 'wpseo_indexation' ); + } + + if ( is_array( $old_option ) && $old_option !== array() ) { + $move = array( + 'opengraph', + 'fb_adminid', + 'fb_appid', + ); + foreach ( $move as $key ) { + if ( isset( $old_option[ $key ] ) && ! isset( $option_value[ $key ] ) ) { + $option_value[ $key ] = $old_option[ $key ]; + } + } + unset( $move, $key ); + } + unset( $old_option ); + + + return $option_value; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-titles.php b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-titles.php new file mode 100644 index 0000000..38d528a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-titles.php @@ -0,0 +1,613 @@ +get_defaults(); + * @internal Note: Some of the default values are added via the translate_defaults() method + */ + protected $defaults = array( + // Non-form fields, set via (ajax) function. + 'title_test' => 0, + // Form fields. + 'forcerewritetitle' => false, + 'content-analysis-active' => true, + 'keyword-analysis-active' => true, + 'separator' => 'sc-dash', + 'noodp' => false, + 'usemetakeywords' => false, + 'title-home-wpseo' => '%%sitename%% %%page%% %%sep%% %%sitedesc%%', // Text field. + 'title-author-wpseo' => '', // Text field. + 'title-archive-wpseo' => '%%date%% %%page%% %%sep%% %%sitename%%', // Text field. + 'title-search-wpseo' => '', // Text field. + 'title-404-wpseo' => '', // Text field. + + 'metadesc-home-wpseo' => '', // Text area. + 'metadesc-author-wpseo' => '', // Text area. + 'metadesc-archive-wpseo' => '', // Text area. + 'metakey-home-wpseo' => '', // Text field. + 'metakey-author-wpseo' => '', // Text field. + + 'noindex-subpages-wpseo' => false, + 'noindex-author-wpseo' => false, + 'noindex-archive-wpseo' => true, + + 'disable-author' => false, + 'disable-date' => false, + 'disable-post_format' => false, + + /** + * Uses enrich_defaults to add more along the lines of: + * - 'title-' . $pt->name => ''; // Text field. + * - 'metadesc-' . $pt->name => ''; // Text field. + * - 'metakey-' . $pt->name => ''; // Text field. + * - 'noindex-' . $pt->name => false; + * - 'showdate-' . $pt->name => false; + * - 'hideeditbox-' . $pt->name => false; + * + * - 'title-ptarchive-' . $pt->name => ''; // Text field. + * - 'metadesc-ptarchive-' . $pt->name => ''; // Text field. + * - 'metakey-ptarchive-' . $pt->name => ''; // Text field. + * - 'bctitle-ptarchive-' . $pt->name => ''; // Text field. + * - 'noindex-ptarchive-' . $pt->name => false; + * + * - 'title-tax-' . $tax->name => '''; // Text field. + * - 'metadesc-tax-' . $tax->name => ''; // Text field. + * - 'metakey-tax-' . $tax->name => ''; // Text field. + * - 'noindex-tax-' . $tax->name => false; + * - 'hideeditbox-tax-' . $tax->name => false; + */ + ); + + /** + * @var array Array of variable option name patterns for the option + */ + protected $variable_array_key_patterns = array( + 'title-', + 'metadesc-', + 'metakey-', + 'noindex-', + 'showdate-', + 'hideeditbox-', + 'bctitle-ptarchive-', + ); + + /** + * @var array Array of sub-options which should not be overloaded with multi-site defaults + */ + public $ms_exclude = array( + /* theme dependent */ + 'title_test', + 'forcerewritetitle', + ); + + /** + * @var array Array of the separator options. To get these options use WPSEO_Option_Titles::get_instance()->get_separator_options() + */ + private $separator_options = array( + 'sc-dash' => '-', + 'sc-ndash' => '–', + 'sc-mdash' => '—', + 'sc-middot' => '·', + 'sc-bull' => '•', + 'sc-star' => '*', + 'sc-smstar' => '⋆', + 'sc-pipe' => '|', + 'sc-tilde' => '~', + 'sc-laquo' => '«', + 'sc-raquo' => '»', + 'sc-lt' => '<', + 'sc-gt' => '>', + ); + + /** + * Add the actions and filters for the option + * + * @todo [JRF => testers] Check if the extra actions below would run into problems if an option + * is updated early on and if so, change the call to schedule these for a later action on add/update + * instead of running them straight away + * + * @return \WPSEO_Option_Titles + */ + protected function __construct() { + parent::__construct(); + add_action( 'update_option_' . $this->option_name, array( 'WPSEO_Utils', 'clear_cache' ) ); + add_action( 'init', array( $this, 'end_of_init' ), 999 ); + } + + + /** + * Make sure we can recognize the right action for the double cleaning + */ + public function end_of_init() { + do_action( 'wpseo_double_clean_titles' ); + } + + /** + * Get the singleton instance of this class + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Get the available separator options + * + * @return array + */ + public function get_separator_options() { + $separators = $this->separator_options; + + /** + * Allow altering the array with separator options + * + * @api array $separator_options Array with the separator options + */ + $filtered_separators = apply_filters( 'wpseo_separator_options', $separators ); + + if ( is_array( $filtered_separators ) && $filtered_separators !== array() ) { + $separators = array_merge( $separators, $filtered_separators ); + } + + return $separators; + } + + /** + * Translate strings used in the option defaults + * + * @return void + */ + public function translate_defaults() { + $this->defaults['title-author-wpseo'] = sprintf( __( '%s, Author at %s', 'wordpress-seo' ), '%%name%%', '%%sitename%%' ) . ' %%page%% '; + $this->defaults['title-search-wpseo'] = sprintf( __( 'You searched for %s', 'wordpress-seo' ), '%%searchphrase%%' ) . ' %%page%% %%sep%% %%sitename%%'; + $this->defaults['title-404-wpseo'] = __( 'Page not found', 'wordpress-seo' ) . ' %%sep%% %%sitename%%'; + } + + + /** + * Add dynamically created default options based on available post types and taxonomies + * + * @return void + */ + public function enrich_defaults() { + + // Retrieve all the relevant post type and taxonomy arrays. + $post_type_names = get_post_types( array( 'public' => true ), 'names' ); + + $post_type_objects_custom = get_post_types( array( 'public' => true, '_builtin' => false ), 'objects' ); + + $taxonomy_names = get_taxonomies( array( 'public' => true ), 'names' ); + + + if ( $post_type_names !== array() ) { + foreach ( $post_type_names as $pt ) { + $this->defaults[ 'title-' . $pt ] = '%%title%% %%page%% %%sep%% %%sitename%%'; // Text field. + $this->defaults[ 'metadesc-' . $pt ] = ''; // Text area. + $this->defaults[ 'metakey-' . $pt ] = ''; // Text field. + $this->defaults[ 'noindex-' . $pt ] = false; + $this->defaults[ 'showdate-' . $pt ] = false; + $this->defaults[ 'hideeditbox-' . $pt ] = false; + } + unset( $pt ); + } + + if ( $post_type_objects_custom !== array() ) { + $archive = sprintf( __( '%s Archive', 'wordpress-seo' ), '%%pt_plural%%' ); + foreach ( $post_type_objects_custom as $pt ) { + if ( ! $pt->has_archive ) { + continue; + } + + $this->defaults[ 'title-ptarchive-' . $pt->name ] = $archive . ' %%page%% %%sep%% %%sitename%%'; // Text field. + $this->defaults[ 'metadesc-ptarchive-' . $pt->name ] = ''; // Text area. + $this->defaults[ 'metakey-ptarchive-' . $pt->name ] = ''; // Text field. + $this->defaults[ 'bctitle-ptarchive-' . $pt->name ] = ''; // Text field. + $this->defaults[ 'noindex-ptarchive-' . $pt->name ] = false; + } + unset( $pt ); + } + + if ( $taxonomy_names !== array() ) { + $archives = sprintf( __( '%s Archives', 'wordpress-seo' ), '%%term_title%%' ); + foreach ( $taxonomy_names as $tax ) { + $this->defaults[ 'title-tax-' . $tax ] = $archives . ' %%page%% %%sep%% %%sitename%%'; // Text field. + $this->defaults[ 'metadesc-tax-' . $tax ] = ''; // Text area. + $this->defaults[ 'metakey-tax-' . $tax ] = ''; // Text field. + $this->defaults[ 'hideeditbox-tax-' . $tax ] = false; + + if ( $tax !== 'post_format' ) { + $this->defaults[ 'noindex-tax-' . $tax ] = false; + } + else { + $this->defaults[ 'noindex-tax-' . $tax ] = true; + } + } + unset( $tax ); + } + } + + + /** + * Validate the option + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array Validated clean value for the option to be saved to the database + */ + protected function validate_option( $dirty, $clean, $old ) { + foreach ( $clean as $key => $value ) { + $switch_key = $this->get_switch_key( $key ); + + switch ( $switch_key ) { + /* + Text fields + */ + + /* + Covers: + 'title-home-wpseo', 'title-author-wpseo', 'title-archive-wpseo', + 'title-search-wpseo', 'title-404-wpseo' + 'title-' . $pt->name + 'title-ptarchive-' . $pt->name + 'title-tax-' . $tax->name + */ + case 'title-': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = WPSEO_Utils::sanitize_text_field( $dirty[ $key ] ); + } + break; + + /* + Covers: + 'metadesc-home-wpseo', 'metadesc-author-wpseo', 'metadesc-archive-wpseo' + 'metadesc-' . $pt->name + 'metadesc-ptarchive-' . $pt->name + 'metadesc-tax-' . $tax->name + */ + case 'metadesc-': + /* + Covers: + 'metakey-home-wpseo', 'metakey-author-wpseo' + 'metakey-' . $pt->name + 'metakey-ptarchive-' . $pt->name + 'metakey-tax-' . $tax->name + */ + case 'metakey-': + /* + Covers: + ''bctitle-ptarchive-' . $pt->name + */ + case 'bctitle-ptarchive-': + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + $clean[ $key ] = WPSEO_Utils::sanitize_text_field( $dirty[ $key ] ); + } + break; + + + /* integer field - not in form*/ + case 'title_test': + if ( isset( $dirty[ $key ] ) ) { + $int = WPSEO_Utils::validate_int( $dirty[ $key ] ); + if ( $int !== false && $int >= 0 ) { + $clean[ $key ] = $int; + } + } + elseif ( isset( $old[ $key ] ) ) { + $int = WPSEO_Utils::validate_int( $old[ $key ] ); + if ( $int !== false && $int >= 0 ) { + $clean[ $key ] = $int; + } + } + break; + + /* Separator field - Radio */ + case 'separator': + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + + // Get separator fields. + $separator_fields = $this->get_separator_options(); + + // Check if the given separator is exists. + if ( isset( $separator_fields[ $dirty[ $key ] ] ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + } + break; + + /* + Boolean fields + */ + + /* + Covers: + * 'noindex-subpages-wpseo', 'noindex-author-wpseo', 'noindex-archive-wpseo' + * 'noindex-' . $pt->name + * 'noindex-ptarchive-' . $pt->name + * 'noindex-tax-' . $tax->name + * 'forcerewritetitle': + * 'usemetakeywords': + * 'noodp': + * 'noydir': + * 'disable-author': + * 'disable-date': + * 'disable-post_format'; + * 'noindex-' + * 'showdate-' + * 'showdate-'. $pt->name + * 'hideeditbox-' + * 'hideeditbox-'. $pt->name + * 'hideeditbox-tax-' . $tax->name + */ + default: + $clean[ $key ] = ( isset( $dirty[ $key ] ) ? WPSEO_Utils::validate_bool( $dirty[ $key ] ) : false ); + break; + } + } + + return $clean; + } + + + /** + * Clean a given option value + * + * @param array $option_value Old (not merged with defaults or filtered) option value to + * clean according to the rules for this option. + * @param string $current_version (optional) Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * @param array $all_old_option_values (optional) Only used when importing old options to have + * access to the real old values, in contrast to the saved ones. + * + * @return array Cleaned option + */ + protected function clean_option( $option_value, $current_version = null, $all_old_option_values = null ) { + static $original = null; + + // Double-run this function to ensure renaming of the taxonomy options will work. + if ( ! isset( $original ) && has_action( 'wpseo_double_clean_titles', array( + $this, + 'clean', + ) ) === false + ) { + add_action( 'wpseo_double_clean_titles', array( $this, 'clean' ) ); + $original = $option_value; + } + + /* + Move options from very old option to this one + @internal Don't rename to the 'current' names straight away as that would prevent + the rename/unset combi below from working + @todo [JRF] maybe figure out a smarter way to deal with this + */ + $old_option = null; + if ( isset( $all_old_option_values ) ) { + // Ok, we have an import. + if ( isset( $all_old_option_values['wpseo_indexation'] ) && is_array( $all_old_option_values['wpseo_indexation'] ) && $all_old_option_values['wpseo_indexation'] !== array() ) { + $old_option = $all_old_option_values['wpseo_indexation']; + } + } + else { + $old_option = get_option( 'wpseo_indexation' ); + } + if ( is_array( $old_option ) && $old_option !== array() ) { + $move = array( + 'noindexauthor' => 'noindex-author', + 'disableauthor' => 'disable-author', + 'noindexdate' => 'noindex-archive', + 'noindexcat' => 'noindex-category', + 'noindextag' => 'noindex-post_tag', + 'noindexpostformat' => 'noindex-post_format', + 'noindexsubpages' => 'noindex-subpages', + ); + foreach ( $move as $old => $new ) { + if ( isset( $old_option[ $old ] ) && ! isset( $option_value[ $new ] ) ) { + $option_value[ $new ] = $old_option[ $old ]; + } + } + unset( $move, $old, $new ); + } + unset( $old_option ); + + + // Fix wrongness created by buggy version 1.2.2. + if ( isset( $option_value['title-home'] ) && $option_value['title-home'] === '%%sitename%% - %%sitedesc%% - 12345' ) { + $option_value['title-home-wpseo'] = '%%sitename%% - %%sitedesc%%'; + } + + + /* + Renaming these options to avoid ever overwritting these if a (bloody stupid) user / + programmer would use any of the following as a custom post type or custom taxonomy: + 'home', 'author', 'archive', 'search', '404', 'subpages' + + Similarly, renaming the tax options to avoid a custom post type and a taxonomy + with the same name occupying the same option + */ + $rename = array( + 'title-home' => 'title-home-wpseo', + 'title-author' => 'title-author-wpseo', + 'title-archive' => 'title-archive-wpseo', + 'title-search' => 'title-search-wpseo', + 'title-404' => 'title-404-wpseo', + 'metadesc-home' => 'metadesc-home-wpseo', + 'metadesc-author' => 'metadesc-author-wpseo', + 'metadesc-archive' => 'metadesc-archive-wpseo', + 'metakey-home' => 'metakey-home-wpseo', + 'metakey-author' => 'metakey-author-wpseo', + 'noindex-subpages' => 'noindex-subpages-wpseo', + 'noindex-author' => 'noindex-author-wpseo', + 'noindex-archive' => 'noindex-archive-wpseo', + ); + foreach ( $rename as $old => $new ) { + if ( isset( $option_value[ $old ] ) && ! isset( $option_value[ $new ] ) ) { + $option_value[ $new ] = $option_value[ $old ]; + unset( $option_value[ $old ] ); + } + } + unset( $rename, $old, $new ); + + + /** + * @internal This clean-up action can only be done effectively once the taxonomies and post_types + * have been registered, i.e. at the end of the init action. + */ + if ( isset( $original ) && current_filter() === 'wpseo_double_clean_titles' || did_action( 'wpseo_double_clean_titles' ) > 0 ) { + $rename = array( + 'title-' => 'title-tax-', + 'metadesc-' => 'metadesc-tax-', + 'metakey-' => 'metakey-tax-', + 'noindex-' => 'noindex-tax-', + 'tax-hideeditbox-' => 'hideeditbox-tax-', + + ); + $taxonomy_names = get_taxonomies( array( 'public' => true ), 'names' ); + $post_type_names = get_post_types( array( 'public' => true ), 'names' ); + $defaults = $this->get_defaults(); + if ( $taxonomy_names !== array() ) { + foreach ( $taxonomy_names as $tax ) { + foreach ( $rename as $old_prefix => $new_prefix ) { + if ( + ( isset( $original[ $old_prefix . $tax ] ) && ! isset( $original[ $new_prefix . $tax ] ) ) + && ( ! isset( $option_value[ $new_prefix . $tax ] ) + || ( isset( $option_value[ $new_prefix . $tax ] ) + && $option_value[ $new_prefix . $tax ] === $defaults[ $new_prefix . $tax ] ) ) + ) { + $option_value[ $new_prefix . $tax ] = $original[ $old_prefix . $tax ]; + + /* + Check if there is a cpt with the same name as the tax, + if so, we should make sure that the old setting hasn't been removed + */ + if ( ! isset( $post_type_names[ $tax ] ) && isset( $option_value[ $old_prefix . $tax ] ) ) { + unset( $option_value[ $old_prefix . $tax ] ); + } + else { + if ( isset( $post_type_names[ $tax ] ) && ! isset( $option_value[ $old_prefix . $tax ] ) ) { + $option_value[ $old_prefix . $tax ] = $original[ $old_prefix . $tax ]; + } + } + + if ( $old_prefix === 'tax-hideeditbox-' ) { + unset( $option_value[ $old_prefix . $tax ] ); + } + } + } + } + } + unset( $rename, $taxonomy_names, $post_type_names, $defaults, $tax, $old_prefix, $new_prefix ); + } + + + /* + Make sure the values of the variable option key options are cleaned as they + may be retained and would not be cleaned/validated then + */ + if ( is_array( $option_value ) && $option_value !== array() ) { + foreach ( $option_value as $key => $value ) { + $switch_key = $this->get_switch_key( $key ); + + // Similar to validation routine - any changes made there should be made here too. + switch ( $switch_key ) { + /* text fields */ + case 'title-': + case 'metadesc-': + case 'metakey-': + case 'bctitle-ptarchive-': + $option_value[ $key ] = WPSEO_Utils::sanitize_text_field( $value ); + break; + + case 'separator': + if ( ! array_key_exists( $value, $this->get_separator_options() ) ) { + $option_value[ $key ] = false; + } + break; + + /* + Boolean fields + */ + + /* + Covers: + * 'noindex-' + * 'showdate-' + * 'hideeditbox-' + */ + default: + $option_value[ $key ] = WPSEO_Utils::validate_bool( $value ); + break; + } + } + unset( $key, $value, $switch_key ); + } + + return $option_value; + } + + + /** + * Make sure that any set option values relating to post_types and/or taxonomies are retained, + * even when that post_type or taxonomy may not yet have been registered. + * + * @internal Overrule the abstract class version of this to make sure one extra renamed variable key + * does not get removed. IMPORTANT: keep this method in line with the parent on which it is based! + * + * @param array $dirty Original option as retrieved from the database. + * @param array $clean Filtered option where any options which shouldn't be in our option + * have already been removed and any options which weren't set + * have been set to their defaults. + * + * @return array + */ + protected function retain_variable_keys( $dirty, $clean ) { + if ( ( is_array( $this->variable_array_key_patterns ) && $this->variable_array_key_patterns !== array() ) && ( is_array( $dirty ) && $dirty !== array() ) ) { + + // Add the extra pattern. + $patterns = $this->variable_array_key_patterns; + $patterns[] = 'tax-hideeditbox-'; + + /** + * Allow altering the array with variable array key patterns + * + * @api array $patterns Array with the variable array key patterns + */ + $patterns = apply_filters( 'wpseo_option_titles_variable_array_key_patterns', $patterns ); + + foreach ( $dirty as $key => $value ) { + + // Do nothing if already in filtered option array. + if ( isset( $clean[ $key ] ) ) { + continue; + } + + foreach ( $patterns as $pattern ) { + if ( strpos( $key, $pattern ) === 0 ) { + $clean[ $key ] = $value; + break; + } + } + } + } + + return $clean; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-wpseo.php b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-wpseo.php new file mode 100644 index 0000000..13b831f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-wpseo.php @@ -0,0 +1,244 @@ +get_defaults(); + */ + protected $defaults = array( + // Non-form fields, set via (ajax) function. + 'blocking_files' => array(), + 'ms_defaults_set' => false, + // Non-form field, should only be set via validation routine. + 'version' => '', // Leave default as empty to ensure activation/upgrade works. + + // Form fields. + 'company_logo' => '', + 'company_name' => '', + 'company_or_person' => '', + 'disableadvanced_meta' => true, + 'onpage_indexability' => true, + 'googleverify' => '', // Text field. + 'msverify' => '', // Text field. + 'person_name' => '', + 'website_name' => '', + 'alternate_website_name' => '', + 'yandexverify' => '', + 'site_type' => '', // List of options. + 'has_multiple_authors' => '', + 'environment_type' => '', + 'enable_setting_pages' => true, + 'enable_admin_bar_menu' => true, + 'show_onboarding_notice' => false, + 'first_activated_on' => false, + ); + + /** + * @var array Sub-options which should not be overloaded with multi-site defaults + */ + public $ms_exclude = array( + /* privacy */ + 'alexaverify', + 'googleverify', + 'msverify', + 'yandexverify', + ); + + /** @var array Possible values for the site_type option */ + protected $site_types = array( + '', + 'blog', + 'news', + 'smallBusiness', + 'corporateOther', + 'personalOther', + ); + + /** @var array Possible environment types. */ + protected $environment_types = array( + '', + 'production', + 'staging', + 'development', + ); + + /** + * Add the actions and filters for the option + * + * @todo [JRF => testers] Check if the extra actions below would run into problems if an option + * is updated early on and if so, change the call to schedule these for a later action on add/update + * instead of running them straight away + * + * @return \WPSEO_Option_Wpseo + */ + protected function __construct() { + parent::__construct(); + + /* Clear the cache on update/add */ + add_action( 'add_option_' . $this->option_name, array( 'WPSEO_Utils', 'clear_cache' ) ); + add_action( 'update_option_' . $this->option_name, array( 'WPSEO_Utils', 'clear_cache' ) ); + + /** + * Filter the `wpseo` option defaults. + * + * @param array $defaults Array the defaults for the `wpseo` option attributes. + */ + $this->defaults = apply_filters( 'wpseo_option_wpseo_defaults', $this->defaults ); + } + + + /** + * Get the singleton instance of this class + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Validate the option + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array Validated clean value for the option to be saved to the database + */ + protected function validate_option( $dirty, $clean, $old ) { + + foreach ( $clean as $key => $value ) { + switch ( $key ) { + case 'version': + $clean[ $key ] = WPSEO_VERSION; + break; + + + case 'blocking_files': + /** + * @internal [JRF] to really validate this we should also do a file_exists() + * on each array entry and remove files which no longer exist, but that might be overkill + */ + if ( isset( $dirty[ $key ] ) && is_array( $dirty[ $key ] ) ) { + $clean[ $key ] = array_unique( $dirty[ $key ] ); + } + elseif ( isset( $old[ $key ] ) && is_array( $old[ $key ] ) ) { + $clean[ $key ] = array_unique( $old[ $key ] ); + } + break; + + case 'company_or_person': + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + if ( in_array( $dirty[ $key ], array( 'company', 'person' ) ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + } + break; + + /* text fields */ + case 'company_name': + case 'person_name': + case 'website_name': + case 'alternate_website_name': + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + $clean[ $key ] = sanitize_text_field( $dirty[ $key ] ); + } + break; + + case 'company_logo': + $this->validate_url( $key, $dirty, $old, $clean ); + break; + + /* verification strings */ + case 'googleverify': + case 'msverify': + case 'yandexverify': + $this->validate_verification_string( $key, $dirty, $old, $clean ); + break; + + /* + Boolean dismiss warnings - not fields - may not be in form + (and don't need to be either as long as the default is false) + */ + case 'ms_defaults_set': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = WPSEO_Utils::validate_bool( $dirty[ $key ] ); + } + elseif ( isset( $old[ $key ] ) ) { + $clean[ $key ] = WPSEO_Utils::validate_bool( $old[ $key ] ); + } + break; + + case 'site_type': + $clean[ $key ] = ''; + if ( isset( $dirty[ $key ] ) && in_array( $dirty[ $key ], $this->site_types, true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + case 'environment_type': + $clean[ $key ] = ''; + if ( isset( $dirty[ $key ] ) && in_array( $dirty[ $key ], $this->environment_types, true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + + case 'first_activated_on' : + $clean[ $key ] = false; + if ( isset( $dirty[ $key ] ) ) { + if ( $dirty[ $key ] === false || WPSEO_Utils::validate_int( $dirty[ $key ] ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + } + break; + + /* + Boolean (checkbox) fields + */ + + /* + Covers + * 'disableadvanced_meta' + * 'yoast_tracking' + */ + default: + $clean[ $key ] = ( isset( $dirty[ $key ] ) ? WPSEO_Utils::validate_bool( $dirty[ $key ] ) : false ); + break; + } + } + + return $clean; + } + + + /** + * Clean a given option value + * + * @param array $option_value Old (not merged with defaults or filtered) option value to + * clean according to the rules for this option. + * @param string $current_version (optional) Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * @param array $all_old_option_values (optional) Only used when importing old options to have + * access to the real old values, in contrast to the saved ones. + * + * @return array Cleaned option + */ + protected function clean_option( $option_value, $current_version = null, $all_old_option_values = null ) { + return $option_value; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-xml.php b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-xml.php new file mode 100644 index 0000000..6b14eb4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-xml.php @@ -0,0 +1,259 @@ +get_defaults(); + */ + protected $defaults = array( + 'disable_author_sitemap' => true, + 'disable_author_noposts' => true, + 'enablexmlsitemap' => true, + 'entries-per-page' => 1000, + 'excluded-posts' => '', + + /** + * Uses enrich_defaults to add more along the lines of: + * - 'user_role-' . $role_name . '-not_in_sitemap' => bool + * - 'post_types-' . $pt->name . '-not_in_sitemap' => bool + * - 'taxonomies-' . $tax->name . '-not_in_sitemap' => bool + */ + ); + + /** + * @var array Array of variable option name patterns for the option + */ + protected $variable_array_key_patterns = array( + 'user_role-', + 'post_types-', + 'taxonomies-', + ); + + + /** + * Add the actions and filters for the option + * + * @todo [JRF => testers] Check if the extra actions below would run into problems if an option + * is updated early on and if so, change the call to schedule these for a later action on add/update + * instead of running them straight away + * + * @return \WPSEO_Option_XML + */ + protected function __construct() { + parent::__construct(); + add_action( 'update_option_' . $this->option_name, array( 'WPSEO_Utils', 'clear_rewrites' ) ); + add_action( 'update_option_' . $this->option_name, array( 'WPSEO_Sitemaps_Cache', 'clear' ) ); + } + + + /** + * Get the singleton instance of this class + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Add dynamically created default options based on available post types and taxonomies + * + * @return void + */ + public function enrich_defaults() { + + $user_roles = WPSEO_Utils::get_roles(); + $filtered_user_roles = apply_filters( 'wpseo_sitemaps_supported_user_roles', $user_roles ); + if ( is_array( $filtered_user_roles ) && $filtered_user_roles !== array() ) { + foreach ( $filtered_user_roles as $role_name => $role_value ) { + $this->defaults[ 'user_role-' . $role_name . '-not_in_sitemap' ] = false; + + unset( $user_role ); + } + unset( $role_name, $role_value ); + } + unset( $user_roles, $filtered_user_roles ); + + $post_type_names = get_post_types( array( 'public' => true ), 'names' ); + $filtered_post_types = apply_filters( 'wpseo_sitemaps_supported_post_types', $post_type_names ); + + if ( is_array( $filtered_post_types ) && $filtered_post_types !== array() ) { + foreach ( $filtered_post_types as $pt ) { + if ( $pt !== 'attachment' ) { + $this->defaults[ 'post_types-' . $pt . '-not_in_sitemap' ] = false; + } + else { + $this->defaults[ 'post_types-' . $pt . '-not_in_sitemap' ] = true; + } + } + unset( $pt ); + } + unset( $post_type_names, $filtered_post_types ); + + $taxonomy_objects = get_taxonomies( array( 'public' => true ), 'objects' ); + $filtered_taxonomies = apply_filters( 'wpseo_sitemaps_supported_taxonomies', $taxonomy_objects ); + if ( is_array( $filtered_taxonomies ) && $filtered_taxonomies !== array() ) { + foreach ( $filtered_taxonomies as $tax ) { + if ( isset( $tax->labels->name ) && trim( $tax->labels->name ) != '' ) { + $this->defaults[ 'taxonomies-' . $tax->name . '-not_in_sitemap' ] = false; + } + } + unset( $tax ); + } + unset( $taxonomy_objects, $filtered_taxonomies ); + + } + + + /** + * Validate the option + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array Validated clean value for the option to be saved to the database + */ + protected function validate_option( $dirty, $clean, $old ) { + + foreach ( $clean as $key => $value ) { + $switch_key = $this->get_switch_key( $key ); + + switch ( $switch_key ) { + /* integer fields */ + case 'entries-per-page': + + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + + $int = WPSEO_Utils::validate_int( $dirty[ $key ] ); + + if ( $int !== false && $int > 0 ) { + + if ( $int > 50000 ) { + + $error_message = sprintf( + __( '"Max entries per sitemap page" should be below %s to meet Google\'s requirements, which %s is not.', 'wordpress-seo' ), + number_format_i18n( 50000 ), '' . esc_html( sanitize_text_field( $dirty[ $key ] ) ) . '' + ); + add_settings_error( $this->group_name, '_' . $key, $error_message, 'error' ); + + $int = 50000; + } + + $clean[ $key ] = $int; + } + else { + + if ( isset( $old[ $key ] ) && $old[ $key ] !== '' ) { + + $int = WPSEO_Utils::validate_int( $old[ $key ] ); + + if ( $int !== false && $int > 0 ) { + $clean[ $key ] = $int; + } + } + + $error_message = sprintf( + __( '"Max entries per sitemap page" should be a positive number, which %s is not. Please correct.', 'wordpress-seo' ), + '' . esc_html( sanitize_text_field( $dirty[ $key ] ) ) . '' + ); + add_settings_error( $this->group_name, '_' . $key, $error_message, 'error' ); + } + unset( $int ); + } + break; + + case 'excluded-posts' : + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + if ( $filtered_array = filter_var_array( explode( ',', $dirty[ $key ] ), FILTER_VALIDATE_INT ) ) { + $clean[ $key ] = implode( ',', array_filter( $filtered_array, 'is_integer' ) ); + + unset( $filtered_array ); + } + } + + break; + + /* + Boolean fields + */ + + /* + Covers: + * 'disable_author_sitemap': + * 'disable_author_noposts': + * 'enablexmlsitemap': + * 'user_role-': + * 'user_role' . $role_name . '-not_in_sitemap' fields + * 'post_types-': + * 'post_types-' . $pt->name . '-not_in_sitemap' fields + * 'taxonomies-': + * 'taxonomies-' . $tax->name . '-not_in_sitemap' fields + */ + default: + $clean[ $key ] = ( isset( $dirty[ $key ] ) ? WPSEO_Utils::validate_bool( $dirty[ $key ] ) : false ); + break; + } + } + + return $clean; + } + + + /** + * Clean a given option value + * + * @param array $option_value Old (not merged with defaults or filtered) option value to + * clean according to the rules for this option. + * @param string $current_version (optional) Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * @param array $all_old_option_values (optional) Only used when importing old options to have + * access to the real old values, in contrast to the saved ones. + * + * @return array Cleaned option + */ + protected function clean_option( $option_value, $current_version = null, $all_old_option_values = null ) { + /* + Make sure the values of the variable option key options are cleaned as they + may be retained and would not be cleaned/validated then + */ + if ( is_array( $option_value ) && $option_value !== array() ) { + + foreach ( $option_value as $key => $value ) { + $switch_key = $this->get_switch_key( $key ); + + // Similar to validation routine - any changes made there should be made here too. + switch ( $switch_key ) { + case 'user_role-': /* 'user_role-' . $role_name. '-not_in_sitemap' fields */ + case 'post_types-': /* 'post_types-' . $pt->name . '-not_in_sitemap' fields */ + case 'taxonomies-': /* 'taxonomies-' . $tax->name . '-not_in_sitemap' fields */ + $option_value[ $key ] = WPSEO_Utils::validate_bool( $value ); + break; + } + } + } + + return $option_value; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option.php b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option.php new file mode 100644 index 0000000..80d959c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option.php @@ -0,0 +1,854 @@ + testers] double check that validation will not cause errors when called + * from upgrade routine (some of the WP functions may not yet be available) + */ +abstract class WPSEO_Option { + + /** + * @var string Option name - MUST be set in concrete class and set to public. + */ + protected $option_name; + + /** + * @var string Option group name for use in settings forms + * - will be set automagically if not set in concrete class + * (i.e. if it confirm to the normal pattern 'yoast' . $option_name . 'options', + * only set in conrete class if it doesn't) + */ + public $group_name; + + /** + * @var bool Whether to include the option in the return for WPSEO_Options::get_all(). + * Also determines which options are copied over for ms_(re)set_blog(). + */ + public $include_in_all = true; + + /** + * @var bool Whether this option is only for when the install is multisite. + */ + public $multisite_only = false; + + /** + * @var array Array of defaults for the option - MUST be set in concrete class. + * Shouldn't be requested directly, use $this->get_defaults(); + */ + protected $defaults; + + /** + * @var array Array of variable option name patterns for the option - if any - + * Set this when the option contains array keys which vary based on post_type + * or taxonomy + */ + protected $variable_array_key_patterns; + + /** + * @var array Array of sub-options which should not be overloaded with multi-site defaults + */ + public $ms_exclude = array(); + + /** + * @var object Instance of this class + */ + protected static $instance; + + + /* *********** INSTANTIATION METHODS *********** */ + + /** + * Add all the actions and filters for the option + * + * @return \WPSEO_Option + */ + protected function __construct() { + + /* Add filters which get applied to the get_options() results */ + $this->add_default_filters(); // Return defaults if option not set. + $this->add_option_filters(); // Merge with defaults if option *is* set. + + + if ( $this->multisite_only !== true ) { + /** + * The option validation routines remove the default filters to prevent failing + * to insert an option if it's new. Let's add them back afterwards. + */ + add_action( 'add_option', array( $this, 'add_default_filters' ) ); // Adding back after INSERT. + + if ( version_compare( $GLOBALS['wp_version'], '3.7', '!=' ) ) { // Adding back after non-WP 3.7 UPDATE. + add_action( 'update_option', array( $this, 'add_default_filters' ) ); + } + else { // Adding back after WP 3.7 UPDATE. + add_filter( 'pre_update_option_' . $this->option_name, array( $this, 'wp37_add_default_filters' ) ); + } + } + else if ( is_multisite() ) { + /* + The option validation routines remove the default filters to prevent failing + to insert an option if it's new. Let's add them back afterwards. + + For site_options, this method is not foolproof as these actions are not fired + on an insert/update failure. Please use the WPSEO_Options::update_site_option() method + for updating site options to make sure the filters are in place. + */ + add_action( 'add_site_option_' . $this->option_name, array( $this, 'add_default_filters' ) ); + add_action( 'update_site_option_' . $this->option_name, array( $this, 'add_default_filters' ) ); + + } + + + /* + Make sure the option will always get validated, independently of register_setting() + (only available on back-end) + */ + add_filter( 'sanitize_option_' . $this->option_name, array( $this, 'validate' ) ); + + /* Register our option for the admin pages */ + add_action( 'admin_init', array( $this, 'register_setting' ) ); + + + /* Set option group name if not given */ + if ( ! isset( $this->group_name ) || $this->group_name === '' ) { + $this->group_name = 'yoast_' . $this->option_name . '_options'; + } + + /* Translate some defaults as early as possible - textdomain is loaded in init on priority 1 */ + if ( method_exists( $this, 'translate_defaults' ) ) { + add_action( 'init', array( $this, 'translate_defaults' ), 2 ); + } + + /** + * Enrich defaults once custom post types and taxonomies have been registered + * which is normally done on the init action. + * + * @todo - [JRF/testers] verify that none of the options which are only available after + * enrichment are used before the enriching + */ + if ( method_exists( $this, 'enrich_defaults' ) ) { + add_action( 'init', array( $this, 'enrich_defaults' ), 99 ); + } + } + +// @codingStandardsIgnoreStart + + /** + * All concrete classes *must* contain the get_instance method + * @internal Unfortunately I can't define it as an abstract as it also *has* to be static.... + */ + // abstract protected static function get_instance(); + + + /** + * Concrete classes *may* contain a translate_defaults method + */ + // abstract public function translate_defaults(); + + + /** + * Concrete classes *may* contain a enrich_defaults method to add additional defaults once + * all post_types and taxonomies have been registered + */ + // abstract public function enrich_defaults(); + +// @codingStandardsIgnoreEnd + + /* *********** METHODS INFLUENCING get_option() *********** */ + + /** + * Add filters to make sure that the option default is returned if the option is not set + * + * @return void + */ + public function add_default_filters() { + // Don't change, needs to check for false as could return prio 0 which would evaluate to false. + if ( has_filter( 'default_option_' . $this->option_name, array( $this, 'get_defaults' ) ) === false ) { + add_filter( 'default_option_' . $this->option_name, array( $this, 'get_defaults' ) ); + } + } + + + /** + * Abusing a filter to re-add our default filters + * WP 3.7 specific as update_option action hook was in the wrong place temporarily + * + * @see http://core.trac.wordpress.org/ticket/25705 + * + * @param mixed $new_value Pass through value in filter. + * + * @deprecated 3.7 version no longer supported. + * + * @todo Drop this and logic adding it. R. + * + * @return mixed unchanged value + */ + public function wp37_add_default_filters( $new_value ) { + $this->add_default_filters(); + + return $new_value; + } + + /** + * Validate webmaster tools & Pinterest verification strings + * + * @param string $key Key to check, by type of service. + * @param array $dirty Dirty data. + * @param array $old Old data. + * @param array $clean Clean data by reference. + */ + public function validate_verification_string( $key, $dirty, $old, &$clean ) { + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + $meta = $dirty[ $key ]; + if ( strpos( $meta, 'content=' ) ) { + // Make sure we only have the real key, not a complete meta tag. + preg_match( '`content=([\'"])?([^\'"> ]+)(?:\1|[ />])`', $meta, $match ); + if ( isset( $match[2] ) ) { + $meta = $match[2]; + } + unset( $match ); + } + + $meta = sanitize_text_field( $meta ); + if ( $meta !== '' ) { + $regex = '`^[A-Fa-f0-9_-]+$`'; + $service = ''; + + switch ( $key ) { + case 'googleverify': + $regex = '`^[A-Za-z0-9_-]+$`'; + $service = 'Google Webmaster tools'; + break; + + case 'msverify': + $service = 'Bing Webmaster tools'; + break; + + case 'pinterestverify': + $service = 'Pinterest'; + break; + + case 'yandexverify': + $service = 'Yandex Webmaster tools'; + break; + } + + if ( preg_match( $regex, $meta ) ) { + $clean[ $key ] = $meta; + } + else { + if ( isset( $old[ $key ] ) && preg_match( $regex, $old[ $key ] ) ) { + $clean[ $key ] = $old[ $key ]; + } + if ( function_exists( 'add_settings_error' ) ) { + add_settings_error( + $this->group_name, // Slug title of the setting. + '_' . $key, // Suffix-id for the error message box. + sprintf( __( '%s does not seem to be a valid %s verification string. Please correct.', 'wordpress-seo' ), '' . esc_html( $meta ) . '', $service ), // The error message. + 'error' // Error type, either 'error' or 'updated'. + ); + } + } + } + } + } + + /** + * @param string $key Key to check, by type of service. + * @param array $dirty Dirty data. + * @param array $old Old data. + * @param array $clean Clean data by reference. + */ + public function validate_url( $key, $dirty, $old, &$clean ) { + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + $url = WPSEO_Utils::sanitize_url( $dirty[ $key ] ); + if ( $url !== '' ) { + $clean[ $key ] = $url; + } + else { + if ( isset( $old[ $key ] ) && $old[ $key ] !== '' ) { + $url = WPSEO_Utils::sanitize_url( $old[ $key ] ); + if ( $url !== '' ) { + $clean[ $key ] = $url; + } + } + if ( function_exists( 'add_settings_error' ) ) { + $url = WPSEO_Utils::sanitize_url( $dirty[ $key ] ); + add_settings_error( + $this->group_name, // Slug title of the setting. + '_' . $key, // Suffix-id for the error message box. + sprintf( __( '%s does not seem to be a valid url. Please correct.', 'wordpress-seo' ), '' . esc_html( $url ) . '' ), // The error message. + 'error' // Error type, either 'error' or 'updated'. + ); + } + } + } + } + + /** + * Remove the default filters. + * Called from the validate() method to prevent failure to add new options + * + * @return void + */ + public function remove_default_filters() { + remove_filter( 'default_option_' . $this->option_name, array( $this, 'get_defaults' ) ); + } + + + /** + * Get the enriched default value for an option + * + * Checks if the concrete class contains an enrich_defaults() method and if so, runs it. + * + * @internal the enrich_defaults method is used to set defaults for variable array keys in an option, + * such as array keys depending on post_types and/or taxonomies + * + * @return array + */ + public function get_defaults() { + if ( method_exists( $this, 'translate_defaults' ) ) { + $this->translate_defaults(); + } + + if ( method_exists( $this, 'enrich_defaults' ) ) { + $this->enrich_defaults(); + } + + return apply_filters( 'wpseo_defaults', $this->defaults, $this->option_name ); + } + + + /** + * Add filters to make sure that the option is merged with its defaults before being returned + * + * @return void + */ + public function add_option_filters() { + // Don't change, needs to check for false as could return prio 0 which would evaluate to false. + if ( has_filter( 'option_' . $this->option_name, array( $this, 'get_option' ) ) === false ) { + add_filter( 'option_' . $this->option_name, array( $this, 'get_option' ) ); + } + } + + + /** + * Remove the option filters. + * Called from the clean_up methods to make sure we retrieve the original old option + * + * @return void + */ + public function remove_option_filters() { + remove_filter( 'option_' . $this->option_name, array( $this, 'get_option' ) ); + } + + + /** + * Merge an option with its default values + * + * This method should *not* be called directly!!! It is only meant to filter the get_option() results + * + * @param mixed $options Option value. + * + * @return mixed Option merged with the defaults for that option + */ + public function get_option( $options = null ) { + $filtered = $this->array_filter_merge( $options ); + + /* + If the option contains variable option keys, make sure we don't remove those settings + - even if the defaults are not complete yet. + Unfortunately this means we also won't be removing the settings for post types or taxonomies + which are no longer in the WP install, but rather that than the other way around + */ + if ( isset( $this->variable_array_key_patterns ) ) { + $filtered = $this->retain_variable_keys( $options, $filtered ); + } + + return $filtered; + } + + + /* *********** METHODS influencing add_uption(), update_option() and saving from admin pages *********** */ + + /** + * Register (whitelist) the option for the configuration pages. + * The validation callback is already registered separately on the sanitize_option hook, + * so no need to double register. + * + * @return void + */ + public function register_setting() { + if ( WPSEO_Utils::grant_access() ) { + register_setting( $this->group_name, $this->option_name ); + } + } + + + /** + * Validate the option + * + * @param mixed $option_value The unvalidated new value for the option. + * + * @return array Validated new value for the option + */ + public function validate( $option_value ) { + $clean = $this->get_defaults(); + + /* Return the defaults if the new value is empty */ + if ( ! is_array( $option_value ) || $option_value === array() ) { + return $clean; + } + + + $option_value = array_map( array( 'WPSEO_Utils', 'trim_recursive' ), $option_value ); + if ( $this->multisite_only !== true ) { + $old = get_option( $this->option_name ); + } + else { + $old = get_site_option( $this->option_name ); + } + $clean = $this->validate_option( $option_value, $clean, $old ); + + /* Retain the values for variable array keys even when the post type/taxonomy is not yet registered */ + if ( isset( $this->variable_array_key_patterns ) ) { + $clean = $this->retain_variable_keys( $option_value, $clean ); + } + + $this->remove_default_filters(); + + return $clean; + } + + + /** + * All concrete classes must contain a validate_option() method which validates all + * values within the option + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + */ + abstract protected function validate_option( $dirty, $clean, $old ); + + + /* *********** METHODS for ADDING/UPDATING/UPGRADING the option *********** */ + + /** + * Retrieve the real old value (unmerged with defaults) + * + * @return array|bool the original option value (which can be false if the option doesn't exist) + */ + protected function get_original_option() { + $this->remove_default_filters(); + $this->remove_option_filters(); + + // Get (unvalidated) array, NOT merged with defaults. + if ( $this->multisite_only !== true ) { + $option_value = get_option( $this->option_name ); + } + else { + $option_value = get_site_option( $this->option_name ); + } + + $this->add_option_filters(); + $this->add_default_filters(); + + return $option_value; + } + + /** + * Add the option if it doesn't exist for some strange reason + * + * @uses WPSEO_Option::get_original_option() + * + * @return void + */ + public function maybe_add_option() { + if ( $this->get_original_option() === false ) { + if ( $this->multisite_only !== true ) { + update_option( $this->option_name, $this->get_defaults() ); + } + else { + $this->update_site_option( $this->get_defaults() ); + } + } + } + + + /** + * Update a site_option + * + * @internal This special method is only needed for multisite options, but very needed indeed there. + * The order in which certain functions and hooks are run is different between get_option() and + * get_site_option() which means in practice that the removing of the default filters would be + * done too late and the re-adding of the default filters might not be done at all. + * Aka: use the WPSEO_Options::update_site_option() method (which calls this method) for + * safely adding/updating multisite options. + * + * @param mixed $value The new value for the option. + * + * @return bool whether the update was succesfull + */ + public function update_site_option( $value ) { + if ( $this->multisite_only === true && is_multisite() ) { + $this->remove_default_filters(); + $result = update_site_option( $this->option_name, $value ); + $this->add_default_filters(); + + return $result; + } + else { + return false; + } + } + + + /** + * Retrieve the real old value (unmerged with defaults), clean and re-save the option + * + * @uses WPSEO_Option::get_original_option() + * @uses WPSEO_Option::import() + * + * @param string $current_version (optional) Version from which to upgrade, if not set, version specific upgrades will be disregarded. + * + * @return void + */ + public function clean( $current_version = null ) { + $option_value = $this->get_original_option(); + $this->import( $option_value, $current_version ); + } + + + /** + * Clean and re-save the option + * + * @uses clean_option() method from concrete class if it exists + * + * @todo [JRF/whomever] Figure out a way to show settings error during/after the upgrade - maybe + * something along the lines of: + * -> add them to a property in this class + * -> if that property isset at the end of the routine and add_settings_error function does not exist, + * save as transient (or update the transient if one already exists) + * -> next time an admin is in the WP back-end, show the errors and delete the transient or only delete it + * once the admin has dismissed the message (add ajax function) + * Important: all validation routines which add_settings_errors would need to be changed for this to work + * + * @param array $option_value Option value to be imported. + * @param string $current_version (optional) Version from which to upgrade, if not set, version specific upgrades will be disregarded. + * @param array $all_old_option_values (optional) Only used when importing old options to have access to the real old values, in contrast to the saved ones. + * + * @return void + */ + public function import( $option_value, $current_version = null, $all_old_option_values = null ) { + if ( $option_value === false ) { + $option_value = $this->get_defaults(); + } + elseif ( is_array( $option_value ) && method_exists( $this, 'clean_option' ) ) { + $option_value = $this->clean_option( $option_value, $current_version, $all_old_option_values ); + } + + /* + Save the cleaned value - validation will take care of cleaning out array keys which + should no longer be there + */ + if ( $this->multisite_only !== true ) { + update_option( $this->option_name, $option_value ); + } + else { + $this->update_site_option( $this->option_name, $option_value ); + } + } + + + /** + * Concrete classes *may* contain a clean_option method which will clean out old/renamed + * values within the option + */ + // abstract public function clean_option( $option_value, $current_version = null, $all_old_option_values = null ); + /* *********** HELPER METHODS for internal use *********** */ + + /** + * Helper method - Combines a fixed array of default values with an options array + * while filtering out any keys which are not in the defaults array. + * + * @todo [JRF] - shouldn't this be a straight array merge ? at the end of the day, the validation + * removes any invalid keys on save + * + * @param array $options (Optional) Current options. If not set, the option defaults for the $option_key will be returned. + * + * @return array Combined and filtered options array. + */ + protected function array_filter_merge( $options = null ) { + + $defaults = $this->get_defaults(); + + if ( ! isset( $options ) || $options === false || $options === array() ) { + return $defaults; + } + + $options = (array) $options; + + /* + $filtered = array(); + + if ( $defaults !== array() ) { + foreach ( $defaults as $key => $default_value ) { + // @todo should this walk through array subkeys ? + $filtered[ $key ] = ( isset( $options[ $key ] ) ? $options[ $key ] : $default_value ); + } + } + */ + $filtered = array_merge( $defaults, $options ); + + return $filtered; + } + + + /** + * Make sure that any set option values relating to post_types and/or taxonomies are retained, + * even when that post_type or taxonomy may not yet have been registered. + * + * @internal The wpseo_titles concrete class overrules this method. Make sure that any changes + * applied here, also get ported to that version. + * + * @param array $dirty Original option as retrieved from the database. + * @param array $clean Filtered option where any options which shouldn't be in our option + * have already been removed and any options which weren't set + * have been set to their defaults. + * + * @return array + */ + protected function retain_variable_keys( $dirty, $clean ) { + if ( ( is_array( $this->variable_array_key_patterns ) && $this->variable_array_key_patterns !== array() ) && ( is_array( $dirty ) && $dirty !== array() ) ) { + foreach ( $dirty as $key => $value ) { + + // Do nothing if already in filtered options. + if ( isset( $clean[ $key ] ) ) { + continue; + } + + foreach ( $this->variable_array_key_patterns as $pattern ) { + + if ( strpos( $key, $pattern ) === 0 ) { + $clean[ $key ] = $value; + break; + } + } + } + } + + return $clean; + } + + + /** + * Check whether a given array key conforms to one of the variable array key patterns for this option + * + * @usedby validate_option() methods for options with variable array keys + * + * @param string $key Array key to check. + * + * @return string Pattern if it conforms, original array key if it doesn't or if the option + * does not have variable array keys + */ + protected function get_switch_key( $key ) { + if ( ! isset( $this->variable_array_key_patterns ) || ( ! is_array( $this->variable_array_key_patterns ) || $this->variable_array_key_patterns === array() ) ) { + return $key; + } + + foreach ( $this->variable_array_key_patterns as $pattern ) { + if ( strpos( $key, $pattern ) === 0 ) { + return $pattern; + } + } + + return $key; + } + + + /* *********** DEPRECATED METHODS *********** */ + + /** + * Emulate the WP native sanitize_text_field function in a %%variable%% safe way + * + * @see https://core.trac.wordpress.org/browser/trunk/src/wp-includes/formatting.php for the original + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::sanitize_text_field() + * @see WPSEO_Utils::sanitize_text_field() + * + * @param string $value String value to sanitize. + * + * @return string + */ + public static function sanitize_text_field( $value ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::sanitize_text_field()' ); + + return WPSEO_Utils::sanitize_text_field( $value ); + } + + + /** + * Sanitize a url for saving to the database + * Not to be confused with the old native WP function + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::sanitize_url() + * @see WPSEO_Utils::sanitize_url() + * + * @param string $value URL string to sanitize. + * @param array $allowed_protocols Set of allowed protocols. + * + * @return string + */ + public static function sanitize_url( $value, $allowed_protocols = array( 'http', 'https' ) ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::sanitize_url()' ); + + return WPSEO_Utils::sanitize_url( $value, $allowed_protocols ); + } + + /** + * Validate a value as boolean + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::validate_bool() + * @see WPSEO_Utils::validate_bool() + * + * @static + * + * @param mixed $value Value to validate. + * + * @return bool + */ + public static function validate_bool( $value ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::validate_bool()' ); + + return WPSEO_Utils::validate_bool( $value ); + } + + /** + * Cast a value to bool + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::emulate_filter_bool() + * @see WPSEO_Utils::emulate_filter_bool() + * + * @static + * + * @param mixed $value Value to cast. + * + * @return bool + */ + public static function emulate_filter_bool( $value ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::emulate_filter_bool()' ); + + return WPSEO_Utils::emulate_filter_bool( $value ); + } + + + /** + * Validate a value as integer + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::validate_int() + * @see WPSEO_Utils::validate_int() + * + * @param mixed $value Value to validate. + * + * @return mixed int or false in case of failure to convert to int + */ + public static function validate_int( $value ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::validate_int()' ); + + return WPSEO_Utils::validate_int( $value ); + } + + /** + * Cast a value to integer + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::emulate_filter_int() + * @see WPSEO_Utils::emulate_filter_int() + * + * @static + * + * @param mixed $value Value to cast. + * + * @return int|bool + */ + public static function emulate_filter_int( $value ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::emulate_filter_int()' ); + + return WPSEO_Utils::emulate_filter_int( $value ); + } + + + /** + * Recursively trim whitespace round a string value or of string values within an array + * Only trims strings to avoid typecasting a variable (to string) + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::trim_recursive() + * @see WPSEO_Utils::trim_recursive() + * + * @static + * + * @param mixed $value Value to trim or array of values to trim. + * + * @return mixed Trimmed value or array of trimmed values + */ + public static function trim_recursive( $value ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::trim_recursive()' ); + + return WPSEO_Utils::trim_recursive( $value ); + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-options.php b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-options.php new file mode 100644 index 0000000..4002624 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-options.php @@ -0,0 +1,455 @@ + (string) name of concrete class for the option + * @static + */ + public static $options = array( + 'wpseo' => 'WPSEO_Option_Wpseo', + 'wpseo_permalinks' => 'WPSEO_Option_Permalinks', + 'wpseo_titles' => 'WPSEO_Option_Titles', + 'wpseo_social' => 'WPSEO_Option_Social', + 'wpseo_rss' => 'WPSEO_Option_RSS', + 'wpseo_internallinks' => 'WPSEO_Option_InternalLinks', + 'wpseo_xml' => 'WPSEO_Option_XML', + 'wpseo_ms' => 'WPSEO_Option_MS', + 'wpseo_taxonomy_meta' => 'WPSEO_Taxonomy_Meta', + ); + + /** + * @var array Array of instantiated option objects + */ + protected static $option_instances = array(); + + /** + * @var object Instance of this class + */ + protected static $instance; + + + /** + * Instantiate all the WPSEO option management classes + */ + protected function __construct() { + $is_multisite = is_multisite(); + + foreach ( self::$options as $option_name => $option_class ) { + $instance = call_user_func( array( $option_class, 'get_instance' ) ); + + if ( ! $instance->multisite_only || $is_multisite ) { + self::$option_instances[ $option_name ] = $instance; + } + else { + unset( self::$options[ $option_name ] ); + } + } + } + + /** + * Get the singleton instance of this class + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Get the group name of an option for use in the settings form + * + * @param string $option_name the option for which you want to retrieve the option group name. + * + * @return string|bool + */ + public static function get_group_name( $option_name ) { + if ( isset( self::$option_instances[ $option_name ] ) ) { + return self::$option_instances[ $option_name ]->group_name; + } + + return false; + } + + /** + * Get a specific default value for an option + * + * @param string $option_name The option for which you want to retrieve a default. + * @param string $key The key within the option who's default you want. + * + * @return mixed + */ + public static function get_default( $option_name, $key ) { + if ( isset( self::$option_instances[ $option_name ] ) ) { + $defaults = self::$option_instances[ $option_name ]->get_defaults(); + if ( isset( $defaults[ $key ] ) ) { + return $defaults[ $key ]; + } + } + + return null; + } + + /** + * Update a site_option + * + * @param string $option_name The option name of the option to save. + * @param mixed $value The new value for the option. + * + * @return bool + */ + public static function update_site_option( $option_name, $value ) { + if ( is_network_admin() && isset( self::$option_instances[ $option_name ] ) ) { + return self::$option_instances[ $option_name ]->update_site_option( $value ); + } + else { + return false; + } + } + + /** + * Get the instantiated option instance + * + * @param string $option_name The option for which you want to retrieve the instance. + * + * @return object|bool + */ + public static function get_option_instance( $option_name ) { + if ( isset( self::$option_instances[ $option_name ] ) ) { + return self::$option_instances[ $option_name ]; + } + + return false; + } + + /** + * Retrieve an array of the options which should be included in get_all() and reset(). + * + * @static + * @return array Array of option names + */ + public static function get_option_names() { + static $option_names = array(); + + if ( $option_names === array() ) { + foreach ( self::$option_instances as $option_name => $option_object ) { + if ( $option_object->include_in_all === true ) { + $option_names[] = $option_name; + } + } + $option_names = apply_filters( 'wpseo_options', $option_names ); + } + + return $option_names; + } + + /** + * Retrieve all the options for the SEO plugin in one go. + * + * @todo [JRF] see if we can get some extra efficiency for this one, though probably not as options may + * well change between calls (enriched defaults and such) + * + * @static + * @return array Array combining the values of all the options + */ + public static function get_all() { + return self::get_options( self::get_option_names() ); + } + + /** + * Retrieve one or more options for the SEO plugin. + * + * @static + * + * @param array $option_names An array of option names of the options you want to get. + * + * @return array Array combining the values of the requested options + */ + public static function get_options( array $option_names ) { + $options = array(); + $option_names = array_filter( $option_names, 'is_string' ); + foreach ( $option_names as $option_name ) { + if ( isset( self::$option_instances[ $option_name ] ) ) { + $option = self::get_option( $option_name ); + $options = array_merge( $options, $option ); + } + } + + return $options; + } + + /** + * Retrieve a single option for the SEO plugin. + * + * @static + * + * @param string $option_name the name of the option you want to get. + * + * @return array Array containing the requested option + */ + public static function get_option( $option_name ) { + $option = null; + if ( is_string( $option_name ) && ! empty( $option_name ) ) { + if ( isset( self::$option_instances[ $option_name ] ) ) { + if ( self::$option_instances[ $option_name ]->multisite_only !== true ) { + $option = get_option( $option_name ); + } + else { + $option = get_site_option( $option_name ); + } + } + } + + return $option; + } + + /** + * Run the clean up routine for one or all options + * + * @param array|string $option_name (optional) the option you want to clean or an array of + * option names for the options you want to clean. + * If not set, all options will be cleaned. + * @param string $current_version (optional) Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * + * @return void + */ + public static function clean_up( $option_name = null, $current_version = null ) { + if ( isset( $option_name ) && is_string( $option_name ) && $option_name !== '' ) { + if ( isset( self::$option_instances[ $option_name ] ) ) { + self::$option_instances[ $option_name ]->clean( $current_version ); + } + } + elseif ( isset( $option_name ) && is_array( $option_name ) && $option_name !== array() ) { + foreach ( $option_name as $option ) { + if ( isset( self::$option_instances[ $option ] ) ) { + self::$option_instances[ $option ]->clean( $current_version ); + } + } + unset( $option ); + } + else { + foreach ( self::$option_instances as $instance ) { + $instance->clean( $current_version ); + } + unset( $instance ); + + // If we've done a full clean-up, we can safely remove this really old option. + delete_option( 'wpseo_indexation' ); + } + } + + + /** + * Check that all options exist in the database and add any which don't + * + * @return void + */ + public static function ensure_options_exist() { + foreach ( self::$option_instances as $instance ) { + $instance->maybe_add_option(); + } + } + + /** + * Correct the inadvertent removal of the fallback to default values from the breadcrumbs + * + * @since 1.5.2.3 + */ + public static function bring_back_breadcrumb_defaults() { + if ( isset( self::$option_instances['wpseo_internallinks'] ) ) { + self::$option_instances['wpseo_internallinks']->bring_back_defaults(); + } + } + + /** + * Initialize some options on first install/activate/reset + * + * @static + * @return void + */ + public static function initialize() { + /* Force WooThemes to use Yoast SEO data. */ + if ( function_exists( 'woo_version_init' ) ) { + update_option( 'seo_woo_use_third_party_data', 'true' ); + } + } + + /** + * Reset all options to their default values and rerun some tests + * + * @static + * @return void + */ + public static function reset() { + if ( ! is_multisite() ) { + $option_names = self::get_option_names(); + if ( is_array( $option_names ) && $option_names !== array() ) { + foreach ( $option_names as $option_name ) { + delete_option( $option_name ); + update_option( $option_name, get_option( $option_name ) ); + } + } + unset( $option_names ); + } + else { + // Reset MS blog based on network default blog setting. + self::reset_ms_blog( get_current_blog_id() ); + } + + self::initialize(); + } + + /** + * Initialize default values for a new multisite blog + * + * @static + * + * @param bool $force_init Whether to always do the initialization routine (title/desc test). + * + * @return void + */ + public static function maybe_set_multisite_defaults( $force_init = false ) { + $option = get_option( 'wpseo' ); + + if ( is_multisite() ) { + if ( $option['ms_defaults_set'] === false ) { + self::reset_ms_blog( get_current_blog_id() ); + self::initialize(); + } + else if ( $force_init === true ) { + self::initialize(); + } + } + } + + /** + * Reset all options for a specific multisite blog to their default values based upon a + * specified default blog if one was chosen on the network page or the plugin defaults if it was not + * + * @static + * + * @param int|string $blog_id Blog id of the blog for which to reset the options. + * + * @return void + */ + public static function reset_ms_blog( $blog_id ) { + if ( is_multisite() ) { + $options = get_site_option( 'wpseo_ms' ); + $option_names = self::get_option_names(); + + if ( is_array( $option_names ) && $option_names !== array() ) { + $base_blog_id = $blog_id; + if ( $options['defaultblog'] !== '' && $options['defaultblog'] != 0 ) { + $base_blog_id = $options['defaultblog']; + } + + foreach ( $option_names as $option_name ) { + delete_blog_option( $blog_id, $option_name ); + + $new_option = get_blog_option( $base_blog_id, $option_name ); + + /* Remove sensitive, theme dependent and site dependent info */ + if ( isset( self::$option_instances[ $option_name ] ) && self::$option_instances[ $option_name ]->ms_exclude !== array() ) { + foreach ( self::$option_instances[ $option_name ]->ms_exclude as $key ) { + unset( $new_option[ $key ] ); + } + } + + if ( $option_name === 'wpseo' ) { + $new_option['ms_defaults_set'] = true; + } + + update_blog_option( $blog_id, $option_name, $new_option ); + } + } + } + } + + /** + * Saves the option to the database. + * + * @param string $wpseo_options_group_name The name for the wpseo option group in the database. + * @param string $option_name The name for the option to set. + * @param * $option_value The value for the option. + * + * @return boolean Returns true if the option is successfully saved in the database. + */ + public static function save_option( $wpseo_options_group_name, $option_name, $option_value ) { + $options = WPSEO_Options::get_option( $wpseo_options_group_name ); + $options[ $option_name ] = $option_value; + update_option( $wpseo_options_group_name, $options ); + + // Check if everything got saved properly. + $saved_option = self::get_option( $wpseo_options_group_name ); + return $saved_option[ $option_name ] === $options[ $option_name ]; + } + + /********************** DEPRECATED FUNCTIONS **********************/ + + /** + * Check whether the current user is allowed to access the configuration. + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::grant_access() + * @see WPSEO_Utils::grant_access() + * + * @return boolean + */ + public static function grant_access() { + _deprecated_function( __METHOD__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::grant_access()' ); + + return WPSEO_Utils::grant_access(); + } + + /** + * Clears the WP or W3TC cache depending on which is used + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::clear_cache() + * @see WPSEO_Utils::clear_cache() + */ + public static function clear_cache() { + _deprecated_function( __METHOD__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::clear_cache()' ); + WPSEO_Utils::clear_cache(); + } + + + /** + * Flush W3TC cache after succesfull update/add of taxonomy meta option + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::flush_w3tc_cache() + * @see WPSEO_Utils::flush_w3tc_cache() + */ + public static function flush_w3tc_cache() { + _deprecated_function( __METHOD__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::flush_w3tc_cache()' ); + WPSEO_Utils::flush_w3tc_cache(); + } + + + /** + * Clear rewrite rules + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::clear_rewrites() + * @see WPSEO_Utils::clear_rewrites() + */ + public static function clear_rewrites() { + _deprecated_function( __METHOD__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::clear_rewrites()' ); + WPSEO_Utils::clear_rewrites(); + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-taxonomy-meta.php b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-taxonomy-meta.php new file mode 100644 index 0000000..c8c0d15 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-taxonomy-meta.php @@ -0,0 +1,600 @@ +get_defaults(); + * @internal Important: in contrast to most defaults, the below array format is + * very bare. The real option is in the format [taxonomy_name][term_id][...] + * where [...] is any of the $defaults_per_term options shown below. + * This is of course taken into account in the below methods. + */ + protected $defaults = array(); + + + /** + * @var string Option name - same as $option_name property, but now also available to static methods + * @static + */ + public static $name; + + /** + * @var array Array of defaults for individual taxonomy meta entries + * @static + */ + public static $defaults_per_term = array( + 'wpseo_title' => '', + 'wpseo_desc' => '', + 'wpseo_metakey' => '', + 'wpseo_canonical' => '', + 'wpseo_bctitle' => '', + 'wpseo_noindex' => 'default', + 'wpseo_sitemap_include' => '-', + 'wpseo_focuskw' => '', + 'wpseo_linkdex' => '', + 'wpseo_content_score' => '', + + // Social fields. + 'wpseo_opengraph-title' => '', + 'wpseo_opengraph-description' => '', + 'wpseo_opengraph-image' => '', + 'wpseo_twitter-title' => '', + 'wpseo_twitter-description' => '', + 'wpseo_twitter-image' => '', + ); + + /** + * @var array Available index options + * Used for form generation and input validation + * + * @static + * + * @internal Labels (translation) added on admin_init via WPSEO_Taxonomy::translate_meta_options() + */ + public static $no_index_options = array( + 'default' => '', + 'index' => '', + 'noindex' => '', + ); + + /** + * @var array Available sitemap include options + * Used for form generation and input validation + * + * @static + * + * @internal Labels (translation) added on admin_init via WPSEO_Taxonomy::translate_meta_options() + */ + public static $sitemap_include_options = array( + '-' => '', + 'always' => '', + 'never' => '', + ); + + + /** + * Add the actions and filters for the option + * + * @todo [JRF => testers] Check if the extra actions below would run into problems if an option + * is updated early on and if so, change the call to schedule these for a later action on add/update + * instead of running them straight away + * + * @return \WPSEO_Taxonomy_Meta + */ + protected function __construct() { + parent::__construct(); + + self::$name = $this->option_name; + + /* On succesfull update/add of the option, flush the W3TC cache */ + add_action( 'add_option_' . $this->option_name, array( 'WPSEO_Utils', 'flush_w3tc_cache' ) ); + add_action( 'update_option_' . $this->option_name, array( 'WPSEO_Utils', 'flush_w3tc_cache' ) ); + } + + + /** + * Get the singleton instance of this class + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + self::$name = self::$instance->option_name; + } + + return self::$instance; + } + + + /** + * Add extra default options received from a filter + */ + public function enrich_defaults() { + $extra_defaults_per_term = apply_filters( 'wpseo_add_extra_taxmeta_term_defaults', array() ); + if ( is_array( $extra_defaults_per_term ) ) { + self::$defaults_per_term = array_merge( $extra_defaults_per_term, self::$defaults_per_term ); + } + } + + + /** + * Helper method - Combines a fixed array of default values with an options array + * while filtering out any keys which are not in the defaults array. + * + * @static + * + * @param string $option_key Option name of the option we're doing the merge for. + * @param array $options (Optional) Current options. If not set, the option defaults for the $option_key will be returned. + * + * @return array Combined and filtered options array. + */ + + /* + Public function array_filter_merge( $option_key, $options = null ) { + + $defaults = $this->get_defaults( $option_key ); + + if ( ! isset( $options ) || $options === false ) { + return $defaults; + } + + / * + @internal Adding the defaults to all taxonomy terms each time the option is retrieved + will be quite inefficient if there are a lot of taxonomy terms + As long as taxonomy_meta is only retrieved via methods in this class, we shouldn't need this + + $options = (array) $options; + $filtered = array(); + + if ( $options !== array() ) { + foreach ( $options as $taxonomy => $terms ) { + if ( is_array( $terms ) && $terms !== array() ) { + foreach ( $terms as $id => $term_meta ) { + foreach ( self::$defaults_per_term as $name => $default ) { + if ( isset( $options[ $taxonomy ][ $id ][ $name ] ) ) { + $filtered[ $taxonomy ][ $id ][ $name ] = $options[ $taxonomy ][ $id ][ $name ]; + } + else { + $filtered[ $name ] = $default; + } + } + } + } + } + unset( $taxonomy, $terms, $id, $term_meta, $name, $default ); + } + // end of may be remove. + + return $filtered; + * / + + return (array) $options; + } + */ + + + /** + * Validate the option + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array Validated clean value for the option to be saved to the database + */ + protected function validate_option( $dirty, $clean, $old ) { + /* + Prevent complete validation (which can be expensive when there are lots of terms) + if only one item has changed and has already been validated + */ + if ( isset( $dirty['wpseo_already_validated'] ) && $dirty['wpseo_already_validated'] === true ) { + unset( $dirty['wpseo_already_validated'] ); + + return $dirty; + } + + + foreach ( $dirty as $taxonomy => $terms ) { + /* Don't validate taxonomy - may not be registered yet and we don't want to remove valid ones */ + if ( is_array( $terms ) && $terms !== array() ) { + foreach ( $terms as $term_id => $meta_data ) { + /* Only validate term if the taxonomy exists */ + if ( taxonomy_exists( $taxonomy ) && get_term_by( 'id', $term_id, $taxonomy ) === false ) { + /* Is this term id a special case ? */ + if ( has_filter( 'wpseo_tax_meta_special_term_id_validation_' . $term_id ) !== false ) { + $clean[ $taxonomy ][ $term_id ] = apply_filters( 'wpseo_tax_meta_special_term_id_validation_' . $term_id, $meta_data, $taxonomy, $term_id ); + } + continue; + } + + if ( is_array( $meta_data ) && $meta_data !== array() ) { + /* Validate meta data */ + $old_meta = self::get_term_meta( $term_id, $taxonomy ); + $meta_data = self::validate_term_meta_data( $meta_data, $old_meta ); + if ( $meta_data !== array() ) { + $clean[ $taxonomy ][ $term_id ] = $meta_data; + } + } + + // Deal with special cases (for when taxonomy doesn't exist yet). + if ( ! isset( $clean[ $taxonomy ][ $term_id ] ) && has_filter( 'wpseo_tax_meta_special_term_id_validation_' . $term_id ) !== false ) { + $clean[ $taxonomy ][ $term_id ] = apply_filters( 'wpseo_tax_meta_special_term_id_validation_' . $term_id, $meta_data, $taxonomy, $term_id ); + } + } + } + } + + return $clean; + } + + + /** + * Validate the meta data for one individual term and removes default values (no need to save those) + * + * @static + * + * @param array $meta_data New values. + * @param array $old_meta The original values. + * + * @return array Validated and filtered value + */ + public static function validate_term_meta_data( $meta_data, $old_meta ) { + + $clean = self::$defaults_per_term; + $meta_data = array_map( array( 'WPSEO_Utils', 'trim_recursive' ), $meta_data ); + + if ( ! is_array( $meta_data ) || $meta_data === array() ) { + return $clean; + } + + foreach ( $clean as $key => $value ) { + switch ( $key ) { + + case 'wpseo_noindex': + if ( isset( $meta_data[ $key ] ) ) { + if ( isset( self::$no_index_options[ $meta_data[ $key ] ] ) ) { + $clean[ $key ] = $meta_data[ $key ]; + } + } + elseif ( isset( $old_meta[ $key ] ) ) { + // Retain old value if field currently not in use. + $clean[ $key ] = $old_meta[ $key ]; + } + break; + + case 'wpseo_sitemap_include': + if ( isset( $meta_data[ $key ], self::$sitemap_include_options[ $meta_data[ $key ] ] ) ) { + $clean[ $key ] = $meta_data[ $key ]; + } + break; + + case 'wpseo_canonical': + if ( isset( $meta_data[ $key ] ) && $meta_data[ $key ] !== '' ) { + $url = WPSEO_Utils::sanitize_url( $meta_data[ $key ] ); + if ( $url !== '' ) { + $clean[ $key ] = $url; + } + unset( $url ); + } + break; + + case 'wpseo_metakey': + case 'wpseo_bctitle': + if ( isset( $meta_data[ $key ] ) ) { + $clean[ $key ] = WPSEO_Utils::sanitize_text_field( stripslashes( $meta_data[ $key ] ) ); + } + elseif ( isset( $old_meta[ $key ] ) ) { + // Retain old value if field currently not in use. + $clean[ $key ] = $old_meta[ $key ]; + } + break; + case 'wpseo_focuskw': + case 'wpseo_title': + case 'wpseo_desc': + case 'wpseo_linkdex': + default: + if ( isset( $meta_data[ $key ] ) && is_string( $meta_data[ $key ] ) ) { + $clean[ $key ] = WPSEO_Utils::sanitize_text_field( stripslashes( $meta_data[ $key ] ) ); + } + + if ( 'wpseo_focuskw' === $key ) { + $clean[ $key ] = str_replace( array( + '<', + '>', + '"', + '`', + '<', + '>', + '"', + '`', + ), '', $clean[ $key ] ); + } + break; + } + + $clean[ $key ] = apply_filters( 'wpseo_sanitize_tax_meta_' . $key, $clean[ $key ], ( isset( $meta_data[ $key ] ) ? $meta_data[ $key ] : null ), ( isset( $old_meta[ $key ] ) ? $old_meta[ $key ] : null ) ); + } + + // Only save the non-default values. + return array_diff_assoc( $clean, self::$defaults_per_term ); + } + + + /** + * Clean a given option value + * - Convert old option values to new + * - Fixes strings which were escaped (should have been sanitized - escaping is for output) + * + * @param array $option_value Old (not merged with defaults or filtered) option value to + * clean according to the rules for this option. + * @param string $current_version (optional) Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * @param array $all_old_option_values (optional) Only used when importing old options to have + * access to the real old values, in contrast to the saved ones. + * + * @return array Cleaned option + */ + protected function clean_option( $option_value, $current_version = null, $all_old_option_values = null ) { + + /* Clean up old values and remove empty arrays */ + if ( is_array( $option_value ) && $option_value !== array() ) { + + foreach ( $option_value as $taxonomy => $terms ) { + + if ( is_array( $terms ) && $terms !== array() ) { + + foreach ( $terms as $term_id => $meta_data ) { + if ( ! is_array( $meta_data ) || $meta_data === array() ) { + // Remove empty term arrays. + unset( $option_value[ $taxonomy ][ $term_id ] ); + } + else { + foreach ( $meta_data as $key => $value ) { + + switch ( $key ) { + case 'noindex': + if ( $value === 'on' ) { + // Convert 'on' to 'noindex'. + $option_value[ $taxonomy ][ $term_id ][ $key ] = 'noindex'; + } + break; + + case 'canonical': + case 'wpseo_metakey': + case 'wpseo_bctitle': + case 'wpseo_title': + case 'wpseo_desc': + case 'wpseo_linkdex': + // @todo [JRF => whomever] needs checking, I don't have example data [JRF]. + if ( $value !== '' ) { + // Fix incorrectly saved (encoded) canonical urls and texts. + $option_value[ $taxonomy ][ $term_id ][ $key ] = wp_specialchars_decode( stripslashes( $value ), ENT_QUOTES ); + } + break; + + default: + // @todo [JRF => whomever] needs checking, I don't have example data [JRF]. + if ( $value !== '' ) { + // Fix incorrectly saved (escaped) text strings. + $option_value[ $taxonomy ][ $term_id ][ $key ] = wp_specialchars_decode( $value, ENT_QUOTES ); + } + break; + } + } + } + } + } + else { + // Remove empty taxonomy arrays. + unset( $option_value[ $taxonomy ] ); + } + } + } + + return $option_value; + } + + + /** + * Retrieve a taxonomy term's meta value(s). + * + * @static + * + * @param mixed $term Term to get the meta value for + * either (string) term name, (int) term id or (object) term. + * @param string $taxonomy Name of the taxonomy to which the term is attached. + * @param string $meta (optional) Meta value to get (without prefix). + * + * @return mixed|bool Value for the $meta if one is given, might be the default. + * If no meta is given, an array of all the meta data for the term. + * False if the term does not exist or the $meta provided is invalid. + */ + public static function get_term_meta( $term, $taxonomy, $meta = null ) { + /* Figure out the term id */ + if ( is_int( $term ) ) { + $term = get_term_by( 'id', $term, $taxonomy ); + } + elseif ( is_string( $term ) ) { + $term = get_term_by( 'slug', $term, $taxonomy ); + } + + if ( is_object( $term ) && isset( $term->term_id ) ) { + $term_id = $term->term_id; + } + else { + return false; + } + + $tax_meta = self::get_term_tax_meta( $term_id, $taxonomy ); + + /* + Either return the complete array or a single value from it or false if the value does not exist + (shouldn't happen after merge with defaults, indicates typo in request) + */ + if ( ! isset( $meta ) ) { + return $tax_meta; + } + + + if ( isset( $tax_meta[ 'wpseo_' . $meta ] ) ) { + return $tax_meta[ 'wpseo_' . $meta ]; + } + + return false; + } + + /** + * Get the current queried object and return the meta value + * + * @param string $meta The meta field that is needed. + * + * @return bool|mixed + */ + public static function get_meta_without_term( $meta ) { + $term = $GLOBALS['wp_query']->get_queried_object(); + + return self::get_term_meta( $term, $term->taxonomy, $meta ); + + } + + /** + * Saving the values for the given term_id + * + * @param int $term_id ID of the term to save data for. + * @param string $taxonomy The taxonomy the term belongs to. + * @param array $meta_values The values that will be saved. + */ + public static function set_values( $term_id, $taxonomy, array $meta_values ) { + /* Validate the post values */ + $old = self::get_term_meta( $term_id, $taxonomy ); + $clean = self::validate_term_meta_data( $meta_values, $old ); + + self::save_clean_values( $term_id, $taxonomy, $clean ); + } + + /** + * Setting a single value to the term meta + * + * @param int $term_id ID of the term to save data for. + * @param string $taxonomy The taxonomy the term belongs to. + * @param string $meta_key The target meta key to store the value in. + * @param string $meta_value The value of the target meta key. + */ + public static function set_value( $term_id, $taxonomy, $meta_key, $meta_value ) { + + if ( substr( strtolower( $meta_key ), 0, 6 ) !== 'wpseo_' ) { + $meta_key = 'wpseo_' . $meta_key; + } + + self::set_values( $term_id, $taxonomy, array( $meta_key => $meta_value ) ); + } + + /** + * Find the keyword usages in the metas for the taxonomies/terms + * + * @param string $keyword The keyword to look for. + * @param string $current_term_id The current term id. + * @param string $current_taxonomy The current taxonomy name. + * + * @return array + */ + public static function get_keyword_usage( $keyword, $current_term_id, $current_taxonomy ) { + $tax_meta = self::get_tax_meta(); + + + $found = array(); + // Todo check for terms of all taxonomies, not only the current taxonomy. + foreach ( $tax_meta as $taxonomy_name => $terms ) { + foreach ( $terms as $term_id => $meta_values ) { + $is_current = ( $current_taxonomy === $taxonomy_name && (string) $current_term_id === (string) $term_id ); + if ( ! $is_current && ! empty( $meta_values['wpseo_focuskw'] ) && $meta_values['wpseo_focuskw'] === $keyword ) { + $found[] = $term_id; + } + } + } + + return array( $keyword => $found ); + } + + /** + * Saving the values for the given term_id + * + * @param int $term_id ID of the term to save data for. + * @param string $taxonomy The taxonomy the term belongs to. + * @param array $clean Array with clean values. + */ + private static function save_clean_values( $term_id, $taxonomy, array $clean ) { + $tax_meta = self::get_tax_meta(); + + /* Add/remove the result to/from the original option value */ + if ( $clean !== array() ) { + $tax_meta[ $taxonomy ][ $term_id ] = $clean; + } + else { + unset( $tax_meta[ $taxonomy ][ $term_id ] ); + if ( isset( $tax_meta[ $taxonomy ] ) && $tax_meta[ $taxonomy ] === array() ) { + unset( $tax_meta[ $taxonomy ] ); + } + } + + // Prevent complete array validation. + $tax_meta['wpseo_already_validated'] = true; + + self::save_tax_meta( $tax_meta ); + } + + /** + * Getting the meta from the options + * + * @return void|array + */ + private static function get_tax_meta() { + return get_option( self::$name ); + } + + /** + * Saving the tax meta values to the database + * + * @param array $tax_meta Array with the meta values for taxonomy. + */ + private static function save_tax_meta( $tax_meta ) { + update_option( self::$name, $tax_meta ); + } + + /** + * Getting the taxonomy meta for the given term_id and taxonomy + * + * @param int $term_id The id of the term. + * @param string $taxonomy Name of the taxonomy to which the term is attached. + * + * @return array + */ + private static function get_term_tax_meta( $term_id, $taxonomy ) { + $tax_meta = self::get_tax_meta(); + + /* If we have data for the term, merge with defaults for complete array, otherwise set defaults */ + if ( isset( $tax_meta[ $taxonomy ][ $term_id ] ) ) { + return array_merge( self::$defaults_per_term, $tax_meta[ $taxonomy ][ $term_id ] ); + } + + return self::$defaults_per_term; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/class-author-sitemap-provider.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-author-sitemap-provider.php new file mode 100644 index 0000000..89a9106 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-author-sitemap-provider.php @@ -0,0 +1,304 @@ +update_user_meta(); + + $has_exclude_filter = has_filter( 'wpseo_sitemap_exclude_author' ); + + $query_arguments = array(); + + if ( ! $has_exclude_filter ) { // We only need full users if legacy filter(s) hooked to exclusion logic. R. + $query_arguments['fields'] = 'ID'; + } + + $users = $this->get_users( $query_arguments ); + + if ( $has_exclude_filter ) { + $users = $this->exclude_users( $users ); + $users = wp_list_pluck( $users, 'ID' ); + } + + if ( empty( $users ) ) { + return array(); + } + + $index = array(); + $page = 1; + $user_pages = array_chunk( $users, $max_entries ); + + if ( count( $user_pages ) === 1 ) { + $page = ''; + } + + foreach ( $user_pages as $users_page ) { + + $user_id = array_shift( $users_page ); // Time descending, first user on page is most recently updated. + $user = get_user_by( 'id', $user_id ); + $index[] = array( + 'loc' => WPSEO_Sitemaps_Router::get_base_url( 'author-sitemap' . $page . '.xml' ), + 'lastmod' => '@' . $user->_yoast_wpseo_profile_updated, // @ for explicit timestamp format + ); + + $page++; + } + + return $index; + } + + /** + * Retrieve users, taking account of all necessary exclusions. + * + * @param array $arguments Arguments to add. + * + * @return array + */ + protected function get_users( $arguments = array() ) { + + global $wpdb; + + $options = WPSEO_Options::get_all(); + + $defaults = array( + // TODO re-enable after plugin requirements raised to WP 4.6 with the fix. + // 'who' => 'authors', Breaks meta keys, see https://core.trac.wordpress.org/ticket/36724#ticket R. + 'meta_key' => '_yoast_wpseo_profile_updated', + 'orderby' => 'meta_value_num', + 'order' => 'DESC', + 'meta_query' => array( + 'relation' => 'AND', + array( + 'key' => $wpdb->get_blog_prefix() . 'user_level', + 'value' => '0', + 'compare' => '!=', + ), + array( + 'relation' => 'OR', + array( + 'key' => 'wpseo_excludeauthorsitemap', + 'value' => 'on', + 'compare' => '!=', + ), + array( + 'key' => 'wpseo_excludeauthorsitemap', + 'compare' => 'NOT EXISTS', + ), + ), + ), + ); + + if ( $options['disable_author_noposts'] === true ) { + // $defaults['who'] = ''; // Otherwise it cancels out next argument. + $defaults['has_published_posts'] = true; + } + + $excluded_roles = $this->get_excluded_roles(); + + if ( ! empty( $excluded_roles ) ) { + // $defaults['who'] = ''; // Otherwise it cancels out next argument. + $defaults['role__not_in'] = $excluded_roles; + } + + return get_users( array_merge( $defaults, $arguments ) ); + } + + /** + * Retrieve array of roles, excluded in settings. + * + * @return array + */ + protected function get_excluded_roles() { + + static $excluded_roles; + + if ( isset( $excluded_roles ) ) { + return $excluded_roles; + } + + $options = WPSEO_Options::get_all(); + $roles = WPSEO_Utils::get_roles(); + + foreach ( $roles as $role_slug => $role_name ) { + + if ( ! empty( $options[ "user_role-{$role_slug}-not_in_sitemap" ] ) ) { + $excluded_roles[] = $role_name; + } + } + + if ( ! empty( $excluded_roles ) ) { // Otherwise it's handled by who=>authors query. + $excluded_roles[] = 'Subscriber'; + } + + return $excluded_roles; + } + + /** + * Get set of sitemap link data. + * + * @param string $type Sitemap type. + * @param int $max_entries Entries per sitemap. + * @param int $current_page Current page of the sitemap. + * + * @return array + */ + public function get_sitemap_links( $type, $max_entries, $current_page ) { + + $options = WPSEO_Options::get_all(); + + $links = array(); + + if ( $options['disable-author'] === true || $options['disable_author_sitemap'] === true ) { + return $links; + } + + $users = $this->get_users( array( + 'offset' => ( $current_page - 1 ) * $max_entries, + 'number' => $max_entries, + ) ); + + $users = $this->exclude_users( $users ); + + if ( empty( $users ) ) { + $users = array(); + } + + $time = time(); + + foreach ( $users as $user ) { + + $author_link = get_author_posts_url( $user->ID ); + + if ( empty( $author_link ) ) { + continue; + } + + $mod = $time; + + if ( isset( $user->_yoast_wpseo_profile_updated ) ) { + $mod = $user->_yoast_wpseo_profile_updated; + } + + $url = array( + 'loc' => $author_link, + 'mod' => date( DATE_W3C, $mod ), + + // Deprecated, kept for backwards data compat. R. + 'chf' => 'daily', + 'pri' => 1, + ); + + /** This filter is documented at inc/sitemaps/class-post-type-sitemap-provider.php */ + $url = apply_filters( 'wpseo_sitemap_entry', $url, 'user', $user ); + + if ( ! empty( $url ) ) { + $links[] = $url; + } + } + + return $links; + } + + /** + * Update any users that don't have last profile update timestamp. + * + * @return int Count of users updated. + */ + protected function update_user_meta() { + + $users = get_users( array( + 'who' => 'authors', + 'meta_query' => array( + array( + 'key' => '_yoast_wpseo_profile_updated', + 'compare' => 'NOT EXISTS', + ), + ), + ) ); + + $time = time(); + + foreach ( $users as $user ) { + update_user_meta( $user->ID, '_yoast_wpseo_profile_updated', $time ); + } + + return count( $users ); + } + + /** + * Wrap legacy filter to deduplicate calls. + * + * @param array $users Array of user objects to filter. + * + * @return array + */ + protected function exclude_users( $users ) { + + /** + * Filter the authors, included in XML sitemap. + * + * @param array $users Array of user objects to filter. + */ + return apply_filters( 'wpseo_sitemap_exclude_author', $users ); + } + + /** + * Sorts an array of WP_User by the _yoast_wpseo_profile_updated meta field. + * + * @since 1.6 + * + * @deprecated 3.3 User meta sort can now be done by queries. + * + * @param WP_User $first The first WP user. + * @param WP_User $second The second WP user. + * + * @return int 0 if equal, 1 if $a is larger else or -1; + */ + public function user_map_sorter( $first, $second ) { + + if ( ! isset( $first->_yoast_wpseo_profile_updated ) ) { + $first->_yoast_wpseo_profile_updated = time(); + } + + if ( ! isset( $second->_yoast_wpseo_profile_updated ) ) { + $second->_yoast_wpseo_profile_updated = time(); + } + + if ( $first->_yoast_wpseo_profile_updated === $second->_yoast_wpseo_profile_updated ) { + return 0; + } + + return ( ( $first->_yoast_wpseo_profile_updated > $second->_yoast_wpseo_profile_updated ) ? 1 : -1 ); + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/class-post-type-sitemap-provider.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-post-type-sitemap-provider.php new file mode 100644 index 0000000..342f524 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-post-type-sitemap-provider.php @@ -0,0 +1,631 @@ + true ) ); + $post_types = array_filter( $post_types, array( $this, 'is_valid_post_type' ) ); + $last_modified_times = WPSEO_Sitemaps::get_last_modified_gmt( $post_types, true ); + $index = array(); + + foreach ( $post_types as $post_type ) { + + $total_count = $this->get_post_type_count( $post_type ); + + if ( $total_count === 0 ) { + continue; + } + + $max_pages = 1; + + if ( $total_count > $max_entries ) { + $max_pages = (int) ceil( $total_count / $max_entries ); + } + + $all_dates = array(); + + if ( $max_pages > 1 ) { + + $sql = " + SELECT post_modified_gmt + FROM ( SELECT @rownum:=0 ) init + JOIN {$wpdb->posts} USE INDEX( type_status_date ) + WHERE post_status IN ( 'publish', 'inherit' ) + AND post_type = %s + AND ( @rownum:=@rownum+1 ) %% %d = 0 + ORDER BY post_modified_gmt ASC + "; + + $all_dates = $wpdb->get_col( $wpdb->prepare( $sql, $post_type, $max_entries ) ); + } + + for ( $page_counter = 0; $page_counter < $max_pages; $page_counter++ ) { + + $current_page = ( $max_pages > 1 ) ? ( $page_counter + 1 ) : ''; + $date = false; + + if ( empty( $current_page ) || $current_page === $max_pages ) { + + if ( ! empty( $last_modified_times[ $post_type ] ) ) { + $date = $last_modified_times[ $post_type ]; + } + } + else { + $date = $all_dates[ $page_counter ]; + } + + $index[] = array( + 'loc' => WPSEO_Sitemaps_Router::get_base_url( $post_type . '-sitemap' . $current_page . '.xml' ), + 'lastmod' => $date, + ); + } + } + + return $index; + } + + /** + * Get set of sitemap link data. + * + * @param string $type Sitemap type. + * @param int $max_entries Entries per sitemap. + * @param int $current_page Current page of the sitemap. + * + * @return array + */ + public function get_sitemap_links( $type, $max_entries, $current_page ) { + + $links = array(); + $post_type = $type; + + if ( ! $this->is_valid_post_type( $post_type ) ) { + return $links; + } + + $steps = min( 100, $max_entries ); + $offset = ( $current_page > 1 ) ? ( ( $current_page - 1 ) * $max_entries ) : 0; + $total = ( $offset + $max_entries ); + + $typecount = $this->get_post_type_count( $post_type ); + + if ( $total > $typecount ) { + $total = $typecount; + } + + if ( $current_page === 1 ) { + $links = array_merge( $links, $this->get_first_links( $post_type ) ); + } + + if ( $typecount === 0 ) { + + return $links; + } + + $options = $this->get_options(); + + $stacked_urls = array(); + + while ( $total > $offset ) { + + $posts = $this->get_posts( $post_type, $steps, $offset ); + + $offset += $steps; + + if ( empty( $posts ) ) { + continue; + } + + $posts_to_exclude = explode( ',', $options['excluded-posts'] ); + + foreach ( $posts as $post ) { + + if ( WPSEO_Meta::get_value( 'meta-robots-noindex', $post->ID ) === '1' ) { + continue; + } + + if ( in_array( $post->ID, $posts_to_exclude ) ) { + continue; + } + + $url = $this->get_url( $post ); + + if ( ! isset( $url['loc'] ) ) { + continue; + } + + /** + * Filter URL entry before it gets added to the sitemap. + * + * @param array $url Array of URL parts. + * @param string $type URL type. + * @param object $user Data object for the URL. + */ + $url = apply_filters( 'wpseo_sitemap_entry', $url, 'post', $post ); + + if ( empty( $url ) ) { + continue; + } + + $stacked_urls[] = $url['loc']; + + if ( (int) $post->ID === $this->get_page_for_posts_id() || (int) $post->ID === $this->get_page_on_front_id() ) { + + array_unshift( $links, $url ); + continue; + } + $links[] = $url; + } + + unset( $post, $url ); + } + + return $links; + } + + /** + * Check for relevant post type before invalidation. + * + * @param int $post_id Post ID to possibly invalidate for. + */ + public function save_post( $post_id ) { + + if ( $this->is_valid_post_type( get_post_type( $post_id ) ) ) { + WPSEO_Sitemaps_Cache::invalidate_post( $post_id ); + } + } + + /** + * Check if post type should be present in sitemaps. + * + * @param string $post_type Post type string to check for. + * + * @return bool + */ + public function is_valid_post_type( $post_type ) { + + $options = $this->get_options(); + + if ( ! empty( $options[ "post_types-{$post_type}-not_in_sitemap" ] ) ) { + return false; + } + + if ( ! in_array( $post_type, get_post_types( array( 'public' => true ) ) ) ) { + return false; + } + + /** + * Filter decision if post type is excluded from the XML sitemap. + * + * @param bool $exclude Default false. + * @param string $post_type Post type name. + */ + if ( apply_filters( 'wpseo_sitemap_exclude_post_type', false, $post_type ) ) { + return false; + } + + return true; + } + + /** + * Get count of posts for post type. + * + * @param string $post_type Post type to retrieve count for. + * + * @return int + */ + protected function get_post_type_count( $post_type ) { + + global $wpdb; + + /** + * Filter JOIN query part for type count of post type. + * + * @param string $join SQL part, defaults to empty string. + * @param string $post_type Post type name. + */ + $join_filter = apply_filters( 'wpseo_typecount_join', '', $post_type ); + + /** + * Filter WHERE query part for type count of post type. + * + * @param string $where SQL part, defaults to empty string. + * @param string $post_type Post type name. + */ + $where_filter = apply_filters( 'wpseo_typecount_where', '', $post_type ); + + $where = $this->get_sql_where_clause( $post_type ); + + $sql = " + SELECT COUNT({$wpdb->posts}.ID) + FROM {$wpdb->posts} + {$join_filter} + {$where} + {$where_filter} + "; + + return (int) $wpdb->get_var( $sql ); + } + + /** + * Produces set of links to prepend at start of first sitemap page. + * + * @param string $post_type Post type to produce links for. + * + * @return array + */ + protected function get_first_links( $post_type ) { + + $links = array(); + + $needs_archive = true; + + if ( ! $this->get_page_on_front_id() && ( $post_type == 'post' || $post_type == 'page' ) ) { + + $links[] = array( + 'loc' => $this->get_home_url(), + + // Deprecated, kept for backwards data compat. R. + 'chf' => 'daily', + 'pri' => 1, + ); + + $needs_archive = false; + } + elseif ( $this->get_page_on_front_id() && $post_type === 'post' && $this->get_page_for_posts_id() ) { + + $page_for_posts_url = get_permalink( $this->get_page_for_posts_id() ); + + $links[] = array( + 'loc' => $page_for_posts_url, + + // Deprecated, kept for backwards data compat. R. + 'chf' => 'daily', + 'pri' => 1, + ); + + $needs_archive = false; + } + + if ( ! $needs_archive ) { + return $links; + } + + $archive_url = get_post_type_archive_link( $post_type ); + + /** + * Filter the URL Yoast SEO uses in the XML sitemap for this post type archive. + * + * @param string $archive_url The URL of this archive + * @param string $post_type The post type this archive is for. + */ + $archive_url = apply_filters( 'wpseo_sitemap_post_type_archive_link', $archive_url, $post_type ); + + if ( $archive_url ) { + /** + * Filter the priority of the URL Yoast SEO uses in the XML sitemap. + * + * @param float $priority The priority for this URL, ranging from 0 to 1 + * @param string $post_type The post type this archive is for. + */ + $links[] = array( + 'loc' => $archive_url, + 'mod' => WPSEO_Sitemaps::get_last_modified_gmt( $post_type ), + + // Deprecated, kept for backwards data compat. R. + 'chf' => 'daily', + 'pri' => 1, + ); + } + + return $links; + } + + /** + * Retrieve set of posts with optimized query routine. + * + * @param string $post_type Post type to retrieve. + * @param int $count Count of posts to retrieve. + * @param int $offset Starting offset. + * + * @return object[] + */ + protected function get_posts( $post_type, $count, $offset ) { + + global $wpdb; + + static $filters = array(); + + if ( ! isset( $filters[ $post_type ] ) ) { + // Make sure you're wpdb->preparing everything you throw into this!! + $filters[ $post_type ] = array( + /** + * Filter JOIN query part for the post type. + * + * @param string $join SQL part, defaults to false. + * @param string $post_type Post type name. + */ + 'join' => apply_filters( 'wpseo_posts_join', false, $post_type ), + + /** + * Filter Where query part for the post type. + * + * @param string $where SQL part, defaults to false. + * @param string $post_type Post type name. + */ + 'where' => apply_filters( 'wpseo_posts_where', false, $post_type ), + ); + } + + $join_filter = $filters[ $post_type ]['join']; + $where_filter = $filters[ $post_type ]['where']; + $where = $this->get_sql_where_clause( $post_type ); + + // Optimized query per this thread: http://wordpress.org/support/topic/plugin-wordpress-seo-by-yoast-performance-suggestion. + // Also see http://explainextended.com/2009/10/23/mysql-order-by-limit-performance-late-row-lookups/. + $sql = " + SELECT l.ID, post_title, post_content, post_name, post_parent, post_author, post_modified_gmt, post_date, post_date_gmt + FROM ( + SELECT {$wpdb->posts}.ID + FROM {$wpdb->posts} + {$join_filter} + {$where} + {$where_filter} + ORDER BY {$wpdb->posts}.post_modified ASC LIMIT %d OFFSET %d + ) + o JOIN {$wpdb->posts} l ON l.ID = o.ID + "; + + $posts = $wpdb->get_results( $wpdb->prepare( $sql, $count, $offset ) ); + + $post_ids = array(); + + foreach ( $posts as $post ) { + $post->post_type = $post_type; + $post->post_status = 'publish'; + $post->filter = 'sample'; + $post_ids[] = $post->ID; + } + + update_meta_cache( 'post', $post_ids ); + + return $posts; + } + + /** + * @param string $post_type Post type slug. + * + * @return string + */ + protected function get_sql_where_clause( $post_type ) { + + global $wpdb; + + $join = ''; + $status = "{$wpdb->posts}.post_status = 'publish'"; + + // Based on WP_Query->get_posts(). R. + if ( 'attachment' === $post_type ) { + $join = " LEFT JOIN {$wpdb->posts} AS p2 ON ({$wpdb->posts}.post_parent = p2.ID) "; + $status = "p2.post_status = 'publish'"; + } + + $where_clause = " + {$join} + WHERE {$status} + AND {$wpdb->posts}.post_type = '%s' + AND {$wpdb->posts}.post_password = '' + AND {$wpdb->posts}.post_date != '0000-00-00 00:00:00' + "; + + return $wpdb->prepare( $where_clause, $post_type ); + } + + /** + * Produce array of URL parts for given post object. + * + * @param object $post Post object to get URL parts for. + * + * @return array|bool + */ + protected function get_url( $post ) { + + $url = array(); + + /** + * Filter the URL Yoast SEO uses in the XML sitemap. + * + * Note that only absolute local URLs are allowed as the check after this removes external URLs. + * + * @param string $url URL to use in the XML sitemap + * @param object $post Post object for the URL. + */ + $url['loc'] = apply_filters( 'wpseo_xml_sitemap_post_url', get_permalink( $post ), $post ); + + /** + * Do not include external URLs. + * + * @see https://wordpress.org/plugins/page-links-to/ can rewrite permalinks to external URLs. + */ + if ( false === strpos( $url['loc'], $this->get_home_url() ) ) { + return false; + } + + $modified = max( $post->post_modified_gmt, $post->post_date_gmt ); + + if ( $modified !== '0000-00-00 00:00:00' ) { + $url['mod'] = $modified; + } + + $url['chf'] = 'daily'; // Deprecated, kept for backwards data compat. R. + + $canonical = WPSEO_Meta::get_value( 'canonical', $post->ID ); + + if ( $canonical !== '' && $canonical !== $url['loc'] ) { + /* + Let's assume that if a canonical is set for this page and it's different from + the URL of this post, that page is either already in the XML sitemap OR is on + an external site, either way, we shouldn't include it here. + */ + return false; + } + unset( $canonical ); + + $options = $this->get_options(); + if ( $options['trailingslash'] === true && $post->post_type !== 'post' ) { + $url['loc'] = trailingslashit( $url['loc'] ); + } + + $url['pri'] = 1; // Deprecated, kept for backwards data compat. R. + $url['images'] = $this->get_image_parser()->get_images( $post ); + + return $url; + } + + /** + * Calculate the priority of the post. + * + * @deprecated 3.5 Priority data dropped from sitemaps. + * + * @param WP_Post $post Post object. + * + * @return float|mixed + */ + private function calculate_priority( $post ) { + + $return = 0.6; + if ( $post->post_parent == 0 && $post->post_type == 'page' ) { + $return = 0.8; + } + + if ( $post->ID === $this->get_page_on_front_id() || $post->ID === $this->get_page_for_posts_id() ) { + $return = 1.0; + } + + /** + * Filter the priority of the URL Yoast SEO uses in the XML sitemap. + * + * @param float $priority The priority for this URL, ranging from 0 to 1 + * @param string $post_type The post type this archive is for. + * @param object $post The post object. + */ + $return = apply_filters( 'wpseo_xml_sitemap_post_priority', $return, $post->post_type, $post ); + + return $return; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-cache-data.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-cache-data.php new file mode 100644 index 0000000..d53779b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-cache-data.php @@ -0,0 +1,129 @@ +sitemap = $sitemap; + + /** + * Empty sitemap is not usable. + */ + if ( ! empty( $sitemap ) ) { + $this->set_status( self::OK ); + } + else { + $this->set_status( self::ERROR ); + } + } + + /** + * Set the status of the sitemap, is it usable. + * + * @param bool|string $valid Is the sitemap valid or not. + * + * @return void + */ + public function set_status( $valid ) { + + if ( self::OK === $valid ) { + $this->status = self::OK; + + return; + } + + if ( self::ERROR === $valid ) { + $this->status = self::ERROR; + $this->sitemap = ''; + + return; + } + + $this->status = self::UNKNOWN; + } + + /** + * Is the sitemap usable. + * + * @return bool True if usable, False if bad or unknown. + */ + public function is_usable() { + + return self::OK === $this->status; + } + + /** + * Get the XML content of the sitemap. + * + * @return string The content of the sitemap. + */ + public function get_sitemap() { + + return $this->sitemap; + } + + /** + * Get the status of the sitemap. + * + * @return string Status of the sitemap, 'ok'/'error'/'unknown' + */ + public function get_status() { + + return $this->status; + } + + /** + * String representation of object + * + * @link http://php.net/manual/en/serializable.serialize.php + * @return string the string representation of the object or null + * @since 5.1.0 + */ + public function serialize() { + + $data = array( + 'status' => $this->status, + 'xml' => $this->sitemap, + ); + + return serialize( $data ); + } + + /** + * Constructs the object + * + * @link http://php.net/manual/en/serializable.unserialize.php + * + * @param string $serialized The string representation of the object. + * + * @return void + * @since 5.1.0 + */ + public function unserialize( $serialized ) { + + $data = unserialize( $serialized ); + $this->set_sitemap( $data['xml'] ); + $this->set_status( $data['status'] ); + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-image-parser.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-image-parser.php new file mode 100644 index 0000000..1cbacab --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-image-parser.php @@ -0,0 +1,428 @@ +home_url = home_url(); + $parsed_home = wp_parse_url( $this->home_url ); + + if ( ! empty( $parsed_home['host'] ) ) { + $this->host = str_replace( 'www.', '', $parsed_home['host'] ); + } + + if ( ! empty( $parsed_home['scheme'] ) ) { + $this->scheme = $parsed_home['scheme']; + } + + $this->charset = esc_attr( get_bloginfo( 'charset' ) ); + } + + /** + * Get set of image data sets for the given post. + * + * @param object $post Post object to get images for. + * + * @return array + */ + public function get_images( $post ) { + + $images = array(); + + if ( ! is_object( $post ) ) { + return $images; + } + + $thumbnail_id = get_post_thumbnail_id( $post->ID ); + + if ( $thumbnail_id ) { + + $src = $this->get_absolute_url( $this->image_url( $thumbnail_id ) ); + $alt = get_post_meta( $thumbnail_id, '_wp_attachment_image_alt', true ); + $title = get_post_field( 'post_title', $thumbnail_id ); + $images[] = $this->get_image_item( $post, $src, $title, $alt ); + } + + $unfiltered_images = $this->parse_html_images( $post->post_content ); + + foreach ( $unfiltered_images as $image ) { + $images[] = $this->get_image_item( $post, $image['src'], $image['title'], $image['alt'] ); + } + + foreach ( $this->parse_galleries( $post->post_content, $post->ID ) as $attachment ) { + + $src = $this->get_absolute_url( $this->image_url( $attachment->ID ) ); + $alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ); + + $images[] = $this->get_image_item( $post, $src, $attachment->post_title, $alt ); + } + + if ( 'attachment' === $post->post_type && wp_attachment_is_image( $post ) ) { + + $src = $this->get_absolute_url( $this->image_url( $post->ID ) ); + $alt = get_post_meta( $post->ID, '_wp_attachment_image_alt', true ); + + $images[] = $this->get_image_item( $post, $src, $post->post_title, $alt ); + } + + foreach ( $images as $key => $image ) { + + if ( empty( $image['src'] ) ) { + unset( $images[ $key ] ); + } + } + + /** + * Filter images to be included for the post in XML sitemap. + * + * @param array $images Array of image items. + * @param int $post_id ID of the post. + */ + $images = apply_filters( 'wpseo_sitemap_urlimages', $images, $post->ID ); + + return $images; + } + + /** + * @param object $term Term to get images from description for. + * + * @return array + */ + public function get_term_images( $term ) { + + $images = $this->parse_html_images( $term->description ); + + foreach ( $this->parse_galleries( $term->description ) as $attachment ) { + + $images[] = array( + 'src' => $this->get_absolute_url( $this->image_url( $attachment->ID ) ), + 'title' => $attachment->post_title, + 'alt' => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ), + ); + } + + return $images; + } + + /** + * Parse `` tags in content. + * + * @param string $content Content string to parse. + * + * @return array + */ + private function parse_html_images( $content ) { + + $images = array(); + + if ( ! class_exists( 'DOMDocument' ) ) { + return $images; + } + + if ( empty( $content ) ) { + return $images; + } + + // Prevent DOMDocument from bubbling warnings about invalid HTML. + libxml_use_internal_errors( true ); + + $post_dom = new DOMDocument(); + $post_dom->loadHTML( 'charset .'">' . $content ); + + // Clear the errors, so they don't get kept in memory. + libxml_clear_errors(); + + /** @var DOMElement $img */ + foreach ( $post_dom->getElementsByTagName( 'img' ) as $img ) { + + $src = $img->getAttribute( 'src' ); + + if ( empty( $src ) ) { + continue; + } + + $class = $img->getAttribute( 'class' ); + + if ( // This detects WP-inserted images, which we need to upsize. R. + ! empty( $class ) + && false === strpos( $class, 'size-full' ) + && preg_match( '|wp-image-(?P\d+)|', $class, $matches ) + && get_post_status( $matches['id'] ) + ) { + $src = $this->image_url( $matches['id'] ); + } + + $src = $this->get_absolute_url( $src ); + + if ( strpos( $src, $this->host ) === false ) { + continue; + } + + if ( $src !== esc_url( $src ) ) { + continue; + } + + $images[] = array( + 'src' => $src, + 'title' => $img->getAttribute( 'title' ), + 'alt' => $img->getAttribute( 'alt' ), + ); + } + + return $images; + } + + /** + * Parse gallery shortcodes in a given content. + * + * @param string $content Content string. + * @param int $post_id Optional ID of post being parsed. + * + * @return array Set of attachment objects. + */ + private function parse_galleries( $content, $post_id = 0 ) { + + $attachments = array(); + $galleries = $this->get_content_galleries( $content ); + + foreach ( $galleries as $gallery ) { + + $id = $post_id; + + if ( ! empty( $gallery['id'] ) ) { + $id = intval( $gallery['id'] ); + } + + // Forked from core gallery_shortcode() to have exact same logic. R. + if ( ! empty( $gallery['ids'] ) ) { + $gallery['include'] = $gallery['ids']; + } + + $gallery_attachments = array(); + + if ( ! empty( $gallery['include'] ) ) { + + $_attachments = get_posts( array( + 'include' => $gallery['include'], + 'post_status' => 'inherit', + 'post_type' => 'attachment', + 'post_mime_type' => 'image', + ) ); + + foreach ( $_attachments as $key => $val ) { + $gallery_attachments[ $val->ID ] = $_attachments[ $key ]; + } + } + elseif ( ! empty( $gallery['exclude'] ) && ! empty( $id ) ) { + + $gallery_attachments = get_children( array( + 'post_parent' => $id, + 'exclude' => $gallery['exclude'], + 'post_status' => 'inherit', + 'post_type' => 'attachment', + 'post_mime_type' => 'image', + ) ); + } + elseif ( ! empty( $id ) ) { + + $gallery_attachments = get_children( array( + 'post_parent' => $id, + 'post_status' => 'inherit', + 'post_type' => 'attachment', + 'post_mime_type' => 'image', + ) ); + } + + $attachments = array_merge( $attachments, $gallery_attachments ); + } + + return array_unique( $attachments, SORT_REGULAR ); + } + + /** + * Retrieves galleries from the passed content. + * + * Forked from core to skip executing shortcodes for performance. + * + * @param string $content Content to parse for shortcodes. + * + * @return array A list of arrays, each containing gallery data. + */ + protected function get_content_galleries( $content ) { + + if ( ! has_shortcode( $content, 'gallery' ) ) { + return array(); + } + + $galleries = array(); + + if ( ! preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) ) { + return $galleries; + } + + foreach ( $matches as $shortcode ) { + if ( 'gallery' === $shortcode[2] ) { + + $attributes = shortcode_parse_atts( $shortcode[3] ); + + if ( '' === $attributes ) { // Valid shortcode without any attributes. R. + $attributes = array(); + } + + $galleries[] = $attributes; + } + } + + return $galleries; + } + + /** + * Get image item array with filters applied. + * + * @param WP_Post $post Post object for the context. + * @param string $src Image URL. + * @param string $title Optional image title. + * @param string $alt Optional image alt text. + * + * @return array + */ + protected function get_image_item( $post, $src, $title = '', $alt = '' ) { + + $image = array(); + + /** + * Filter image URL to be included in XML sitemap for the post. + * + * @param string $src Image URL. + * @param object $post Post object. + */ + $image['src'] = apply_filters( 'wpseo_xml_sitemap_img_src', $src, $post ); + + if ( ! empty( $title ) ) { + $image['title'] = $title; + } + + if ( ! empty( $alt ) ) { + $image['alt'] = $alt; + } + + /** + * Filter image data to be included in XML sitemap for the post. + * + * @param array $image { + * Array of image data. + * + * @type string $src Image URL. + * @type string $title Image title attribute (optional). + * @type string $alt Image alt attribute (optional). + * } + * + * @param object $post Post object. + */ + return apply_filters( 'wpseo_xml_sitemap_img', $image, $post ); + } + + /** + * Get attached image URL. Adapted from core for speed. + * + * @param int $post_id ID of the post. + * + * @return string + */ + private function image_url( $post_id ) { + + static $uploads; + + if ( empty( $uploads ) ) { + $uploads = wp_upload_dir(); + } + + if ( false !== $uploads['error'] ) { + return ''; + } + + $file = get_post_meta( $post_id, '_wp_attached_file', true ); + + if ( empty( $file ) ) { + return ''; + } + + // Check that the upload base exists in the file location. + if ( 0 === strpos( $file, $uploads['basedir'] ) ) { + return str_replace( $uploads['basedir'], $uploads['baseurl'], $file ); + } + + // Replace file location with url location. + if ( false !== strpos( $file, 'wp-content/uploads' ) ) { + return $uploads['baseurl'] . substr( $file, ( strpos( $file, 'wp-content/uploads' ) + 18 ) ); + } + + // It's a newly uploaded file, therefore $file is relative to the baseurl. + return $uploads['baseurl'] . "/$file"; + } + + /** + * Make absolute URL for domain or protocol-relative one. + * + * @param string $src URL to process. + * + * @return string + */ + protected function get_absolute_url( $src ) { + + if ( empty( $src ) || ! is_string( $src ) ) { + return $src; + } + + if ( WPSEO_Utils::is_url_relative( $src ) === true ) { + + if ( $src[0] !== '/' ) { + return $src; + } + + // The URL is relative, we'll have to make it absolute. + return $this->home_url . $src; + } + + if ( strpos( $src, 'http' ) !== 0 ) { + // Protocol relative url, we add the scheme as the standard requires a protocol. + return $this->scheme . ':' . $src; + } + + return $src; + } + + /** + * Cache attached images and thumbnails for a set of posts. + * + * @deprecated 3.3 Blanket caching no longer makes sense with modern galleries. R. + */ + public function cache_attachments() { + + _deprecated_function( __FUNCTION__, '3.3' ); + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-timezone.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-timezone.php new file mode 100644 index 0000000..15f8cc1 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-timezone.php @@ -0,0 +1,116 @@ +get_datetime_with_timezone( $datetime_string ); + + if ( is_null( $date_time ) ) { + return ''; + } + + return $date_time->format( $format ); + } + /** + * Get the datetime object, in site's time zone, if the datetime string was valid + * + * @param string $datetime_string The datetime string in UTC time zone, that needs to be converted to a DateTime object. + * + * @return DateTime|null in site's time zone + */ + public function get_datetime_with_timezone( $datetime_string ) { + + static $utc_timezone, $local_timezone; + + if ( ! isset( $utc_timezone ) ) { + $utc_timezone = new DateTimeZone( 'UTC' ); + $local_timezone = new DateTimeZone( $this->get_timezone_string() ); + } + + if ( ! empty( $datetime_string ) && WPSEO_Utils::is_valid_datetime( $datetime_string ) ) { + $datetime = new DateTime( $datetime_string, $utc_timezone ); + $datetime->setTimezone( $local_timezone ); + + return $datetime; + } + + return null; + } + + /** + * Returns the timezone string for a site, even if it's set to a UTC offset + * + * Adapted from http://www.php.net/manual/en/function.timezone-name-from-abbr.php#89155 + * + * @return string valid PHP timezone string + */ + private function determine_timezone_string() { + + // If site timezone string exists, return it. + if ( $timezone = get_option( 'timezone_string' ) ) { + return $timezone; + } + + // Get UTC offset, if it isn't set then return UTC. + if ( 0 === ( $utc_offset = (int) get_option( 'gmt_offset', 0 ) ) ) { + return 'UTC'; + } + + // Adjust UTC offset from hours to seconds. + $utc_offset *= HOUR_IN_SECONDS; + + // Attempt to guess the timezone string from the UTC offset. + $timezone = timezone_name_from_abbr( '', $utc_offset ); + + if ( false !== $timezone ) { + return $timezone; + } + + // Last try, guess timezone string manually. + foreach ( timezone_abbreviations_list() as $abbr ) { + foreach ( $abbr as $city ) { + if ( $city['offset'] == $utc_offset ) { + return $city['timezone_id']; + } + } + } + + // Fallback to UTC. + return 'UTC'; + } + + /** + * Returns the correct timezone string + * + * @return string + */ + private function get_timezone_string() { + if ( '' == $this->timezone_string ) { + $this->timezone_string = $this->determine_timezone_string(); + } + + return $this->timezone_string; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-admin.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-admin.php new file mode 100644 index 0000000..760b811 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-admin.php @@ -0,0 +1,191 @@ +detect_blocking_filesystem_sitemaps(); + } + + /** + * Find sitemaps residing on disk as they will block our rewrite. + * + * @since 3.1 + */ + public function detect_blocking_filesystem_sitemaps() { + $wpseo_xml_options = WPSEO_Options::get_option( 'wpseo_xml' ); + if ( $wpseo_xml_options['enablexmlsitemap'] !== true ) { + return; + } + unset( $wpseo_xml_options ); + + // Find all files and directories containing 'sitemap' and are post-fixed .xml. + $blocking_files = glob( ABSPATH . '*sitemap*.xml', ( GLOB_NOSORT | GLOB_MARK ) ); + + if ( false === $blocking_files ) { // Some systems might return error on no matches. + $blocking_files = array(); + } + + // Save if we have changes. + $wpseo_options = WPSEO_Options::get_option( 'wpseo' ); + + if ( $wpseo_options['blocking_files'] !== $blocking_files ) { + $wpseo_options['blocking_files'] = $blocking_files; + + update_option( 'wpseo', $wpseo_options ); + } + } + + /** + * Hooked into transition_post_status. Will initiate search engine pings + * if the post is being published, is a post type that a sitemap is built for + * and is a post that is included in sitemaps. + * + * @param string $new_status New post status. + * @param string $old_status Old post status. + * @param \WP_Post $post Post object. + */ + public function status_transition( $new_status, $old_status, $post ) { + if ( $new_status !== 'publish' ) { + return; + } + + if ( defined( 'WP_IMPORTING' ) ) { + $this->status_transition_bulk( $new_status, $old_status, $post ); + + return; + } + + $post_type = get_post_type( $post ); + + wp_cache_delete( 'lastpostmodified:gmt:' . $post_type, 'timeinfo' ); // #17455. + + // None of our interest.. + if ( 'nav_menu_item' === $post_type ) { + return; + } + + $options = WPSEO_Options::get_options( array( 'wpseo_xml', 'wpseo_titles' ) ); + + // If the post type is excluded in options, we can stop. + $option = sprintf( 'post_types-%s-not_in_sitemap', $post_type ); + if ( isset( $options[ $option ] ) && $options[ $option ] === true ) { + return; + } + + if ( WP_CACHE ) { + wp_schedule_single_event( ( time() + 300 ), 'wpseo_hit_sitemap_index' ); + } + + /** + * Filter: 'wpseo_allow_xml_sitemap_ping' - Check if pinging is not allowed (allowed by default) + * + * @api boolean $allow_ping The boolean that is set to true by default. + */ + if ( apply_filters( 'wpseo_allow_xml_sitemap_ping', true ) === false ) { + return; + } + + // Allow the pinging to happen slightly after the hit sitemap index so the sitemap is fully regenerated when the ping happens. + $excluded_posts = explode( ',', $options['excluded-posts'] ); + + if ( ! in_array( $post->ID, $excluded_posts ) ) { + + if ( defined( 'YOAST_SEO_PING_IMMEDIATELY' ) && YOAST_SEO_PING_IMMEDIATELY ) { + WPSEO_Sitemaps::ping_search_engines(); + } + elseif ( ! wp_next_scheduled( 'wpseo_ping_search_engines' ) ) { + wp_schedule_single_event( ( time() + 300 ), 'wpseo_ping_search_engines' ); + } + } + } + + /** + * While bulk importing, just save unique post_types + * + * When importing is done, if we have a post_type that is saved in the sitemap + * try to ping the search engines + * + * @param string $new_status New post status. + * @param string $old_status Old post status. + * @param \WP_Post $post Post object. + */ + private function status_transition_bulk( $new_status, $old_status, $post ) { + $this->importing_post_types[] = get_post_type( $post ); + $this->importing_post_types = array_unique( $this->importing_post_types ); + } + + /** + * After import finished, walk through imported post_types and update info. + */ + public function status_transition_bulk_finished() { + if ( ! defined( 'WP_IMPORTING' ) ) { + return; + } + + if ( empty( $this->importing_post_types ) ) { + return; + } + + $options = WPSEO_Options::get_option( 'wpseo_xml' ); + + $ping_search_engines = false; + + foreach ( $this->importing_post_types as $post_type ) { + wp_cache_delete( 'lastpostmodified:gmt:' . $post_type, 'timeinfo' ); // #17455. + + // Just have the cache deleted for nav_menu_item. + if ( 'nav_menu_item' === $post_type ) { + continue; + } + + $option = sprintf( 'post_types-%s-not_in_sitemap', $post_type ); + if ( ! isset( $options[ $option ] ) || $options[ $option ] === false ) { + $ping_search_engines = true; + } + } + + // Nothing to do. + if ( false === $ping_search_engines ) { + return; + } + + if ( WP_CACHE ) { + do_action( 'wpseo_hit_sitemap_index' ); + } + + WPSEO_Sitemaps::ping_search_engines(); + } +} /* End of class */ diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache-validator.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache-validator.php new file mode 100644 index 0000000..80f7be9 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache-validator.php @@ -0,0 +1,292 @@ + $max_length ) { + + if ( $max_length < 15 ) { + /** + * If this happens the most likely cause is a page number that is too high. + * + * So this would not happen unintentionally.. + * Either by trying to cause a high server load, finding backdoors or misconfiguration. + */ + throw new OutOfRangeException( + __( + 'Trying to build the sitemap cache key, but the postfix and prefix combination leaves too little room to do this. You are probably requesting a page that is way out of the expected range.', + 'wordpress-seo' + ) + ); + } + + $half = ( $max_length / 2 ); + + $first_part = substr( $type, 0, ( ceil( $half ) - 1 ) ); + $last_part = substr( $type, ( 1 - floor( $half ) ) ); + + $type = $first_part . '..' . $last_part; + } + + return $type; + } + + /** + * Invalidate sitemap cache + * + * @param null|string $type The type to get the key for. Null for all caches. + * + * @return void + */ + public static function invalidate_storage( $type = null ) { + + // Global validator gets cleared when no type is provided. + $old_validator = null; + + // Get the current type validator. + if ( ! is_null( $type ) ) { + $old_validator = self::get_validator( $type ); + } + + // Refresh validator. + self::create_validator( $type ); + + if ( ! wp_using_ext_object_cache() ) { + // Clean up current cache from the database. + self::cleanup_database( $type, $old_validator ); + } + + // External object cache pushes old and unretrieved items out by itself so we don't have to do anything for that. + } + + /** + * Cleanup invalidated database cache + * + * @param null|string $type The type of sitemap to clear cache for. + * @param null|string $validator The validator to clear cache of. + * + * @return void + */ + public static function cleanup_database( $type = null, $validator = null ) { + + global $wpdb; + + if ( is_null( $type ) ) { + // Clear all cache if no type is provided. + $like = sprintf( '%s%%', self::STORAGE_KEY_PREFIX ); + } + else { + if ( ! is_null( $validator ) ) { + // Clear all cache for provided type-validator. + $like = sprintf( '%%_%s', $validator ); + } + else { + // Clear type cache for all type keys. + $like = sprintf( '%1$s%2$s_%%', self::STORAGE_KEY_PREFIX, $type ); + } + } + + /** + * Add slashes to the LIKE "_" single character wildcard. + * + * We can't use `esc_like` here because we need the % in the query. + */ + $where = array(); + $where[] = sprintf( "option_name LIKE '%s'", addcslashes( '_transient_' . $like, '_' ) ); + $where[] = sprintf( "option_name LIKE '%s'", addcslashes( '_transient_timeout_' . $like, '_' ) ); + + // Delete transients. + $query = sprintf( 'DELETE FROM %1$s WHERE %2$s', $wpdb->options, implode( ' OR ', $where ) ); + $wpdb->query( $query ); + } + + /** + * Get the current cache validator + * + * Without the type the global validator is returned. + * This can invalidate -all- keys in cache at once + * + * With the type parameter the validator for that specific + * type can be invalidated + * + * @param string $type Provide a type for a specific type validator, empty for global validator. + * + * @return null|string The validator for the supplied type. + */ + public static function get_validator( $type = '' ) { + + $key = self::get_validator_key( $type ); + + $current = get_option( $key, null ); + if ( ! is_null( $current ) ) { + return $current; + } + + if ( self::create_validator( $type ) ) { + return self::get_validator( $type ); + } + + return null; + } + + /** + * Get the cache validator option key for the specified type + * + * @param string $type Provide a type for a specific type validator, empty for global validator. + * + * @return string Validator to be used to generate the cache key. + */ + public static function get_validator_key( $type = '' ) { + + if ( empty( $type ) ) { + return self::VALIDATION_GLOBAL_KEY; + } + + return sprintf( self::VALIDATION_TYPE_KEY_FORMAT, $type ); + } + + /** + * Refresh the cache validator value + * + * @param string $type Provide a type for a specific type validator, empty for global validator. + * + * @return bool True if validator key has been saved as option. + */ + public static function create_validator( $type = '' ) { + + $key = self::get_validator_key( $type ); + + // Generate new validator. + $microtime = microtime(); + + // Remove space. + list( $milliseconds, $seconds ) = explode( ' ', $microtime ); + + // Transients are purged every 24h. + $seconds = ( $seconds % DAY_IN_SECONDS ); + $milliseconds = intval( substr( $milliseconds, 2, 3 ), 10 ); + + // Combine seconds and milliseconds and convert to integer. + $validator = intval( $seconds . '' . $milliseconds, 10 ); + + // Apply base 61 encoding. + $compressed = self::convert_base10_to_base61( $validator ); + + return update_option( $key, $compressed, false ); + } + + /** + * Encode to base61 format. + * + * This is base64 (numeric + alpha + alpha upper case) without the 0. + * + * @param int $base10 The number that has to be converted to base 61. + * + * @return string Base 61 converted string. + * + * @throws InvalidArgumentException When the input is not an integer. + */ + public static function convert_base10_to_base61( $base10 ) { + + if ( ! is_int( $base10 ) ) { + throw new InvalidArgumentException( __( 'Expected an integer as input.', 'wordpress-seo' ) ); + } + + // Characters that will be used in the conversion. + $characters = '123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $length = strlen( $characters ); + + $remainder = $base10; + $output = ''; + + do { + // Building from right to left in the result. + $index = ( $remainder % $length ); + + // Prepend the character to the output. + $output = $characters[ $index ] . $output; + + // Determine the remainder after removing the applied number. + $remainder = floor( $remainder / $length ); + + // Keep doing it until we have no remainder left. + } while ( $remainder ); + + return $output; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache.php new file mode 100644 index 0000000..84a007c --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache.php @@ -0,0 +1,292 @@ +is_enabled(); + } + + /** + * If cache is enabled. + * + * @return boolean + */ + public function is_enabled() { + + /** + * Filter if XML sitemap transient cache is enabled. + * + * @param bool $unsigned Enable cache or not, defaults to true + */ + return apply_filters( 'wpseo_enable_xml_sitemap_transient_caching', true ); + } + + + /** + * Retrieve the sitemap page from cache. + * + * @param string $type Sitemap type. + * @param int $page Page number to retrieve. + * + * @return string|boolean + */ + public function get_sitemap( $type, $page ) { + + $transient_key = WPSEO_Sitemaps_Cache_Validator::get_storage_key( $type, $page ); + if ( false === $transient_key ) { + return false; + } + + return get_transient( $transient_key ); + } + + /** + * Get the sitemap that is cached + * + * @param string $type Sitemap type. + * @param int $page Page number to retrieve. + * + * @return null|WPSEO_Sitemap_Cache_Data Null on no cache found otherwise object containing sitemap and meta data. + */ + public function get_sitemap_data( $type, $page ) { + + $sitemap = $this->get_sitemap( $type, $page ); + + if ( empty( $sitemap ) ) { + return null; + } + + // Unserialize Cache Data object (is_serialized doesn't recognize classes). + if ( is_string( $sitemap ) && 0 === strpos( $sitemap, 'C:24:"WPSEO_Sitemap_Cache_Data"' ) ) { + + $sitemap = unserialize( $sitemap ); + } + + // What we expect it to be if it is set. + if ( $sitemap instanceof WPSEO_Sitemap_Cache_Data_Interface ) { + return $sitemap; + } + + return null; + } + + /** + * Store the sitemap page from cache. + * + * @param string $type Sitemap type. + * @param int $page Page number to store. + * @param string $sitemap Sitemap body to store. + * @param bool $usable Is this a valid sitemap or a cache of an invalid sitemap. + * + * @return bool + */ + public function store_sitemap( $type, $page, $sitemap, $usable = true ) { + + $transient_key = WPSEO_Sitemaps_Cache_Validator::get_storage_key( $type, $page ); + + if ( false === $transient_key ) { + return false; + } + + $status = ( $usable ) ? WPSEO_Sitemap_Cache_Data::OK : WPSEO_Sitemap_Cache_Data::ERROR; + + $sitemap_data = new WPSEO_Sitemap_Cache_Data(); + $sitemap_data->set_sitemap( $sitemap ); + $sitemap_data->set_status( $status ); + + return set_transient( $transient_key, $sitemap_data, DAY_IN_SECONDS ); + } + + /** + * Delete cache transients for index and specific type. + * + * Always deletes the main index sitemaps cache, as that's always invalidated by any other change. + * + * @param string $type Sitemap type to invalidate. + * + * @return void + */ + public static function invalidate( $type ) { + + self::clear( array( $type ) ); + } + + /** + * Helper to invalidate in hooks where type is passed as second argument. + * + * @param int $unused Unused term ID value. + * @param string $type Taxonomy to invalidate. + * + * @return void + */ + public static function invalidate_helper( $unused, $type ) { + + self::invalidate( $type ); + } + + /** + * Invalidate sitemap cache for authors. + * + * @param int $user_id User ID. + */ + public static function invalidate_author( $user_id ) { + + $user = get_user_by( 'id', $user_id ); + + if ( 'user_register' === current_action() ) { + update_user_meta( $user_id, '_yoast_wpseo_profile_updated', time() ); + } + + if ( ! in_array( 'subscriber', $user->roles ) ) { + self::invalidate( 'author' ); + } + } + + /** + * Invalidate sitemap cache for the post type of a post. + * + * Don't invalidate for revisions. + * + * @param int $post_id Post ID to invalidate type for. + * + * @return void + */ + public static function invalidate_post( $post_id ) { + + if ( wp_is_post_revision( $post_id ) ) { + return; + } + + self::invalidate( get_post_type( $post_id ) ); + } + + /** + * Delete cache transients for given sitemaps types or all by default. + * + * @param array $types Set of sitemap types to delete cache transients for. + * + * @return void + */ + public static function clear( $types = array() ) { + + if ( ! self::$is_enabled ) { + return; + } + + // No types provided, clear all. + if ( empty( $types ) ) { + self::$clear_all = true; + + return; + } + + // Always invalidate the index sitemap as well. + if ( ! in_array( WPSEO_Sitemaps::SITEMAP_INDEX_TYPE, $types ) ) { + array_unshift( $types, WPSEO_Sitemaps::SITEMAP_INDEX_TYPE ); + } + + foreach ( $types as $type ) { + if ( ! in_array( $type, self::$clear_types ) ) { + self::$clear_types[] = $type; + } + } + } + + /** + * Invalidate storage for cache types queued to clear. + */ + public static function clear_queued() { + + if ( self::$clear_all ) { + + WPSEO_Sitemaps_Cache_Validator::invalidate_storage(); + self::$clear_all = false; + self::$clear_types = array(); + + return; + } + + foreach ( self::$clear_types as $type ) { + WPSEO_Sitemaps_Cache_Validator::invalidate_storage( $type ); + } + + self::$clear_types = array(); + } + + /** + * Adds a hook that when given option is updated, the cache is cleared + * + * @param string $option Option name. + * @param string $type Sitemap type. + */ + public static function register_clear_on_option_update( $option, $type = '' ) { + + self::$cache_clear[ $option ] = $type; + } + + /** + * Clears the transient cache when a given option is updated, if that option has been registered before + * + * @param string $option The option name that's being updated. + * + * @return void + */ + public static function clear_on_option_update( $option ) { + + if ( array_key_exists( $option, self::$cache_clear ) ) { + + if ( empty( self::$cache_clear[ $option ] ) ) { + // Clear all caches. + self::clear(); + } + else { + // Clear specific provided type(s). + $types = (array) self::$cache_clear[ $option ]; + self::clear( $types ); + } + } + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-renderer.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-renderer.php new file mode 100644 index 0000000..d5b1c29 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-renderer.php @@ -0,0 +1,322 @@ +stylesheet = ''; + $this->charset = get_bloginfo( 'charset' ); + $this->output_charset = $this->charset; + $this->timezone = new WPSEO_Sitemap_Timezone(); + + if ( + 'UTF-8' !== $this->charset + && function_exists( 'mb_list_encodings' ) + && in_array( $this->charset, mb_list_encodings(), true ) + ) { + $this->output_charset = 'UTF-8'; + } + + $this->needs_conversion = $this->output_charset !== $this->charset; + } + + /** + * @param array $links Set of sitemaps index links. + * + * @return string + */ + public function get_index( $links ) { + + $xml = '' . "\n"; + + foreach ( $links as $link ) { + $xml .= $this->sitemap_index_url( $link ); + } + + /** + * Filter to append sitemaps to the index. + * + * @param string $index String to append to sitemaps index, defaults to empty. + */ + $xml .= apply_filters( 'wpseo_sitemap_index', '' ); + $xml .= ''; + + return $xml; + } + + /** + * @param array $links Set of sitemap links. + * @param string $type Sitemap type. + * @param int $current_page Current sitemap page number. + * + * @return string + */ + public function get_sitemap( $links, $type, $current_page ) { + + $urlset = '' . "\n"; + + /** + * Filters the `urlset` for a sitemap by type. + * + * @api string $urlset The output for the sitemap's `urlset`. + */ + $xml = apply_filters( "wpseo_sitemap_{$type}_urlset", $urlset ); + + foreach ( $links as $url ) { + $xml .= $this->sitemap_url( $url ); + } + + /** + * Filter to add extra URLs to the XML sitemap by type. + * + * Only runs for the first page, not on all. + * + * @param string $content String content to add, defaults to empty. + */ + if ( $current_page === 1 ) { + $xml .= apply_filters( "wpseo_sitemap_{$type}_content", '' ); + } + + $xml .= ''; + + return $xml; + } + + /** + * Produce final XML output with debug information. + * + * @param string $sitemap Sitemap XML. + * @param boolean $transient Transient cache flag. + * + * @return string + */ + public function get_output( $sitemap, $transient ) { + + $output = 'output_charset ) . '"?>'; + + if ( $this->stylesheet ) { + /** + * Filter the stylesheet URL for the XML sitemap. + * + * @param string $stylesheet Stylesheet URL. + */ + $output .= apply_filters( 'wpseo_stylesheet_url', $this->stylesheet ) . "\n"; + } + + $output .= $sitemap; + $output .= "\n"; + + $debug = WP_DEBUG || ( defined( 'WPSEO_DEBUG' ) && true === WPSEO_DEBUG ); + + if ( ! WP_DEBUG_DISPLAY || ! $debug ) { + return $output; + } + + $memory_used = number_format( ( memory_get_peak_usage() / 1048576 ), 2 ); + $queries_run = ( $transient ) ? 'Served from transient cache' : 'Queries executed ' . absint( $GLOBALS['wpdb']->num_queries ); + + $output .= "\n"; + + if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) { + + $queries = print_r( $GLOBALS['wpdb']->queries, true ); + $output .= "\n"; + } + + return $output; + } + + /** + * Get charset for the output. + * + * @return string + */ + public function get_output_charset() { + return $this->output_charset; + } + + /** + * Set a custom stylesheet for this sitemap. Set to empty to just remove the default stylesheet. + * + * @param string $stylesheet Full xml-stylesheet declaration. + */ + public function set_stylesheet( $stylesheet ) { + $this->stylesheet = $stylesheet; + } + + /** + * Build the `` tag for a given URL. + * + * @param array $url Array of parts that make up this entry. + * + * @return string + */ + protected function sitemap_index_url( $url ) { + + $date = null; + + if ( ! empty( $url['lastmod'] ) ) { + $date = $this->timezone->format_date( $url['lastmod'] ); + } + + $url['loc'] = htmlspecialchars( $url['loc'] ); + + $output = "\t\n"; + $output .= "\t\t" . $url['loc'] . "\n"; + $output .= empty( $date ) ? '' : "\t\t" . htmlspecialchars( $date ) . "\n"; + $output .= "\t\n"; + + return $output; + } + + /** + * Build the `` tag for a given URL. + * + * Public access for backwards compatibility reasons. + * + * @param array $url Array of parts that make up this entry. + * + * @return string + */ + public function sitemap_url( $url ) { + + $date = null; + + + if ( ! empty( $url['mod'] ) ) { + // Create a DateTime object date in the correct timezone. + $date = $this->timezone->format_date( $url['mod'] ); + } + + $url['loc'] = htmlspecialchars( $url['loc'] ); + + $output = "\t\n"; + $output .= "\t\t" . $this->encode_url_rfc3986( $url['loc'] ) . "\n"; + $output .= empty( $date ) ? '' : "\t\t" . htmlspecialchars( $date ) . "\n"; + + if ( empty( $url['images'] ) ) { + $url['images'] = array(); + } + + foreach ( $url['images'] as $img ) { + + if ( empty( $img['src'] ) ) { + continue; + } + + $output .= "\t\t\n"; + $output .= "\t\t\t" . esc_html( $this->encode_url_rfc3986( $img['src'] ) ) . "\n"; + + if ( ! empty( $img['title'] ) ) { + + $title = $img['title']; + + if ( $this->needs_conversion ) { + $title = mb_convert_encoding( $title, $this->output_charset, $this->charset ); + } + + $title = _wp_specialchars( html_entity_decode( $title, ENT_QUOTES, $this->output_charset ) ); + $output .= "\t\t\t\n"; + } + + if ( ! empty( $img['alt'] ) ) { + + $alt = $img['alt']; + + if ( $this->needs_conversion ) { + $alt = mb_convert_encoding( $alt, $this->output_charset, $this->charset ); + } + + $alt = _wp_specialchars( html_entity_decode( $alt, ENT_QUOTES, $this->output_charset ) ); + $output .= "\t\t\t\n"; + } + + $output .= "\t\t\n"; + } + unset( $img, $title, $alt ); + + $output .= "\t\n"; + + /** + * Filters the output for the sitemap url tag. + * + * @api string $output The output for the sitemap url tag. + * + * @param array $url The sitemap url array on which the output is based. + */ + return apply_filters( 'wpseo_sitemap_url', $output, $url ); + } + + /** + * Apply some best effort conversion to comply with RFC3986. + * + * @param string $url URL to encode. + * + * @return string + */ + protected function encode_url_rfc3986( $url ) { + + if ( filter_var( $url, FILTER_VALIDATE_URL ) ) { + return $url; + } + + $path = parse_url( $url, PHP_URL_PATH ); + + if ( ! empty( $path ) && '/' !== $path ) { + + $encoded_path = explode( '/', $path ); + $encoded_path = array_map( 'rawurlencode', $encoded_path ); + $encoded_path = implode( '/', $encoded_path ); + $encoded_path = str_replace( '%7E', '~', $encoded_path ); // PHP <5.3. + + $url = str_replace( $path, $encoded_path, $url ); + } + + $query = parse_url( $url, PHP_URL_QUERY ); + + if ( ! empty( $query ) ) { + + parse_str( $query, $parsed_query ); + + if ( defined( 'PHP_QUERY_RFC3986' ) ) { // PHP 5.4+. + $parsed_query = http_build_query( $parsed_query, null, '&', PHP_QUERY_RFC3986 ); + } + else { + $parsed_query = http_build_query( $parsed_query, null, '&' ); + $parsed_query = str_replace( '+', '%20', $parsed_query ); + $parsed_query = str_replace( '%7E', '~', $parsed_query ); + } + + $url = str_replace( $query, $parsed_query, $url ); + } + + return $url; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-router.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-router.php new file mode 100644 index 0000000..1c1d0de --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-router.php @@ -0,0 +1,98 @@ +add_query_var( 'sitemap' ); + $wp->add_query_var( 'sitemap_n' ); + $wp->add_query_var( 'xsl' ); + + add_rewrite_rule( 'sitemap_index\.xml$', 'index.php?sitemap=1', 'top' ); + add_rewrite_rule( '([^/]+?)-sitemap([0-9]+)?\.xml$', 'index.php?sitemap=$matches[1]&sitemap_n=$matches[2]', 'top' ); + add_rewrite_rule( '([a-z]+)?-?sitemap\.xsl$', 'index.php?xsl=$matches[1]', 'top' ); + } + + /** + * Stop trailing slashes on sitemap.xml URLs. + * + * @param string $redirect The redirect URL currently determined. + * + * @return bool|string $redirect + */ + public function redirect_canonical( $redirect ) { + + if ( get_query_var( 'sitemap' ) || get_query_var( 'xsl' ) ) { + return false; + } + + return $redirect; + } + + /** + * Redirects sitemap.xml to sitemap_index.xml. + */ + public function template_redirect() { + + global $wp_query; + + $current_url = 'http://'; + + if ( ! empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] === 'on' ) { + $current_url = 'https://'; + } + + $current_url .= sanitize_text_field( $_SERVER['SERVER_NAME'] ); + $current_url .= sanitize_text_field( $_SERVER['REQUEST_URI'] ); + + if ( home_url( '/sitemap.xml' ) === $current_url && $wp_query->is_404 ) { + wp_redirect( home_url( '/sitemap_index.xml' ), 301 ); + exit; + } + } + + /** + * Create base URL for the sitemap. + * + * @param string $page Page to append to the base URL. + * + * @return string base URL (incl page) + */ + public static function get_base_url( $page ) { + + global $wp_rewrite; + + $base = $wp_rewrite->using_index_permalinks() ? 'index.php/' : '/'; + + /** + * Filter the base URL of the sitemaps + * + * @param string $base The string that should be added to home_url() to make the full base URL. + */ + $base = apply_filters( 'wpseo_sitemaps_base_url', $base ); + + // Get the scheme from the configured home url instead of letting WordPress determine the scheme based on the requested URI. + return home_url( $base . $page, parse_url( get_option( 'home' ), PHP_URL_SCHEME ) ); + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps.php new file mode 100644 index 0000000..c84b440 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps.php @@ -0,0 +1,545 @@ +max_entries = $options['entries-per-page']; + $this->timezone = new WPSEO_Sitemap_Timezone(); + $this->router = new WPSEO_Sitemaps_Router(); + $this->renderer = new WPSEO_Sitemaps_Renderer(); + $this->cache = new WPSEO_Sitemaps_Cache(); + $this->providers = array( // TODO API for add/remove. R. + new WPSEO_Post_Type_Sitemap_Provider(), + new WPSEO_Taxonomy_Sitemap_Provider(), + new WPSEO_Author_Sitemap_Provider(), + ); + + if ( ! empty( $_SERVER['SERVER_PROTOCOL'] ) ) { + $this->http_protocol = sanitize_text_field( $_SERVER['SERVER_PROTOCOL'] ); + } + } + + /** + * Check the current request URI, if we can determine it's probably an XML sitemap, kill loading the widgets + */ + public function reduce_query_load() { + + if ( ! isset( $_SERVER['REQUEST_URI'] ) ) { + return; + } + + $request_uri = $_SERVER['REQUEST_URI']; + $extension = substr( $request_uri, -4 ); + + if ( false !== stripos( $request_uri, 'sitemap' ) && in_array( $extension, array( '.xml', '.xsl' ) ) ) { + remove_all_actions( 'widgets_init' ); + } + } + + /** + * Register your own sitemap. Call this during 'init'. + * + * @param string $name The name of the sitemap. + * @param callback $function Function to build your sitemap. + * @param string $rewrite Optional. Regular expression to match your sitemap with. + */ + public function register_sitemap( $name, $function, $rewrite = '' ) { + add_action( 'wpseo_do_sitemap_' . $name, $function ); + if ( ! empty( $rewrite ) ) { + add_rewrite_rule( $rewrite, 'index.php?sitemap=' . $name, 'top' ); + } + } + + /** + * Register your own XSL file. Call this during 'init'. + * + * @param string $name The name of the XSL file. + * @param callback $function Function to build your XSL file. + * @param string $rewrite Optional. Regular expression to match your sitemap with. + */ + public function register_xsl( $name, $function, $rewrite = '' ) { + add_action( 'wpseo_xsl_' . $name, $function ); + if ( ! empty( $rewrite ) ) { + add_rewrite_rule( $rewrite, 'index.php?xsl=' . $name, 'top' ); + } + } + + /** + * Set the sitemap current page to allow creating partial sitemaps with wp-cli + * in a one-off process. + * + * @param integer $current_page The part that should be generated. + */ + public function set_n( $current_page ) { + if ( is_scalar( $current_page ) && intval( $current_page ) > 0 ) { + $this->current_page = intval( $current_page ); + } + } + + /** + * Set the sitemap content to display after you have generated it. + * + * @param string $sitemap The generated sitemap to output. + */ + public function set_sitemap( $sitemap ) { + $this->sitemap = $sitemap; + } + + /** + * Set as true to make the request 404. Used stop the display of empty sitemaps or invalid requests. + * + * @param bool $bool Is this a bad request. True or false. + */ + public function set_bad_sitemap( $bool ) { + $this->bad_sitemap = (bool) $bool; + } + + /** + * Prevent stupid plugins from running shutdown scripts when we're obviously not outputting HTML. + * + * @since 1.4.16 + */ + public function sitemap_close() { + remove_all_actions( 'wp_footer' ); + die(); + } + + /** + * Hijack requests for potential sitemaps and XSL files. + * + * @param \WP_Query $query Main query instance. + */ + public function redirect( $query ) { + + if ( ! $query->is_main_query() ) { + return; + } + + $xsl = get_query_var( 'xsl' ); + + if ( ! empty( $xsl ) ) { + $this->xsl_output( $xsl ); + $this->sitemap_close(); + + return; + } + + $type = get_query_var( 'sitemap' ); + + if ( empty( $type ) ) { + return; + } + + $this->set_n( get_query_var( 'sitemap_n' ) ); + + if ( ! $this->get_sitemap_from_cache( $type, $this->current_page ) ) { + $this->build_sitemap( $type ); + } + + if ( $this->bad_sitemap ) { + $query->set_404(); + status_header( 404 ); + + return; + } + + $this->output(); + $this->sitemap_close(); + } + + /** + * Try to get the sitemap from cache + * + * @param string $type Sitemap type. + * @param int $page_number The page number to retrieve. + * + * @return bool If the sitemap has been retrieved from cache. + */ + private function get_sitemap_from_cache( $type, $page_number ) { + + $this->transient = false; + + if ( true !== $this->cache->is_enabled() ) { + return false; + } + + /** + * Fires before the attempt to retrieve XML sitemap from the transient cache. + * + * @param WPSEO_Sitemaps $sitemaps Sitemaps object. + */ + do_action( 'wpseo_sitemap_stylesheet_cache_' . $type, $this ); + + $sitemap_cache_data = $this->cache->get_sitemap_data( $type, $page_number ); + + // No cache was found, refresh it because cache is enabled. + if ( empty( $sitemap_cache_data ) ) { + return $this->refresh_sitemap_cache( $type, $page_number ); + } + + // Cache object was found, parse information. + $this->transient = true; + + $this->sitemap = $sitemap_cache_data->get_sitemap(); + $this->bad_sitemap = ! $sitemap_cache_data->is_usable(); + + return true; + } + + /** + * Build and save sitemap to cache. + * + * @param string $type Sitemap type. + * @param int $page_number The page number to save to. + * + * @return bool + */ + private function refresh_sitemap_cache( $type, $page_number ) { + $this->set_n( $page_number ); + $this->build_sitemap( $type ); + + return $this->cache->store_sitemap( $type, $page_number, $this->sitemap, ! $this->bad_sitemap ); + } + + /** + * Attempts to build the requested sitemap. + * + * Sets $bad_sitemap if this isn't for the root sitemap, a post type or taxonomy. + * + * @param string $type The requested sitemap's identifier. + */ + public function build_sitemap( $type ) { + + /** + * Filter the type of sitemap to build. + * + * @param string $type Sitemap type, determined by the request. + */ + $type = apply_filters( 'wpseo_build_sitemap_post_type', $type ); + + if ( $type === '1' ) { + $this->build_root_map(); + + return; + } + + foreach ( $this->providers as $provider ) { + if ( ! $provider->handles_type( $type ) ) { + continue; + } + + $links = $provider->get_sitemap_links( $type, $this->max_entries, $this->current_page ); + + if ( empty( $links ) ) { + $this->bad_sitemap = true; + + return; + } + + $this->sitemap = $this->renderer->get_sitemap( $links, $type, $this->current_page ); + + return; + } + + if ( has_action( 'wpseo_do_sitemap_' . $type ) ) { + /** + * Fires custom handler, if hooked to generate sitemap for the type. + */ + do_action( 'wpseo_do_sitemap_' . $type ); + + return; + } + + $this->bad_sitemap = true; + } + + /** + * Build the root sitemap (example.com/sitemap_index.xml) which lists sub-sitemaps for other content types. + */ + public function build_root_map() { + + $links = array(); + + foreach ( $this->providers as $provider ) { + $links = array_merge( $links, $provider->get_index_links( $this->max_entries ) ); + } + + if ( empty( $links ) ) { + $this->bad_sitemap = true; + $this->sitemap = ''; + + return; + } + + $this->sitemap = $this->renderer->get_index( $links ); + } + + /** + * Spits out the XSL for the XML sitemap. + * + * @param string $type Type to output. + * + * @since 1.4.13 + */ + public function xsl_output( $type ) { + + if ( $type !== 'main' ) { + + /** + * Fires for the output of XSL for XML sitemaps, other than type "main". + */ + do_action( 'wpseo_xsl_' . $type ); + + return; + } + + header( $this->http_protocol . ' 200 OK', true, 200 ); + // Prevent the search engines from indexing the XML Sitemap. + header( 'X-Robots-Tag: noindex, follow', true ); + header( 'Content-Type: text/xml' ); + + // Make the browser cache this file properly. + $expires = YEAR_IN_SECONDS; + header( 'Pragma: public' ); + header( 'Cache-Control: maxage=' . $expires ); + header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', ( time() + $expires ) ) . ' GMT' ); + + require_once( WPSEO_PATH . 'css/xml-sitemap-xsl.php' ); + } + + /** + * Spit out the generated sitemap and relevant headers and encoding information. + */ + public function output() { + + if ( ! headers_sent() ) { + header( $this->http_protocol . ' 200 OK', true, 200 ); + // Prevent the search engines from indexing the XML Sitemap. + header( 'X-Robots-Tag: noindex, follow', true ); + header( 'Content-Type: text/xml; charset=' . esc_attr( $this->renderer->get_output_charset() ) ); + } + + echo $this->renderer->get_output( $this->sitemap, $this->transient ); + } + + /** + * Make a request for the sitemap index so as to cache it before the arrival of the search engines. + */ + public function hit_sitemap_index() { + wp_remote_get( WPSEO_Sitemaps_Router::get_base_url( 'sitemap_index.xml' ) ); + } + + /** + * Get the GMT modification date for the last modified post in the post type. + * + * @param string|array $post_types Post type or array of types. + * @param bool $return_all Flag to return array of values. + * + * @return string|array|false + */ + static public function get_last_modified_gmt( $post_types, $return_all = false ) { + + global $wpdb; + + static $post_type_dates = null; + + if ( ! is_array( $post_types ) ) { + $post_types = array( $post_types ); + } + + foreach ( $post_types as $post_type ) { + if ( ! isset( $post_type_dates[ $post_type ] ) ) { // If we hadn't seen post type before. R. + $post_type_dates = null; + break; + } + } + + if ( is_null( $post_type_dates ) ) { + + $sql = " + SELECT post_type, MAX(post_modified_gmt) AS date + FROM $wpdb->posts + WHERE post_status IN ('publish','inherit') + AND post_type IN ('" . implode( "','", get_post_types( array( 'public' => true ) ) ) . "') + GROUP BY post_type + ORDER BY post_modified_gmt DESC + "; + + $post_type_dates = array(); + + foreach ( $wpdb->get_results( $sql ) as $obj ) { + $post_type_dates[ $obj->post_type ] = $obj->date; + } + } + + $dates = array_intersect_key( $post_type_dates, array_flip( $post_types ) ); + + if ( count( $dates ) > 0 ) { + + if ( $return_all ) { + return $dates; + } + + return max( $dates ); + } + + return false; + } + + /** + * Get the modification date for the last modified post in the post type. + * + * @param array $post_types Post types to get the last modification date for. + * + * @return string + */ + public function get_last_modified( $post_types ) { + + return $this->timezone->format_date( self::get_last_modified_gmt( $post_types ) ); + } + + /** + * Notify search engines of the updated sitemap. + * + * @param string|null $url Optional URL to make the ping for. + */ + public static function ping_search_engines( $url = null ) { + + /** + * Filter: 'wpseo_allow_xml_sitemap_ping' - Check if pinging is not allowed (allowed by default) + * + * @api boolean $allow_ping The boolean that is set to true by default. + */ + if ( apply_filters( 'wpseo_allow_xml_sitemap_ping', true ) === false ) { + return; + } + + if ( '0' === get_option( 'blog_public' ) ) { // Don't ping if blog is not public. + return; + } + + if ( empty( $url ) ) { + $url = urlencode( WPSEO_Sitemaps_Router::get_base_url( 'sitemap_index.xml' ) ); + } + + // Ping Google and Bing. + wp_remote_get( 'http://www.google.com/webmasters/tools/ping?sitemap=' . $url, array( 'blocking' => false ) ); + wp_remote_get( 'http://www.bing.com/ping?sitemap=' . $url, array( 'blocking' => false ) ); + } + + /** + * Build the `` tag for a given URL. + * + * @deprecated + * + * @param array $url Array of parts that make up this entry. + * + * @return string + */ + public function sitemap_url( $url ) { + + return $this->renderer->sitemap_url( $url ); + } + + /** + * Set a custom stylesheet for this sitemap. Set to empty to just remove the default stylesheet. + * + * @deprecated + * + * @param string $stylesheet Full xml-stylesheet declaration. + */ + public function set_stylesheet( $stylesheet ) { + $this->renderer->set_stylesheet( $stylesheet ); + } + + /** + * Function to dynamically filter the change frequency. + * + * @deprecated 3.5 Change frequency data dropped from sitemaps. + * + * @param string $filter Expands to wpseo_sitemap_$filter_change_freq, allowing for a change of the frequency for + * numerous specific URLs. + * @param string $default The default value for the frequency. + * @param string $url The URL of the current entry. + * + * @return mixed|void + */ + static public function filter_frequency( $filter, $default, $url ) { + /** + * Filter the specific change frequency + * + * @param string $default The default change frequency. + * @param string $url URL to filter frequency for. + */ + $change_freq = apply_filters( 'wpseo_sitemap_' . $filter . '_change_freq', $default, $url ); + + if ( ! in_array( $change_freq, array( + 'always', + 'hourly', + 'daily', + 'weekly', + 'monthly', + 'yearly', + 'never', + ) ) + ) { + $change_freq = $default; + } + + return $change_freq; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/class-taxonomy-sitemap-provider.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-taxonomy-sitemap-provider.php new file mode 100644 index 0000000..4d67f4a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/class-taxonomy-sitemap-provider.php @@ -0,0 +1,289 @@ + true ), 'objects' ); + + if ( empty( $taxonomies ) ) { + return array(); + } + + $taxonomy_names = array_filter( array_keys( $taxonomies ), array( $this, 'is_valid_taxonomy' ) ); + $taxonomies = array_intersect_key( $taxonomies, array_flip( $taxonomy_names ) ); + + // Retrieve all the taxonomies and their terms so we can do a proper count on them. + /** + * Filter the setting of excluding empty terms from the XML sitemap. + * + * @param boolean $exclude Defaults to true. + * @param array $taxonomy_names Array of names for the taxonomies being processed. + */ + $hide_empty = apply_filters( 'wpseo_sitemap_exclude_empty_terms', true, $taxonomy_names ); + + $all_taxonomies = array(); + + foreach ( $taxonomy_names as $taxonomy_name ) { + + $taxonomy_terms = get_terms( $taxonomy_name, array( + 'hide_empty' => $hide_empty, + 'fields' => 'ids', + ) ); + + if ( count( $taxonomy_terms ) > 0 ) { + $all_taxonomies[ $taxonomy_name ] = $taxonomy_terms; + } + } + + $index = array(); + + foreach ( $taxonomies as $tax_name => $tax ) { + + if ( ! isset( $all_taxonomies[ $tax_name ] ) ) { // No eligible terms found. + continue; + } + + $total_count = ( isset( $all_taxonomies[ $tax_name ] ) ) ? count( $all_taxonomies[ $tax_name ] ) : 1; + $max_pages = 1; + + if ( $total_count > $max_entries ) { + $max_pages = (int) ceil( $total_count / $max_entries ); + } + + $last_modified_gmt = WPSEO_Sitemaps::get_last_modified_gmt( $tax->object_type ); + + for ( $page_counter = 0; $page_counter < $max_pages; $page_counter++ ) { + + $current_page = ( $max_pages > 1 ) ? ( $page_counter + 1 ) : ''; + + if ( ! is_array( $tax->object_type ) || count( $tax->object_type ) == 0 ) { + continue; + } + + $terms = array_splice( $all_taxonomies[ $tax_name ], 0, $max_entries ); + + if ( ! $terms ) { + continue; + } + + $args = array( + 'post_type' => $tax->object_type, + 'tax_query' => array( + array( + 'taxonomy' => $tax_name, + 'terms' => $terms, + ), + ), + 'orderby' => 'modified', + 'order' => 'DESC', + 'posts_per_page' => 1, + ); + $query = new WP_Query( $args ); + + if ( $query->have_posts() ) { + $date = $query->posts[0]->post_modified_gmt; + } + else { + $date = $last_modified_gmt; + } + + $index[] = array( + 'loc' => WPSEO_Sitemaps_Router::get_base_url( $tax_name . '-sitemap' . $current_page . '.xml' ), + 'lastmod' => $date, + ); + } + } + + return $index; + } + + /** + * Get set of sitemap link data. + * + * @param string $type Sitemap type. + * @param int $max_entries Entries per sitemap. + * @param int $current_page Current page of the sitemap. + * + * @return array + */ + public function get_sitemap_links( $type, $max_entries, $current_page ) { + + global $wpdb; + + $links = array(); + $taxonomy = get_taxonomy( $type ); + + if ( $taxonomy === false || ! $this->is_valid_taxonomy( $taxonomy->name ) || ! $taxonomy->public ) { + return $links; + } + + $options = $this->get_options(); + + $steps = $max_entries; + $offset = ( $current_page > 1 ) ? ( ( $current_page - 1 ) * $max_entries ) : 0; + + /** This filter is documented in inc/sitemaps/class-taxonomy-sitemap-provider.php */ + $hide_empty = apply_filters( 'wpseo_sitemap_exclude_empty_terms', true, $taxonomy ); + $terms = get_terms( $taxonomy->name, array( 'hide_empty' => $hide_empty ) ); + $terms = array_splice( $terms, $offset, $steps ); + + if ( empty( $terms ) ) { + $terms = array(); + } + + // Grab last modified date. + $sql = " + SELECT MAX(p.post_modified_gmt) AS lastmod + FROM $wpdb->posts AS p + INNER JOIN $wpdb->term_relationships AS term_rel + ON term_rel.object_id = p.ID + INNER JOIN $wpdb->term_taxonomy AS term_tax + ON term_tax.term_taxonomy_id = term_rel.term_taxonomy_id + AND term_tax.taxonomy = %s + AND term_tax.term_id = %d + WHERE p.post_status IN ('publish','inherit') + AND p.post_password = '' + "; + + foreach ( $terms as $term ) { + + $url = array(); + + $tax_noindex = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'noindex' ); + $tax_sitemap_inc = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'sitemap_include' ); + + if ( $tax_noindex === 'noindex' && $tax_sitemap_inc !== 'always' ) { + continue; + } + + if ( $tax_sitemap_inc === 'never' ) { + continue; + } + + $url['loc'] = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'canonical' ); + + if ( ! is_string( $url['loc'] ) || $url['loc'] === '' ) { + + $url['loc'] = get_term_link( $term, $term->taxonomy ); + + if ( $options['trailingslash'] === true ) { + + $url['loc'] = trailingslashit( $url['loc'] ); + } + } + + $url['mod'] = $wpdb->get_var( $wpdb->prepare( $sql, $term->taxonomy, $term->term_id ) ); + $url['images'] = $this->get_image_parser()->get_term_images( $term ); + + // Deprecated, kept for backwards data compat. R. + $url['chf'] = 'daily'; + $url['pri'] = 1; + + /** This filter is documented at inc/sitemaps/class-post-type-sitemap-provider.php */ + $url = apply_filters( 'wpseo_sitemap_entry', $url, 'term', $term ); + + if ( ! empty( $url ) ) { + $links[] = $url; + } + } + + return $links; + } + + /** + * Check if taxonomy by name is valid to appear in sitemaps. + * + * @param string $taxonomy_name Taxonomy name to check. + * + * @return bool + */ + public function is_valid_taxonomy( $taxonomy_name ) { + + $options = $this->get_options(); + if ( ! empty( $options[ "taxonomies-{$taxonomy_name}-not_in_sitemap" ] ) ) { + return false; + } + + if ( in_array( $taxonomy_name, array( 'link_category', 'nav_menu' ) ) ) { + return false; + } + + if ( 'post_format' === $taxonomy_name && ! empty( $options['disable-post_format'] ) ) { + return false; + } + + /** + * Filter to exclude the taxonomy from the XML sitemap. + * + * @param boolean $exclude Defaults to false. + * @param string $taxonomy_name Name of the taxonomy to exclude.. + */ + if ( apply_filters( 'wpseo_sitemap_exclude_taxonomy', false, $taxonomy_name ) ) { + return false; + } + + return true; + } + + /** + * Get the Image Parser + * + * @return WPSEO_Sitemap_Image_Parser + */ + protected function get_image_parser() { + if ( ! isset( self::$image_parser ) ) { + self::$image_parser = new WPSEO_Sitemap_Image_Parser(); + } + + return self::$image_parser; + } +} diff --git a/wp-content/plugins/wordpress-seo/inc/sitemaps/interface-sitemap-cache-data.php b/wp-content/plugins/wordpress-seo/inc/sitemaps/interface-sitemap-cache-data.php new file mode 100644 index 0000000..a2b929b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/sitemaps/interface-sitemap-cache-data.php @@ -0,0 +1,56 @@ +get_terms( $id, $taxonomy, $return_single ); +} + +/** + * Generate an HTML sitemap + * + * @deprecated 1.5.5.4 + * @deprecated use plugin Yoast SEO Premium + * @see Yoast SEO Premium + * + * @param array $atts The attributes passed to the shortcode. + * + * @return string + */ +function wpseo_sitemap_handler( $atts ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.5.5.4', 'Functionality has been discontinued after being in beta, it\'ll be available in the Yoast SEO Premium plugin soon.' ); + + return ''; +} + +add_shortcode( 'wpseo_sitemap', 'wpseo_sitemap_handler' ); + +/** + * Strip out the shortcodes with a filthy regex, because people don't properly register their shortcodes. + * + * @deprecated 1.6.1 + * @deprecated use WPSEO_Utils::strip_shortcode() + * @see WPSEO_Utils::strip_shortcode() + * + * @param string $text Input string that might contain shortcodes. + * + * @return string $text string without shortcodes + */ +function wpseo_strip_shortcode( $text ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.6.1', 'WPSEO_Utils::strip_shortcode()' ); + + return WPSEO_Utils::strip_shortcode( $text ); +} + +/** + * Do simple reliable math calculations without the risk of wrong results + * + * @see http://floating-point-gui.de/ + * @see the big red warning on http://php.net/language.types.float.php + * + * @deprecated 1.6.1 + * @deprecated use WPSEO_Utils::calc() + * @see WPSEO_Utils::calc() + * + * In the rare case that the bcmath extension would not be loaded, it will return the normal calculation results + * + * @since 1.5.0 + * + * @param mixed $number1 Scalar (string/int/float/bool). + * @param string $action Calculation action to execute. + * @param mixed $number2 Scalar (string/int/float/bool). + * @param bool $round Whether or not to round the result. Defaults to false. + * @param int $decimals Decimals for rounding operation. Defaults to 0. + * @param int $precision Calculation precision. Defaults to 10. + * + * @return mixed Calculation Result or false if either or the numbers isn't scalar or + * an invalid operation was passed + */ +function wpseo_calc( $number1, $action, $number2, $round = false, $decimals = 0, $precision = 10 ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.6.1', 'WPSEO_Utils::calc()' ); + + return WPSEO_Utils::calc( $number1, $action, $number2, $round, $decimals, $precision ); +} + +/** + * Check if the web server is running on Apache + * + * @deprecated 1.6.1 + * @deprecated use WPSEO_Utils::is_apache() + * @see WPSEO_Utils::is_apache() + * + * @return bool + */ +function wpseo_is_apache() { + _deprecated_function( __FUNCTION__, 'WPSEO 1.6.1', 'WPSEO_Utils::is_apache()' ); + + return WPSEO_Utils::is_apache(); +} + +/** + * Check if the web service is running on Nginx + * + * @deprecated 1.6.1 + * @deprecated use WPSEO_Utils::is_nginx() + * @see WPSEO_Utils::is_nginx() + * + * @return bool + */ +function wpseo_is_nginx() { + _deprecated_function( __FUNCTION__, 'WPSEO 1.6.1', 'WPSEO_Utils::is_nginx()' ); + + return WPSEO_Utils::is_nginx(); +} + +/** + * List all the available user roles + * + * @deprecated 1.6.1 + * @deprecated use WPSEO_Utils::get_roles() + * @see WPSEO_Utils::get_roles() + * + * @return array $roles + */ +function wpseo_get_roles() { + _deprecated_function( __FUNCTION__, 'WPSEO 1.6.1', 'WPSEO_Utils::get_roles()' ); + + return WPSEO_Utils::get_roles(); +} + +/** + * Check whether a url is relative + * + * @deprecated 1.6.1 + * @deprecated use WPSEO_Utils::is_url_relative() + * @see WPSEO_Utils::is_url_relative() + * + * @param string $url URL input to check. + * + * @return bool + */ +function wpseo_is_url_relative( $url ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.6.1', 'WPSEO_Utils::is_url_relative()' ); + + return WPSEO_Utils::is_url_relative( $url ); +} + +/** + * Standardize whitespace in a string + * + * @deprecated 1.6.1 + * @deprecated use WPSEO_Utils::standardize_whitespace() + * @see WPSEO_Utils::standardize_whitespace() + * + * @since 1.6.0 + * + * @param string $string String input to standardize. + * + * @return string + */ +function wpseo_standardize_whitespace( $string ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.6.1', 'WPSEO_Utils::standardize_whitespace()' ); + + return WPSEO_Utils::standardize_whitespace( $string ); +} + +/** + * Initialize sitemaps. Add sitemap & XSL rewrite rules and query vars + * + * @deprecated 2.4 + * @see WPSEO_Sitemaps_Router + */ +function wpseo_xml_sitemaps_init() { + $options = get_option( 'wpseo_xml' ); + if ( $options['enablexmlsitemap'] !== true ) { + return; + } + + // Redirects sitemap.xml to sitemap_index.xml. + add_action( 'template_redirect', 'wpseo_xml_redirect_sitemap', 0 ); + + if ( ! is_object( $GLOBALS['wp'] ) ) { + return; + } + + $GLOBALS['wp']->add_query_var( 'sitemap' ); + $GLOBALS['wp']->add_query_var( 'sitemap_n' ); + $GLOBALS['wp']->add_query_var( 'xsl' ); + add_rewrite_rule( 'sitemap_index\.xml$', 'index.php?sitemap=1', 'top' ); + add_rewrite_rule( '([^/]+?)-sitemap([0-9]+)?\.xml$', 'index.php?sitemap=$matches[1]&sitemap_n=$matches[2]', 'top' ); + add_rewrite_rule( '([a-z]+)?-?sitemap\.xsl$', 'index.php?xsl=$matches[1]', 'top' ); +} + +/** + * Redirect /sitemap.xml to /sitemap_index.xml + * + * @deprecated 2.4 + * @see WPSEO_Sitemaps_Router + */ +function wpseo_xml_redirect_sitemap() { + $current_url = ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == 'on' ) ? 'https://' : 'http://'; + $current_url .= sanitize_text_field( $_SERVER['SERVER_NAME'] ) . sanitize_text_field( $_SERVER['REQUEST_URI'] ); + + // Must be 'sitemap.xml' and must be 404. + if ( home_url( '/sitemap.xml' ) == $current_url && $GLOBALS['wp_query']->is_404 ) { + wp_redirect( home_url( '/sitemap_index.xml' ), 301 ); + exit; + } +} + +/** + * This invalidates our XML Sitemaps cache. + * + * @deprecated + * @see WPSEO_Sitemaps_Cache + * + * @param string $type Type of sitemap to invalidate. + */ +function wpseo_invalidate_sitemap_cache( $type ) { + WPSEO_Sitemaps_Cache::invalidate( $type ); +} + +/** + * Invalidate XML sitemap cache for taxonomy / term actions + * + * @deprecated + * @see WPSEO_Sitemaps_Cache + * + * @param int $unused Unused term ID value. + * @param string $type Taxonomy to invalidate. + */ +function wpseo_invalidate_sitemap_cache_terms( $unused, $type ) { + WPSEO_Sitemaps_Cache::invalidate( $type ); +} + +/** + * Invalidate the XML sitemap cache for a post type when publishing or updating a post + * + * @deprecated + * @see WPSEO_Sitemaps_Cache + * + * @param int $post_id Post ID to determine post type for invalidation. + */ +function wpseo_invalidate_sitemap_cache_on_save_post( $post_id ) { + WPSEO_Sitemaps_Cache::invalidate_post( $post_id ); +} + +/** + * Notify search engines of the updated sitemap. + * + * @deprecated + * @see WPSEO_Sitemaps::ping_search_engines() + * + * @param string|null $sitemapurl Optional URL to make the ping for. + */ +function wpseo_ping_search_engines( $sitemapurl = null ) { + WPSEO_Sitemaps::ping_search_engines( $sitemapurl ); +} + +/** + * Create base URL for the sitemaps and applies filters + * + * @since 1.5.7 + * + * @deprecated + * @see WPSEO_Sitemaps_Router::get_base_url() + * + * @param string $page page to append to the base URL. + * + * @return string base URL (incl page) for the sitemaps + */ +function wpseo_xml_sitemaps_base_url( $page ) { + return WPSEO_Sitemaps_Router::get_base_url( $page ); +} diff --git a/wp-content/plugins/wordpress-seo/inc/wpseo-functions.php b/wp-content/plugins/wordpress-seo/inc/wpseo-functions.php new file mode 100644 index 0000000..535928b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/wpseo-functions.php @@ -0,0 +1,294 @@ +ID ); + return $primary_term->get_primary_term(); + } +} + +if ( ! function_exists( 'yoast_get_primary_term' ) ) { + /** + * Get the primary term name + * + * @param string $taxonomy Optional. The taxonomy to get the primary term for. Defaults to category. + * @param null|int|WP_Post $post Optional. Post to get the primary term for. + * + * @return string Name of the primary term. + */ + function yoast_get_primary_term( $taxonomy = 'category', $post = null ) { + $primary_term_id = yoast_get_primary_term_id( $taxonomy, $post ); + + $term = get_term( $primary_term_id ); + if ( ! is_wp_error( $term ) && ! empty( $term ) ) { + return $term->name; + } + + return ''; + } +} + +/** + * Add the bulk edit capability to the proper default roles. + */ +function wpseo_add_capabilities() { + $roles = array( + 'administrator', + 'editor', + ); + + $roles = apply_filters( 'wpseo_bulk_edit_roles', $roles ); + + foreach ( $roles as $role ) { + $r = get_role( $role ); + if ( $r ) { + $r->add_cap( 'wpseo_bulk_edit' ); + } + } +} + + +/** + * Remove the bulk edit capability from the proper default roles. + * + * Contributor is still removed for legacy reasons. + */ +function wpseo_remove_capabilities() { + $roles = array( + 'administrator', + 'editor', + 'author', + 'contributor', + ); + + $roles = apply_filters( 'wpseo_bulk_edit_roles', $roles ); + + foreach ( $roles as $role ) { + $r = get_role( $role ); + if ( $r ) { + $r->remove_cap( 'wpseo_bulk_edit' ); + } + } +} + + +/** + * Replace `%%variable_placeholders%%` with their real value based on the current requested page/post/cpt + * + * @param string $string the string to replace the variables in. + * @param object $args the object some of the replacement values might come from, could be a post, taxonomy or term. + * @param array $omit variables that should not be replaced by this function. + * + * @return string + */ +function wpseo_replace_vars( $string, $args, $omit = array() ) { + $replacer = new WPSEO_Replace_Vars; + + return $replacer->replace( $string, $args, $omit ); +} + +/** + * Register a new variable replacement + * + * This function is for use by other plugins/themes to easily add their own additional variables to replace. + * This function should be called from a function on the 'wpseo_register_extra_replacements' action hook. + * The use of this function is preferred over the older 'wpseo_replacements' filter as a way to add new replacements. + * The 'wpseo_replacements' filter should still be used to adjust standard WPSEO replacement values. + * The function can not be used to replace standard WPSEO replacement value functions and will thrown a warning + * if you accidently try. + * To avoid conflicts with variables registered by WPSEO and other themes/plugins, try and make the + * name of your variable unique. Variable names also can not start with "%%cf_" or "%%ct_" as these are reserved + * for the standard WPSEO variable variables 'cf_', 'ct_' and + * 'ct_desc_'. + * The replacement function will be passed the undelimited name (i.e. stripped of the %%) of the variable + * to replace in case you need it. + * + * Example code: + * + * + * + * + * @since 1.5.4 + * + * @param string $var The name of the variable to replace, i.e. '%%var%%' + * - the surrounding %% are optional, name can only contain [A-Za-z0-9_-]. + * @param mixed $replace_function Function or method to call to retrieve the replacement value for the variable + * Uses the same format as add_filter/add_action function parameter and + * should *return* the replacement value. DON'T echo it. + * @param string $type Type of variable: 'basic' or 'advanced', defaults to 'advanced'. + * @param string $help_text Help text to be added to the help tab for this variable. + * + * @return bool Whether the replacement function was succesfully registered + */ +function wpseo_register_var_replacement( $var, $replace_function, $type = 'advanced', $help_text = '' ) { + return WPSEO_Replace_Vars::register_replacement( $var, $replace_function, $type, $help_text ); +} + +/** + * WPML plugin support: Set titles for custom types / taxonomies as translatable. + * It adds new keys to a wpml-config.xml file for a custom post type title, metadesc, title-ptarchive and metadesc-ptarchive fields translation. + * Documentation: http://wpml.org/documentation/support/language-configuration-files/ + * + * @global $sitepress + * + * @param array $config WPML configuration data to filter. + * + * @return array + */ +function wpseo_wpml_config( $config ) { + global $sitepress; + + if ( ( is_array( $config ) && isset( $config['wpml-config']['admin-texts']['key'] ) ) && ( is_array( $config['wpml-config']['admin-texts']['key'] ) && $config['wpml-config']['admin-texts']['key'] !== array() ) ) { + $admin_texts = $config['wpml-config']['admin-texts']['key']; + foreach ( $admin_texts as $k => $val ) { + if ( $val['attr']['name'] === 'wpseo_titles' ) { + $translate_cp = array_keys( $sitepress->get_translatable_documents() ); + if ( is_array( $translate_cp ) && $translate_cp !== array() ) { + foreach ( $translate_cp as $post_type ) { + $admin_texts[ $k ]['key'][]['attr']['name'] = 'title-' . $post_type; + $admin_texts[ $k ]['key'][]['attr']['name'] = 'metadesc-' . $post_type; + $admin_texts[ $k ]['key'][]['attr']['name'] = 'metakey-' . $post_type; + $admin_texts[ $k ]['key'][]['attr']['name'] = 'title-ptarchive-' . $post_type; + $admin_texts[ $k ]['key'][]['attr']['name'] = 'metadesc-ptarchive-' . $post_type; + $admin_texts[ $k ]['key'][]['attr']['name'] = 'metakey-ptarchive-' . $post_type; + + $translate_tax = $sitepress->get_translatable_taxonomies( false, $post_type ); + if ( is_array( $translate_tax ) && $translate_tax !== array() ) { + foreach ( $translate_tax as $taxonomy ) { + $admin_texts[ $k ]['key'][]['attr']['name'] = 'title-tax-' . $taxonomy; + $admin_texts[ $k ]['key'][]['attr']['name'] = 'metadesc-tax-' . $taxonomy; + $admin_texts[ $k ]['key'][]['attr']['name'] = 'metakey-tax-' . $taxonomy; + } + } + } + } + break; + } + } + $config['wpml-config']['admin-texts']['key'] = $admin_texts; + } + + return $config; +} + +add_filter( 'icl_wpml_config_array', 'wpseo_wpml_config' ); + +/** + * Yoast SEO breadcrumb shortcode + * [wpseo_breadcrumb] + * + * @return string + */ +function wpseo_shortcode_yoast_breadcrumb() { + return yoast_breadcrumb( '', '', false ); +} + +add_shortcode( 'wpseo_breadcrumb', 'wpseo_shortcode_yoast_breadcrumb' ); + +/** + * Emulate PHP native ctype_digit() function for when the ctype extension would be disabled *sigh* + * Only emulates the behaviour for when the input is a string, does not handle integer input as ascii value + * + * @param string $string + * + * @return bool + */ +if ( ! extension_loaded( 'ctype' ) || ! function_exists( 'ctype_digit' ) ) { + + /** + * @param string $string String input to validate. + * + * @return bool + */ + function ctype_digit( $string ) { + $return = false; + if ( ( is_string( $string ) && $string !== '' ) && preg_match( '`^\d+$`', $string ) === 1 ) { + $return = true; + } + + return $return; + } +} + +/** + * Makes sure the taxonomy meta is updated when a taxonomy term is split. + * + * @link https://make.wordpress.org/core/2015/02/16/taxonomy-term-splitting-in-4-2-a-developer-guide/ Article explaining the taxonomy term splitting in WP 4.2. + * + * @param string $old_term_id Old term id of the taxonomy term that was splitted. + * @param string $new_term_id New term id of the taxonomy term that was splitted. + * @param string $term_taxonomy_id Term taxonomy id for the taxonomy that was affected. + * @param string $taxonomy The taxonomy that the taxonomy term was splitted for. + */ +function wpseo_split_shared_term( $old_term_id, $new_term_id, $term_taxonomy_id, $taxonomy ) { + $tax_meta = get_option( 'wpseo_taxonomy_meta', array() ); + + if ( ! empty( $tax_meta[ $taxonomy ][ $old_term_id ] ) ) { + $tax_meta[ $taxonomy ][ $new_term_id ] = $tax_meta[ $taxonomy ][ $old_term_id ]; + unset( $tax_meta[ $taxonomy ][ $old_term_id ] ); + update_option( 'wpseo_taxonomy_meta', $tax_meta ); + } +} + +add_action( 'split_shared_term', 'wpseo_split_shared_term', 10, 4 ); diff --git a/wp-content/plugins/wordpress-seo/inc/wpseo-non-ajax-functions.php b/wp-content/plugins/wordpress-seo/inc/wpseo-non-ajax-functions.php new file mode 100644 index 0000000..272c9a1 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/inc/wpseo-non-ajax-functions.php @@ -0,0 +1,538 @@ +ID ); + + if ( $analysis_seo->is_enabled() ) { + $score = wpseo_adminbar_seo_score(); + } + elseif ( $analysis_readability->is_enabled() ) { + $score = wpseo_adminbar_content_score(); + } + } + + if ( is_category() || is_tag() || (WPSEO_Taxonomy::is_term_edit( $GLOBALS['pagenow'] ) && ! WPSEO_Taxonomy::is_term_overview( $GLOBALS['pagenow'] ) ) || is_tax() ) { + if ( $analysis_seo->is_enabled() ) { + $score = wpseo_tax_adminbar_seo_score(); + } + elseif ( $analysis_readability->is_enabled() ) { + $score = wpseo_tax_adminbar_content_score(); + } + } + + // Never display notifications for network admin. + $counter = ''; + + // Set the top level menu item content for admins and network admins. + if ( $user_is_admin_or_networkadmin ) { + + // Link the top level menu item to the Yoast Dashboard page. + $seo_url = get_admin_url( null, 'admin.php?page=' . WPSEO_Admin::PAGE_IDENTIFIER ); + // Since admins will get a real link, there's no need for a tabindex attribute. + $top_level_link_tabindex = false; + + if ( '' === $score ) { + + // Notification information. + $notification_center = Yoast_Notification_Center::get(); + $notification_count = $notification_center->get_notification_count(); + $new_notifications = $notification_center->get_new_notifications(); + $new_notifications_count = count( $new_notifications ); + + if ( $notification_count > 0 ) { + // Always show Alerts page when clicking on the main link. + /* translators: %s: number of notifications */ + $counter_screen_reader_text = sprintf( _n( '%s notification', '%s notifications', $notification_count, 'wordpress-seo' ), number_format_i18n( $notification_count ) ); + $counter = sprintf( '
    %s
    ', $notification_count, $counter_screen_reader_text ); + } + + if ( $new_notifications_count ) { + $notification = sprintf( + /* translators: %d resolves to the number of alerts being added. */ + _n( 'You have a new issue concerning your SEO!', 'You have %d new issues concerning your SEO!', $new_notifications_count, 'wordpress-seo' ), + $new_notifications_count + ); + $counter .= '
    ' . $notification . '
    '; + } + } + } + + $title = ''; + + $wp_admin_bar->add_menu( array( + 'id' => 'wpseo-menu', + 'title' => $title . $score . $counter, + 'href' => $seo_url, + 'meta' => array( 'tabindex' => $top_level_link_tabindex ), + ) ); + if ( ! empty( $notification_count ) ) { + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-menu', + 'id' => 'wpseo-notifications', + 'title' => __( 'Notifications', 'wordpress-seo' ) . $counter, + 'href' => $seo_url, + 'meta' => array( 'tabindex' => $top_level_link_tabindex ), + ) ); + } + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-menu', + 'id' => 'wpseo-kwresearch', + 'title' => __( 'Keyword Research', 'wordpress-seo' ), + 'meta' => array( 'tabindex' => '0' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-kwresearch', + 'id' => 'wpseo-adwordsexternal', + 'title' => __( 'AdWords External', 'wordpress-seo' ), + 'href' => 'http://adwords.google.com/keywordplanner', + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-kwresearch', + 'id' => 'wpseo-googleinsights', + 'title' => __( 'Google Trends', 'wordpress-seo' ), + 'href' => 'https://www.google.com/trends/explore#q=' . urlencode( $focuskw ), + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-kwresearch', + 'id' => 'wpseo-wordtracker', + 'title' => __( 'SEO Book', 'wordpress-seo' ), + 'href' => 'http://tools.seobook.com/keyword-tools/seobook/?keyword=' . urlencode( $focuskw ), + 'meta' => array( 'target' => '_blank' ), + ) ); + + if ( ! is_admin() ) { + $url = WPSEO_Frontend::get_instance()->canonical( false ); + + if ( is_string( $url ) ) { + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-menu', + 'id' => 'wpseo-analysis', + 'title' => __( 'Analyze this page', 'wordpress-seo' ), + 'meta' => array( 'tabindex' => '0' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-analysis', + 'id' => 'wpseo-inlinks-ose', + 'title' => __( 'Check Inlinks (OSE)', 'wordpress-seo' ), + 'href' => '//moz.com/researchtools/ose/links?site=' . urlencode( $url ), + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-analysis', + 'id' => 'wpseo-kwdensity', + 'title' => __( 'Check Keyword Density', 'wordpress-seo' ), + // HTTPS not available. + 'href' => 'http://www.zippy.co.uk/keyworddensity/index.php?url=' . urlencode( $url ) . '&keyword=' . urlencode( $focuskw ), + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-analysis', + 'id' => 'wpseo-cache', + 'title' => __( 'Check Google Cache', 'wordpress-seo' ), + 'href' => '//webcache.googleusercontent.com/search?strip=1&q=cache:' . urlencode( $url ), + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-analysis', + 'id' => 'wpseo-header', + 'title' => __( 'Check Headers', 'wordpress-seo' ), + 'href' => '//quixapp.com/headers/?r=' . urlencode( $url ), + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-analysis', + 'id' => 'wpseo-structureddata', + 'title' => __( 'Google Structured Data Test', 'wordpress-seo' ), + 'href' => 'https://search.google.com/structured-data/testing-tool#url=' . urlencode( $url ), + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-analysis', + 'id' => 'wpseo-facebookdebug', + 'title' => __( 'Facebook Debugger', 'wordpress-seo' ), + 'href' => '//developers.facebook.com/tools/debug/og/object?q=' . urlencode( $url ), + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-analysis', + 'id' => 'wpseo-pinterestvalidator', + 'title' => __( 'Pinterest Rich Pins Validator', 'wordpress-seo' ), + 'href' => 'https://developers.pinterest.com/tools/url-debugger/?link=' . urlencode( $url ), + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-analysis', + 'id' => 'wpseo-htmlvalidation', + 'title' => __( 'HTML Validator', 'wordpress-seo' ), + 'href' => '//validator.w3.org/check?uri=' . urlencode( $url ), + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-analysis', + 'id' => 'wpseo-cssvalidation', + 'title' => __( 'CSS Validator', 'wordpress-seo' ), + 'href' => '//jigsaw.w3.org/css-validator/validator?uri=' . urlencode( $url ), + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-analysis', + 'id' => 'wpseo-pagespeed', + 'title' => __( 'Google Page Speed Test', 'wordpress-seo' ), + 'href' => '//developers.google.com/speed/pagespeed/insights/?url=' . urlencode( $url ), + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-analysis', + 'id' => 'wpseo-microsoftedge', + 'title' => __( 'Microsoft Edge Site Scan', 'wordpress-seo' ), + 'href' => 'https://developer.microsoft.com/en-us/microsoft-edge/tools/staticscan/?url=' . urlencode( $url ), + 'meta' => array( 'target' => '_blank' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-analysis', + 'id' => 'wpseo-google-mobile-friendly', + 'title' => __( 'Mobile-Friendly Test', 'wordpress-seo' ), + 'href' => 'https://www.google.com/webmasters/tools/mobile-friendly/?url=' . urlencode( $url ), + 'meta' => array( 'target' => '_blank' ), + ) ); + } + } + + // @todo: add links to bulk title and bulk description edit pages. + if ( $user_is_admin_or_networkadmin ) { + + $advanced_settings = wpseo_advanced_settings_enabled( $options ); + + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-menu', + 'id' => 'wpseo-settings', + 'title' => __( 'SEO Settings', 'wordpress-seo' ), + 'meta' => array( 'tabindex' => '0' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-settings', + 'id' => 'wpseo-general', + 'title' => __( 'Dashboard', 'wordpress-seo' ), + 'href' => admin_url( 'admin.php?page=wpseo_dashboard' ), + ) ); + if ( $advanced_settings ) { + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-settings', + 'id' => 'wpseo-titles', + 'title' => __( 'Titles & Metas', 'wordpress-seo' ), + 'href' => admin_url( 'admin.php?page=wpseo_titles' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-settings', + 'id' => 'wpseo-social', + 'title' => __( 'Social', 'wordpress-seo' ), + 'href' => admin_url( 'admin.php?page=wpseo_social' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-settings', + 'id' => 'wpseo-xml', + 'title' => __( 'XML Sitemaps', 'wordpress-seo' ), + 'href' => admin_url( 'admin.php?page=wpseo_xml' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-settings', + 'id' => 'wpseo-wpseo-advanced', + 'title' => __( 'Advanced', 'wordpress-seo' ), + 'href' => admin_url( 'admin.php?page=wpseo_advanced' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-settings', + 'id' => 'wpseo-tools', + 'title' => __( 'Tools', 'wordpress-seo' ), + 'href' => admin_url( 'admin.php?page=wpseo_tools' ), + ) ); + } + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-settings', + 'id' => 'wpseo-search-console', + 'title' => __( 'Search Console', 'wordpress-seo' ), + 'href' => admin_url( 'admin.php?page=wpseo_search_console' ), + ) ); + $wp_admin_bar->add_menu( array( + 'parent' => 'wpseo-settings', + 'id' => 'wpseo-licenses', + 'title' => __( 'Go Premium', 'wordpress-seo' ), + 'href' => admin_url( 'admin.php?page=wpseo_licenses' ), + ) ); + } + +} + +/** + * Returns the SEO score element for the admin bar. + * + * @return string + */ +function wpseo_adminbar_seo_score() { + $rating = WPSEO_Meta::get_value( 'linkdex', get_the_ID() ); + + return wpseo_adminbar_score( $rating ); +} + +/** + * Returns the content score element for the adminbar. + * + * @return string + */ +function wpseo_adminbar_content_score() { + $rating = WPSEO_Meta::get_value( 'content_score', get_the_ID() ); + + return wpseo_adminbar_score( $rating ); +} + +/** + * Returns the SEO score element for the adminbar. + * + * @return string + */ +function wpseo_tax_adminbar_seo_score() { + $rating = 0; + + if ( is_tax() || is_category() || is_tag() ) { + $rating = WPSEO_Taxonomy_Meta::get_meta_without_term( 'linkdex' ); + } + + return wpseo_adminbar_score( $rating ); +} + +/** + * Returns the Content score element for the adminbar. + * + * @return string + */ +function wpseo_tax_adminbar_content_score() { + $rating = 0; + + if ( is_tax() || is_category() || is_tag() ) { + $rating = WPSEO_Taxonomy_Meta::get_meta_without_term( 'content_score' ); + } + + return wpseo_adminbar_score( $rating ); +} + +/** + * Takes The SEO score and makes the score icon for the adminbar with it. + * + * @param int $score The 0-100 rating of the score. Can be either SEO score or content score. + * + * @return string $score_adminbar_element + */ +function wpseo_adminbar_score( $score ) { + $score = WPSEO_Utils::translate_score( $score ); + + $score_adminbar_element = '
    '; + return $score_adminbar_element; +} + +add_action( 'admin_bar_menu', 'wpseo_admin_bar_menu', 95 ); + +/** + * Enqueue CSS to format the Yoast SEO adminbar item. + */ +function wpseo_admin_bar_style() { + + if ( ! is_admin_bar_showing() ) { + return; + } + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->register_assets(); + $asset_manager->enqueue_style( 'adminbar' ); +} + +add_action( 'wp_enqueue_scripts', 'wpseo_admin_bar_style' ); +add_action( 'admin_enqueue_scripts', 'wpseo_admin_bar_style' ); + +/** + * Allows editing of the meta fields through weblog editors like Marsedit. + * + * @param array $allcaps Capabilities that must all be true to allow action. + * @param array $cap Array of capabilities to be checked, unused here. + * @param array $args List of arguments for the specific cap to be checked. + * + * @return array $allcaps + */ +function allow_custom_field_edits( $allcaps, $cap, $args ) { + // $args[0] holds the capability. + // $args[2] holds the post ID. + // $args[3] holds the custom field. + // Make sure the request is to edit or add a post meta (this is usually also the second value in $cap, + // but this is safer to check). + if ( in_array( $args[0], array( 'edit_post_meta', 'add_post_meta' ) ) ) { + // Only allow editing rights for users who have the rights to edit this post and make sure + // the meta value starts with _yoast_wpseo (WPSEO_Meta::$meta_prefix). + if ( ( isset( $args[2] ) && current_user_can( 'edit_post', $args[2] ) ) && ( ( isset( $args[3] ) && $args[3] !== '' ) && strpos( $args[3], WPSEO_Meta::$meta_prefix ) === 0 ) ) { + $allcaps[ $args[0] ] = true; + } + } + + return $allcaps; +} + +add_filter( 'user_has_cap', 'allow_custom_field_edits', 0, 3 ); + +/** + * Detects if the advanced settings are enabled. + * + * @param array $wpseo_options The wpseo settings. + * + * @returns boolean True if the advanced settings are enabled, false if not. + */ +function wpseo_advanced_settings_enabled( $wpseo_options ) { + return ( $wpseo_options['enable_setting_pages'] === true ); +} + +/********************** DEPRECATED FUNCTIONS **********************/ + +/** + * Set the default settings. + * + * @deprecated 1.5.0 + * @deprecated use WPSEO_Options::initialize() + * @see WPSEO_Options::initialize() + */ +function wpseo_defaults() { + _deprecated_function( __FUNCTION__, 'WPSEO 1.5.0', 'WPSEO_Options::initialize()' ); + WPSEO_Options::initialize(); +} + +/** + * Translates a decimal analysis score into a textual one. + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::translate_score() + * @see WPSEO_Utils::translate_score() + * + * @param int $val The decimal score to translate. + * @param bool $css_value Whether to return the i18n translated score or the CSS class value. + * + * @return string + */ +function wpseo_translate_score( $val, $css_value = true ) { + _deprecated_function( __FUNCTION__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::translate_score()' ); + + return WPSEO_Utils::translate_score(); +} + +/** + * Check whether file editing is allowed for the .htaccess and robots.txt files + * + * @deprecated 1.5.6.1 + * @deprecated use WPSEO_Utils::allow_system_file_edit() + * @see WPSEO_Utils::allow_system_file_edit() + * + * @internal current_user_can() checks internally whether a user is on wp-ms and adjusts accordingly. + * + * @return bool + */ +function wpseo_allow_system_file_edit() { + _deprecated_function( __FUNCTION__, 'WPSEO 1.5.6.1', 'WPSEO_Utils::allow_system_file_edit()' ); + + return WPSEO_Utils::allow_system_file_edit(); +} + +/** + * Test whether force rewrite should be enabled or not. + * + * @deprecated 3.3 + * + * @return void + */ +function wpseo_title_test() { + _deprecated_function( __FUNCTION__, 'WPSEO 3.3.0' ); +} + +/** + * Test whether the active theme contains a description tag. + * + * @since 1.4.14 Moved from dashboard.php and adjusted - see changelog + * + * @deprecated 3.3 + * + * @return void + */ +function wpseo_description_test() { + _deprecated_function( __FUNCTION__, 'WPSEO 3.3.0' ); +} + +/** + * Check if the current theme was updated and if so, test the updated theme + * for the title and meta description tag + * + * @since 1.4.14 + * + * @deprecated 3.3 + * + * @param WP_Upgrader $upgrader_object Upgrader object instance. + * @param array $context_array Context data array. + * @param mixed $themes Optional themes set. + * + * @return void + */ +function wpseo_upgrader_process_complete( $upgrader_object, $context_array, $themes = null ) { + _deprecated_function( __FUNCTION__, 'WPSEO 3.3.0' ); +} + +/** + * Abuse a filter to check if the current theme was updated and if so, test the updated theme + * for the title and meta description tag + * + * @since 1.4.14 + * @deprecated 3.3 + * + * @param array $update_actions Updated actions set. + * @param WP_Theme|string $updated_theme Theme object instance or stylesheet name. + */ +function wpseo_update_theme_complete_actions( $update_actions, $updated_theme ) { + _deprecated_function( __FUNCTION__, 'WPSEO 3.3.0' ); +} diff --git a/wp-content/plugins/wordpress-seo/index.php b/wp-content/plugins/wordpress-seo/index.php new file mode 100644 index 0000000..e94d9a4 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/index.php @@ -0,0 +1,4 @@ +/,"")}},{key:"stripMessage",value:function(a){return a.endsWith("0 - ",4)?a.slice(4):a}},{key:"sendChangeEvent",value:function(){var a={target:{name:"mailchimpSignup",value:{hasSignup:this.state.successfulSignup}}};this.onChange(a)}},{key:"getLoadingIndicator",value:function(){return this.state.isLoading?j.default.createElement("div",{className:"yoast-wizard-overlay"},j.default.createElement(q.default,null)):null}},{key:"render",value:function(){if(this.skipRendering())return null;this.onChange=this.props.onChange;var a=j.default.createElement("input",{id:"mailchimpEmail",className:"yoast-wizard-text-input-field",ref:"emailInput",type:"text",name:this.props.name,defaultValue:this.props.properties.currentUserEmail}),b=j.default.createElement(n.default,{label:this.props.translate("Sign Up!"),onClick:this.signup.bind(this)}),c=this.getSignupMessage(),d=this.getLoadingIndicator();return j.default.createElement("div",null,j.default.createElement("h2",null,this.props.properties.title),j.default.createElement("p",null,this.props.properties.label),j.default.createElement("div",{className:"yoast-wizard-text-input"},j.default.createElement("label",{htmlFor:"mailchimpName",className:"yoast-wizard-text-input-label"},this.props.translate("Name")),j.default.createElement("input",{id:"mailchimpName",className:"yoast-wizard-text-input-field",ref:"nameInput",type:"text",name:"name",defaultValue:this.props.properties.userName})),j.default.createElement("div",{className:"yoast-wizard-text-input"},j.default.createElement("label",{htmlFor:"mailchimpEmail",className:"yoast-wizard-text-input-label"},this.props.translate("Email")),a),b,c,d)}},{key:"skipRendering",value:function(){var a=this.props.stepState,b="success"===a.currentStep,c=a.fieldValues.intro.mailchimpSignup.hasSignup===!0;return b&&c}},{key:"getSignupMessage",value:function(){return this.state.successfulSignup?j.default.createElement("p",{className:"yoast-wizard-mailchimp-message-success","aria-live":"assertive"},this.state.message):j.default.createElement("p",{className:"yoast-wizard-mailchimp-message-error","aria-live":"assertive"},this.state.message)}}]),b}(j.default.Component);r.propTypes={translate:j.default.PropTypes.func.isRequired,title:j.default.PropTypes.string,component:j.default.PropTypes.string,name:j.default.PropTypes.string.isRequired,properties:j.default.PropTypes.object,data:j.default.PropTypes.string,onChange:j.default.PropTypes.func,value:j.default.PropTypes.shape({hasSignup:j.default.PropTypes.bool}),stepState:j.default.PropTypes.object},r.defaultProps={title:"Mailchimp signup",component:"",properties:{},data:"",value:{hasSignup:!1}},c.default=(0,o.localize)(r)},{"material-ui/RaisedButton":469,react:677,"yoast-components/composites/OnboardingWizard/LoadingIndicator":693,"yoast-components/composites/OnboardingWizard/helpers/ajaxHelper":703,"yoast-components/utils/i18n":715}],3:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var h=function(){function a(a,b){for(var c=0;c1&&c[1]||""}function c(b){var c=a.match(b);return c&&c.length>1&&c[2]||""}var d,e=b(/(ipod|iphone|ipad)/i).toLowerCase(),f=/like android/i.test(a),h=!f&&/android/i.test(a),i=/nexus\s*[0-6]\s*/i.test(a),j=!i&&/nexus\s*[0-9]+/i.test(a),k=/CrOS/.test(a),l=/silk/i.test(a),m=/sailfish/i.test(a),n=/tizen/i.test(a),o=/(web|hpw)os/i.test(a),p=/windows phone/i.test(a),q=(/SamsungBrowser/i.test(a),!p&&/windows/i.test(a)),r=!e&&!l&&/macintosh/i.test(a),s=!h&&!m&&!n&&!o&&/linux/i.test(a),t=b(/edge\/(\d+(\.\d+)?)/i),u=b(/version\/(\d+(\.\d+)?)/i),v=/tablet/i.test(a),w=!v&&/[^-]mobi/i.test(a),x=/xbox/i.test(a);/opera/i.test(a)?d={name:"Opera",opera:g,version:u||b(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)}:/opr|opios/i.test(a)?d={name:"Opera",opera:g,version:b(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i)||u}:/SamsungBrowser/i.test(a)?d={name:"Samsung Internet for Android",samsungBrowser:g,version:u||b(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i)}:/coast/i.test(a)?d={name:"Opera Coast",coast:g,version:u||b(/(?:coast)[\s\/](\d+(\.\d+)?)/i)}:/yabrowser/i.test(a)?d={name:"Yandex Browser",yandexbrowser:g,version:u||b(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)}:/ucbrowser/i.test(a)?d={name:"UC Browser",ucbrowser:g,version:b(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)}:/mxios/i.test(a)?d={name:"Maxthon",maxthon:g,version:b(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)}:/epiphany/i.test(a)?d={name:"Epiphany",epiphany:g,version:b(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)}:/puffin/i.test(a)?d={name:"Puffin",puffin:g,version:b(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)}:/sleipnir/i.test(a)?d={name:"Sleipnir",sleipnir:g,version:b(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)}:/k-meleon/i.test(a)?d={name:"K-Meleon",kMeleon:g,version:b(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)}:p?(d={name:"Windows Phone",windowsphone:g},t?(d.msedge=g,d.version=t):(d.msie=g,d.version=b(/iemobile\/(\d+(\.\d+)?)/i))):/msie|trident/i.test(a)?d={name:"Internet Explorer",msie:g,version:b(/(?:msie |rv:)(\d+(\.\d+)?)/i)}:k?d={name:"Chrome",chromeos:g,chromeBook:g,chrome:g,version:b(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:/chrome.+? edge/i.test(a)?d={name:"Microsoft Edge",msedge:g,version:t}:/vivaldi/i.test(a)?d={name:"Vivaldi",vivaldi:g,version:b(/vivaldi\/(\d+(\.\d+)?)/i)||u}:m?d={name:"Sailfish",sailfish:g,version:b(/sailfish\s?browser\/(\d+(\.\d+)?)/i)}:/seamonkey\//i.test(a)?d={name:"SeaMonkey",seamonkey:g,version:b(/seamonkey\/(\d+(\.\d+)?)/i)}:/firefox|iceweasel|fxios/i.test(a)?(d={name:"Firefox",firefox:g,version:b(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)},/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(a)&&(d.firefoxos=g)):l?d={name:"Amazon Silk",silk:g,version:b(/silk\/(\d+(\.\d+)?)/i)}:/phantom/i.test(a)?d={name:"PhantomJS",phantom:g,version:b(/phantomjs\/(\d+(\.\d+)?)/i)}:/slimerjs/i.test(a)?d={name:"SlimerJS",slimer:g,version:b(/slimerjs\/(\d+(\.\d+)?)/i)}:/blackberry|\bbb\d+/i.test(a)||/rim\stablet/i.test(a)?d={name:"BlackBerry",blackberry:g,version:u||b(/blackberry[\d]+\/(\d+(\.\d+)?)/i)}:o?(d={name:"WebOS",webos:g,version:u||b(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)},/touchpad\//i.test(a)&&(d.touchpad=g)):/bada/i.test(a)?d={name:"Bada",bada:g,version:b(/dolfin\/(\d+(\.\d+)?)/i)}:n?d={name:"Tizen",tizen:g,version:b(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i)||u}:/qupzilla/i.test(a)?d={name:"QupZilla",qupzilla:g,version:b(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i)||u}:/chromium/i.test(a)?d={name:"Chromium",chromium:g,version:b(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i)||u}:/chrome|crios|crmo/i.test(a)?d={name:"Chrome",chrome:g,version:b(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:h?d={name:"Android",version:u}:/safari|applewebkit/i.test(a)?(d={name:"Safari",safari:g},u&&(d.version=u)):e?(d={name:"iphone"==e?"iPhone":"ipad"==e?"iPad":"iPod"},u&&(d.version=u)):d=/googlebot/i.test(a)?{name:"Googlebot",googlebot:g,version:b(/googlebot\/(\d+(\.\d+))/i)||u}:{name:b(/^(.*)\/(.*) /),version:c(/^(.*)\/(.*) /)},!d.msedge&&/(apple)?webkit/i.test(a)?(/(apple)?webkit\/537\.36/i.test(a)?(d.name=d.name||"Blink",d.blink=g):(d.name=d.name||"Webkit",d.webkit=g),!d.version&&u&&(d.version=u)):!d.opera&&/gecko\//i.test(a)&&(d.name=d.name||"Gecko",d.gecko=g,d.version=d.version||b(/gecko\/(\d+(\.\d+)?)/i)),d.windowsphone||d.msedge||!h&&!d.silk?d.windowsphone||d.msedge||!e?r?d.mac=g:x?d.xbox=g:q?d.windows=g:s&&(d.linux=g):(d[e]=g,d.ios=g):d.android=g;var y="";d.windowsphone?y=b(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i):e?(y=b(/os (\d+([_\s]\d+)*) like mac os x/i),y=y.replace(/[_\s]/g,".")):h?y=b(/android[ \/-](\d+(\.\d+)*)/i):d.webos?y=b(/(?:web|hpw)os\/(\d+(\.\d+)*)/i):d.blackberry?y=b(/rim\stablet\sos\s(\d+(\.\d+)*)/i):d.bada?y=b(/bada\/(\d+(\.\d+)*)/i):d.tizen&&(y=b(/tizen[\/\s](\d+(\.\d+)*)/i)),y&&(d.osversion=y);var z=y.split(".")[0];return v||j||"ipad"==e||h&&(3==z||z>=4&&!w)||d.silk?d.tablet=g:(w||"iphone"==e||"ipod"==e||h||i||d.blackberry||d.webos||d.bada)&&(d.mobile=g),d.msedge||d.msie&&d.version>=10||d.yandexbrowser&&d.version>=15||d.vivaldi&&d.version>=1||d.chrome&&d.version>=20||d.samsungBrowser&&d.version>=4||d.firefox&&d.version>=20||d.safari&&d.version>=6||d.opera&&d.version>=10||d.ios&&d.osversion&&d.osversion.split(".")[0]>=6||d.blackberry&&d.version>=10.1||d.chromium&&d.version>=20?d.a=g:d.msie&&d.version<10||d.chrome&&d.version<20||d.firefox&&d.version<20||d.safari&&d.version<6||d.opera&&d.version<10||d.ios&&d.osversion&&d.osversion.split(".")[0]<6||d.chromium&&d.version<20?d.c=g:d.x=g,d}function b(a){return a.split(".").length}function c(a,b){var c,d=[];if(Array.prototype.map)return Array.prototype.map.call(a,b);for(c=0;c=0;){if(e[0][d]>e[1][d])return 1;if(e[0][d]!==e[1][d])return-1;if(0===d)return 0}}function e(b,c,e){var f=h;"string"==typeof c&&(e=c,c=void 0),void 0===c&&(c=!1),e&&(f=a(e));var g=""+f.version;for(var i in b)if(b.hasOwnProperty(i)&&f[i]){if("string"!=typeof b[i])throw new Error("Browser version in the minVersion map should be a string: "+i+": "+String(b));return d([g,b[i]])<0}return c}function f(a,b,c){return!e(a,b,c)}var g=!0,h=a("undefined"!=typeof navigator?navigator.userAgent||"":"");return h.test=function(a){for(var b=0;b2?arguments[2]:void 0,k=Math.min((void 0===j?g:e(j,g))-i,g-h),l=1;for(i0;)i in c?c[h]=c[i]:delete c[h],h+=l,i+=l;return c}},{"./_to-index":110,"./_to-length":113,"./_to-object":114}],14:[function(a,b,c){"use strict";var d=a("./_to-object"),e=a("./_to-index"),f=a("./_to-length");b.exports=function(a){for(var b=d(this),c=f(b.length),g=arguments.length,h=e(g>1?arguments[1]:void 0,c),i=g>2?arguments[2]:void 0,j=void 0===i?c:e(i,c);j>h;)b[h++]=a;return b}},{"./_to-index":110,"./_to-length":113,"./_to-object":114}],15:[function(a,b,c){var d=a("./_for-of");b.exports=function(a,b){var c=[];return d(a,!1,c.push,c,b),c}},{"./_for-of":42}],16:[function(a,b,c){var d=a("./_to-iobject"),e=a("./_to-length"),f=a("./_to-index");b.exports=function(a){return function(b,c,g){var h,i=d(b),j=e(i.length),k=f(g,j);if(a&&c!=c){for(;j>k;)if(h=i[k++],h!=h)return!0}else for(;j>k;k++)if((a||k in i)&&i[k]===c)return a||k||0;return!a&&-1}}},{"./_to-index":110,"./_to-iobject":112,"./_to-length":113}],17:[function(a,b,c){var d=a("./_ctx"),e=a("./_iobject"),f=a("./_to-object"),g=a("./_to-length"),h=a("./_array-species-create");b.exports=function(a,b){var c=1==a,i=2==a,j=3==a,k=4==a,l=6==a,m=5==a||l,n=b||h;return function(b,h,o){for(var p,q,r=f(b),s=e(r),t=d(h,o,3),u=g(s.length),v=0,w=c?n(b,u):i?n(b,0):void 0;u>v;v++)if((m||v in s)&&(p=s[v],q=t(p,v,r),a))if(c)w[v]=q;else if(q)switch(a){case 3:return!0;case 5:return p;case 6:return v;case 2:w.push(p)}else if(k)return!1;return l?-1:j||k?k:w}}},{"./_array-species-create":20,"./_ctx":30,"./_iobject":50,"./_to-length":113,"./_to-object":114}],18:[function(a,b,c){var d=a("./_a-function"),e=a("./_to-object"),f=a("./_iobject"),g=a("./_to-length");b.exports=function(a,b,c,h,i){d(b);var j=e(a),k=f(j),l=g(j.length),m=i?l-1:0,n=i?-1:1;if(c<2)for(;;){if(m in k){h=k[m],m+=n;break}if(m+=n,i?m<0:l<=m)throw TypeError("Reduce of empty array with no initial value")}for(;i?m>=0:l>m;m+=n)m in k&&(h=b(h,k[m],m,j));return h}},{"./_a-function":8,"./_iobject":50,"./_to-length":113,"./_to-object":114}],19:[function(a,b,c){var d=a("./_is-object"),e=a("./_is-array"),f=a("./_wks")("species");b.exports=function(a){var b;return e(a)&&(b=a.constructor,"function"!=typeof b||b!==Array&&!e(b.prototype)||(b=void 0),d(b)&&(b=b[f],null===b&&(b=void 0))),void 0===b?Array:b}},{"./_is-array":52,"./_is-object":54,"./_wks":122}],20:[function(a,b,c){var d=a("./_array-species-constructor");b.exports=function(a,b){return new(d(a))(b)}},{"./_array-species-constructor":19}],21:[function(a,b,c){"use strict";var d=a("./_a-function"),e=a("./_is-object"),f=a("./_invoke"),g=[].slice,h={},i=function(a,b,c){if(!(b in h)){for(var d=[],e=0;e1?arguments[1]:void 0,3);b=b?b.n:this._f;)for(c(b.v,b.k,this);b&&b.r;)b=b.p},has:function(a){return!!q(this,a)}}),n&&d(l.prototype,"size",{get:function(){return i(this[p])}}),l},def:function(a,b,c){var d,e,f=q(a,b);return f?f.v=c:(a._l=f={i:e=o(b,!0),k:b,v:c,p:d=a._l,n:void 0,r:!1},a._f||(a._f=f),d&&(d.n=f),a[p]++,"F"!==e&&(a._i[e]=f)),a},getEntry:q,setStrong:function(a,b,c){k(a,b,function(a,b){this._t=a,this._k=b,this._l=void 0},function(){for(var a=this,b=a._k,c=a._l;c&&c.r;)c=c.p;return a._t&&(a._l=c=c?c.n:a._t._f)?"keys"==b?l(0,c.k):"values"==b?l(0,c.v):l(0,[c.k,c.v]):(a._t=void 0,l(1))},c?"entries":"values",!c,!0),m(b)}}},{"./_an-instance":11,"./_ctx":30,"./_defined":32,"./_descriptors":33,"./_for-of":42,"./_iter-define":58,"./_iter-step":60,"./_meta":67,"./_object-create":71,"./_object-dp":72,"./_redefine-all":91,"./_set-species":96}],25:[function(a,b,c){var d=a("./_classof"),e=a("./_array-from-iterable");b.exports=function(a){return function(){if(d(this)!=a)throw TypeError(a+"#toJSON isn't generic");return e(this)}}},{"./_array-from-iterable":15,"./_classof":22}],26:[function(a,b,c){"use strict";var d=a("./_redefine-all"),e=a("./_meta").getWeak,f=a("./_an-object"),g=a("./_is-object"),h=a("./_an-instance"),i=a("./_for-of"),j=a("./_array-methods"),k=a("./_has"),l=j(5),m=j(6),n=0,o=function(a){return a._l||(a._l=new p)},p=function(){this.a=[]},q=function(a,b){return l(a.a,function(a){return a[0]===b})};p.prototype={get:function(a){var b=q(this,a);if(b)return b[1]},has:function(a){return!!q(this,a)},set:function(a,b){var c=q(this,a);c?c[1]=b:this.a.push([a,b])},delete:function(a){var b=m(this.a,function(b){return b[0]===a});return~b&&this.a.splice(b,1),!!~b}},b.exports={getConstructor:function(a,b,c,f){var j=a(function(a,d){h(a,j,b,"_i"),a._i=n++,a._l=void 0,void 0!=d&&i(d,c,a[f],a)});return d(j.prototype,{delete:function(a){if(!g(a))return!1;var b=e(a);return b===!0?o(this).delete(a):b&&k(b,this._i)&&delete b[this._i]},has:function(a){if(!g(a))return!1;var b=e(a);return b===!0?o(this).has(a):b&&k(b,this._i)}}),j},def:function(a,b,c){var d=e(f(b),!0);return d===!0?o(a).set(b,c):d[a._i]=c,a},ufstore:o}},{"./_an-instance":11,"./_an-object":12,"./_array-methods":17,"./_for-of":42,"./_has":44,"./_is-object":54,"./_meta":67,"./_redefine-all":91}],27:[function(a,b,c){"use strict";var d=a("./_global"),e=a("./_export"),f=a("./_redefine"),g=a("./_redefine-all"),h=a("./_meta"),i=a("./_for-of"),j=a("./_an-instance"),k=a("./_is-object"),l=a("./_fails"),m=a("./_iter-detect"),n=a("./_set-to-string-tag"),o=a("./_inherit-if-required");b.exports=function(a,b,c,p,q,r){var s=d[a],t=s,u=q?"set":"add",v=t&&t.prototype,w={},x=function(a){var b=v[a];f(v,a,"delete"==a?function(a){return!(r&&!k(a))&&b.call(this,0===a?0:a)}:"has"==a?function(a){return!(r&&!k(a))&&b.call(this,0===a?0:a)}:"get"==a?function(a){return r&&!k(a)?void 0:b.call(this,0===a?0:a)}:"add"==a?function(a){return b.call(this,0===a?0:a),this}:function(a,c){return b.call(this,0===a?0:a,c),this})};if("function"==typeof t&&(r||v.forEach&&!l(function(){(new t).entries().next()}))){var y=new t,z=y[u](r?{}:-0,1)!=y,A=l(function(){y.has(1)}),B=m(function(a){new t(a)}),C=!r&&l(function(){for(var a=new t,b=5;b--;)a[u](b,b);return!a.has(-0)});B||(t=b(function(b,c){j(b,t,a);var d=o(new s,b,t);return void 0!=c&&i(c,q,d[u],d),d}),t.prototype=v,v.constructor=t),(A||C)&&(x("delete"),x("has"),q&&x("get")),(C||z)&&x(u),r&&v.clear&&delete v.clear}else t=p.getConstructor(b,a,q,u),g(t.prototype,c),h.NEED=!0;return n(t,a),w[a]=t,e(e.G+e.W+e.F*(t!=s),w),r||p.setStrong(t,a,q),t}},{"./_an-instance":11,"./_export":37,"./_fails":39,"./_for-of":42,"./_global":43,"./_inherit-if-required":48,"./_is-object":54,"./_iter-detect":59,"./_meta":67,"./_redefine":92,"./_redefine-all":91,"./_set-to-string-tag":97}],28:[function(a,b,c){var d=b.exports={version:"2.4.0"};"number"==typeof __e&&(__e=d)},{}],29:[function(a,b,c){"use strict";var d=a("./_object-dp"),e=a("./_property-desc");b.exports=function(a,b,c){b in a?d.f(a,b,e(0,c)):a[b]=c}},{"./_object-dp":72,"./_property-desc":90}],30:[function(a,b,c){var d=a("./_a-function");b.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},{"./_a-function":8}],31:[function(a,b,c){"use strict";var d=a("./_an-object"),e=a("./_to-primitive"),f="number";b.exports=function(a){if("string"!==a&&a!==f&&"default"!==a)throw TypeError("Incorrect hint");return e(d(this),a!=f)}},{"./_an-object":12,"./_to-primitive":115}],32:[function(a,b,c){b.exports=function(a){if(void 0==a)throw TypeError("Can't call method on "+a);return a}},{}],33:[function(a,b,c){b.exports=!a("./_fails")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{"./_fails":39}],34:[function(a,b,c){var d=a("./_is-object"),e=a("./_global").document,f=d(e)&&d(e.createElement);b.exports=function(a){return f?e.createElement(a):{}}},{"./_global":43,"./_is-object":54}],35:[function(a,b,c){b.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],36:[function(a,b,c){var d=a("./_object-keys"),e=a("./_object-gops"),f=a("./_object-pie");b.exports=function(a){var b=d(a),c=e.f;if(c)for(var g,h=c(a),i=f.f,j=0;h.length>j;)i.call(a,g=h[j++])&&b.push(g);return b}},{"./_object-gops":78,"./_object-keys":81,"./_object-pie":82}],37:[function(a,b,c){var d=a("./_global"),e=a("./_core"),f=a("./_hide"),g=a("./_redefine"),h=a("./_ctx"),i="prototype",j=function(a,b,c){var k,l,m,n,o=a&j.F,p=a&j.G,q=a&j.S,r=a&j.P,s=a&j.B,t=p?d:q?d[b]||(d[b]={}):(d[b]||{})[i],u=p?e:e[b]||(e[b]={}),v=u[i]||(u[i]={});p&&(c=b);for(k in c)l=!o&&t&&void 0!==t[k],m=(l?t:c)[k],n=s&&l?h(m,d):r&&"function"==typeof m?h(Function.call,m):m,t&&g(t,k,m,a&j.U),u[k]!=m&&f(u,k,n),r&&v[k]!=m&&(v[k]=m)};d.core=e,j.F=1,j.G=2,j.S=4,j.P=8,j.B=16,j.W=32,j.U=64,j.R=128,b.exports=j},{"./_core":28,"./_ctx":30,"./_global":43,"./_hide":45,"./_redefine":92}],38:[function(a,b,c){var d=a("./_wks")("match");b.exports=function(a){var b=/./;try{"/./"[a](b)}catch(c){try{return b[d]=!1,!"/./"[a](b)}catch(a){}}return!0}},{"./_wks":122}],39:[function(a,b,c){b.exports=function(a){try{return!!a()}catch(a){return!0}}},{}],40:[function(a,b,c){"use strict";var d=a("./_hide"),e=a("./_redefine"),f=a("./_fails"),g=a("./_defined"),h=a("./_wks");b.exports=function(a,b,c){var i=h(a),j=c(g,i,""[a]),k=j[0],l=j[1];f(function(){var b={};return b[i]=function(){return 7},7!=""[a](b)})&&(e(String.prototype,a,k),d(RegExp.prototype,i,2==b?function(a,b){return l.call(a,this,b)}:function(a){return l.call(a,this)}))}},{"./_defined":32,"./_fails":39,"./_hide":45,"./_redefine":92,"./_wks":122}],41:[function(a,b,c){"use strict";var d=a("./_an-object");b.exports=function(){var a=d(this),b="";return a.global&&(b+="g"),a.ignoreCase&&(b+="i"),a.multiline&&(b+="m"),a.unicode&&(b+="u"),a.sticky&&(b+="y"),b}},{"./_an-object":12}],42:[function(a,b,c){var d=a("./_ctx"),e=a("./_iter-call"),f=a("./_is-array-iter"),g=a("./_an-object"),h=a("./_to-length"),i=a("./core.get-iterator-method"),j={},k={},c=b.exports=function(a,b,c,l,m){var n,o,p,q,r=m?function(){return a}:i(a),s=d(c,l,b?2:1),t=0;if("function"!=typeof r)throw TypeError(a+" is not iterable!");if(f(r)){for(n=h(a.length);n>t;t++)if(q=b?s(g(o=a[t])[0],o[1]):s(a[t]),q===j||q===k)return q}else for(p=r.call(a);!(o=p.next()).done;)if(q=e(p,s,o.value,b),q===j||q===k)return q};c.BREAK=j,c.RETURN=k},{"./_an-object":12,"./_ctx":30,"./_is-array-iter":51,"./_iter-call":56,"./_to-length":113,"./core.get-iterator-method":123}],43:[function(a,b,c){var d=b.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=d)},{}],44:[function(a,b,c){var d={}.hasOwnProperty;b.exports=function(a,b){return d.call(a,b)}},{}],45:[function(a,b,c){var d=a("./_object-dp"),e=a("./_property-desc");b.exports=a("./_descriptors")?function(a,b,c){return d.f(a,b,e(1,c))}:function(a,b,c){return a[b]=c,a}},{"./_descriptors":33,"./_object-dp":72,"./_property-desc":90}],46:[function(a,b,c){b.exports=a("./_global").document&&document.documentElement},{"./_global":43}],47:[function(a,b,c){b.exports=!a("./_descriptors")&&!a("./_fails")(function(){return 7!=Object.defineProperty(a("./_dom-create")("div"),"a",{get:function(){return 7}}).a})},{"./_descriptors":33,"./_dom-create":34,"./_fails":39}],48:[function(a,b,c){var d=a("./_is-object"),e=a("./_set-proto").set;b.exports=function(a,b,c){var f,g=b.constructor;return g!==c&&"function"==typeof g&&(f=g.prototype)!==c.prototype&&d(f)&&e&&e(a,f),a}},{"./_is-object":54,"./_set-proto":95}],49:[function(a,b,c){b.exports=function(a,b,c){var d=void 0===c;switch(b.length){case 0:return d?a():a.call(c);case 1:return d?a(b[0]):a.call(c,b[0]);case 2:return d?a(b[0],b[1]):a.call(c,b[0],b[1]);case 3:return d?a(b[0],b[1],b[2]):a.call(c,b[0],b[1],b[2]);case 4:return d?a(b[0],b[1],b[2],b[3]):a.call(c,b[0],b[1],b[2],b[3])}return a.apply(c,b)}},{}],50:[function(a,b,c){var d=a("./_cof");b.exports=Object("z").propertyIsEnumerable(0)?Object:function(a){return"String"==d(a)?a.split(""):Object(a)}},{"./_cof":23}],51:[function(a,b,c){var d=a("./_iterators"),e=a("./_wks")("iterator"),f=Array.prototype;b.exports=function(a){return void 0!==a&&(d.Array===a||f[e]===a)}},{"./_iterators":61,"./_wks":122}],52:[function(a,b,c){var d=a("./_cof");b.exports=Array.isArray||function(a){return"Array"==d(a)}},{"./_cof":23}],53:[function(a,b,c){var d=a("./_is-object"),e=Math.floor;b.exports=function(a){return!d(a)&&isFinite(a)&&e(a)===a}},{"./_is-object":54}],54:[function(a,b,c){b.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},{}],55:[function(a,b,c){var d=a("./_is-object"),e=a("./_cof"),f=a("./_wks")("match");b.exports=function(a){var b;return d(a)&&(void 0!==(b=a[f])?!!b:"RegExp"==e(a))}},{"./_cof":23,"./_is-object":54,"./_wks":122}],56:[function(a,b,c){var d=a("./_an-object");b.exports=function(a,b,c,e){try{return e?b(d(c)[0],c[1]):b(c)}catch(b){var f=a.return;throw void 0!==f&&d(f.call(a)),b}}},{"./_an-object":12}],57:[function(a,b,c){"use strict";var d=a("./_object-create"),e=a("./_property-desc"),f=a("./_set-to-string-tag"),g={};a("./_hide")(g,a("./_wks")("iterator"),function(){return this}),b.exports=function(a,b,c){a.prototype=d(g,{next:e(1,c)}),f(a,b+" Iterator")}},{"./_hide":45,"./_object-create":71,"./_property-desc":90,"./_set-to-string-tag":97,"./_wks":122}],58:[function(a,b,c){"use strict";var d=a("./_library"),e=a("./_export"),f=a("./_redefine"),g=a("./_hide"),h=a("./_has"),i=a("./_iterators"),j=a("./_iter-create"),k=a("./_set-to-string-tag"),l=a("./_object-gpo"),m=a("./_wks")("iterator"),n=!([].keys&&"next"in[].keys()),o="@@iterator",p="keys",q="values",r=function(){return this};b.exports=function(a,b,c,s,t,u,v){j(c,b,s);var w,x,y,z=function(a){if(!n&&a in D)return D[a];switch(a){case p:return function(){return new c(this,a)};case q:return function(){return new c(this,a)}}return function(){return new c(this,a)}},A=b+" Iterator",B=t==q,C=!1,D=a.prototype,E=D[m]||D[o]||t&&D[t],F=E||z(t),G=t?B?z("entries"):F:void 0,H="Array"==b?D.entries||E:E;if(H&&(y=l(H.call(new a)),y!==Object.prototype&&(k(y,A,!0),d||h(y,m)||g(y,m,r))),B&&E&&E.name!==q&&(C=!0,F=function(){return E.call(this)}),d&&!v||!n&&!C&&D[m]||g(D,m,F),i[b]=F,i[A]=r,t)if(w={values:B?F:z(q),keys:u?F:z(p),entries:G},v)for(x in w)x in D||f(D,x,w[x]);else e(e.P+e.F*(n||C),b,w);return w}},{"./_export":37,"./_has":44,"./_hide":45,"./_iter-create":57,"./_iterators":61,"./_library":63,"./_object-gpo":79,"./_redefine":92,"./_set-to-string-tag":97,"./_wks":122}],59:[function(a,b,c){var d=a("./_wks")("iterator"),e=!1;try{var f=[7][d]();f.return=function(){e=!0},Array.from(f,function(){throw 2})}catch(a){}b.exports=function(a,b){if(!b&&!e)return!1;var c=!1;try{var f=[7],g=f[d]();g.next=function(){return{done:c=!0}},f[d]=function(){return g},a(f)}catch(a){}return c}},{"./_wks":122}],60:[function(a,b,c){b.exports=function(a,b){return{value:b,done:!!a}}},{}],61:[function(a,b,c){b.exports={}},{}],62:[function(a,b,c){var d=a("./_object-keys"),e=a("./_to-iobject");b.exports=function(a,b){for(var c,f=e(a),g=d(f),h=g.length,i=0;h>i;)if(f[c=g[i++]]===b)return c}},{"./_object-keys":81,"./_to-iobject":112}],63:[function(a,b,c){b.exports=!1},{}],64:[function(a,b,c){var d=Math.expm1;b.exports=!d||d(10)>22025.465794806718||d(10)<22025.465794806718||d(-2e-17)!=-2e-17?function(a){return 0==(a=+a)?a:a>-1e-6&&a<1e-6?a+a*a/2:Math.exp(a)-1}:d},{}],65:[function(a,b,c){b.exports=Math.log1p||function(a){return(a=+a)>-1e-8&&a<1e-8?a-a*a/2:Math.log(1+a)}},{}],66:[function(a,b,c){b.exports=Math.sign||function(a){return 0==(a=+a)||a!=a?a:a<0?-1:1}},{}],67:[function(a,b,c){var d=a("./_uid")("meta"),e=a("./_is-object"),f=a("./_has"),g=a("./_object-dp").f,h=0,i=Object.isExtensible||function(){return!0},j=!a("./_fails")(function(){return i(Object.preventExtensions({}))}),k=function(a){g(a,d,{value:{i:"O"+ ++h,w:{}}})},l=function(a,b){if(!e(a))return"symbol"==typeof a?a:("string"==typeof a?"S":"P")+a;if(!f(a,d)){if(!i(a))return"F";if(!b)return"E";k(a)}return a[d].i},m=function(a,b){if(!f(a,d)){if(!i(a))return!0;if(!b)return!1;k(a)}return a[d].w},n=function(a){return j&&o.NEED&&i(a)&&!f(a,d)&&k(a),a},o=b.exports={KEY:d,NEED:!1,fastKey:l,getWeak:m,onFreeze:n}},{"./_fails":39,"./_has":44,"./_is-object":54,"./_object-dp":72,"./_uid":119}],68:[function(a,b,c){var d=a("./es6.map"),e=a("./_export"),f=a("./_shared")("metadata"),g=f.store||(f.store=new(a("./es6.weak-map"))),h=function(a,b,c){var e=g.get(a);if(!e){if(!c)return;g.set(a,e=new d)}var f=e.get(b);if(!f){if(!c)return;e.set(b,f=new d)}return f},i=function(a,b,c){var d=h(b,c,!1);return void 0!==d&&d.has(a)},j=function(a,b,c){var d=h(b,c,!1);return void 0===d?void 0:d.get(a)},k=function(a,b,c,d){h(c,d,!0).set(a,b)},l=function(a,b){var c=h(a,b,!1),d=[];return c&&c.forEach(function(a,b){d.push(b)}),d},m=function(a){return void 0===a||"symbol"==typeof a?a:String(a)},n=function(a){e(e.S,"Reflect",a)};b.exports={store:g,map:h,has:i,get:j,set:k,keys:l,key:m,exp:n}},{"./_export":37,"./_shared":99,"./es6.map":154,"./es6.weak-map":260}],69:[function(a,b,c){var d=a("./_global"),e=a("./_task").set,f=d.MutationObserver||d.WebKitMutationObserver,g=d.process,h=d.Promise,i="process"==a("./_cof")(g);b.exports=function(){var a,b,c,j=function(){var d,e;for(i&&(d=g.domain)&&d.exit();a;){e=a.fn,a=a.next;try{e()}catch(d){throw a?c():b=void 0,d}}b=void 0,d&&d.enter()};if(i)c=function(){g.nextTick(j)};else if(f){var k=!0,l=document.createTextNode("");new f(j).observe(l,{characterData:!0}),c=function(){l.data=k=!k}}else if(h&&h.resolve){var m=h.resolve();c=function(){m.then(j)}}else c=function(){e.call(d,j)};return function(d){var e={fn:d,next:void 0};b&&(b.next=e),a||(a=e,c()),b=e}}},{"./_cof":23,"./_global":43,"./_task":109}],70:[function(a,b,c){"use strict";var d=a("./_object-keys"),e=a("./_object-gops"),f=a("./_object-pie"),g=a("./_to-object"),h=a("./_iobject"),i=Object.assign;b.exports=!i||a("./_fails")(function(){var a={},b={},c=Symbol(),d="abcdefghijklmnopqrst";return a[c]=7,d.split("").forEach(function(a){b[a]=a}),7!=i({},a)[c]||Object.keys(i({},b)).join("")!=d})?function(a,b){for(var c=g(a),i=arguments.length,j=1,k=e.f,l=f.f;i>j;)for(var m,n=h(arguments[j++]),o=k?d(n).concat(k(n)):d(n),p=o.length,q=0;p>q;)l.call(n,m=o[q++])&&(c[m]=n[m]);return c}:i},{"./_fails":39,"./_iobject":50,"./_object-gops":78,"./_object-keys":81,"./_object-pie":82,"./_to-object":114}],71:[function(a,b,c){var d=a("./_an-object"),e=a("./_object-dps"),f=a("./_enum-bug-keys"),g=a("./_shared-key")("IE_PROTO"),h=function(){},i="prototype",j=function(){var b,c=a("./_dom-create")("iframe"),d=f.length,e="<",g=">";for(c.style.display="none",a("./_html").appendChild(c),c.src="javascript:",b=c.contentWindow.document,b.open(),b.write(e+"script"+g+"document.F=Object"+e+"/script"+g),b.close(),j=b.F;d--;)delete j[i][f[d]];return j()};b.exports=Object.create||function(a,b){var c;return null!==a?(h[i]=d(a),c=new h,h[i]=null,c[g]=a):c=j(),void 0===b?c:e(c,b)}},{"./_an-object":12,"./_dom-create":34,"./_enum-bug-keys":35,"./_html":46,"./_object-dps":73,"./_shared-key":98}],72:[function(a,b,c){var d=a("./_an-object"),e=a("./_ie8-dom-define"),f=a("./_to-primitive"),g=Object.defineProperty;c.f=a("./_descriptors")?Object.defineProperty:function(a,b,c){if(d(a),b=f(b,!0),d(c),e)try{return g(a,b,c)}catch(a){}if("get"in c||"set"in c)throw TypeError("Accessors not supported!");return"value"in c&&(a[b]=c.value),a}},{"./_an-object":12,"./_descriptors":33,"./_ie8-dom-define":47,"./_to-primitive":115}],73:[function(a,b,c){var d=a("./_object-dp"),e=a("./_an-object"),f=a("./_object-keys");b.exports=a("./_descriptors")?Object.defineProperties:function(a,b){e(a);for(var c,g=f(b),h=g.length,i=0;h>i;)d.f(a,c=g[i++],b[c]);return a}},{"./_an-object":12,"./_descriptors":33,"./_object-dp":72,"./_object-keys":81}],74:[function(a,b,c){b.exports=a("./_library")||!a("./_fails")(function(){var b=Math.random();__defineSetter__.call(null,b,function(){}),delete a("./_global")[b]})},{"./_fails":39,"./_global":43,"./_library":63}],75:[function(a,b,c){var d=a("./_object-pie"),e=a("./_property-desc"),f=a("./_to-iobject"),g=a("./_to-primitive"),h=a("./_has"),i=a("./_ie8-dom-define"),j=Object.getOwnPropertyDescriptor;c.f=a("./_descriptors")?j:function(a,b){if(a=f(a),b=g(b,!0),i)try{return j(a,b)}catch(a){}if(h(a,b))return e(!d.f.call(a,b),a[b])}},{"./_descriptors":33,"./_has":44,"./_ie8-dom-define":47,"./_object-pie":82,"./_property-desc":90,"./_to-iobject":112,"./_to-primitive":115}],76:[function(a,b,c){var d=a("./_to-iobject"),e=a("./_object-gopn").f,f={}.toString,g="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],h=function(a){try{return e(a)}catch(a){return g.slice()}};b.exports.f=function(a){return g&&"[object Window]"==f.call(a)?h(a):e(d(a))}},{"./_object-gopn":77,"./_to-iobject":112}],77:[function(a,b,c){var d=a("./_object-keys-internal"),e=a("./_enum-bug-keys").concat("length","prototype");c.f=Object.getOwnPropertyNames||function(a){return d(a,e)}},{"./_enum-bug-keys":35,"./_object-keys-internal":80}],78:[function(a,b,c){c.f=Object.getOwnPropertySymbols},{}],79:[function(a,b,c){var d=a("./_has"),e=a("./_to-object"),f=a("./_shared-key")("IE_PROTO"),g=Object.prototype;b.exports=Object.getPrototypeOf||function(a){return a=e(a),d(a,f)?a[f]:"function"==typeof a.constructor&&a instanceof a.constructor?a.constructor.prototype:a instanceof Object?g:null}},{"./_has":44,"./_shared-key":98,"./_to-object":114}],80:[function(a,b,c){var d=a("./_has"),e=a("./_to-iobject"),f=a("./_array-includes")(!1),g=a("./_shared-key")("IE_PROTO");b.exports=function(a,b){var c,h=e(a),i=0,j=[];for(c in h)c!=g&&d(h,c)&&j.push(c);for(;b.length>i;)d(h,c=b[i++])&&(~f(j,c)||j.push(c));return j}},{"./_array-includes":16,"./_has":44,"./_shared-key":98,"./_to-iobject":112}],81:[function(a,b,c){var d=a("./_object-keys-internal"),e=a("./_enum-bug-keys");b.exports=Object.keys||function(a){return d(a,e)}},{"./_enum-bug-keys":35,"./_object-keys-internal":80}],82:[function(a,b,c){c.f={}.propertyIsEnumerable},{}],83:[function(a,b,c){var d=a("./_export"),e=a("./_core"),f=a("./_fails");b.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},{"./_core":28,"./_export":37,"./_fails":39}],84:[function(a,b,c){var d=a("./_object-keys"),e=a("./_to-iobject"),f=a("./_object-pie").f;b.exports=function(a){return function(b){for(var c,g=e(b),h=d(g),i=h.length,j=0,k=[];i>j;)f.call(g,c=h[j++])&&k.push(a?[c,g[c]]:g[c]);return k}}},{"./_object-keys":81, +"./_object-pie":82,"./_to-iobject":112}],85:[function(a,b,c){var d=a("./_object-gopn"),e=a("./_object-gops"),f=a("./_an-object"),g=a("./_global").Reflect;b.exports=g&&g.ownKeys||function(a){var b=d.f(f(a)),c=e.f;return c?b.concat(c(a)):b}},{"./_an-object":12,"./_global":43,"./_object-gopn":77,"./_object-gops":78}],86:[function(a,b,c){var d=a("./_global").parseFloat,e=a("./_string-trim").trim;b.exports=1/d(a("./_string-ws")+"-0")!==-(1/0)?function(a){var b=e(String(a),3),c=d(b);return 0===c&&"-"==b.charAt(0)?-0:c}:d},{"./_global":43,"./_string-trim":107,"./_string-ws":108}],87:[function(a,b,c){var d=a("./_global").parseInt,e=a("./_string-trim").trim,f=a("./_string-ws"),g=/^[\-+]?0[xX]/;b.exports=8!==d(f+"08")||22!==d(f+"0x16")?function(a,b){var c=e(String(a),3);return d(c,b>>>0||(g.test(c)?16:10))}:d},{"./_global":43,"./_string-trim":107,"./_string-ws":108}],88:[function(a,b,c){"use strict";var d=a("./_path"),e=a("./_invoke"),f=a("./_a-function");b.exports=function(){for(var a=f(this),b=arguments.length,c=Array(b),g=0,h=d._,i=!1;b>g;)(c[g]=arguments[g++])===h&&(i=!0);return function(){var d,f=this,g=arguments.length,j=0,k=0;if(!i&&!g)return e(a,c,f);if(d=c.slice(),i)for(;b>j;j++)d[j]===h&&(d[j]=arguments[k++]);for(;g>k;)d.push(arguments[k++]);return e(a,d,f)}}},{"./_a-function":8,"./_invoke":49,"./_path":89}],89:[function(a,b,c){b.exports=a("./_global")},{"./_global":43}],90:[function(a,b,c){b.exports=function(a,b){return{enumerable:!(1&a),configurable:!(2&a),writable:!(4&a),value:b}}},{}],91:[function(a,b,c){var d=a("./_redefine");b.exports=function(a,b,c){for(var e in b)d(a,e,b[e],c);return a}},{"./_redefine":92}],92:[function(a,b,c){var d=a("./_global"),e=a("./_hide"),f=a("./_has"),g=a("./_uid")("src"),h="toString",i=Function[h],j=(""+i).split(h);a("./_core").inspectSource=function(a){return i.call(a)},(b.exports=function(a,b,c,h){var i="function"==typeof c;i&&(f(c,"name")||e(c,"name",b)),a[b]!==c&&(i&&(f(c,g)||e(c,g,a[b]?""+a[b]:j.join(String(b)))),a===d?a[b]=c:h?a[b]?a[b]=c:e(a,b,c):(delete a[b],e(a,b,c)))})(Function.prototype,h,function(){return"function"==typeof this&&this[g]||i.call(this)})},{"./_core":28,"./_global":43,"./_has":44,"./_hide":45,"./_uid":119}],93:[function(a,b,c){b.exports=function(a,b){var c=b===Object(b)?function(a){return b[a]}:b;return function(b){return String(b).replace(a,c)}}},{}],94:[function(a,b,c){b.exports=Object.is||function(a,b){return a===b?0!==a||1/a===1/b:a!=a&&b!=b}},{}],95:[function(a,b,c){var d=a("./_is-object"),e=a("./_an-object"),f=function(a,b){if(e(a),!d(b)&&null!==b)throw TypeError(b+": can't set as prototype!")};b.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(b,c,d){try{d=a("./_ctx")(Function.call,a("./_object-gopd").f(Object.prototype,"__proto__").set,2),d(b,[]),c=!(b instanceof Array)}catch(a){c=!0}return function(a,b){return f(a,b),c?a.__proto__=b:d(a,b),a}}({},!1):void 0),check:f}},{"./_an-object":12,"./_ctx":30,"./_is-object":54,"./_object-gopd":75}],96:[function(a,b,c){"use strict";var d=a("./_global"),e=a("./_object-dp"),f=a("./_descriptors"),g=a("./_wks")("species");b.exports=function(a){var b=d[a];f&&b&&!b[g]&&e.f(b,g,{configurable:!0,get:function(){return this}})}},{"./_descriptors":33,"./_global":43,"./_object-dp":72,"./_wks":122}],97:[function(a,b,c){var d=a("./_object-dp").f,e=a("./_has"),f=a("./_wks")("toStringTag");b.exports=function(a,b,c){a&&!e(a=c?a:a.prototype,f)&&d(a,f,{configurable:!0,value:b})}},{"./_has":44,"./_object-dp":72,"./_wks":122}],98:[function(a,b,c){var d=a("./_shared")("keys"),e=a("./_uid");b.exports=function(a){return d[a]||(d[a]=e(a))}},{"./_shared":99,"./_uid":119}],99:[function(a,b,c){var d=a("./_global"),e="__core-js_shared__",f=d[e]||(d[e]={});b.exports=function(a){return f[a]||(f[a]={})}},{"./_global":43}],100:[function(a,b,c){var d=a("./_an-object"),e=a("./_a-function"),f=a("./_wks")("species");b.exports=function(a,b){var c,g=d(a).constructor;return void 0===g||void 0==(c=d(g)[f])?b:e(c)}},{"./_a-function":8,"./_an-object":12,"./_wks":122}],101:[function(a,b,c){var d=a("./_fails");b.exports=function(a,b){return!!a&&d(function(){b?a.call(null,function(){},1):a.call(null)})}},{"./_fails":39}],102:[function(a,b,c){var d=a("./_to-integer"),e=a("./_defined");b.exports=function(a){return function(b,c){var f,g,h=String(e(b)),i=d(c),j=h.length;return i<0||i>=j?a?"":void 0:(f=h.charCodeAt(i),f<55296||f>56319||i+1===j||(g=h.charCodeAt(i+1))<56320||g>57343?a?h.charAt(i):f:a?h.slice(i,i+2):(f-55296<<10)+(g-56320)+65536)}}},{"./_defined":32,"./_to-integer":111}],103:[function(a,b,c){var d=a("./_is-regexp"),e=a("./_defined");b.exports=function(a,b,c){if(d(b))throw TypeError("String#"+c+" doesn't accept regex!");return String(e(a))}},{"./_defined":32,"./_is-regexp":55}],104:[function(a,b,c){var d=a("./_export"),e=a("./_fails"),f=a("./_defined"),g=/"/g,h=function(a,b,c,d){var e=String(f(a)),h="<"+b;return""!==c&&(h+=" "+c+'="'+String(d).replace(g,""")+'"'),h+">"+e+""};b.exports=function(a,b){var c={};c[a]=b(h),d(d.P+d.F*e(function(){var b=""[a]('"');return b!==b.toLowerCase()||b.split('"').length>3}),"String",c)}},{"./_defined":32,"./_export":37,"./_fails":39}],105:[function(a,b,c){var d=a("./_to-length"),e=a("./_string-repeat"),f=a("./_defined");b.exports=function(a,b,c,g){var h=String(f(a)),i=h.length,j=void 0===c?" ":String(c),k=d(b);if(k<=i||""==j)return h;var l=k-i,m=e.call(j,Math.ceil(l/j.length));return m.length>l&&(m=m.slice(0,l)),g?m+h:h+m}},{"./_defined":32,"./_string-repeat":106,"./_to-length":113}],106:[function(a,b,c){"use strict";var d=a("./_to-integer"),e=a("./_defined");b.exports=function(a){var b=String(e(this)),c="",f=d(a);if(f<0||f==1/0)throw RangeError("Count can't be negative");for(;f>0;(f>>>=1)&&(b+=b))1&f&&(c+=b);return c}},{"./_defined":32,"./_to-integer":111}],107:[function(a,b,c){var d=a("./_export"),e=a("./_defined"),f=a("./_fails"),g=a("./_string-ws"),h="["+g+"]",i="​…",j=RegExp("^"+h+h+"*"),k=RegExp(h+h+"*$"),l=function(a,b,c){var e={},h=f(function(){return!!g[a]()||i[a]()!=i}),j=e[a]=h?b(m):g[a];c&&(e[c]=j),d(d.P+d.F*h,"String",e)},m=l.trim=function(a,b){return a=String(e(a)),1&b&&(a=a.replace(j,"")),2&b&&(a=a.replace(k,"")),a};b.exports=l},{"./_defined":32,"./_export":37,"./_fails":39,"./_string-ws":108}],108:[function(a,b,c){b.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},{}],109:[function(a,b,c){var d,e,f,g=a("./_ctx"),h=a("./_invoke"),i=a("./_html"),j=a("./_dom-create"),k=a("./_global"),l=k.process,m=k.setImmediate,n=k.clearImmediate,o=k.MessageChannel,p=0,q={},r="onreadystatechange",s=function(){var a=+this;if(q.hasOwnProperty(a)){var b=q[a];delete q[a],b()}},t=function(a){s.call(a.data)};m&&n||(m=function(a){for(var b=[],c=1;arguments.length>c;)b.push(arguments[c++]);return q[++p]=function(){h("function"==typeof a?a:Function(a),b)},d(p),p},n=function(a){delete q[a]},"process"==a("./_cof")(l)?d=function(a){l.nextTick(g(s,a,1))}:o?(e=new o,f=e.port2,e.port1.onmessage=t,d=g(f.postMessage,f,1)):k.addEventListener&&"function"==typeof postMessage&&!k.importScripts?(d=function(a){k.postMessage(a+"","*")},k.addEventListener("message",t,!1)):d=r in j("script")?function(a){i.appendChild(j("script"))[r]=function(){i.removeChild(this),s.call(a)}}:function(a){setTimeout(g(s,a,1),0)}),b.exports={set:m,clear:n}},{"./_cof":23,"./_ctx":30,"./_dom-create":34,"./_global":43,"./_html":46,"./_invoke":49}],110:[function(a,b,c){var d=a("./_to-integer"),e=Math.max,f=Math.min;b.exports=function(a,b){return a=d(a),a<0?e(a+b,0):f(a,b)}},{"./_to-integer":111}],111:[function(a,b,c){var d=Math.ceil,e=Math.floor;b.exports=function(a){return isNaN(a=+a)?0:(a>0?e:d)(a)}},{}],112:[function(a,b,c){var d=a("./_iobject"),e=a("./_defined");b.exports=function(a){return d(e(a))}},{"./_defined":32,"./_iobject":50}],113:[function(a,b,c){var d=a("./_to-integer"),e=Math.min;b.exports=function(a){return a>0?e(d(a),9007199254740991):0}},{"./_to-integer":111}],114:[function(a,b,c){var d=a("./_defined");b.exports=function(a){return Object(d(a))}},{"./_defined":32}],115:[function(a,b,c){var d=a("./_is-object");b.exports=function(a,b){if(!d(a))return a;var c,e;if(b&&"function"==typeof(c=a.toString)&&!d(e=c.call(a)))return e;if("function"==typeof(c=a.valueOf)&&!d(e=c.call(a)))return e;if(!b&&"function"==typeof(c=a.toString)&&!d(e=c.call(a)))return e;throw TypeError("Can't convert object to primitive value")}},{"./_is-object":54}],116:[function(a,b,c){"use strict";if(a("./_descriptors")){var d=a("./_library"),e=a("./_global"),f=a("./_fails"),g=a("./_export"),h=a("./_typed"),i=a("./_typed-buffer"),j=a("./_ctx"),k=a("./_an-instance"),l=a("./_property-desc"),m=a("./_hide"),n=a("./_redefine-all"),o=a("./_to-integer"),p=a("./_to-length"),q=a("./_to-index"),r=a("./_to-primitive"),s=a("./_has"),t=a("./_same-value"),u=a("./_classof"),v=a("./_is-object"),w=a("./_to-object"),x=a("./_is-array-iter"),y=a("./_object-create"),z=a("./_object-gpo"),A=a("./_object-gopn").f,B=a("./core.get-iterator-method"),C=a("./_uid"),D=a("./_wks"),E=a("./_array-methods"),F=a("./_array-includes"),G=a("./_species-constructor"),H=a("./es6.array.iterator"),I=a("./_iterators"),J=a("./_iter-detect"),K=a("./_set-species"),L=a("./_array-fill"),M=a("./_array-copy-within"),N=a("./_object-dp"),O=a("./_object-gopd"),P=N.f,Q=O.f,R=e.RangeError,S=e.TypeError,T=e.Uint8Array,U="ArrayBuffer",V="Shared"+U,W="BYTES_PER_ELEMENT",X="prototype",Y=Array[X],Z=i.ArrayBuffer,$=i.DataView,_=E(0),aa=E(2),ba=E(3),ca=E(4),da=E(5),ea=E(6),fa=F(!0),ga=F(!1),ha=H.values,ia=H.keys,ja=H.entries,ka=Y.lastIndexOf,la=Y.reduce,ma=Y.reduceRight,na=Y.join,oa=Y.sort,pa=Y.slice,qa=Y.toString,ra=Y.toLocaleString,sa=D("iterator"),ta=D("toStringTag"),ua=C("typed_constructor"),va=C("def_constructor"),wa=h.CONSTR,xa=h.TYPED,ya=h.VIEW,za="Wrong length!",Aa=E(1,function(a,b){return Ga(G(a,a[va]),b)}),Ba=f(function(){return 1===new T(new Uint16Array([1]).buffer)[0]}),Ca=!!T&&!!T[X].set&&f(function(){new T(1).set({})}),Da=function(a,b){if(void 0===a)throw S(za);var c=+a,d=p(a);if(b&&!t(c,d))throw R(za);return d},Ea=function(a,b){var c=o(a);if(c<0||c%b)throw R("Wrong offset!");return c},Fa=function(a){if(v(a)&&xa in a)return a;throw S(a+" is not a typed array!")},Ga=function(a,b){if(!(v(a)&&ua in a))throw S("It is not a typed array constructor!");return new a(b)},Ha=function(a,b){return Ia(G(a,a[va]),b)},Ia=function(a,b){for(var c=0,d=b.length,e=Ga(a,d);d>c;)e[c]=b[c++];return e},Ja=function(a,b,c){P(a,b,{get:function(){return this._d[c]}})},Ka=function(a){var b,c,d,e,f,g,h=w(a),i=arguments.length,k=i>1?arguments[1]:void 0,l=void 0!==k,m=B(h);if(void 0!=m&&!x(m)){for(g=m.call(h),d=[],b=0;!(f=g.next()).done;b++)d.push(f.value);h=d}for(l&&i>2&&(k=j(k,arguments[2],2)),b=0,c=p(h.length),e=Ga(this,c);c>b;b++)e[b]=l?k(h[b],b):h[b];return e},La=function(){for(var a=0,b=arguments.length,c=Ga(this,b);b>a;)c[a]=arguments[a++];return c},Ma=!!T&&f(function(){ra.call(new T(1))}),Na=function(){return ra.apply(Ma?pa.call(Fa(this)):Fa(this),arguments)},Oa={copyWithin:function(a,b){return M.call(Fa(this),a,b,arguments.length>2?arguments[2]:void 0)},every:function(a){return ca(Fa(this),a,arguments.length>1?arguments[1]:void 0)},fill:function(a){return L.apply(Fa(this),arguments)},filter:function(a){return Ha(this,aa(Fa(this),a,arguments.length>1?arguments[1]:void 0))},find:function(a){return da(Fa(this),a,arguments.length>1?arguments[1]:void 0)},findIndex:function(a){return ea(Fa(this),a,arguments.length>1?arguments[1]:void 0)},forEach:function(a){_(Fa(this),a,arguments.length>1?arguments[1]:void 0)},indexOf:function(a){return ga(Fa(this),a,arguments.length>1?arguments[1]:void 0)},includes:function(a){return fa(Fa(this),a,arguments.length>1?arguments[1]:void 0)},join:function(a){return na.apply(Fa(this),arguments)},lastIndexOf:function(a){return ka.apply(Fa(this),arguments)},map:function(a){return Aa(Fa(this),a,arguments.length>1?arguments[1]:void 0)},reduce:function(a){return la.apply(Fa(this),arguments)},reduceRight:function(a){return ma.apply(Fa(this),arguments)},reverse:function(){for(var a,b=this,c=Fa(b).length,d=Math.floor(c/2),e=0;e1?arguments[1]:void 0)},sort:function(a){return oa.call(Fa(this),a)},subarray:function(a,b){var c=Fa(this),d=c.length,e=q(a,d);return new(G(c,c[va]))(c.buffer,c.byteOffset+e*c.BYTES_PER_ELEMENT,p((void 0===b?d:q(b,d))-e))}},Pa=function(a,b){return Ha(this,pa.call(Fa(this),a,b))},Qa=function(a){Fa(this);var b=Ea(arguments[1],1),c=this.length,d=w(a),e=p(d.length),f=0;if(e+b>c)throw R(za);for(;f255?255:255&d),e.v[o](c*b+e.o,d,Ba)},D=function(a,b){P(a,b,{get:function(){return B(this,b)},set:function(a){return C(this,b,a)},enumerable:!0})};t?(q=c(function(a,c,d,e){k(a,q,j,"_d");var f,g,h,i,l=0,n=0;if(v(c)){if(!(c instanceof Z||(i=u(c))==U||i==V))return xa in c?Ia(q,c):Ka.call(q,c);f=c,n=Ea(d,b);var o=c.byteLength;if(void 0===e){if(o%b)throw R(za);if(g=o-n,g<0)throw R(za)}else if(g=p(e)*b,g+n>o)throw R(za);h=g/b}else h=Da(c,!0),g=h*b,f=new Z(g);for(m(a,"_d",{b:f,o:n,l:g,e:h,v:new $(f)});l>1,k=23===b?D(2,-24)-D(2,-77):0,l=0,m=a<0||0===a&&1/a<0?1:0;for(a=C(a),a!=a||a===A?(e=a!=a?1:0,d=i):(d=E(F(a)/G),a*(f=D(2,-d))<1&&(d--,f*=2),a+=d+j>=1?k/f:k*D(2,1-j),a*f>=2&&(d++,f/=2),d+j>=i?(e=0,d=i):d+j>=1?(e=(a*f-1)*D(2,b),d+=j):(e=a*D(2,j-1)*D(2,b),d=0));b>=8;g[l++]=255&e,e/=256,b-=8);for(d=d<0;g[l++]=255&d,d/=256,h-=8);return g[--l]|=128*m,g},O=function(a,b,c){var d,e=8*c-b-1,f=(1<>1,h=e-7,i=c-1,j=a[i--],k=127&j;for(j>>=7;h>0;k=256*k+a[i],i--,h-=8);for(d=k&(1<<-h)-1,k>>=-h,h+=b;h>0;d=256*d+a[i],i--,h-=8);if(0===k)k=1-g;else{if(k===f)return d?NaN:j?-A:A;d+=D(2,b),k-=g}return(j?-1:1)*d*D(2,k-b)},P=function(a){return a[3]<<24|a[2]<<16|a[1]<<8|a[0]},Q=function(a){return[255&a]},R=function(a){return[255&a,a>>8&255]},S=function(a){return[255&a,a>>8&255,a>>16&255,a>>24&255]},T=function(a){return N(a,52,8)},U=function(a){return N(a,23,4)},V=function(a,b,c){o(a[t],b,{get:function(){return this[c]}})},W=function(a,b,c,d){var e=+c,f=l(e);if(e!=f||f<0||f+b>a[L])throw z(v);var g=a[K]._b,h=f+a[M],i=g.slice(h,h+b);return d?i:i.reverse()},X=function(a,b,c,d,e,f){var g=+c,h=l(g);if(g!=h||h<0||h+b>a[L])throw z(v);for(var i=a[K]._b,j=h+a[M],k=d(+e),m=0;maa;)(Z=_[aa++])in w||h(w,Z,B[Z]);f||($.constructor=w)}var ba=new x(new w(2)),ca=x[t].setInt8;ba.setInt8(0,2147483648),ba.setInt8(1,2147483649),!ba.getInt8(0)&&ba.getInt8(1)||i(x[t],{setInt8:function(a,b){ca.call(this,a,b<<24>>24)},setUint8:function(a,b){ca.call(this,a,b<<24>>24)}},!0)}else w=function(a){var b=Y(this,a);this._b=p.call(Array(b),0),this[L]=b},x=function(a,b,c){k(this,x,s),k(a,w,s);var d=a[L],e=l(b);if(e<0||e>d)throw z("Wrong offset!");if(c=void 0===c?d-e:m(c),e+c>d)throw z(u);this[K]=a,this[M]=e,this[L]=c},e&&(V(w,I,"_l"),V(x,H,"_b"),V(x,I,"_l"),V(x,J,"_o")),i(x[t],{getInt8:function(a){return W(this,1,a)[0]<<24>>24},getUint8:function(a){return W(this,1,a)[0]},getInt16:function(a){var b=W(this,2,a,arguments[1]);return(b[1]<<8|b[0])<<16>>16},getUint16:function(a){var b=W(this,2,a,arguments[1]);return b[1]<<8|b[0]},getInt32:function(a){return P(W(this,4,a,arguments[1]))},getUint32:function(a){return P(W(this,4,a,arguments[1]))>>>0},getFloat32:function(a){return O(W(this,4,a,arguments[1]),23,4)},getFloat64:function(a){return O(W(this,8,a,arguments[1]),52,8)},setInt8:function(a,b){X(this,1,a,Q,b)},setUint8:function(a,b){X(this,1,a,Q,b)},setInt16:function(a,b){X(this,2,a,R,b,arguments[2])},setUint16:function(a,b){X(this,2,a,R,b,arguments[2])},setInt32:function(a,b){X(this,4,a,S,b,arguments[2])},setUint32:function(a,b){X(this,4,a,S,b,arguments[2])},setFloat32:function(a,b){X(this,4,a,U,b,arguments[2])},setFloat64:function(a,b){X(this,8,a,T,b,arguments[2])}});q(w,r),q(x,s),h(x[t],g.VIEW,!0),c[r]=w,c[s]=x},{"./_an-instance":11,"./_array-fill":14,"./_descriptors":33,"./_fails":39,"./_global":43,"./_hide":45,"./_library":63,"./_object-dp":72,"./_object-gopn":77,"./_redefine-all":91,"./_set-to-string-tag":97,"./_to-integer":111,"./_to-length":113,"./_typed":118}],118:[function(a,b,c){for(var d,e=a("./_global"),f=a("./_hide"),g=a("./_uid"),h=g("typed_array"),i=g("view"),j=!(!e.ArrayBuffer||!e.DataView),k=j,l=0,m=9,n="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l1?arguments[1]:void 0)}}),a("./_add-to-unscopables")(f)},{"./_add-to-unscopables":10,"./_array-methods":17,"./_export":37}],130:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_array-methods")(5),f="find",g=!0;f in[]&&Array(1)[f](function(){g=!1}),d(d.P+d.F*g,"Array",{find:function(a){return e(this,a,arguments.length>1?arguments[1]:void 0)}}),a("./_add-to-unscopables")(f)},{"./_add-to-unscopables":10,"./_array-methods":17,"./_export":37}],131:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_array-methods")(0),f=a("./_strict-method")([].forEach,!0);d(d.P+d.F*!f,"Array",{forEach:function(a){return e(this,a,arguments[1])}})},{"./_array-methods":17,"./_export":37,"./_strict-method":101}],132:[function(a,b,c){"use strict";var d=a("./_ctx"),e=a("./_export"),f=a("./_to-object"),g=a("./_iter-call"),h=a("./_is-array-iter"),i=a("./_to-length"),j=a("./_create-property"),k=a("./core.get-iterator-method");e(e.S+e.F*!a("./_iter-detect")(function(a){Array.from(a)}),"Array",{from:function(a){var b,c,e,l,m=f(a),n="function"==typeof this?this:Array,o=arguments.length,p=o>1?arguments[1]:void 0,q=void 0!==p,r=0,s=k(m);if(q&&(p=d(p,o>2?arguments[2]:void 0,2)),void 0==s||n==Array&&h(s))for(b=i(m.length),c=new n(b);b>r;r++)j(c,r,q?p(m[r],r):m[r]);else for(l=s.call(m),c=new n;!(e=l.next()).done;r++)j(c,r,q?g(l,p,[e.value,r],!0):e.value);return c.length=r,c}})},{"./_create-property":29,"./_ctx":30,"./_export":37,"./_is-array-iter":51,"./_iter-call":56,"./_iter-detect":59,"./_to-length":113,"./_to-object":114,"./core.get-iterator-method":123}],133:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_array-includes")(!1),f=[].indexOf,g=!!f&&1/[1].indexOf(1,-0)<0;d(d.P+d.F*(g||!a("./_strict-method")(f)),"Array",{indexOf:function(a){return g?f.apply(this,arguments)||0:e(this,a,arguments[1])}})},{"./_array-includes":16,"./_export":37,"./_strict-method":101}],134:[function(a,b,c){var d=a("./_export");d(d.S,"Array",{isArray:a("./_is-array")})},{"./_export":37,"./_is-array":52}],135:[function(a,b,c){"use strict";var d=a("./_add-to-unscopables"),e=a("./_iter-step"),f=a("./_iterators"),g=a("./_to-iobject");b.exports=a("./_iter-define")(Array,"Array",function(a,b){this._t=g(a),this._i=0,this._k=b},function(){var a=this._t,b=this._k,c=this._i++;return!a||c>=a.length?(this._t=void 0,e(1)):"keys"==b?e(0,c):"values"==b?e(0,a[c]):e(0,[c,a[c]])},"values"),f.Arguments=f.Array,d("keys"),d("values"),d("entries")},{"./_add-to-unscopables":10,"./_iter-define":58,"./_iter-step":60,"./_iterators":61,"./_to-iobject":112}],136:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_to-iobject"),f=[].join;d(d.P+d.F*(a("./_iobject")!=Object||!a("./_strict-method")(f)),"Array",{join:function(a){return f.call(e(this),void 0===a?",":a)}})},{"./_export":37,"./_iobject":50,"./_strict-method":101,"./_to-iobject":112}],137:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_to-iobject"),f=a("./_to-integer"),g=a("./_to-length"),h=[].lastIndexOf,i=!!h&&1/[1].lastIndexOf(1,-0)<0;d(d.P+d.F*(i||!a("./_strict-method")(h)),"Array",{lastIndexOf:function(a){if(i)return h.apply(this,arguments)||0;var b=e(this),c=g(b.length),d=c-1;for(arguments.length>1&&(d=Math.min(d,f(arguments[1]))),d<0&&(d=c+d);d>=0;d--)if(d in b&&b[d]===a)return d||0;return-1}})},{"./_export":37,"./_strict-method":101,"./_to-integer":111,"./_to-iobject":112,"./_to-length":113}],138:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_array-methods")(1);d(d.P+d.F*!a("./_strict-method")([].map,!0),"Array",{map:function(a){return e(this,a,arguments[1])}})},{"./_array-methods":17,"./_export":37,"./_strict-method":101}],139:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_create-property");d(d.S+d.F*a("./_fails")(function(){function a(){}return!(Array.of.call(a)instanceof a)}),"Array",{of:function(){for(var a=0,b=arguments.length,c=new("function"==typeof this?this:Array)(b);b>a;)e(c,a,arguments[a++]);return c.length=b,c}})},{"./_create-property":29,"./_export":37,"./_fails":39}],140:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_array-reduce");d(d.P+d.F*!a("./_strict-method")([].reduceRight,!0),"Array",{reduceRight:function(a){return e(this,a,arguments.length,arguments[1],!0)}})},{"./_array-reduce":18,"./_export":37,"./_strict-method":101}],141:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_array-reduce");d(d.P+d.F*!a("./_strict-method")([].reduce,!0),"Array",{reduce:function(a){return e(this,a,arguments.length,arguments[1],!1)}})},{"./_array-reduce":18,"./_export":37,"./_strict-method":101}],142:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_html"),f=a("./_cof"),g=a("./_to-index"),h=a("./_to-length"),i=[].slice;d(d.P+d.F*a("./_fails")(function(){e&&i.call(e)}),"Array",{slice:function(a,b){var c=h(this.length),d=f(this);if(b=void 0===b?c:b,"Array"==d)return i.call(this,a,b);for(var e=g(a,c),j=g(b,c),k=h(j-e),l=Array(k),m=0;m9?a:"0"+a};d(d.P+d.F*(e(function(){return"0385-07-25T07:06:39.999Z"!=new Date(-5e13-1).toISOString()})||!e(function(){new Date(NaN).toISOString()})),"Date",{toISOString:function(){if(!isFinite(f.call(this)))throw RangeError("Invalid time value");var a=this,b=a.getUTCFullYear(),c=a.getUTCMilliseconds(),d=b<0?"-":b>9999?"+":"";return d+("00000"+Math.abs(b)).slice(d?-6:-4)+"-"+g(a.getUTCMonth()+1)+"-"+g(a.getUTCDate())+"T"+g(a.getUTCHours())+":"+g(a.getUTCMinutes())+":"+g(a.getUTCSeconds())+"."+(c>99?c:"0"+g(c))+"Z"}})},{"./_export":37,"./_fails":39}],148:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_to-object"),f=a("./_to-primitive");d(d.P+d.F*a("./_fails")(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(a){var b=e(this),c=f(b);return"number"!=typeof c||isFinite(c)?b.toISOString():null}})},{"./_export":37,"./_fails":39,"./_to-object":114,"./_to-primitive":115}],149:[function(a,b,c){var d=a("./_wks")("toPrimitive"),e=Date.prototype;d in e||a("./_hide")(e,d,a("./_date-to-primitive"))},{"./_date-to-primitive":31,"./_hide":45,"./_wks":122}],150:[function(a,b,c){var d=Date.prototype,e="Invalid Date",f="toString",g=d[f],h=d.getTime;new Date(NaN)+""!=e&&a("./_redefine")(d,f,function(){var a=h.call(this);return a===a?g.call(this):e})},{"./_redefine":92}],151:[function(a,b,c){var d=a("./_export");d(d.P,"Function",{bind:a("./_bind")})},{"./_bind":21,"./_export":37}],152:[function(a,b,c){"use strict";var d=a("./_is-object"),e=a("./_object-gpo"),f=a("./_wks")("hasInstance"),g=Function.prototype;f in g||a("./_object-dp").f(g,f,{value:function(a){if("function"!=typeof this||!d(a))return!1;if(!d(this.prototype))return a instanceof this;for(;a=e(a);)if(this.prototype===a)return!0;return!1}})},{"./_is-object":54,"./_object-dp":72,"./_object-gpo":79,"./_wks":122}],153:[function(a,b,c){var d=a("./_object-dp").f,e=a("./_property-desc"),f=a("./_has"),g=Function.prototype,h=/^\s*function ([^ (]*)/,i="name",j=Object.isExtensible||function(){return!0};i in g||a("./_descriptors")&&d(g,i,{configurable:!0,get:function(){try{var a=this,b=(""+a).match(h)[1];return f(a,i)||!j(a)||d(a,i,e(5,b)),b}catch(a){return""}}})},{"./_descriptors":33,"./_has":44,"./_object-dp":72,"./_property-desc":90}],154:[function(a,b,c){"use strict";var d=a("./_collection-strong");b.exports=a("./_collection")("Map",function(a){return function(){return a(this,arguments.length>0?arguments[0]:void 0)}},{get:function(a){var b=d.getEntry(this,a);return b&&b.v},set:function(a,b){return d.def(this,0===a?0:a,b)}},d,!0)},{"./_collection":27,"./_collection-strong":24}],155:[function(a,b,c){var d=a("./_export"),e=a("./_math-log1p"),f=Math.sqrt,g=Math.acosh;d(d.S+d.F*!(g&&710==Math.floor(g(Number.MAX_VALUE))&&g(1/0)==1/0),"Math",{acosh:function(a){return(a=+a)<1?NaN:a>94906265.62425156?Math.log(a)+Math.LN2:e(a-1+f(a-1)*f(a+1))}})},{"./_export":37,"./_math-log1p":65}],156:[function(a,b,c){function d(a){return isFinite(a=+a)&&0!=a?a<0?-d(-a):Math.log(a+Math.sqrt(a*a+1)):a}var e=a("./_export"),f=Math.asinh;e(e.S+e.F*!(f&&1/f(0)>0),"Math",{asinh:d})},{"./_export":37}],157:[function(a,b,c){var d=a("./_export"),e=Math.atanh;d(d.S+d.F*!(e&&1/e(-0)<0),"Math",{atanh:function(a){return 0==(a=+a)?a:Math.log((1+a)/(1-a))/2}})},{"./_export":37}],158:[function(a,b,c){ +var d=a("./_export"),e=a("./_math-sign");d(d.S,"Math",{cbrt:function(a){return e(a=+a)*Math.pow(Math.abs(a),1/3)}})},{"./_export":37,"./_math-sign":66}],159:[function(a,b,c){var d=a("./_export");d(d.S,"Math",{clz32:function(a){return(a>>>=0)?31-Math.floor(Math.log(a+.5)*Math.LOG2E):32}})},{"./_export":37}],160:[function(a,b,c){var d=a("./_export"),e=Math.exp;d(d.S,"Math",{cosh:function(a){return(e(a=+a)+e(-a))/2}})},{"./_export":37}],161:[function(a,b,c){var d=a("./_export"),e=a("./_math-expm1");d(d.S+d.F*(e!=Math.expm1),"Math",{expm1:e})},{"./_export":37,"./_math-expm1":64}],162:[function(a,b,c){var d=a("./_export"),e=a("./_math-sign"),f=Math.pow,g=f(2,-52),h=f(2,-23),i=f(2,127)*(2-h),j=f(2,-126),k=function(a){return a+1/g-1/g};d(d.S,"Math",{fround:function(a){var b,c,d=Math.abs(a),f=e(a);return di||c!=c?f*(1/0):f*c)}})},{"./_export":37,"./_math-sign":66}],163:[function(a,b,c){var d=a("./_export"),e=Math.abs;d(d.S,"Math",{hypot:function(a,b){for(var c,d,f=0,g=0,h=arguments.length,i=0;g0?(d=c/i,f+=d*d):f+=c;return i===1/0?1/0:i*Math.sqrt(f)}})},{"./_export":37}],164:[function(a,b,c){var d=a("./_export"),e=Math.imul;d(d.S+d.F*a("./_fails")(function(){return e(4294967295,5)!=-5||2!=e.length}),"Math",{imul:function(a,b){var c=65535,d=+a,e=+b,f=c&d,g=c&e;return 0|f*g+((c&d>>>16)*g+f*(c&e>>>16)<<16>>>0)}})},{"./_export":37,"./_fails":39}],165:[function(a,b,c){var d=a("./_export");d(d.S,"Math",{log10:function(a){return Math.log(a)/Math.LN10}})},{"./_export":37}],166:[function(a,b,c){var d=a("./_export");d(d.S,"Math",{log1p:a("./_math-log1p")})},{"./_export":37,"./_math-log1p":65}],167:[function(a,b,c){var d=a("./_export");d(d.S,"Math",{log2:function(a){return Math.log(a)/Math.LN2}})},{"./_export":37}],168:[function(a,b,c){var d=a("./_export");d(d.S,"Math",{sign:a("./_math-sign")})},{"./_export":37,"./_math-sign":66}],169:[function(a,b,c){var d=a("./_export"),e=a("./_math-expm1"),f=Math.exp;d(d.S+d.F*a("./_fails")(function(){return!Math.sinh(-2e-17)!=-2e-17}),"Math",{sinh:function(a){return Math.abs(a=+a)<1?(e(a)-e(-a))/2:(f(a-1)-f(-a-1))*(Math.E/2)}})},{"./_export":37,"./_fails":39,"./_math-expm1":64}],170:[function(a,b,c){var d=a("./_export"),e=a("./_math-expm1"),f=Math.exp;d(d.S,"Math",{tanh:function(a){var b=e(a=+a),c=e(-a);return b==1/0?1:c==1/0?-1:(b-c)/(f(a)+f(-a))}})},{"./_export":37,"./_math-expm1":64}],171:[function(a,b,c){var d=a("./_export");d(d.S,"Math",{trunc:function(a){return(a>0?Math.floor:Math.ceil)(a)}})},{"./_export":37}],172:[function(a,b,c){"use strict";var d=a("./_global"),e=a("./_has"),f=a("./_cof"),g=a("./_inherit-if-required"),h=a("./_to-primitive"),i=a("./_fails"),j=a("./_object-gopn").f,k=a("./_object-gopd").f,l=a("./_object-dp").f,m=a("./_string-trim").trim,n="Number",o=d[n],p=o,q=o.prototype,r=f(a("./_object-create")(q))==n,s="trim"in String.prototype,t=function(a){var b=h(a,!1);if("string"==typeof b&&b.length>2){b=s?b.trim():m(b,3);var c,d,e,f=b.charCodeAt(0);if(43===f||45===f){if(c=b.charCodeAt(2),88===c||120===c)return NaN}else if(48===f){switch(b.charCodeAt(1)){case 66:case 98:d=2,e=49;break;case 79:case 111:d=8,e=55;break;default:return+b}for(var g,i=b.slice(2),j=0,k=i.length;je)return NaN;return parseInt(i,d)}}return+b};if(!o(" 0o1")||!o("0b1")||o("+0x1")){o=function(a){var b=arguments.length<1?0:a,c=this;return c instanceof o&&(r?i(function(){q.valueOf.call(c)}):f(c)!=n)?g(new p(t(b)),c,o):t(b)};for(var u,v=a("./_descriptors")?j(p):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),w=0;v.length>w;w++)e(p,u=v[w])&&!e(o,u)&&l(o,u,k(p,u));o.prototype=q,q.constructor=o,a("./_redefine")(d,n,o)}},{"./_cof":23,"./_descriptors":33,"./_fails":39,"./_global":43,"./_has":44,"./_inherit-if-required":48,"./_object-create":71,"./_object-dp":72,"./_object-gopd":75,"./_object-gopn":77,"./_redefine":92,"./_string-trim":107,"./_to-primitive":115}],173:[function(a,b,c){var d=a("./_export");d(d.S,"Number",{EPSILON:Math.pow(2,-52)})},{"./_export":37}],174:[function(a,b,c){var d=a("./_export"),e=a("./_global").isFinite;d(d.S,"Number",{isFinite:function(a){return"number"==typeof a&&e(a)}})},{"./_export":37,"./_global":43}],175:[function(a,b,c){var d=a("./_export");d(d.S,"Number",{isInteger:a("./_is-integer")})},{"./_export":37,"./_is-integer":53}],176:[function(a,b,c){var d=a("./_export");d(d.S,"Number",{isNaN:function(a){return a!=a}})},{"./_export":37}],177:[function(a,b,c){var d=a("./_export"),e=a("./_is-integer"),f=Math.abs;d(d.S,"Number",{isSafeInteger:function(a){return e(a)&&f(a)<=9007199254740991}})},{"./_export":37,"./_is-integer":53}],178:[function(a,b,c){var d=a("./_export");d(d.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{"./_export":37}],179:[function(a,b,c){var d=a("./_export");d(d.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{"./_export":37}],180:[function(a,b,c){var d=a("./_export"),e=a("./_parse-float");d(d.S+d.F*(Number.parseFloat!=e),"Number",{parseFloat:e})},{"./_export":37,"./_parse-float":86}],181:[function(a,b,c){var d=a("./_export"),e=a("./_parse-int");d(d.S+d.F*(Number.parseInt!=e),"Number",{parseInt:e})},{"./_export":37,"./_parse-int":87}],182:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_to-integer"),f=a("./_a-number-value"),g=a("./_string-repeat"),h=1..toFixed,i=Math.floor,j=[0,0,0,0,0,0],k="Number.toFixed: incorrect invocation!",l="0",m=function(a,b){for(var c=-1,d=b;++c<6;)d+=a*j[c],j[c]=d%1e7,d=i(d/1e7)},n=function(a){for(var b=6,c=0;--b>=0;)c+=j[b],j[b]=i(c/a),c=c%a*1e7},o=function(){for(var a=6,b="";--a>=0;)if(""!==b||0===a||0!==j[a]){var c=String(j[a]);b=""===b?c:b+g.call(l,7-c.length)+c}return b},p=function(a,b,c){return 0===b?c:b%2===1?p(a,b-1,c*a):p(a*a,b/2,c)},q=function(a){for(var b=0,c=a;c>=4096;)b+=12,c/=4096;for(;c>=2;)b+=1,c/=2;return b};d(d.P+d.F*(!!h&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!a("./_fails")(function(){h.call({})})),"Number",{toFixed:function(a){var b,c,d,h,i=f(this,k),j=e(a),r="",s=l;if(j<0||j>20)throw RangeError(k);if(i!=i)return"NaN";if(i<=-1e21||i>=1e21)return String(i);if(i<0&&(r="-",i=-i),i>1e-21)if(b=q(i*p(2,69,1))-69,c=b<0?i*p(2,-b,1):i/p(2,b,1),c*=4503599627370496,b=52-b,b>0){for(m(0,c),d=j;d>=7;)m(1e7,0),d-=7;for(m(p(10,d,1),0),d=b-1;d>=23;)n(1<<23),d-=23;n(1<0?(h=s.length,s=r+(h<=j?"0."+g.call(l,j-h)+s:s.slice(0,h-j)+"."+s.slice(h-j))):s=r+s,s}})},{"./_a-number-value":9,"./_export":37,"./_fails":39,"./_string-repeat":106,"./_to-integer":111}],183:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_fails"),f=a("./_a-number-value"),g=1..toPrecision;d(d.P+d.F*(e(function(){return"1"!==g.call(1,void 0)})||!e(function(){g.call({})})),"Number",{toPrecision:function(a){var b=f(this,"Number#toPrecision: incorrect invocation!");return void 0===a?g.call(b):g.call(b,a)}})},{"./_a-number-value":9,"./_export":37,"./_fails":39}],184:[function(a,b,c){var d=a("./_export");d(d.S+d.F,"Object",{assign:a("./_object-assign")})},{"./_export":37,"./_object-assign":70}],185:[function(a,b,c){var d=a("./_export");d(d.S,"Object",{create:a("./_object-create")})},{"./_export":37,"./_object-create":71}],186:[function(a,b,c){var d=a("./_export");d(d.S+d.F*!a("./_descriptors"),"Object",{defineProperties:a("./_object-dps")})},{"./_descriptors":33,"./_export":37,"./_object-dps":73}],187:[function(a,b,c){var d=a("./_export");d(d.S+d.F*!a("./_descriptors"),"Object",{defineProperty:a("./_object-dp").f})},{"./_descriptors":33,"./_export":37,"./_object-dp":72}],188:[function(a,b,c){var d=a("./_is-object"),e=a("./_meta").onFreeze;a("./_object-sap")("freeze",function(a){return function(b){return a&&d(b)?a(e(b)):b}})},{"./_is-object":54,"./_meta":67,"./_object-sap":83}],189:[function(a,b,c){var d=a("./_to-iobject"),e=a("./_object-gopd").f;a("./_object-sap")("getOwnPropertyDescriptor",function(){return function(a,b){return e(d(a),b)}})},{"./_object-gopd":75,"./_object-sap":83,"./_to-iobject":112}],190:[function(a,b,c){a("./_object-sap")("getOwnPropertyNames",function(){return a("./_object-gopn-ext").f})},{"./_object-gopn-ext":76,"./_object-sap":83}],191:[function(a,b,c){var d=a("./_to-object"),e=a("./_object-gpo");a("./_object-sap")("getPrototypeOf",function(){return function(a){return e(d(a))}})},{"./_object-gpo":79,"./_object-sap":83,"./_to-object":114}],192:[function(a,b,c){var d=a("./_is-object");a("./_object-sap")("isExtensible",function(a){return function(b){return!!d(b)&&(!a||a(b))}})},{"./_is-object":54,"./_object-sap":83}],193:[function(a,b,c){var d=a("./_is-object");a("./_object-sap")("isFrozen",function(a){return function(b){return!d(b)||!!a&&a(b)}})},{"./_is-object":54,"./_object-sap":83}],194:[function(a,b,c){var d=a("./_is-object");a("./_object-sap")("isSealed",function(a){return function(b){return!d(b)||!!a&&a(b)}})},{"./_is-object":54,"./_object-sap":83}],195:[function(a,b,c){var d=a("./_export");d(d.S,"Object",{is:a("./_same-value")})},{"./_export":37,"./_same-value":94}],196:[function(a,b,c){var d=a("./_to-object"),e=a("./_object-keys");a("./_object-sap")("keys",function(){return function(a){return e(d(a))}})},{"./_object-keys":81,"./_object-sap":83,"./_to-object":114}],197:[function(a,b,c){var d=a("./_is-object"),e=a("./_meta").onFreeze;a("./_object-sap")("preventExtensions",function(a){return function(b){return a&&d(b)?a(e(b)):b}})},{"./_is-object":54,"./_meta":67,"./_object-sap":83}],198:[function(a,b,c){var d=a("./_is-object"),e=a("./_meta").onFreeze;a("./_object-sap")("seal",function(a){return function(b){return a&&d(b)?a(e(b)):b}})},{"./_is-object":54,"./_meta":67,"./_object-sap":83}],199:[function(a,b,c){var d=a("./_export");d(d.S,"Object",{setPrototypeOf:a("./_set-proto").set})},{"./_export":37,"./_set-proto":95}],200:[function(a,b,c){"use strict";var d=a("./_classof"),e={};e[a("./_wks")("toStringTag")]="z",e+""!="[object z]"&&a("./_redefine")(Object.prototype,"toString",function(){return"[object "+d(this)+"]"},!0)},{"./_classof":22,"./_redefine":92,"./_wks":122}],201:[function(a,b,c){var d=a("./_export"),e=a("./_parse-float");d(d.G+d.F*(parseFloat!=e),{parseFloat:e})},{"./_export":37,"./_parse-float":86}],202:[function(a,b,c){var d=a("./_export"),e=a("./_parse-int");d(d.G+d.F*(parseInt!=e),{parseInt:e})},{"./_export":37,"./_parse-int":87}],203:[function(a,b,c){"use strict";var d,e,f,g=a("./_library"),h=a("./_global"),i=a("./_ctx"),j=a("./_classof"),k=a("./_export"),l=a("./_is-object"),m=a("./_a-function"),n=a("./_an-instance"),o=a("./_for-of"),p=a("./_species-constructor"),q=a("./_task").set,r=a("./_microtask")(),s="Promise",t=h.TypeError,u=h.process,v=h[s],u=h.process,w="process"==j(u),x=function(){},y=!!function(){try{var b=v.resolve(1),c=(b.constructor={})[a("./_wks")("species")]=function(a){a(x,x)};return(w||"function"==typeof PromiseRejectionEvent)&&b.then(x)instanceof c}catch(a){}}(),z=function(a,b){return a===b||a===v&&b===f},A=function(a){var b;return!(!l(a)||"function"!=typeof(b=a.then))&&b},B=function(a){return z(v,a)?new C(a):new e(a)},C=e=function(a){var b,c;this.promise=new a(function(a,d){if(void 0!==b||void 0!==c)throw t("Bad Promise constructor");b=a,c=d}),this.resolve=m(b),this.reject=m(c)},D=function(a){try{a()}catch(a){return{error:a}}},E=function(a,b){if(!a._n){a._n=!0;var c=a._c;r(function(){for(var d=a._v,e=1==a._s,f=0,g=function(b){var c,f,g=e?b.ok:b.fail,h=b.resolve,i=b.reject,j=b.domain;try{g?(e||(2==a._h&&H(a),a._h=1),g===!0?c=d:(j&&j.enter(),c=g(d),j&&j.exit()),c===b.promise?i(t("Promise-chain cycle")):(f=A(c))?f.call(c,h,i):h(c)):i(d)}catch(a){i(a)}};c.length>f;)g(c[f++]);a._c=[],a._n=!1,b&&!a._h&&F(a)})}},F=function(a){q.call(h,function(){var b,c,d,e=a._v;if(G(a)&&(b=D(function(){w?u.emit("unhandledRejection",e,a):(c=h.onunhandledrejection)?c({promise:a,reason:e}):(d=h.console)&&d.error&&d.error("Unhandled promise rejection",e)}),a._h=w||G(a)?2:1),a._a=void 0,b)throw b.error})},G=function(a){if(1==a._h)return!1;for(var b,c=a._a||a._c,d=0;c.length>d;)if(b=c[d++],b.fail||!G(b.promise))return!1;return!0},H=function(a){q.call(h,function(){var b;w?u.emit("rejectionHandled",a):(b=h.onrejectionhandled)&&b({promise:a,reason:a._v})})},I=function(a){var b=this;b._d||(b._d=!0,b=b._w||b,b._v=a,b._s=2,b._a||(b._a=b._c.slice()),E(b,!0))},J=function(a){var b,c=this;if(!c._d){c._d=!0,c=c._w||c;try{if(c===a)throw t("Promise can't be resolved itself");(b=A(a))?r(function(){var d={_w:c,_d:!1};try{b.call(a,i(J,d,1),i(I,d,1))}catch(a){I.call(d,a)}}):(c._v=a,c._s=1,E(c,!1))}catch(a){I.call({_w:c,_d:!1},a)}}};y||(v=function(a){n(this,v,s,"_h"),m(a),d.call(this);try{a(i(J,this,1),i(I,this,1))}catch(a){I.call(this,a)}},d=function(a){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},d.prototype=a("./_redefine-all")(v.prototype,{then:function(a,b){var c=B(p(this,v));return c.ok="function"!=typeof a||a,c.fail="function"==typeof b&&b,c.domain=w?u.domain:void 0,this._c.push(c),this._a&&this._a.push(c),this._s&&E(this,!1),c.promise},catch:function(a){return this.then(void 0,a)}}),C=function(){var a=new d;this.promise=a,this.resolve=i(J,a,1),this.reject=i(I,a,1)}),k(k.G+k.W+k.F*!y,{Promise:v}),a("./_set-to-string-tag")(v,s),a("./_set-species")(s),f=a("./_core")[s],k(k.S+k.F*!y,s,{reject:function(a){var b=B(this),c=b.reject;return c(a),b.promise}}),k(k.S+k.F*(g||!y),s,{resolve:function(a){if(a instanceof v&&z(a.constructor,this))return a;var b=B(this),c=b.resolve;return c(a),b.promise}}),k(k.S+k.F*!(y&&a("./_iter-detect")(function(a){v.all(a).catch(x)})),s,{all:function(a){var b=this,c=B(b),d=c.resolve,e=c.reject,f=D(function(){var c=[],f=0,g=1;o(a,!1,function(a){var h=f++,i=!1;c.push(void 0),g++,b.resolve(a).then(function(a){i||(i=!0,c[h]=a,--g||d(c))},e)}),--g||d(c)});return f&&e(f.error),c.promise},race:function(a){var b=this,c=B(b),d=c.reject,e=D(function(){o(a,!1,function(a){b.resolve(a).then(c.resolve,d)})});return e&&d(e.error),c.promise}})},{"./_a-function":8,"./_an-instance":11,"./_classof":22,"./_core":28,"./_ctx":30,"./_export":37,"./_for-of":42,"./_global":43,"./_is-object":54,"./_iter-detect":59,"./_library":63,"./_microtask":69,"./_redefine-all":91,"./_set-species":96,"./_set-to-string-tag":97,"./_species-constructor":100,"./_task":109,"./_wks":122}],204:[function(a,b,c){var d=a("./_export"),e=a("./_a-function"),f=a("./_an-object"),g=(a("./_global").Reflect||{}).apply,h=Function.apply;d(d.S+d.F*!a("./_fails")(function(){g(function(){})}),"Reflect",{apply:function(a,b,c){var d=e(a),i=f(c);return g?g(d,b,i):h.call(d,b,i)}})},{"./_a-function":8,"./_an-object":12,"./_export":37,"./_fails":39,"./_global":43}],205:[function(a,b,c){var d=a("./_export"),e=a("./_object-create"),f=a("./_a-function"),g=a("./_an-object"),h=a("./_is-object"),i=a("./_fails"),j=a("./_bind"),k=(a("./_global").Reflect||{}).construct,l=i(function(){function a(){}return!(k(function(){},[],a)instanceof a)}),m=!i(function(){k(function(){})});d(d.S+d.F*(l||m),"Reflect",{construct:function(a,b){f(a),g(b);var c=arguments.length<3?a:f(arguments[2]);if(m&&!l)return k(a,b,c);if(a==c){switch(b.length){case 0:return new a;case 1:return new a(b[0]);case 2:return new a(b[0],b[1]);case 3:return new a(b[0],b[1],b[2]);case 4:return new a(b[0],b[1],b[2],b[3])}var d=[null];return d.push.apply(d,b),new(j.apply(a,d))}var i=c.prototype,n=e(h(i)?i:Object.prototype),o=Function.apply.call(a,n,b);return h(o)?o:n}})},{"./_a-function":8,"./_an-object":12,"./_bind":21,"./_export":37,"./_fails":39,"./_global":43,"./_is-object":54,"./_object-create":71}],206:[function(a,b,c){var d=a("./_object-dp"),e=a("./_export"),f=a("./_an-object"),g=a("./_to-primitive");e(e.S+e.F*a("./_fails")(function(){Reflect.defineProperty(d.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(a,b,c){f(a),b=g(b,!0),f(c);try{return d.f(a,b,c),!0}catch(a){return!1}}})},{"./_an-object":12,"./_export":37,"./_fails":39,"./_object-dp":72,"./_to-primitive":115}],207:[function(a,b,c){var d=a("./_export"),e=a("./_object-gopd").f,f=a("./_an-object");d(d.S,"Reflect",{deleteProperty:function(a,b){var c=e(f(a),b);return!(c&&!c.configurable)&&delete a[b]}})},{"./_an-object":12,"./_export":37,"./_object-gopd":75}],208:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_an-object"),f=function(a){this._t=e(a),this._i=0;var b,c=this._k=[];for(b in a)c.push(b)};a("./_iter-create")(f,"Object",function(){var a,b=this,c=b._k;do if(b._i>=c.length)return{value:void 0,done:!0};while(!((a=c[b._i++])in b._t));return{value:a,done:!1}}),d(d.S,"Reflect",{enumerate:function(a){return new f(a)}})},{"./_an-object":12,"./_export":37,"./_iter-create":57}],209:[function(a,b,c){var d=a("./_object-gopd"),e=a("./_export"),f=a("./_an-object");e(e.S,"Reflect",{getOwnPropertyDescriptor:function(a,b){return d.f(f(a),b)}})},{"./_an-object":12,"./_export":37,"./_object-gopd":75}],210:[function(a,b,c){var d=a("./_export"),e=a("./_object-gpo"),f=a("./_an-object");d(d.S,"Reflect",{getPrototypeOf:function(a){return e(f(a))}})},{"./_an-object":12,"./_export":37,"./_object-gpo":79}],211:[function(a,b,c){function d(a,b){var c,h,k=arguments.length<3?a:arguments[2];return j(a)===k?a[b]:(c=e.f(a,b))?g(c,"value")?c.value:void 0!==c.get?c.get.call(k):void 0:i(h=f(a))?d(h,b,k):void 0}var e=a("./_object-gopd"),f=a("./_object-gpo"),g=a("./_has"),h=a("./_export"),i=a("./_is-object"),j=a("./_an-object");h(h.S,"Reflect",{get:d})},{"./_an-object":12,"./_export":37,"./_has":44,"./_is-object":54,"./_object-gopd":75,"./_object-gpo":79}],212:[function(a,b,c){var d=a("./_export");d(d.S,"Reflect",{has:function(a,b){return b in a}})},{"./_export":37}],213:[function(a,b,c){var d=a("./_export"),e=a("./_an-object"),f=Object.isExtensible;d(d.S,"Reflect",{isExtensible:function(a){return e(a),!f||f(a)}})},{"./_an-object":12,"./_export":37}],214:[function(a,b,c){var d=a("./_export");d(d.S,"Reflect",{ownKeys:a("./_own-keys")})},{"./_export":37,"./_own-keys":85}],215:[function(a,b,c){var d=a("./_export"),e=a("./_an-object"),f=Object.preventExtensions;d(d.S,"Reflect",{preventExtensions:function(a){e(a);try{return f&&f(a),!0}catch(a){return!1}}})},{"./_an-object":12,"./_export":37}],216:[function(a,b,c){var d=a("./_export"),e=a("./_set-proto");e&&d(d.S,"Reflect",{setPrototypeOf:function(a,b){e.check(a,b);try{return e.set(a,b),!0}catch(a){return!1}}})},{"./_export":37,"./_set-proto":95}],217:[function(a,b,c){function d(a,b,c){var i,m,n=arguments.length<4?a:arguments[3],o=f.f(k(a),b);if(!o){if(l(m=g(a)))return d(m,b,c,n);o=j(0)}return h(o,"value")?!(o.writable===!1||!l(n))&&(i=f.f(n,b)||j(0),i.value=c,e.f(n,b,i),!0):void 0!==o.set&&(o.set.call(n,c),!0)}var e=a("./_object-dp"),f=a("./_object-gopd"),g=a("./_object-gpo"),h=a("./_has"),i=a("./_export"),j=a("./_property-desc"),k=a("./_an-object"),l=a("./_is-object");i(i.S,"Reflect",{set:d})},{"./_an-object":12,"./_export":37,"./_has":44,"./_is-object":54,"./_object-dp":72,"./_object-gopd":75,"./_object-gpo":79,"./_property-desc":90}],218:[function(a,b,c){var d=a("./_global"),e=a("./_inherit-if-required"),f=a("./_object-dp").f,g=a("./_object-gopn").f,h=a("./_is-regexp"),i=a("./_flags"),j=d.RegExp,k=j,l=j.prototype,m=/a/g,n=/a/g,o=new j(m)!==m;if(a("./_descriptors")&&(!o||a("./_fails")(function(){return n[a("./_wks")("match")]=!1,j(m)!=m||j(n)==n||"/a/i"!=j(m,"i")}))){j=function(a,b){var c=this instanceof j,d=h(a),f=void 0===b;return!c&&d&&a.constructor===j&&f?a:e(o?new k(d&&!f?a.source:a,b):k((d=a instanceof j)?a.source:a,d&&f?i.call(a):b),c?this:l,j)};for(var p=(function(a){a in j||f(j,a,{configurable:!0,get:function(){return k[a]},set:function(b){k[a]=b}})}),q=g(k),r=0;q.length>r;)p(q[r++]);l.constructor=j,j.prototype=l,a("./_redefine")(d,"RegExp",j)}a("./_set-species")("RegExp")},{"./_descriptors":33,"./_fails":39,"./_flags":41,"./_global":43,"./_inherit-if-required":48,"./_is-regexp":55,"./_object-dp":72,"./_object-gopn":77,"./_redefine":92,"./_set-species":96,"./_wks":122}],219:[function(a,b,c){a("./_descriptors")&&"g"!=/./g.flags&&a("./_object-dp").f(RegExp.prototype,"flags",{configurable:!0,get:a("./_flags")})},{"./_descriptors":33,"./_flags":41,"./_object-dp":72}],220:[function(a,b,c){a("./_fix-re-wks")("match",1,function(a,b,c){return[function(c){"use strict";var d=a(this),e=void 0==c?void 0:c[b];return void 0!==e?e.call(c,d):new RegExp(c)[b](String(d))},c]})},{"./_fix-re-wks":40}],221:[function(a,b,c){a("./_fix-re-wks")("replace",2,function(a,b,c){return[function(d,e){"use strict";var f=a(this),g=void 0==d?void 0:d[b];return void 0!==g?g.call(d,f,e):c.call(String(f),d,e)},c]})},{"./_fix-re-wks":40}],222:[function(a,b,c){a("./_fix-re-wks")("search",1,function(a,b,c){return[function(c){"use strict";var d=a(this),e=void 0==c?void 0:c[b];return void 0!==e?e.call(c,d):new RegExp(c)[b](String(d))},c]})},{"./_fix-re-wks":40}],223:[function(a,b,c){a("./_fix-re-wks")("split",2,function(b,c,d){"use strict";var e=a("./_is-regexp"),f=d,g=[].push,h="split",i="length",j="lastIndex";if("c"=="abbc"[h](/(b)*/)[1]||4!="test"[h](/(?:)/,-1)[i]||2!="ab"[h](/(?:ab)*/)[i]||4!="."[h](/(.?)(.?)/)[i]||"."[h](/()()/)[i]>1||""[h](/.?/)[i]){var k=void 0===/()??/.exec("")[1];d=function(a,b){var c=String(this);if(void 0===a&&0===b)return[];if(!e(a))return f.call(c,a,b);var d,h,l,m,n,o=[],p=(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.unicode?"u":"")+(a.sticky?"y":""),q=0,r=void 0===b?4294967295:b>>>0,s=new RegExp(a.source,p+"g");for(k||(d=new RegExp("^"+s.source+"$(?!\\s)",p));(h=s.exec(c))&&(l=h.index+h[0][i],!(l>q&&(o.push(c.slice(q,h.index)),!k&&h[i]>1&&h[0].replace(d,function(){for(n=1;n1&&h.index=r)));)s[j]===h.index&&s[j]++;return q===c[i]?!m&&s.test("")||o.push(""):o.push(c.slice(q)),o[i]>r?o.slice(0,r):o}}else"0"[h](void 0,0)[i]&&(d=function(a,b){return void 0===a&&0===b?[]:f.call(this,a,b)});return[function(a,e){var f=b(this),g=void 0==a?void 0:a[c];return void 0!==g?g.call(a,f,e):d.call(String(f),a,e)},d]})},{"./_fix-re-wks":40,"./_is-regexp":55}],224:[function(a,b,c){"use strict";a("./es6.regexp.flags");var d=a("./_an-object"),e=a("./_flags"),f=a("./_descriptors"),g="toString",h=/./[g],i=function(b){a("./_redefine")(RegExp.prototype,g,b,!0)};a("./_fails")(function(){return"/a/b"!=h.call({source:"a",flags:"b"})})?i(function(){var a=d(this);return"/".concat(a.source,"/","flags"in a?a.flags:!f&&a instanceof RegExp?e.call(a):void 0)}):h.name!=g&&i(function(){return h.call(this)})},{"./_an-object":12,"./_descriptors":33,"./_fails":39,"./_flags":41,"./_redefine":92,"./es6.regexp.flags":219}],225:[function(a,b,c){"use strict";var d=a("./_collection-strong");b.exports=a("./_collection")("Set",function(a){return function(){return a(this,arguments.length>0?arguments[0]:void 0)}},{add:function(a){return d.def(this,a=0===a?0:a,a)}},d)},{"./_collection":27,"./_collection-strong":24}],226:[function(a,b,c){"use strict";a("./_string-html")("anchor",function(a){return function(b){return a(this,"a","name",b)}})},{"./_string-html":104}],227:[function(a,b,c){"use strict";a("./_string-html")("big",function(a){return function(){return a(this,"big","","")}})},{"./_string-html":104}],228:[function(a,b,c){"use strict";a("./_string-html")("blink",function(a){return function(){return a(this,"blink","","")}})},{"./_string-html":104}],229:[function(a,b,c){"use strict";a("./_string-html")("bold",function(a){return function(){return a(this,"b","","")}})},{"./_string-html":104}],230:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_string-at")(!1);d(d.P,"String",{codePointAt:function(a){return e(this,a)}})},{"./_export":37,"./_string-at":102}],231:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_to-length"),f=a("./_string-context"),g="endsWith",h=""[g];d(d.P+d.F*a("./_fails-is-regexp")(g),"String",{endsWith:function(a){var b=f(this,a,g),c=arguments.length>1?arguments[1]:void 0,d=e(b.length),i=void 0===c?d:Math.min(e(c),d),j=String(a);return h?h.call(b,j,i):b.slice(i-j.length,i)===j}})},{"./_export":37,"./_fails-is-regexp":38,"./_string-context":103,"./_to-length":113}],232:[function(a,b,c){"use strict";a("./_string-html")("fixed",function(a){return function(){return a(this,"tt","","")}})},{"./_string-html":104}],233:[function(a,b,c){"use strict";a("./_string-html")("fontcolor",function(a){return function(b){return a(this,"font","color",b)}})},{"./_string-html":104}],234:[function(a,b,c){"use strict";a("./_string-html")("fontsize",function(a){return function(b){return a(this,"font","size",b)}})},{"./_string-html":104}],235:[function(a,b,c){var d=a("./_export"),e=a("./_to-index"),f=String.fromCharCode,g=String.fromCodePoint;d(d.S+d.F*(!!g&&1!=g.length),"String",{fromCodePoint:function(a){for(var b,c=[],d=arguments.length,g=0;d>g;){if(b=+arguments[g++],e(b,1114111)!==b)throw RangeError(b+" is not a valid code point");c.push(b<65536?f(b):f(((b-=65536)>>10)+55296,b%1024+56320))}return c.join("")}})},{"./_export":37,"./_to-index":110}],236:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_string-context"),f="includes";d(d.P+d.F*a("./_fails-is-regexp")(f),"String",{includes:function(a){return!!~e(this,a,f).indexOf(a,arguments.length>1?arguments[1]:void 0)}})},{"./_export":37,"./_fails-is-regexp":38,"./_string-context":103}],237:[function(a,b,c){"use strict";a("./_string-html")("italics",function(a){return function(){return a(this,"i","","")}})},{"./_string-html":104}],238:[function(a,b,c){"use strict";var d=a("./_string-at")(!0);a("./_iter-define")(String,"String",function(a){this._t=String(a),this._i=0},function(){var a,b=this._t,c=this._i;return c>=b.length?{value:void 0,done:!0}:(a=d(b,c),this._i+=a.length,{value:a,done:!1})})},{"./_iter-define":58,"./_string-at":102}],239:[function(a,b,c){"use strict";a("./_string-html")("link",function(a){return function(b){return a(this,"a","href",b)}})},{"./_string-html":104}],240:[function(a,b,c){var d=a("./_export"),e=a("./_to-iobject"),f=a("./_to-length");d(d.S,"String",{raw:function(a){for(var b=e(a.raw),c=f(b.length),d=arguments.length,g=[],h=0;c>h;)g.push(String(b[h++])),h1?arguments[1]:void 0,b.length)),d=String(a);return h?h.call(b,d,c):b.slice(c,c+d.length)===d}})},{"./_export":37,"./_fails-is-regexp":38,"./_string-context":103,"./_to-length":113}],244:[function(a,b,c){"use strict";a("./_string-html")("strike",function(a){return function(){return a(this,"strike","","")}})},{"./_string-html":104}],245:[function(a,b,c){"use strict";a("./_string-html")("sub",function(a){return function(){return a(this,"sub","","")}})},{"./_string-html":104}],246:[function(a,b,c){"use strict";a("./_string-html")("sup",function(a){return function(){return a(this,"sup","","")}})},{"./_string-html":104}],247:[function(a,b,c){"use strict";a("./_string-trim")("trim",function(a){return function(){return a(this,3)}})},{"./_string-trim":107}],248:[function(a,b,c){"use strict";var d=a("./_global"),e=a("./_has"),f=a("./_descriptors"),g=a("./_export"),h=a("./_redefine"),i=a("./_meta").KEY,j=a("./_fails"),k=a("./_shared"),l=a("./_set-to-string-tag"),m=a("./_uid"),n=a("./_wks"),o=a("./_wks-ext"),p=a("./_wks-define"),q=a("./_keyof"),r=a("./_enum-keys"),s=a("./_is-array"),t=a("./_an-object"),u=a("./_to-iobject"),v=a("./_to-primitive"),w=a("./_property-desc"),x=a("./_object-create"),y=a("./_object-gopn-ext"),z=a("./_object-gopd"),A=a("./_object-dp"),B=a("./_object-keys"),C=z.f,D=A.f,E=y.f,F=d.Symbol,G=d.JSON,H=G&&G.stringify,I="prototype",J=n("_hidden"),K=n("toPrimitive"),L={}.propertyIsEnumerable,M=k("symbol-registry"),N=k("symbols"),O=k("op-symbols"),P=Object[I],Q="function"==typeof F,R=d.QObject,S=!R||!R[I]||!R[I].findChild,T=f&&j(function(){return 7!=x(D({},"a",{get:function(){return D(this,"a",{value:7}).a}})).a})?function(a,b,c){var d=C(P,b);d&&delete P[b],D(a,b,c),d&&a!==P&&D(P,b,d)}:D,U=function(a){var b=N[a]=x(F[I]);return b._k=a,b},V=Q&&"symbol"==typeof F.iterator?function(a){return"symbol"==typeof a}:function(a){return a instanceof F},W=function(a,b,c){return a===P&&W(O,b,c),t(a),b=v(b,!0),t(c),e(N,b)?(c.enumerable?(e(a,J)&&a[J][b]&&(a[J][b]=!1),c=x(c,{enumerable:w(0,!1)})):(e(a,J)||D(a,J,w(1,{})),a[J][b]=!0),T(a,b,c)):D(a,b,c)},X=function(a,b){t(a);for(var c,d=r(b=u(b)),e=0,f=d.length;f>e;)W(a,c=d[e++],b[c]);return a},Y=function(a,b){return void 0===b?x(a):X(x(a),b)},Z=function(a){var b=L.call(this,a=v(a,!0));return!(this===P&&e(N,a)&&!e(O,a))&&(!(b||!e(this,a)||!e(N,a)||e(this,J)&&this[J][a])||b)},$=function(a,b){if(a=u(a),b=v(b,!0),a!==P||!e(N,b)||e(O,b)){var c=C(a,b);return!c||!e(N,b)||e(a,J)&&a[J][b]||(c.enumerable=!0),c}},_=function(a){for(var b,c=E(u(a)),d=[],f=0;c.length>f;)e(N,b=c[f++])||b==J||b==i||d.push(b);return d},aa=function(a){for(var b,c=a===P,d=E(c?O:u(a)),f=[],g=0;d.length>g;)!e(N,b=d[g++])||c&&!e(P,b)||f.push(N[b]);return f};Q||(F=function(){if(this instanceof F)throw TypeError("Symbol is not a constructor!");var a=m(arguments.length>0?arguments[0]:void 0),b=function(c){this===P&&b.call(O,c),e(this,J)&&e(this[J],a)&&(this[J][a]=!1),T(this,a,w(1,c))};return f&&S&&T(P,a,{configurable:!0,set:b}),U(a)},h(F[I],"toString",function(){return this._k}),z.f=$,A.f=W,a("./_object-gopn").f=y.f=_,a("./_object-pie").f=Z,a("./_object-gops").f=aa,f&&!a("./_library")&&h(P,"propertyIsEnumerable",Z,!0),o.f=function(a){return U(n(a))}),g(g.G+g.W+g.F*!Q,{Symbol:F});for(var ba="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ca=0;ba.length>ca;)n(ba[ca++]);for(var ba=B(n.store),ca=0;ba.length>ca;)p(ba[ca++]);g(g.S+g.F*!Q,"Symbol",{for:function(a){return e(M,a+="")?M[a]:M[a]=F(a)},keyFor:function(a){if(V(a))return q(M,a);throw TypeError(a+" is not a symbol!")},useSetter:function(){S=!0},useSimple:function(){S=!1}}),g(g.S+g.F*!Q,"Object",{create:Y,defineProperty:W,defineProperties:X,getOwnPropertyDescriptor:$,getOwnPropertyNames:_,getOwnPropertySymbols:aa}),G&&g(g.S+g.F*(!Q||j(function(){var a=F();return"[null]"!=H([a])||"{}"!=H({a:a})||"{}"!=H(Object(a))})),"JSON",{stringify:function(a){if(void 0!==a&&!V(a)){for(var b,c,d=[a],e=1;arguments.length>e;)d.push(arguments[e++]);return b=d[1],"function"==typeof b&&(c=b),!c&&s(b)||(b=function(a,b){if(c&&(b=c.call(this,a,b)),!V(b))return b}),d[1]=b,H.apply(G,d)}}}),F[I][K]||a("./_hide")(F[I],K,F[I].valueOf),l(F,"Symbol"),l(Math,"Math",!0),l(d.JSON,"JSON",!0)},{"./_an-object":12,"./_descriptors":33,"./_enum-keys":36,"./_export":37,"./_fails":39,"./_global":43,"./_has":44,"./_hide":45,"./_is-array":52,"./_keyof":62,"./_library":63,"./_meta":67,"./_object-create":71,"./_object-dp":72,"./_object-gopd":75,"./_object-gopn":77,"./_object-gopn-ext":76,"./_object-gops":78,"./_object-keys":81,"./_object-pie":82,"./_property-desc":90,"./_redefine":92,"./_set-to-string-tag":97,"./_shared":99,"./_to-iobject":112,"./_to-primitive":115,"./_uid":119,"./_wks":122,"./_wks-define":120,"./_wks-ext":121}],249:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_typed"),f=a("./_typed-buffer"),g=a("./_an-object"),h=a("./_to-index"),i=a("./_to-length"),j=a("./_is-object"),k=a("./_global").ArrayBuffer,l=a("./_species-constructor"),m=f.ArrayBuffer,n=f.DataView,o=e.ABV&&k.isView,p=m.prototype.slice,q=e.VIEW,r="ArrayBuffer"; +d(d.G+d.W+d.F*(k!==m),{ArrayBuffer:m}),d(d.S+d.F*!e.CONSTR,r,{isView:function(a){return o&&o(a)||j(a)&&q in a}}),d(d.P+d.U+d.F*a("./_fails")(function(){return!new m(2).slice(1,void 0).byteLength}),r,{slice:function(a,b){if(void 0!==p&&void 0===b)return p.call(g(this),a);for(var c=g(this).byteLength,d=h(a,c),e=h(void 0===b?c:b,c),f=new(l(this,m))(i(e-d)),j=new n(this),k=new n(f),o=0;d0?arguments[0]:void 0)}},p={get:function(a){if(j(a)){var b=k(a);return b===!0?m(this).get(a):b?b[this._i]:void 0}},set:function(a,b){return i.def(this,a,b)}},q=b.exports=a("./_collection")("WeakMap",o,p,i,!0,!0);7!=(new q).set((Object.freeze||Object)(n),7).get(n)&&(d=i.getConstructor(o),h(d.prototype,p),g.NEED=!0,e(["delete","has","get","set"],function(a){var b=q.prototype,c=b[a];f(b,a,function(b,e){if(j(b)&&!l(b)){this._f||(this._f=new d);var f=this._f[a](b,e);return"set"==a?this:f}return c.call(this,b,e)})}))},{"./_array-methods":17,"./_collection":27,"./_collection-weak":26,"./_is-object":54,"./_meta":67,"./_object-assign":70,"./_redefine":92}],261:[function(a,b,c){"use strict";var d=a("./_collection-weak");a("./_collection")("WeakSet",function(a){return function(){return a(this,arguments.length>0?arguments[0]:void 0)}},{add:function(a){return d.def(this,a,!0)}},d,!1,!0)},{"./_collection":27,"./_collection-weak":26}],262:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_array-includes")(!0);d(d.P,"Array",{includes:function(a){return e(this,a,arguments.length>1?arguments[1]:void 0)}}),a("./_add-to-unscopables")("includes")},{"./_add-to-unscopables":10,"./_array-includes":16,"./_export":37}],263:[function(a,b,c){var d=a("./_export"),e=a("./_microtask")(),f=a("./_global").process,g="process"==a("./_cof")(f);d(d.G,{asap:function(a){var b=g&&f.domain;e(b?b.bind(a):a)}})},{"./_cof":23,"./_export":37,"./_global":43,"./_microtask":69}],264:[function(a,b,c){var d=a("./_export"),e=a("./_cof");d(d.S,"Error",{isError:function(a){return"Error"===e(a)}})},{"./_cof":23,"./_export":37}],265:[function(a,b,c){var d=a("./_export");d(d.P+d.R,"Map",{toJSON:a("./_collection-to-json")("Map")})},{"./_collection-to-json":25,"./_export":37}],266:[function(a,b,c){var d=a("./_export");d(d.S,"Math",{iaddh:function(a,b,c,d){var e=a>>>0,f=b>>>0,g=c>>>0;return f+(d>>>0)+((e&g|(e|g)&~(e+g>>>0))>>>31)|0}})},{"./_export":37}],267:[function(a,b,c){var d=a("./_export");d(d.S,"Math",{imulh:function(a,b){var c=65535,d=+a,e=+b,f=d&c,g=e&c,h=d>>16,i=e>>16,j=(h*g>>>0)+(f*g>>>16);return h*i+(j>>16)+((f*i>>>0)+(j&c)>>16)}})},{"./_export":37}],268:[function(a,b,c){var d=a("./_export");d(d.S,"Math",{isubh:function(a,b,c,d){var e=a>>>0,f=b>>>0,g=c>>>0;return f-(d>>>0)-((~e&g|~(e^g)&e-g>>>0)>>>31)|0}})},{"./_export":37}],269:[function(a,b,c){var d=a("./_export");d(d.S,"Math",{umulh:function(a,b){var c=65535,d=+a,e=+b,f=d&c,g=e&c,h=d>>>16,i=e>>>16,j=(h*g>>>0)+(f*g>>>16);return h*i+(j>>>16)+((f*i>>>0)+(j&c)>>>16)}})},{"./_export":37}],270:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_to-object"),f=a("./_a-function"),g=a("./_object-dp");a("./_descriptors")&&d(d.P+a("./_object-forced-pam"),"Object",{__defineGetter__:function(a,b){g.f(e(this),a,{get:f(b),enumerable:!0,configurable:!0})}})},{"./_a-function":8,"./_descriptors":33,"./_export":37,"./_object-dp":72,"./_object-forced-pam":74,"./_to-object":114}],271:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_to-object"),f=a("./_a-function"),g=a("./_object-dp");a("./_descriptors")&&d(d.P+a("./_object-forced-pam"),"Object",{__defineSetter__:function(a,b){g.f(e(this),a,{set:f(b),enumerable:!0,configurable:!0})}})},{"./_a-function":8,"./_descriptors":33,"./_export":37,"./_object-dp":72,"./_object-forced-pam":74,"./_to-object":114}],272:[function(a,b,c){var d=a("./_export"),e=a("./_object-to-array")(!0);d(d.S,"Object",{entries:function(a){return e(a)}})},{"./_export":37,"./_object-to-array":84}],273:[function(a,b,c){var d=a("./_export"),e=a("./_own-keys"),f=a("./_to-iobject"),g=a("./_object-gopd"),h=a("./_create-property");d(d.S,"Object",{getOwnPropertyDescriptors:function(a){for(var b,c=f(a),d=g.f,i=e(c),j={},k=0;i.length>k;)h(j,b=i[k++],d(c,b));return j}})},{"./_create-property":29,"./_export":37,"./_object-gopd":75,"./_own-keys":85,"./_to-iobject":112}],274:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_to-object"),f=a("./_to-primitive"),g=a("./_object-gpo"),h=a("./_object-gopd").f;a("./_descriptors")&&d(d.P+a("./_object-forced-pam"),"Object",{__lookupGetter__:function(a){var b,c=e(this),d=f(a,!0);do if(b=h(c,d))return b.get;while(c=g(c))}})},{"./_descriptors":33,"./_export":37,"./_object-forced-pam":74,"./_object-gopd":75,"./_object-gpo":79,"./_to-object":114,"./_to-primitive":115}],275:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_to-object"),f=a("./_to-primitive"),g=a("./_object-gpo"),h=a("./_object-gopd").f;a("./_descriptors")&&d(d.P+a("./_object-forced-pam"),"Object",{__lookupSetter__:function(a){var b,c=e(this),d=f(a,!0);do if(b=h(c,d))return b.set;while(c=g(c))}})},{"./_descriptors":33,"./_export":37,"./_object-forced-pam":74,"./_object-gopd":75,"./_object-gpo":79,"./_to-object":114,"./_to-primitive":115}],276:[function(a,b,c){var d=a("./_export"),e=a("./_object-to-array")(!1);d(d.S,"Object",{values:function(a){return e(a)}})},{"./_export":37,"./_object-to-array":84}],277:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_global"),f=a("./_core"),g=a("./_microtask")(),h=a("./_wks")("observable"),i=a("./_a-function"),j=a("./_an-object"),k=a("./_an-instance"),l=a("./_redefine-all"),m=a("./_hide"),n=a("./_for-of"),o=n.RETURN,p=function(a){return null==a?void 0:i(a)},q=function(a){var b=a._c;b&&(a._c=void 0,b())},r=function(a){return void 0===a._o},s=function(a){r(a)||(a._o=void 0,q(a))},t=function(a,b){j(a),this._c=void 0,this._o=a,a=new u(this);try{var c=b(a),d=c;null!=c&&("function"==typeof c.unsubscribe?c=function(){d.unsubscribe()}:i(c),this._c=c)}catch(b){return void a.error(b)}r(this)&&q(this)};t.prototype=l({},{unsubscribe:function(){s(this)}});var u=function(a){this._s=a};u.prototype=l({},{next:function(a){var b=this._s;if(!r(b)){var c=b._o;try{var d=p(c.next);if(d)return d.call(c,a)}catch(a){try{s(b)}finally{throw a}}}},error:function(a){var b=this._s;if(r(b))throw a;var c=b._o;b._o=void 0;try{var d=p(c.error);if(!d)throw a;a=d.call(c,a)}catch(a){try{q(b)}finally{throw a}}return q(b),a},complete:function(a){var b=this._s;if(!r(b)){var c=b._o;b._o=void 0;try{var d=p(c.complete);a=d?d.call(c,a):void 0}catch(a){try{q(b)}finally{throw a}}return q(b),a}}});var v=function(a){k(this,v,"Observable","_f")._f=i(a)};l(v.prototype,{subscribe:function(a){return new t(a,this._f)},forEach:function(a){var b=this;return new(f.Promise||e.Promise)(function(c,d){i(a);var e=b.subscribe({next:function(b){try{return a(b)}catch(a){d(a),e.unsubscribe()}},error:d,complete:c})})}}),l(v,{from:function(a){var b="function"==typeof this?this:v,c=p(j(a)[h]);if(c){var d=j(c.call(a));return d.constructor===b?d:new b(function(a){return d.subscribe(a)})}return new b(function(b){var c=!1;return g(function(){if(!c){try{if(n(a,!1,function(a){if(b.next(a),c)return o})===o)return}catch(a){if(c)throw a;return void b.error(a)}b.complete()}}),function(){c=!0}})},of:function(){for(var a=0,b=arguments.length,c=Array(b);a1?arguments[1]:void 0,!1)}})},{"./_export":37,"./_string-pad":105}],291:[function(a,b,c){"use strict";var d=a("./_export"),e=a("./_string-pad");d(d.P,"String",{padStart:function(a){return e(this,a,arguments.length>1?arguments[1]:void 0,!0)}})},{"./_export":37,"./_string-pad":105}],292:[function(a,b,c){"use strict";a("./_string-trim")("trimLeft",function(a){return function(){return a(this,1)}},"trimStart")},{"./_string-trim":107}],293:[function(a,b,c){"use strict";a("./_string-trim")("trimRight",function(a){return function(){return a(this,2)}},"trimEnd")},{"./_string-trim":107}],294:[function(a,b,c){a("./_wks-define")("asyncIterator")},{"./_wks-define":120}],295:[function(a,b,c){a("./_wks-define")("observable")},{"./_wks-define":120}],296:[function(a,b,c){var d=a("./_export");d(d.S,"System",{global:a("./_global")})},{"./_export":37,"./_global":43}],297:[function(a,b,c){for(var d=a("./es6.array.iterator"),e=a("./_redefine"),f=a("./_global"),g=a("./_hide"),h=a("./_iterators"),i=a("./_wks"),j=i("iterator"),k=i("toStringTag"),l=h.Array,m=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],n=0;n<5;n++){var o,p=m[n],q=f[p],r=q&&q.prototype;if(r){r[j]||g(r,j,l),r[k]||g(r,k,p),h[p]=l;for(o in d)r[o]||e(r,o,d[o],!0)}}},{"./_global":43,"./_hide":45,"./_iterators":61,"./_redefine":92,"./_wks":122,"./es6.array.iterator":135}],298:[function(a,b,c){var d=a("./_export"),e=a("./_task");d(d.G+d.B,{setImmediate:e.set,clearImmediate:e.clear})},{"./_export":37,"./_task":109}],299:[function(a,b,c){var d=a("./_global"),e=a("./_export"),f=a("./_invoke"),g=a("./_partial"),h=d.navigator,i=!!h&&/MSIE .\./.test(h.userAgent),j=function(a){return i?function(b,c){return a(f(g,[].slice.call(arguments,2),"function"==typeof b?b:Function(b)),c)}:a};e(e.G+e.B+e.F*i,{setTimeout:j(d.setTimeout),setInterval:j(d.setInterval)})},{"./_export":37,"./_global":43,"./_invoke":49,"./_partial":88}],300:[function(a,b,c){a("./modules/es6.symbol"),a("./modules/es6.object.create"),a("./modules/es6.object.define-property"),a("./modules/es6.object.define-properties"),a("./modules/es6.object.get-own-property-descriptor"),a("./modules/es6.object.get-prototype-of"),a("./modules/es6.object.keys"),a("./modules/es6.object.get-own-property-names"),a("./modules/es6.object.freeze"),a("./modules/es6.object.seal"),a("./modules/es6.object.prevent-extensions"),a("./modules/es6.object.is-frozen"),a("./modules/es6.object.is-sealed"),a("./modules/es6.object.is-extensible"),a("./modules/es6.object.assign"),a("./modules/es6.object.is"),a("./modules/es6.object.set-prototype-of"),a("./modules/es6.object.to-string"),a("./modules/es6.function.bind"),a("./modules/es6.function.name"),a("./modules/es6.function.has-instance"),a("./modules/es6.parse-int"),a("./modules/es6.parse-float"),a("./modules/es6.number.constructor"),a("./modules/es6.number.to-fixed"),a("./modules/es6.number.to-precision"),a("./modules/es6.number.epsilon"),a("./modules/es6.number.is-finite"),a("./modules/es6.number.is-integer"),a("./modules/es6.number.is-nan"),a("./modules/es6.number.is-safe-integer"),a("./modules/es6.number.max-safe-integer"),a("./modules/es6.number.min-safe-integer"),a("./modules/es6.number.parse-float"),a("./modules/es6.number.parse-int"),a("./modules/es6.math.acosh"),a("./modules/es6.math.asinh"),a("./modules/es6.math.atanh"),a("./modules/es6.math.cbrt"),a("./modules/es6.math.clz32"),a("./modules/es6.math.cosh"),a("./modules/es6.math.expm1"),a("./modules/es6.math.fround"),a("./modules/es6.math.hypot"),a("./modules/es6.math.imul"),a("./modules/es6.math.log10"),a("./modules/es6.math.log1p"),a("./modules/es6.math.log2"),a("./modules/es6.math.sign"),a("./modules/es6.math.sinh"),a("./modules/es6.math.tanh"),a("./modules/es6.math.trunc"),a("./modules/es6.string.from-code-point"),a("./modules/es6.string.raw"),a("./modules/es6.string.trim"),a("./modules/es6.string.iterator"),a("./modules/es6.string.code-point-at"),a("./modules/es6.string.ends-with"),a("./modules/es6.string.includes"),a("./modules/es6.string.repeat"),a("./modules/es6.string.starts-with"),a("./modules/es6.string.anchor"),a("./modules/es6.string.big"),a("./modules/es6.string.blink"),a("./modules/es6.string.bold"),a("./modules/es6.string.fixed"),a("./modules/es6.string.fontcolor"),a("./modules/es6.string.fontsize"),a("./modules/es6.string.italics"),a("./modules/es6.string.link"),a("./modules/es6.string.small"),a("./modules/es6.string.strike"),a("./modules/es6.string.sub"),a("./modules/es6.string.sup"),a("./modules/es6.date.now"),a("./modules/es6.date.to-json"),a("./modules/es6.date.to-iso-string"),a("./modules/es6.date.to-string"),a("./modules/es6.date.to-primitive"),a("./modules/es6.array.is-array"),a("./modules/es6.array.from"),a("./modules/es6.array.of"),a("./modules/es6.array.join"),a("./modules/es6.array.slice"),a("./modules/es6.array.sort"),a("./modules/es6.array.for-each"),a("./modules/es6.array.map"),a("./modules/es6.array.filter"),a("./modules/es6.array.some"),a("./modules/es6.array.every"),a("./modules/es6.array.reduce"),a("./modules/es6.array.reduce-right"),a("./modules/es6.array.index-of"),a("./modules/es6.array.last-index-of"),a("./modules/es6.array.copy-within"),a("./modules/es6.array.fill"),a("./modules/es6.array.find"),a("./modules/es6.array.find-index"),a("./modules/es6.array.species"),a("./modules/es6.array.iterator"),a("./modules/es6.regexp.constructor"),a("./modules/es6.regexp.to-string"),a("./modules/es6.regexp.flags"),a("./modules/es6.regexp.match"),a("./modules/es6.regexp.replace"),a("./modules/es6.regexp.search"),a("./modules/es6.regexp.split"),a("./modules/es6.promise"),a("./modules/es6.map"),a("./modules/es6.set"),a("./modules/es6.weak-map"),a("./modules/es6.weak-set"),a("./modules/es6.typed.array-buffer"),a("./modules/es6.typed.data-view"),a("./modules/es6.typed.int8-array"),a("./modules/es6.typed.uint8-array"),a("./modules/es6.typed.uint8-clamped-array"),a("./modules/es6.typed.int16-array"),a("./modules/es6.typed.uint16-array"),a("./modules/es6.typed.int32-array"),a("./modules/es6.typed.uint32-array"),a("./modules/es6.typed.float32-array"),a("./modules/es6.typed.float64-array"),a("./modules/es6.reflect.apply"),a("./modules/es6.reflect.construct"),a("./modules/es6.reflect.define-property"),a("./modules/es6.reflect.delete-property"),a("./modules/es6.reflect.enumerate"),a("./modules/es6.reflect.get"),a("./modules/es6.reflect.get-own-property-descriptor"),a("./modules/es6.reflect.get-prototype-of"),a("./modules/es6.reflect.has"),a("./modules/es6.reflect.is-extensible"),a("./modules/es6.reflect.own-keys"),a("./modules/es6.reflect.prevent-extensions"),a("./modules/es6.reflect.set"),a("./modules/es6.reflect.set-prototype-of"),a("./modules/es7.array.includes"),a("./modules/es7.string.at"),a("./modules/es7.string.pad-start"),a("./modules/es7.string.pad-end"),a("./modules/es7.string.trim-left"),a("./modules/es7.string.trim-right"),a("./modules/es7.string.match-all"),a("./modules/es7.symbol.async-iterator"),a("./modules/es7.symbol.observable"),a("./modules/es7.object.get-own-property-descriptors"),a("./modules/es7.object.values"),a("./modules/es7.object.entries"),a("./modules/es7.object.define-getter"),a("./modules/es7.object.define-setter"),a("./modules/es7.object.lookup-getter"),a("./modules/es7.object.lookup-setter"),a("./modules/es7.map.to-json"),a("./modules/es7.set.to-json"),a("./modules/es7.system.global"),a("./modules/es7.error.is-error"),a("./modules/es7.math.iaddh"),a("./modules/es7.math.isubh"),a("./modules/es7.math.imulh"),a("./modules/es7.math.umulh"),a("./modules/es7.reflect.define-metadata"),a("./modules/es7.reflect.delete-metadata"),a("./modules/es7.reflect.get-metadata"),a("./modules/es7.reflect.get-metadata-keys"),a("./modules/es7.reflect.get-own-metadata"),a("./modules/es7.reflect.get-own-metadata-keys"),a("./modules/es7.reflect.has-metadata"),a("./modules/es7.reflect.has-own-metadata"),a("./modules/es7.reflect.metadata"),a("./modules/es7.asap"),a("./modules/es7.observable"),a("./modules/web.timers"),a("./modules/web.immediate"),a("./modules/web.dom.iterable"),b.exports=a("./modules/_core")},{"./modules/_core":28,"./modules/es6.array.copy-within":125,"./modules/es6.array.every":126,"./modules/es6.array.fill":127,"./modules/es6.array.filter":128,"./modules/es6.array.find":130,"./modules/es6.array.find-index":129,"./modules/es6.array.for-each":131,"./modules/es6.array.from":132,"./modules/es6.array.index-of":133,"./modules/es6.array.is-array":134,"./modules/es6.array.iterator":135,"./modules/es6.array.join":136,"./modules/es6.array.last-index-of":137,"./modules/es6.array.map":138,"./modules/es6.array.of":139,"./modules/es6.array.reduce":141,"./modules/es6.array.reduce-right":140,"./modules/es6.array.slice":142,"./modules/es6.array.some":143,"./modules/es6.array.sort":144,"./modules/es6.array.species":145,"./modules/es6.date.now":146,"./modules/es6.date.to-iso-string":147,"./modules/es6.date.to-json":148,"./modules/es6.date.to-primitive":149,"./modules/es6.date.to-string":150,"./modules/es6.function.bind":151,"./modules/es6.function.has-instance":152,"./modules/es6.function.name":153,"./modules/es6.map":154,"./modules/es6.math.acosh":155,"./modules/es6.math.asinh":156,"./modules/es6.math.atanh":157,"./modules/es6.math.cbrt":158,"./modules/es6.math.clz32":159,"./modules/es6.math.cosh":160,"./modules/es6.math.expm1":161,"./modules/es6.math.fround":162,"./modules/es6.math.hypot":163,"./modules/es6.math.imul":164,"./modules/es6.math.log10":165,"./modules/es6.math.log1p":166,"./modules/es6.math.log2":167,"./modules/es6.math.sign":168,"./modules/es6.math.sinh":169,"./modules/es6.math.tanh":170,"./modules/es6.math.trunc":171,"./modules/es6.number.constructor":172,"./modules/es6.number.epsilon":173,"./modules/es6.number.is-finite":174,"./modules/es6.number.is-integer":175,"./modules/es6.number.is-nan":176,"./modules/es6.number.is-safe-integer":177,"./modules/es6.number.max-safe-integer":178,"./modules/es6.number.min-safe-integer":179,"./modules/es6.number.parse-float":180,"./modules/es6.number.parse-int":181,"./modules/es6.number.to-fixed":182,"./modules/es6.number.to-precision":183,"./modules/es6.object.assign":184,"./modules/es6.object.create":185,"./modules/es6.object.define-properties":186,"./modules/es6.object.define-property":187,"./modules/es6.object.freeze":188,"./modules/es6.object.get-own-property-descriptor":189,"./modules/es6.object.get-own-property-names":190,"./modules/es6.object.get-prototype-of":191,"./modules/es6.object.is":195,"./modules/es6.object.is-extensible":192,"./modules/es6.object.is-frozen":193,"./modules/es6.object.is-sealed":194,"./modules/es6.object.keys":196,"./modules/es6.object.prevent-extensions":197,"./modules/es6.object.seal":198,"./modules/es6.object.set-prototype-of":199,"./modules/es6.object.to-string":200,"./modules/es6.parse-float":201,"./modules/es6.parse-int":202,"./modules/es6.promise":203,"./modules/es6.reflect.apply":204,"./modules/es6.reflect.construct":205,"./modules/es6.reflect.define-property":206,"./modules/es6.reflect.delete-property":207,"./modules/es6.reflect.enumerate":208,"./modules/es6.reflect.get":211,"./modules/es6.reflect.get-own-property-descriptor":209,"./modules/es6.reflect.get-prototype-of":210,"./modules/es6.reflect.has":212,"./modules/es6.reflect.is-extensible":213,"./modules/es6.reflect.own-keys":214,"./modules/es6.reflect.prevent-extensions":215,"./modules/es6.reflect.set":217,"./modules/es6.reflect.set-prototype-of":216,"./modules/es6.regexp.constructor":218,"./modules/es6.regexp.flags":219,"./modules/es6.regexp.match":220,"./modules/es6.regexp.replace":221,"./modules/es6.regexp.search":222,"./modules/es6.regexp.split":223,"./modules/es6.regexp.to-string":224,"./modules/es6.set":225,"./modules/es6.string.anchor":226,"./modules/es6.string.big":227,"./modules/es6.string.blink":228,"./modules/es6.string.bold":229,"./modules/es6.string.code-point-at":230,"./modules/es6.string.ends-with":231,"./modules/es6.string.fixed":232,"./modules/es6.string.fontcolor":233,"./modules/es6.string.fontsize":234,"./modules/es6.string.from-code-point":235,"./modules/es6.string.includes":236,"./modules/es6.string.italics":237,"./modules/es6.string.iterator":238,"./modules/es6.string.link":239,"./modules/es6.string.raw":240,"./modules/es6.string.repeat":241,"./modules/es6.string.small":242,"./modules/es6.string.starts-with":243,"./modules/es6.string.strike":244,"./modules/es6.string.sub":245,"./modules/es6.string.sup":246,"./modules/es6.string.trim":247,"./modules/es6.symbol":248,"./modules/es6.typed.array-buffer":249,"./modules/es6.typed.data-view":250,"./modules/es6.typed.float32-array":251,"./modules/es6.typed.float64-array":252,"./modules/es6.typed.int16-array":253,"./modules/es6.typed.int32-array":254,"./modules/es6.typed.int8-array":255,"./modules/es6.typed.uint16-array":256,"./modules/es6.typed.uint32-array":257,"./modules/es6.typed.uint8-array":258,"./modules/es6.typed.uint8-clamped-array":259,"./modules/es6.weak-map":260,"./modules/es6.weak-set":261,"./modules/es7.array.includes":262,"./modules/es7.asap":263,"./modules/es7.error.is-error":264,"./modules/es7.map.to-json":265,"./modules/es7.math.iaddh":266,"./modules/es7.math.imulh":267,"./modules/es7.math.isubh":268,"./modules/es7.math.umulh":269,"./modules/es7.object.define-getter":270,"./modules/es7.object.define-setter":271,"./modules/es7.object.entries":272,"./modules/es7.object.get-own-property-descriptors":273,"./modules/es7.object.lookup-getter":274,"./modules/es7.object.lookup-setter":275,"./modules/es7.object.values":276,"./modules/es7.observable":277,"./modules/es7.reflect.define-metadata":278,"./modules/es7.reflect.delete-metadata":279,"./modules/es7.reflect.get-metadata":281,"./modules/es7.reflect.get-metadata-keys":280,"./modules/es7.reflect.get-own-metadata":283,"./modules/es7.reflect.get-own-metadata-keys":282,"./modules/es7.reflect.has-metadata":284,"./modules/es7.reflect.has-own-metadata":285,"./modules/es7.reflect.metadata":286,"./modules/es7.set.to-json":287,"./modules/es7.string.at":288,"./modules/es7.string.match-all":289,"./modules/es7.string.pad-end":290,"./modules/es7.string.pad-start":291,"./modules/es7.string.trim-left":292,"./modules/es7.string.trim-right":293,"./modules/es7.symbol.async-iterator":294,"./modules/es7.symbol.observable":295,"./modules/es7.system.global":296,"./modules/web.dom.iterable":297,"./modules/web.immediate":298,"./modules/web.timers":299}],301:[function(a,b,c){"use strict";var d=a("./emptyFunction"),e={listen:function(a,b,c){return a.addEventListener?(a.addEventListener(b,c,!1),{remove:function(){a.removeEventListener(b,c,!1)}}):a.attachEvent?(a.attachEvent("on"+b,c),{remove:function(){a.detachEvent("on"+b,c)}}):void 0},capture:function(a,b,c){return a.addEventListener?(a.addEventListener(b,c,!0),{remove:function(){a.removeEventListener(b,c,!0)}}):{remove:d}},registerDefault:function(){}};b.exports=e},{"./emptyFunction":308}],302:[function(a,b,c){"use strict";var d=!("undefined"==typeof window||!window.document||!window.document.createElement),e={canUseDOM:d,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:d&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:d&&!!window.screen,isInWorker:!d};b.exports=e},{}],303:[function(a,b,c){"use strict";function d(a){return a.replace(e,function(a,b){return b.toUpperCase()})}var e=/-(.)/g;b.exports=d},{}],304:[function(a,b,c){"use strict";function d(a){return e(a.replace(f,"ms-"))}var e=a("./camelize"),f=/^-ms-/;b.exports=d},{"./camelize":303}],305:[function(a,b,c){"use strict";function d(a,b){return!(!a||!b)&&(a===b||!e(a)&&(e(b)?d(a,b.parentNode):"contains"in a?a.contains(b):!!a.compareDocumentPosition&&!!(16&a.compareDocumentPosition(b))))}var e=a("./isTextNode");b.exports=d},{"./isTextNode":318}],306:[function(a,b,c){"use strict";function d(a){var b=a.length;if(Array.isArray(a)||"object"!=typeof a&&"function"!=typeof a?g(!1):void 0,"number"!=typeof b?g(!1):void 0,0===b||b-1 in a?void 0:g(!1),"function"==typeof a.callee?g(!1):void 0,a.hasOwnProperty)try{return Array.prototype.slice.call(a)}catch(a){}for(var c=Array(b),d=0;d":g.innerHTML="<"+a+">",h[a]=!g.firstChild),h[a]?m[a]:null}var e=a("./ExecutionEnvironment"),f=a("./invariant"),g=e.canUseDOM?document.createElement("div"):null,h={},i=[1,'"],j=[1,"","
    "],k=[3,"","
    "],l=[1,'',""],m={"*":[1,"?
    ","
    "],area:[1,"",""],col:[2,"","
    "],legend:[1,"
    ","
    "],param:[1,"",""],tr:[2,"","
    "],optgroup:i,option:i,caption:j,colgroup:j,tbody:j,tfoot:j,thead:j,td:k,th:k},n=["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","text","tspan"]; +n.forEach(function(a){m[a]=l,h[a]=!0}),b.exports=d},{"./ExecutionEnvironment":302,"./invariant":316}],313:[function(a,b,c){"use strict";function d(a){return a===window?{x:window.pageXOffset||document.documentElement.scrollLeft,y:window.pageYOffset||document.documentElement.scrollTop}:{x:a.scrollLeft,y:a.scrollTop}}b.exports=d},{}],314:[function(a,b,c){"use strict";function d(a){return a.replace(e,"-$1").toLowerCase()}var e=/([A-Z])/g;b.exports=d},{}],315:[function(a,b,c){"use strict";function d(a){return e(a).replace(f,"-ms-")}var e=a("./hyphenate"),f=/^ms-/;b.exports=d},{"./hyphenate":314}],316:[function(a,b,c){"use strict";function d(a,b,c,d,e,f,g,h){if(!a){var i;if(void 0===b)i=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var j=[c,d,e,f,g,h],k=0;i=new Error(b.replace(/%s/g,function(){return j[k++]})),i.name="Invariant Violation"}throw i.framesToPop=1,i}}b.exports=d},{}],317:[function(a,b,c){"use strict";function d(a){return!(!a||!("function"==typeof Node?a instanceof Node:"object"==typeof a&&"number"==typeof a.nodeType&&"string"==typeof a.nodeName))}b.exports=d},{}],318:[function(a,b,c){"use strict";function d(a){return e(a)&&3==a.nodeType}var e=a("./isNode");b.exports=d},{"./isNode":317}],319:[function(a,b,c){"use strict";var d=function(a){var b;for(b in a)if(a.hasOwnProperty(b))return b;return null};b.exports=d},{}],320:[function(a,b,c){"use strict";function d(a){var b={};return function(c){return b.hasOwnProperty(c)||(b[c]=a.call(this,c)),b[c]}}b.exports=d},{}],321:[function(a,b,c){"use strict";var d,e=a("./ExecutionEnvironment");e.canUseDOM&&(d=window.performance||window.msPerformance||window.webkitPerformance),b.exports=d||{}},{"./ExecutionEnvironment":302}],322:[function(a,b,c){"use strict";var d,e=a("./performance");d=e.now?function(){return e.now()}:function(){return Date.now()},b.exports=d},{"./performance":321}],323:[function(a,b,c){"use strict";function d(a,b){return a===b?0!==a||0!==b||1/a===1/b:a!==a&&b!==b}function e(a,b){if(d(a,b))return!0;if("object"!=typeof a||null===a||"object"!=typeof b||null===b)return!1;var c=Object.keys(a),e=Object.keys(b);if(c.length!==e.length)return!1;for(var g=0;g=b._browserInfo.version}).reduce(function(a,b){return a[b]=!0,a},{}),this._hasPropsRequiringPrefix=Object.keys(this._requiresPrefix).length>0):this._usePrefixAllFallback=!0}return g(a,[{key:"prefix",value:function(a){var b=this;return this._usePrefixAllFallback?(0,i.default)(a):this._hasPropsRequiringPrefix?(Object.keys(a).forEach(function(c){var d=a[c];d instanceof Object&&!Array.isArray(d)?a[c]=b.prefix(d):b._requiresPrefix[c]&&(a[b.jsPrefix+(0,o.default)(c)]=d,b._keepUnprefixed||delete a[c])}),Object.keys(a).forEach(function(c){[].concat(a[c]).forEach(function(d){N.forEach(function(e){f(a,e({property:c,value:d,styles:a,browserInfo:b._browserInfo,prefix:{js:b.jsPrefix,css:b.cssPrefix,keyframes:b.prefixedKeyframes},keepUnprefixed:b._keepUnprefixed,requiresPrefix:b._requiresPrefix}),d,b._keepUnprefixed)})})}),(0,q.default)(a)):a}}],[{key:"prefixAll",value:function(a){return(0,i.default)(a)}}]),a}();c.default=O,b.exports=c.default},{"./plugins/calc":327,"./plugins/flex":328,"./plugins/flexboxIE":329,"./plugins/flexboxOld":330,"./plugins/grabCursor":331,"./plugins/gradient":332,"./plugins/position":333,"./plugins/sizing":334,"./plugins/transition":335,"./plugins/zoomCursor":336,"./prefixProps":337,"./static/prefixAll":347,"./utils/capitalizeString":349,"./utils/getBrowserInformation":350,"./utils/getPrefixedKeyframes":351,"./utils/sortPrefixedStyle":356}],327:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function f(a){var b=a.property,c=a.value,d=a.browserInfo,f=d.browser,g=d.version,i=a.prefix.css,j=a.keepUnprefixed;if("string"==typeof c&&c.indexOf("calc(")>-1&&("firefox"===f&&g<15||"chrome"===f&&g<25||"safari"===f&&g<6.1||"ios_saf"===f&&g<7))return e({},b,(0,h.default)(c.replace(/calc\(/g,i+"calc("),c,j))}Object.defineProperty(c,"__esModule",{value:!0}),c.default=f;var g=a("../utils/getPrefixedValue"),h=d(g);b.exports=c.default},{"../utils/getPrefixedValue":352}],328:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){var b=a.property,c=a.value,d=a.browserInfo,e=d.browser,f=d.version,i=a.prefix.css,j=a.keepUnprefixed;if("display"===b&&h[c]&&("chrome"===e&&f<29&&f>20||("safari"===e||"ios_saf"===e)&&f<9&&f>6||"opera"===e&&(15==f||16==f)))return{display:(0,g.default)(i+c,c,j)}}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f=a("../utils/getPrefixedValue"),g=d(f),h={flex:!0,"inline-flex":!0};b.exports=c.default},{"../utils/getPrefixedValue":352}],329:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function f(a){var b=a.property,c=a.value,d=a.styles,f=a.browserInfo,g=f.browser,k=f.version,l=a.prefix.css,m=a.keepUnprefixed;if((j[b]||"display"===b&&"string"==typeof c&&c.indexOf("flex")>-1)&&("ie_mob"===g||"ie"===g)&&10==k){if(m||Array.isArray(d[b])||delete d[b],"display"===b&&i[c])return{display:(0,h.default)(l+i[c],c,m)};if(j[b])return e({},j[b],i[c]||c)}}Object.defineProperty(c,"__esModule",{value:!0}),c.default=f;var g=a("../utils/getPrefixedValue"),h=d(g),i={"space-around":"distribute","space-between":"justify","flex-start":"start","flex-end":"end",flex:"flexbox","inline-flex":"inline-flexbox"},j={alignContent:"msFlexLinePack",alignSelf:"msFlexItemAlign",alignItems:"msFlexAlign",justifyContent:"msFlexPack",order:"msFlexOrder",flexGrow:"msFlexPositive",flexShrink:"msFlexNegative",flexBasis:"msPreferredSize"};b.exports=c.default},{"../utils/getPrefixedValue":352}],330:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function f(a){var b=a.property,c=a.value,d=a.styles,f=a.browserInfo,g=f.browser,k=f.version,m=a.prefix.css,n=a.keepUnprefixed;if((l.indexOf(b)>-1||"display"===b&&"string"==typeof c&&c.indexOf("flex")>-1)&&("firefox"===g&&k<22||"chrome"===g&&k<21||("safari"===g||"ios_saf"===g)&&k<=6.1||"android"===g&&k<4.4||"and_uc"===g)){if(n||Array.isArray(d[b])||delete d[b],"flexDirection"===b&&"string"==typeof c)return{WebkitBoxOrient:c.indexOf("column")>-1?"vertical":"horizontal",WebkitBoxDirection:c.indexOf("reverse")>-1?"reverse":"normal"};if("display"===b&&i[c])return{display:(0,h.default)(m+i[c],c,n)};if(j[b])return e({},j[b],i[c]||c)}}Object.defineProperty(c,"__esModule",{value:!0}),c.default=f;var g=a("../utils/getPrefixedValue"),h=d(g),i={"space-around":"justify","space-between":"justify","flex-start":"start","flex-end":"end","wrap-reverse":"multiple",wrap:"multiple",flex:"box","inline-flex":"inline-box"},j={alignItems:"WebkitBoxAlign",justifyContent:"WebkitBoxPack",flexWrap:"WebkitBoxLines"},k=["alignContent","alignSelf","order","flexGrow","flexShrink","flexBasis","flexDirection"],l=Object.keys(j).concat(k);b.exports=c.default},{"../utils/getPrefixedValue":352}],331:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){var b=a.property,c=a.value,d=a.browserInfo.browser,e=a.prefix.css,f=a.keepUnprefixed;if("cursor"===b&&h[c]&&("firefox"===d||"chrome"===d||"safari"===d||"opera"===d))return{cursor:(0,g.default)(e+c,c,f)}}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f=a("../utils/getPrefixedValue"),g=d(f),h={grab:!0,grabbing:!0};b.exports=c.default},{"../utils/getPrefixedValue":352}],332:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function f(a){var b=a.property,c=a.value,d=a.browserInfo,f=d.browser,g=d.version,j=a.prefix.css,k=a.keepUnprefixed;if("string"==typeof c&&null!==c.match(i)&&("firefox"===f&&g<16||"chrome"===f&&g<26||("safari"===f||"ios_saf"===f)&&g<7||("opera"===f||"op_mini"===f)&&g<12.1||"android"===f&&g<4.4||"and_uc"===f))return e({},b,(0,h.default)(j+c,c,k))}Object.defineProperty(c,"__esModule",{value:!0}),c.default=f;var g=a("../utils/getPrefixedValue"),h=d(g),i=/linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/;b.exports=c.default},{"../utils/getPrefixedValue":352}],333:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function f(a){var b=a.property,c=a.value,d=a.browserInfo.browser,f=a.prefix.css,g=a.keepUnprefixed;if("position"===b&&"sticky"===c&&("safari"===d||"ios_saf"===d))return e({},b,(0,h.default)(f+c,c,g))}Object.defineProperty(c,"__esModule",{value:!0}),c.default=f;var g=a("../utils/getPrefixedValue"),h=d(g);b.exports=c.default},{"../utils/getPrefixedValue":352}],334:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function f(a){var b=a.property,c=a.value,d=a.prefix.css,f=a.keepUnprefixed;if(i[b]&&j[c])return e({},b,(0,h.default)(d+c,c,f))}Object.defineProperty(c,"__esModule",{value:!0}),c.default=f;var g=a("../utils/getPrefixedValue"),h=d(g),i={maxHeight:!0,maxWidth:!0,width:!0,height:!0,columnWidth:!0,minWidth:!0,minHeight:!0},j={"min-content":!0,"max-content":!0,"fill-available":!0,"fit-content":!0,"contain-floats":!0};b.exports=c.default},{"../utils/getPrefixedValue":352}],335:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function f(a){var b=a.property,c=a.value,d=a.prefix.css,f=a.requiresPrefix,h=a.keepUnprefixed,j=(0,k.default)(b);if("string"==typeof c&&l[j]){var m=function(){var a=Object.keys(f).map(function(a){return(0,i.default)(a)}),g=c.split(/,(?![^()]*(?:\([^()]*\))?\))/g);return a.forEach(function(a){g.forEach(function(b,c){b.indexOf(a)>-1&&"order"!==a&&(g[c]=b.replace(a,d+a)+(h?","+b:""))})}),{v:e({},b,g.join(","))}}();if("object"===("undefined"==typeof m?"undefined":g(m)))return m.v}}Object.defineProperty(c,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a};c.default=f;var h=a("hyphenate-style-name"),i=d(h),j=a("../utils/unprefixProperty"),k=d(j),l={transition:!0,transitionProperty:!0};b.exports=c.default},{"../utils/unprefixProperty":357,"hyphenate-style-name":325}],336:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){var b=a.property,c=a.value,d=a.browserInfo,e=d.browser,f=d.version,i=a.prefix.css,j=a.keepUnprefixed;if("cursor"===b&&h[c]&&("firefox"===e&&f<24||"chrome"===e&&f<37||"safari"===e&&f<9||"opera"===e&&f<24))return{cursor:(0,g.default)(i+c,c,j)}}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f=a("../utils/getPrefixedValue"),g=d(f),h={"zoom-in":!0,"zoom-out":!0};b.exports=c.default},{"../utils/getPrefixedValue":352}],337:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0}),c.default={chrome:{transform:35,transformOrigin:35,transformOriginX:35,transformOriginY:35,backfaceVisibility:35,perspective:35,perspectiveOrigin:35,transformStyle:35,transformOriginZ:35,animation:42,animationDelay:42,animationDirection:42,animationFillMode:42,animationDuration:42,animationIterationCount:42,animationName:42,animationPlayState:42,animationTimingFunction:42,appearance:55,userSelect:55,fontKerning:32,textEmphasisPosition:55,textEmphasis:55,textEmphasisStyle:55,textEmphasisColor:55,boxDecorationBreak:55,clipPath:55,maskImage:55,maskMode:55,maskRepeat:55,maskPosition:55,maskClip:55,maskOrigin:55,maskSize:55,maskComposite:55,mask:55,maskBorderSource:55,maskBorderMode:55,maskBorderSlice:55,maskBorderWidth:55,maskBorderOutset:55,maskBorderRepeat:55,maskBorder:55,maskType:55,textDecorationStyle:55,textDecorationSkip:55,textDecorationLine:55,textDecorationColor:55,filter:52,fontFeatureSettings:47,breakAfter:49,breakBefore:49,breakInside:49,columnCount:49,columnFill:49,columnGap:49,columnRule:49,columnRuleColor:49,columnRuleStyle:49,columnRuleWidth:49,columns:49,columnSpan:49,columnWidth:49},safari:{flex:8,flexBasis:8,flexDirection:8,flexGrow:8,flexFlow:8,flexShrink:8,flexWrap:8,alignContent:8,alignItems:8,alignSelf:8,justifyContent:8,order:8,transition:6,transitionDelay:6,transitionDuration:6,transitionProperty:6,transitionTimingFunction:6,transform:8,transformOrigin:8,transformOriginX:8,transformOriginY:8,backfaceVisibility:8,perspective:8,perspectiveOrigin:8,transformStyle:8,transformOriginZ:8,animation:8,animationDelay:8,animationDirection:8,animationFillMode:8,animationDuration:8,animationIterationCount:8,animationName:8,animationPlayState:8,animationTimingFunction:8,appearance:10,userSelect:10,backdropFilter:10,fontKerning:9,scrollSnapType:10,scrollSnapPointsX:10,scrollSnapPointsY:10,scrollSnapDestination:10,scrollSnapCoordinate:10,textEmphasisPosition:7,textEmphasis:7,textEmphasisStyle:7,textEmphasisColor:7,boxDecorationBreak:10,clipPath:10,maskImage:10,maskMode:10,maskRepeat:10,maskPosition:10,maskClip:10,maskOrigin:10,maskSize:10,maskComposite:10,mask:10,maskBorderSource:10,maskBorderMode:10,maskBorderSlice:10,maskBorderWidth:10,maskBorderOutset:10,maskBorderRepeat:10,maskBorder:10,maskType:10,textDecorationStyle:10,textDecorationSkip:10,textDecorationLine:10,textDecorationColor:10,shapeImageThreshold:10,shapeImageMargin:10,shapeImageOutside:10,filter:9,hyphens:10,flowInto:10,flowFrom:10,breakBefore:8,breakAfter:8,breakInside:8,regionFragment:10,columnCount:8,columnFill:8,columnGap:8,columnRule:8,columnRuleColor:8,columnRuleStyle:8,columnRuleWidth:8,columns:8,columnSpan:8,columnWidth:8},firefox:{appearance:51,userSelect:51,boxSizing:28,textAlignLast:48,textDecorationStyle:35,textDecorationSkip:35,textDecorationLine:35,textDecorationColor:35,tabSize:51,hyphens:42,fontFeatureSettings:33,breakAfter:51,breakBefore:51,breakInside:51,columnCount:51,columnFill:51,columnGap:51,columnRule:51,columnRuleColor:51,columnRuleStyle:51,columnRuleWidth:51,columns:51,columnSpan:51,columnWidth:51},opera:{flex:16,flexBasis:16,flexDirection:16,flexGrow:16,flexFlow:16,flexShrink:16,flexWrap:16,alignContent:16,alignItems:16,alignSelf:16,justifyContent:16,order:16,transform:22,transformOrigin:22,transformOriginX:22,transformOriginY:22,backfaceVisibility:22,perspective:22,perspectiveOrigin:22,transformStyle:22,transformOriginZ:22,animation:29,animationDelay:29,animationDirection:29,animationFillMode:29,animationDuration:29,animationIterationCount:29,animationName:29,animationPlayState:29,animationTimingFunction:29,appearance:41,userSelect:41,fontKerning:19,textEmphasisPosition:41,textEmphasis:41,textEmphasisStyle:41,textEmphasisColor:41,boxDecorationBreak:41,clipPath:41,maskImage:41,maskMode:41,maskRepeat:41,maskPosition:41,maskClip:41,maskOrigin:41,maskSize:41,maskComposite:41,mask:41,maskBorderSource:41,maskBorderMode:41,maskBorderSlice:41,maskBorderWidth:41,maskBorderOutset:41,maskBorderRepeat:41,maskBorder:41,maskType:41,textDecorationStyle:41,textDecorationSkip:41,textDecorationLine:41,textDecorationColor:41,filter:39,fontFeatureSettings:34,breakAfter:36,breakBefore:36,breakInside:36,columnCount:36,columnFill:36,columnGap:36,columnRule:36,columnRuleColor:36,columnRuleStyle:36,columnRuleWidth:36,columns:36,columnSpan:36,columnWidth:36},ie:{flex:10,flexDirection:10,flexFlow:10,flexWrap:10,transform:9,transformOrigin:9,transformOriginX:9,transformOriginY:9,userSelect:11,wrapFlow:11,wrapThrough:11,wrapMargin:11,scrollSnapType:11,scrollSnapPointsX:11,scrollSnapPointsY:11,scrollSnapDestination:11,scrollSnapCoordinate:11,touchAction:10,hyphens:11,flowInto:11,flowFrom:11,breakBefore:11,breakAfter:11,breakInside:11,regionFragment:11,gridTemplateColumns:11,gridTemplateRows:11,gridTemplateAreas:11,gridTemplate:11,gridAutoColumns:11,gridAutoRows:11,gridAutoFlow:11,grid:11,gridRowStart:11,gridColumnStart:11,gridRowEnd:11,gridRow:11,gridColumn:11,gridColumnEnd:11,gridColumnGap:11,gridRowGap:11,gridArea:11,gridGap:11,textSizeAdjust:11},edge:{userSelect:14,wrapFlow:14,wrapThrough:14,wrapMargin:14,scrollSnapType:14,scrollSnapPointsX:14,scrollSnapPointsY:14,scrollSnapDestination:14,scrollSnapCoordinate:14,hyphens:14,flowInto:14,flowFrom:14,breakBefore:14,breakAfter:14,breakInside:14,regionFragment:14,gridTemplateColumns:14,gridTemplateRows:14,gridTemplateAreas:14,gridTemplate:14,gridAutoColumns:14,gridAutoRows:14,gridAutoFlow:14,grid:14,gridRowStart:14,gridColumnStart:14,gridRowEnd:14,gridRow:14,gridColumn:14,gridColumnEnd:14,gridColumnGap:14,gridRowGap:14,gridArea:14,gridGap:14},ios_saf:{flex:8.1,flexBasis:8.1,flexDirection:8.1,flexGrow:8.1,flexFlow:8.1,flexShrink:8.1,flexWrap:8.1,alignContent:8.1,alignItems:8.1,alignSelf:8.1,justifyContent:8.1,order:8.1,transition:6,transitionDelay:6,transitionDuration:6,transitionProperty:6,transitionTimingFunction:6,transform:8.1,transformOrigin:8.1,transformOriginX:8.1,transformOriginY:8.1,backfaceVisibility:8.1,perspective:8.1,perspectiveOrigin:8.1,transformStyle:8.1,transformOriginZ:8.1,animation:8.1,animationDelay:8.1,animationDirection:8.1,animationFillMode:8.1,animationDuration:8.1,animationIterationCount:8.1,animationName:8.1,animationPlayState:8.1,animationTimingFunction:8.1,appearance:9.3,userSelect:9.3,backdropFilter:9.3,fontKerning:9.3,scrollSnapType:9.3,scrollSnapPointsX:9.3,scrollSnapPointsY:9.3,scrollSnapDestination:9.3,scrollSnapCoordinate:9.3,boxDecorationBreak:9.3,clipPath:9.3,maskImage:9.3,maskMode:9.3,maskRepeat:9.3,maskPosition:9.3,maskClip:9.3,maskOrigin:9.3,maskSize:9.3,maskComposite:9.3,mask:9.3,maskBorderSource:9.3,maskBorderMode:9.3,maskBorderSlice:9.3,maskBorderWidth:9.3,maskBorderOutset:9.3,maskBorderRepeat:9.3,maskBorder:9.3,maskType:9.3,textSizeAdjust:9.3,textDecorationStyle:9.3,textDecorationSkip:9.3,textDecorationLine:9.3,textDecorationColor:9.3,shapeImageThreshold:9.3,shapeImageMargin:9.3,shapeImageOutside:9.3,filter:9,hyphens:9.3,flowInto:9.3,flowFrom:9.3,breakBefore:8.1,breakAfter:8.1,breakInside:8.1,regionFragment:9.3,columnCount:8.1,columnFill:8.1,columnGap:8.1,columnRule:8.1,columnRuleColor:8.1,columnRuleStyle:8.1,columnRuleWidth:8.1,columns:8.1,columnSpan:8.1,columnWidth:8.1},android:{flex:4.2,flexBasis:4.2,flexDirection:4.2,flexGrow:4.2,flexFlow:4.2,flexShrink:4.2,flexWrap:4.2,alignContent:4.2,alignItems:4.2,alignSelf:4.2,justifyContent:4.2,order:4.2,transition:4.2,transitionDelay:4.2,transitionDuration:4.2,transitionProperty:4.2,transitionTimingFunction:4.2,transform:4.4,transformOrigin:4.4,transformOriginX:4.4,transformOriginY:4.4,backfaceVisibility:4.4,perspective:4.4,perspectiveOrigin:4.4,transformStyle:4.4,transformOriginZ:4.4,animation:4.4,animationDelay:4.4,animationDirection:4.4,animationFillMode:4.4,animationDuration:4.4,animationIterationCount:4.4,animationName:4.4,animationPlayState:4.4,animationTimingFunction:4.4,appearance:51,userSelect:51,fontKerning:4.4,textEmphasisPosition:51,textEmphasis:51,textEmphasisStyle:51,textEmphasisColor:51,boxDecorationBreak:51,clipPath:51,maskImage:51,maskMode:51,maskRepeat:51,maskPosition:51,maskClip:51,maskOrigin:51,maskSize:51,maskComposite:51,mask:51,maskBorderSource:51,maskBorderMode:51,maskBorderSlice:51,maskBorderWidth:51,maskBorderOutset:51,maskBorderRepeat:51,maskBorder:51,maskType:51,filter:51,fontFeatureSettings:4.4,breakAfter:51,breakBefore:51,breakInside:51,columnCount:51,columnFill:51,columnGap:51,columnRule:51,columnRuleColor:51,columnRuleStyle:51,columnRuleWidth:51,columns:51,columnSpan:51,columnWidth:51},and_chr:{appearance:51,userSelect:51,textEmphasisPosition:51,textEmphasis:51,textEmphasisStyle:51,textEmphasisColor:51,boxDecorationBreak:51,clipPath:51,maskImage:51,maskMode:51,maskRepeat:51,maskPosition:51,maskClip:51,maskOrigin:51,maskSize:51,maskComposite:51,mask:51,maskBorderSource:51,maskBorderMode:51,maskBorderSlice:51,maskBorderWidth:51,maskBorderOutset:51,maskBorderRepeat:51,maskBorder:51,maskType:51,textDecorationStyle:51,textDecorationSkip:51,textDecorationLine:51,textDecorationColor:51,filter:51},and_uc:{flex:9.9,flexBasis:9.9,flexDirection:9.9,flexGrow:9.9,flexFlow:9.9,flexShrink:9.9,flexWrap:9.9,alignContent:9.9,alignItems:9.9,alignSelf:9.9,justifyContent:9.9,order:9.9,transition:9.9,transitionDelay:9.9,transitionDuration:9.9,transitionProperty:9.9,transitionTimingFunction:9.9,transform:9.9,transformOrigin:9.9,transformOriginX:9.9,transformOriginY:9.9,backfaceVisibility:9.9,perspective:9.9,perspectiveOrigin:9.9,transformStyle:9.9,transformOriginZ:9.9,animation:9.9,animationDelay:9.9,animationDirection:9.9,animationFillMode:9.9,animationDuration:9.9,animationIterationCount:9.9,animationName:9.9,animationPlayState:9.9,animationTimingFunction:9.9,appearance:9.9,userSelect:9.9,fontKerning:9.9,textEmphasisPosition:9.9,textEmphasis:9.9,textEmphasisStyle:9.9,textEmphasisColor:9.9,maskImage:9.9,maskMode:9.9,maskRepeat:9.9,maskPosition:9.9,maskClip:9.9,maskOrigin:9.9,maskSize:9.9,maskComposite:9.9,mask:9.9,maskBorderSource:9.9,maskBorderMode:9.9,maskBorderSlice:9.9,maskBorderWidth:9.9,maskBorderOutset:9.9,maskBorderRepeat:9.9,maskBorder:9.9,maskType:9.9,textSizeAdjust:9.9,filter:9.9,hyphens:9.9,flowInto:9.9,flowFrom:9.9,breakBefore:9.9,breakAfter:9.9,breakInside:9.9,regionFragment:9.9,fontFeatureSettings:9.9,columnCount:9.9,columnFill:9.9,columnGap:9.9,columnRule:9.9,columnRuleColor:9.9,columnRuleStyle:9.9,columnRuleWidth:9.9,columns:9.9,columnSpan:9.9,columnWidth:9.9},op_mini:{}},b.exports=c.default},{}],338:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if("string"==typeof b&&!(0,i.default)(b)&&b.indexOf("calc(")>-1)return(0,g.default)(a,b,function(a,b){return b.replace(/calc\(/g,a+"calc(")})}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f=a("../../utils/joinPrefixedValue"),g=d(f),h=a("../../utils/isPrefixedValue"),i=d(h);b.exports=c.default},{"../../utils/isPrefixedValue":354,"../../utils/joinPrefixedValue":355}],339:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if("cursor"===a&&h[b])return(0,g.default)(a,b)}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f=a("../../utils/joinPrefixedValue"),g=d(f),h={"zoom-in":!0,"zoom-out":!0,grab:!0,grabbing:!0};b.exports=c.default},{"../../utils/joinPrefixedValue":355}],340:[function(a,b,c){"use strict";function d(a,b){if("display"===a&&e[b])return{display:["-webkit-box","-moz-box","-ms-"+b+"box","-webkit-"+b,b]}}Object.defineProperty(c,"__esModule",{value:!0}),c.default=d;var e={flex:!0,"inline-flex":!0};b.exports=c.default},{}],341:[function(a,b,c){"use strict";function d(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function e(a,b){if(g[a])return d({},g[a],f[b]||b)}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f={"space-around":"distribute","space-between":"justify","flex-start":"start","flex-end":"end"},g={alignContent:"msFlexLinePack",alignSelf:"msFlexItemAlign",alignItems:"msFlexAlign",justifyContent:"msFlexPack",order:"msFlexOrder",flexGrow:"msFlexPositive",flexShrink:"msFlexNegative",flexBasis:"msPreferredSize"};b.exports=c.default},{}],342:[function(a,b,c){"use strict";function d(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function e(a,b){return"flexDirection"===a&&"string"==typeof b?{WebkitBoxOrient:b.indexOf("column")>-1?"vertical":"horizontal",WebkitBoxDirection:b.indexOf("reverse")>-1?"reverse":"normal"}:g[a]?d({},g[a],f[b]||b):void 0}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f={"space-around":"justify","space-between":"justify","flex-start":"start","flex-end":"end","wrap-reverse":"multiple",wrap:"multiple"},g={alignItems:"WebkitBoxAlign",justifyContent:"WebkitBoxPack",flexWrap:"WebkitBoxLines"};b.exports=c.default},{}],343:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if("string"==typeof b&&!(0,i.default)(b)&&null!==b.match(j))return(0,g.default)(a,b)}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f=a("../../utils/joinPrefixedValue"),g=d(f),h=a("../../utils/isPrefixedValue"),i=d(h),j=/linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/;b.exports=c.default},{"../../utils/isPrefixedValue":354,"../../utils/joinPrefixedValue":355}],344:[function(a,b,c){"use strict";function d(a,b){if("position"===a&&"sticky"===b)return{position:["-webkit-sticky","sticky"]}}Object.defineProperty(c,"__esModule",{value:!0}),c.default=d,b.exports=c.default},{}],345:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(h[a]&&i[b])return(0,g.default)(a,b)}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f=a("../../utils/joinPrefixedValue"),g=d(f),h={maxHeight:!0,maxWidth:!0,width:!0,height:!0,columnWidth:!0,minWidth:!0,minHeight:!0},i={"min-content":!0,"max-content":!0,"fill-available":!0,"fit-content":!0,"contain-floats":!0};b.exports=c.default},{"../../utils/joinPrefixedValue":355}],346:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function f(a,b){if("string"==typeof b&&p[a]){var c,d=g(b),f=d.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function(a){return null===a.match(/-moz-|-ms-/)}).join(",");return a.indexOf("Webkit")>-1?e({},a,f):(c={},e(c,"Webkit"+(0,k.default)(a),f),e(c,a,d),c)}}function g(a){if((0,m.default)(a))return a;var b=a.split(/,(?![^()]*(?:\([^()]*\))?\))/g);return b.forEach(function(a,c){b[c]=Object.keys(o.default).reduce(function(b,c){var d="-"+c.toLowerCase()+"-";return Object.keys(o.default[c]).forEach(function(c){var e=(0,i.default)(c);a.indexOf(e)>-1&&"order"!==e&&(b=a.replace(e,d+e)+","+b)}),b},a)}),b.join(",")}Object.defineProperty(c,"__esModule",{value:!0}),c.default=f;var h=a("hyphenate-style-name"),i=d(h),j=a("../../utils/capitalizeString"),k=d(j),l=a("../../utils/isPrefixedValue"),m=d(l),n=a("../prefixProps"),o=d(n),p={transition:!0,transitionProperty:!0,WebkitTransition:!0,WebkitTransitionProperty:!0};b.exports=c.default},{"../../utils/capitalizeString":349,"../../utils/isPrefixedValue":354,"../prefixProps":348,"hyphenate-style-name":325}],347:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){return Object.keys(a).forEach(function(b){var c=a[b];c instanceof Object&&!Array.isArray(c)?a[b]=e(c):Object.keys(h.default).forEach(function(d){var e=h.default[d];e[b]&&(a[d+(0,j.default)(b)]=c)})}),Object.keys(a).forEach(function(b){[].concat(a[b]).forEach(function(c,d){E.forEach(function(d){return f(a,d(b,c))})})}),(0,l.default)(a)}function f(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];Object.keys(b).forEach(function(c){var d=a[c];Array.isArray(d)?[].concat(b[c]).forEach(function(b){var e=d.indexOf(b);e>-1&&a[c].splice(e,1),a[c].push(b)}):a[c]=b[c]})}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var g=a("./prefixProps"),h=d(g),i=a("../utils/capitalizeString"),j=d(i),k=a("../utils/sortPrefixedStyle"),l=d(k),m=a("./plugins/position"),n=d(m),o=a("./plugins/calc"),p=d(o),q=a("./plugins/cursor"),r=d(q),s=a("./plugins/flex"),t=d(s),u=a("./plugins/sizing"),v=d(u),w=a("./plugins/gradient"),x=d(w),y=a("./plugins/transition"),z=d(y),A=a("./plugins/flexboxIE"),B=d(A),C=a("./plugins/flexboxOld"),D=d(C),E=[n.default,p.default,r.default,v.default,x.default,z.default,B.default,D.default,t.default];b.exports=c.default},{"../utils/capitalizeString":349,"../utils/sortPrefixedStyle":356,"./plugins/calc":338,"./plugins/cursor":339,"./plugins/flex":340,"./plugins/flexboxIE":341,"./plugins/flexboxOld":342,"./plugins/gradient":343,"./plugins/position":344,"./plugins/sizing":345,"./plugins/transition":346,"./prefixProps":348}],348:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0}),c.default={Webkit:{transform:!0,transformOrigin:!0,transformOriginX:!0,transformOriginY:!0,backfaceVisibility:!0,perspective:!0,perspectiveOrigin:!0,transformStyle:!0,transformOriginZ:!0,animation:!0,animationDelay:!0,animationDirection:!0,animationFillMode:!0,animationDuration:!0,animationIterationCount:!0,animationName:!0,animationPlayState:!0,animationTimingFunction:!0,appearance:!0,userSelect:!0,fontKerning:!0,textEmphasisPosition:!0,textEmphasis:!0,textEmphasisStyle:!0,textEmphasisColor:!0,boxDecorationBreak:!0,clipPath:!0,maskImage:!0,maskMode:!0,maskRepeat:!0,maskPosition:!0,maskClip:!0,maskOrigin:!0,maskSize:!0,maskComposite:!0,mask:!0,maskBorderSource:!0,maskBorderMode:!0,maskBorderSlice:!0,maskBorderWidth:!0,maskBorderOutset:!0,maskBorderRepeat:!0,maskBorder:!0,maskType:!0,textDecorationStyle:!0,textDecorationSkip:!0,textDecorationLine:!0,textDecorationColor:!0,filter:!0,fontFeatureSettings:!0,breakAfter:!0,breakBefore:!0, +breakInside:!0,columnCount:!0,columnFill:!0,columnGap:!0,columnRule:!0,columnRuleColor:!0,columnRuleStyle:!0,columnRuleWidth:!0,columns:!0,columnSpan:!0,columnWidth:!0,flex:!0,flexBasis:!0,flexDirection:!0,flexGrow:!0,flexFlow:!0,flexShrink:!0,flexWrap:!0,alignContent:!0,alignItems:!0,alignSelf:!0,justifyContent:!0,order:!0,transition:!0,transitionDelay:!0,transitionDuration:!0,transitionProperty:!0,transitionTimingFunction:!0,backdropFilter:!0,scrollSnapType:!0,scrollSnapPointsX:!0,scrollSnapPointsY:!0,scrollSnapDestination:!0,scrollSnapCoordinate:!0,shapeImageThreshold:!0,shapeImageMargin:!0,shapeImageOutside:!0,hyphens:!0,flowInto:!0,flowFrom:!0,regionFragment:!0,textSizeAdjust:!0},Moz:{appearance:!0,userSelect:!0,boxSizing:!0,textAlignLast:!0,textDecorationStyle:!0,textDecorationSkip:!0,textDecorationLine:!0,textDecorationColor:!0,tabSize:!0,hyphens:!0,fontFeatureSettings:!0,breakAfter:!0,breakBefore:!0,breakInside:!0,columnCount:!0,columnFill:!0,columnGap:!0,columnRule:!0,columnRuleColor:!0,columnRuleStyle:!0,columnRuleWidth:!0,columns:!0,columnSpan:!0,columnWidth:!0},ms:{flex:!0,flexBasis:!1,flexDirection:!0,flexGrow:!1,flexFlow:!0,flexShrink:!1,flexWrap:!0,alignContent:!1,alignItems:!1,alignSelf:!1,justifyContent:!1,order:!1,transform:!0,transformOrigin:!0,transformOriginX:!0,transformOriginY:!0,userSelect:!0,wrapFlow:!0,wrapThrough:!0,wrapMargin:!0,scrollSnapType:!0,scrollSnapPointsX:!0,scrollSnapPointsY:!0,scrollSnapDestination:!0,scrollSnapCoordinate:!0,touchAction:!0,hyphens:!0,flowInto:!0,flowFrom:!0,breakBefore:!0,breakAfter:!0,breakInside:!0,regionFragment:!0,gridTemplateColumns:!0,gridTemplateRows:!0,gridTemplateAreas:!0,gridTemplate:!0,gridAutoColumns:!0,gridAutoRows:!0,gridAutoFlow:!0,grid:!0,gridRowStart:!0,gridColumnStart:!0,gridRowEnd:!0,gridRow:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnGap:!0,gridRowGap:!0,gridArea:!0,gridGap:!0,textSizeAdjust:!0}},b.exports=c.default},{}],349:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0}),c.default=function(a){return a.charAt(0).toUpperCase()+a.slice(1)},b.exports=c.default},{}],350:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}Object.defineProperty(c,"__esModule",{value:!0});var e=a("bowser"),f=d(e),g={Webkit:["chrome","safari","ios","android","phantom","opera","webos","blackberry","bada","tizen","chromium","vivaldi"],Moz:["firefox","seamonkey","sailfish"],ms:["msie","msedge"]},h={chrome:[["chrome"],["chromium"]],safari:[["safari"]],firefox:[["firefox"]],edge:[["msedge"]],opera:[["opera"],["vivaldi"]],ios_saf:[["ios","mobile"],["ios","tablet"]],ie:[["msie"]],op_mini:[["opera","mobile"],["opera","tablet"]],and_uc:[["android","mobile"],["android","tablet"]],android:[["android","mobile"],["android","tablet"]]},i=function(a){if(a.firefox)return"firefox";var b="";return Object.keys(h).forEach(function(c){h[c].forEach(function(d){var e=0;d.forEach(function(b){a[b]&&(e+=1)}),d.length===e&&(b=c)})}),b};c.default=function(a){if(!a)return!1;var b=f.default._detect(a);return Object.keys(g).forEach(function(a){g[a].forEach(function(c){b[c]&&(b.prefix={inline:a,css:"-"+a.toLowerCase()+"-"})})}),b.browser=i(b),b.version=b.version?parseFloat(b.version):parseInt(parseFloat(b.osversion),10),b.osversion=parseFloat(b.osversion),"ios_saf"===b.browser&&b.version>b.osversion&&(b.version=b.osversion,b.safari=!0),"android"===b.browser&&b.chrome&&b.version>37&&(b.browser="and_chr"),"android"===b.browser&&b.osversion<5&&(b.version=b.osversion),b},b.exports=c.default},{bowser:6}],351:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0}),c.default=function(a){var b=a.browser,c=a.version,d=a.prefix,e="keyframes";return("chrome"===b&&c<43||("safari"===b||"ios_saf"===b)&&c<9||"opera"===b&&c<30||"android"===b&&c<=4.4||"and_uc"===b)&&(e=d.css+e),e},b.exports=c.default},{}],352:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0}),c.default=function(a,b,c){return c?[a,b]:a},b.exports=c.default},{}],353:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0}),c.default=function(a){return null!==a.match(/^(Webkit|Moz|O|ms)/)},b.exports=c.default},{}],354:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0}),c.default=function(a){return Array.isArray(a)&&(a=a.join(",")),null!==a.match(/-webkit-|-moz-|-ms-/)},b.exports=c.default},{}],355:[function(a,b,c){"use strict";function d(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}Object.defineProperty(c,"__esModule",{value:!0}),c.default=function(a,b){var c=arguments.length<=2||void 0===arguments[2]?function(a,b){return a+b}:arguments[2];return d({},a,["-webkit-","-moz-",""].map(function(a){return c(a,b)}))},b.exports=c.default},{}],356:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){return Object.keys(a).sort(function(a,b){return(0,g.default)(a)&&!(0,g.default)(b)?-1:!(0,g.default)(a)&&(0,g.default)(b)?1:0}).reduce(function(b,c){return b[c]=a[c],b},{})}Object.defineProperty(c,"__esModule",{value:!0}),c.default=e;var f=a("./isPrefixedProperty"),g=d(f);b.exports=c.default},{"./isPrefixedProperty":353}],357:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0}),c.default=function(a){var b=a.replace(/^(ms|Webkit|Moz|O)/,"");return b.charAt(0).toLowerCase()+b.slice(1)},b.exports=c.default},{}],358:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){var c,d,e=b[a],f=0;for(d=a+1;d "+o);if("componentClose"===k.type)throw new Error("Missing opening component token: `"+k.value+"`");if("componentOpen"===k.type){c=b[k.value],g=m;break}s.push(b[k.value])}else s.push(k.value);return c&&(i=e(g,a),n=a.slice(g+1,i),p=f(n,b),d=j.default.cloneElement(c,{},p),s.push(d),ih.length?(this.options.missing_key_callback&&this.options.missing_key_callback(k,a),i=[c,d],this.options.debug===!0&&console.log(i[e(p)(f)]),i[e()(f)]):(i=h[j],i?i:(i=[c,d],i[e()(f)]))}});var o=function(){function a(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}function b(a,b){for(var c=[];b>0;c[--b]=a);return c.join("")}var c=function(){return c.cache.hasOwnProperty(arguments[0])||(c.cache[arguments[0]]=c.parse(arguments[0])),c.format.call(null,c.cache[arguments[0]],arguments)};return c.format=function(c,d){var e,f,g,h,i,j,k,l=1,m=c.length,n="",p=[];for(f=0;f=0?"+"+e:e,j=h[4]?"0"==h[4]?"0":h[4].charAt(1):" ",k=h[6]-String(e).length,i=h[6]?b(j,k):"",p.push(h[5]?e+i:i+e)}return p.join("")},c.cache={},c.parse=function(a){for(var b=a,c=[],d=[],e=0;b;){if(null!==(c=/^[^\x25]+/.exec(b)))d.push(c[0]);else if(null!==(c=/^\x25{2}/.exec(b)))d.push("%");else{if(null===(c=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(b)))throw"[sprintf] huh?";if(c[2]){e|=1;var f=[],g=c[2],h=[];if(null===(h=/^([a-z_][a-z_\d]*)/i.exec(g)))throw"[sprintf] huh?";for(f.push(h[1]);""!==(g=g.substring(h[0].length));)if(null!==(h=/^\.([a-z_][a-z_\d]*)/i.exec(g)))f.push(h[1]);else{if(null===(h=/^\[(\d+)\]/.exec(g)))throw"[sprintf] huh?";f.push(h[1])}c[2]=f}else e|=2;if(3===e)throw"[sprintf] mixing positional and named placeholders is not (yet) supported";d.push(c)}b=b.substring(c[0].length)}return d},c}(),p=function(a,b){return b.unshift(a),o.apply(null,b)};n.parse_plural=function(a,b){return a=a.replace(/n/g,b),n.parse_expression(a)},n.sprintf=function(a,b){return"[object Array]"=={}.toString.call(b)?p(a,[].slice.call(b)):o.apply(this,[].slice.call(arguments))},n.prototype.sprintf=function(){return n.sprintf.apply(this,arguments)},n.PF={},n.PF.parse=function(a){var b=n.PF.extractPluralExpr(a);return n.PF.parser.parse.call(n.PF.parser,b)},n.PF.compile=function(a){function b(a){return a===!0?1:a?a:0}var c=n.PF.parse(a);return function(a){return b(n.PF.interpreter(c)(a))}},n.PF.interpreter=function(a){return function(b){switch(a.type){case"GROUP":return n.PF.interpreter(a.expr)(b);case"TERNARY":return n.PF.interpreter(a.expr)(b)?n.PF.interpreter(a.truthy)(b):n.PF.interpreter(a.falsey)(b);case"OR":return n.PF.interpreter(a.left)(b)||n.PF.interpreter(a.right)(b);case"AND":return n.PF.interpreter(a.left)(b)&&n.PF.interpreter(a.right)(b);case"LT":return n.PF.interpreter(a.left)(b)n.PF.interpreter(a.right)(b);case"LTE":return n.PF.interpreter(a.left)(b)<=n.PF.interpreter(a.right)(b);case"GTE":return n.PF.interpreter(a.left)(b)>=n.PF.interpreter(a.right)(b);case"EQ":return n.PF.interpreter(a.left)(b)==n.PF.interpreter(a.right)(b);case"NEQ":return n.PF.interpreter(a.left)(b)!=n.PF.interpreter(a.right)(b);case"MOD":return n.PF.interpreter(a.left)(b)%n.PF.interpreter(a.right)(b);case"VAR":return b;case"NUM":return a.val;default:throw new Error("Invalid Token found.")}}},n.PF.extractPluralExpr=function(a){a=a.replace(/^\s\s*/,"").replace(/\s\s*$/,""),/;\s*$/.test(a)||(a=a.concat(";"));var b,c=/nplurals\=(\d+);/,d=/plural\=(.*);/,e=a.match(c),f={};if(!(e.length>1))throw new Error("nplurals not found in plural_forms string: "+a);if(f.nplurals=e[1],a=a.replace(c,""),b=a.match(d),!(b&&b.length>1))throw new Error("`plural` expression not found: "+a);return b[1]},n.PF.parser=function(){var a={trace:function(){},yy:{},symbols_:{error:2,expressions:3,e:4,EOF:5,"?":6,":":7,"||":8,"&&":9,"<":10,"<=":11,">":12,">=":13,"!=":14,"==":15,"%":16,"(":17,")":18,n:19,NUMBER:20,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",6:"?",7:":",8:"||",9:"&&",10:"<",11:"<=",12:">",13:">=",14:"!=",15:"==",16:"%",17:"(",18:")",19:"n",20:"NUMBER"},productions_:[0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return{type:"GROUP",expr:f[h-1]};case 2:this.$={type:"TERNARY",expr:f[h-4],truthy:f[h-2],falsey:f[h]};break;case 3:this.$={type:"OR",left:f[h-2],right:f[h]};break;case 4:this.$={type:"AND",left:f[h-2],right:f[h]};break;case 5:this.$={type:"LT",left:f[h-2],right:f[h]};break;case 6:this.$={type:"LTE",left:f[h-2],right:f[h]};break;case 7:this.$={type:"GT",left:f[h-2],right:f[h]};break;case 8:this.$={type:"GTE",left:f[h-2],right:f[h]};break;case 9:this.$={type:"NEQ",left:f[h-2],right:f[h]};break;case 10:this.$={type:"EQ",left:f[h-2],right:f[h]};break;case 11:this.$={type:"MOD",left:f[h-2],right:f[h]};break;case 12:this.$={type:"GROUP",expr:f[h-1]};break;case 13:this.$={type:"VAR"};break;case 14:this.$={type:"NUM",val:Number(a)}}},table:[{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],defaultActions:{6:[2,1]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(a){e.length=e.length-2*a,f.length=f.length-a,g.length=g.length-a}function c(){var a;return a=d.lexer.lex()||1,"number"!=typeof a&&(a=d.symbols_[a]||a),a}var d=this,e=[0],f=[null],g=[],h=this.table,i="",j=0,k=0,l=0,m=2,n=1;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var o=this.lexer.yylloc;g.push(o),"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var p,q,r,s,t,u,v,w,x,y={};;){if(r=e[e.length-1],this.defaultActions[r]?s=this.defaultActions[r]:(null==p&&(p=c()),s=h[r]&&h[r][p]),"undefined"==typeof s||!s.length||!s[0]){if(!l){x=[];for(u in h[r])this.terminals_[u]&&u>2&&x.push("'"+this.terminals_[u]+"'");var z="";z=this.lexer.showPosition?"Parse error on line "+(j+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+x.join(", ")+", got '"+this.terminals_[p]+"'":"Parse error on line "+(j+1)+": Unexpected "+(1==p?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(z,{text:this.lexer.match,token:this.terminals_[p]||p,line:this.lexer.yylineno,loc:o,expected:x})}if(3==l){if(p==n)throw new Error(z||"Parsing halted.");k=this.lexer.yyleng,i=this.lexer.yytext,j=this.lexer.yylineno,o=this.lexer.yylloc,p=c()}for(;;){if(m.toString()in h[r])break;if(0==r)throw new Error(z||"Parsing halted.");b(1),r=e[e.length-1]}q=p,p=m,r=e[e.length-1],s=h[r]&&h[r][m],l=3}if(s[0]instanceof Array&&s.length>1)throw new Error("Parse Error: multiple actions possible at state: "+r+", token: "+p);switch(s[0]){case 1:e.push(p),f.push(this.lexer.yytext),g.push(this.lexer.yylloc),e.push(s[1]),p=null,q?(p=q,q=null):(k=this.lexer.yyleng,i=this.lexer.yytext,j=this.lexer.yylineno,o=this.lexer.yylloc,l>0&&l--);break;case 2:if(v=this.productions_[s[1]][1],y.$=f[f.length-v],y._$={first_line:g[g.length-(v||1)].first_line,last_line:g[g.length-1].last_line,first_column:g[g.length-(v||1)].first_column,last_column:g[g.length-1].last_column},t=this.performAction.call(y,i,k,j,this.yy,s[1],f,g),"undefined"!=typeof t)return t;v&&(e=e.slice(0,-1*v*2),f=f.slice(0,-1*v),g=g.slice(0,-1*v)),e.push(this.productions_[s[1]][0]),f.push(y.$),g.push(y._$),w=h[e[e.length-2]][e[e.length-1]],e.push(w);break;case 3:return!0}}return!0}},b=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parseError)throw new Error(a);this.yy.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.match+=a,this.matched+=a;var b=a.match(/\n/);return b&&this.yylineno++,this._input=this._input.slice(1),a},unput:function(a){return this._input=a+this._input,this},more:function(){return this._more=!0,this},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c;this._more||(this.yytext="",this.match="");for(var d=this._currentRules(),e=0;e=/,/^/,/^!=/,/^==/,/^%/,/^\(/,/^\)/,/^$/,/^./],a.conditions={INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}},a}();return a.lexer=b,a}(),"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=n),c.Jed=n):("function"==typeof define&&define.amd&&define(function(){return n}),a.Jed=n)}(this)},{}],361:[function(a,b,c){c=b.exports=function(a){if(a&&"object"==typeof a){var b=a.which||a.keyCode||a.charCode;b&&(a=b)}if("number"==typeof a)return g[a];var c=String(a),f=d[c.toLowerCase()];if(f)return f;var f=e[c.toLowerCase()];return f?f:1===c.length?c.charCodeAt(0):void 0};var d=c.code=c.codes={backspace:8,tab:9,enter:13,shift:16,ctrl:17,alt:18,"pause/break":19,"caps lock":20,esc:27,space:32,"page up":33,"page down":34,end:35,home:36,left:37,up:38,right:39,down:40,insert:45,delete:46,command:91,"left command":91,"right command":93,"numpad *":106,"numpad +":107,"numpad -":109,"numpad .":110,"numpad /":111,"num lock":144,"scroll lock":145,"my computer":182,"my calculator":183,";":186,"=":187,",":188,"-":189,".":190,"/":191,"`":192,"[":219,"\\":220,"]":221,"'":222},e=c.aliases={windows:91,"⇧":16,"⌥":18,"⌃":17,"⌘":91,ctl:17,control:17,option:18,pause:19,break:19,caps:20,return:13,escape:27,spc:32,pgup:33,pgdn:34,ins:45,del:46,cmd:91};/*! + * Programatically add the following + */ +for(f=97;f<123;f++)d[String.fromCharCode(f)]=f-32;for(var f=48;f<58;f++)d[f-48]=f;for(f=1;f<13;f++)d["f"+f]=f+111;for(f=0;f<10;f++)d["numpad "+f]=f+96;var g=c.names=c.title={};for(f in d)g[d[f]]=f;for(var h in e)d[h]=e[h]},{}],362:[function(a,b,c){function d(a){var b=-1,c=null==a?0:a.length;for(this.clear();++b1?c[e-1]:void 0,h=e>2?c[2]:void 0;for(g=a.length>3&&"function"==typeof g?(e--,g):void 0,h&&f(c[0],c[1],h)&&(g=e<3?void 0:g,e=1),b=Object(b);++d-1&&a%1==0&&a-1}var e=a("./_assocIndexOf");b.exports=d},{"./_assocIndexOf":373}],419:[function(a,b,c){function d(a,b){var c=this.__data__,d=e(c,a);return d<0?(++this.size,c.push([a,b])):c[d][1]=b,this}var e=a("./_assocIndexOf");b.exports=d},{"./_assocIndexOf":373}],420:[function(a,b,c){function d(){this.size=0,this.__data__={hash:new e,map:new(g||f),string:new e}}var e=a("./_Hash"),f=a("./_ListCache"),g=a("./_Map");b.exports=d},{"./_Hash":362,"./_ListCache":363,"./_Map":364}],421:[function(a,b,c){function d(a){var b=e(this,a).delete(a);return this.size-=b?1:0,b}var e=a("./_getMapData");b.exports=d},{"./_getMapData":399}],422:[function(a,b,c){function d(a){return e(this,a).get(a)}var e=a("./_getMapData");b.exports=d},{"./_getMapData":399}],423:[function(a,b,c){function d(a){return e(this,a).has(a)}var e=a("./_getMapData");b.exports=d},{"./_getMapData":399}],424:[function(a,b,c){function d(a,b){var c=e(this,a),d=c.size;return c.set(a,b),this.size+=c.size==d?0:1,this}var e=a("./_getMapData");b.exports=d},{"./_getMapData":399}],425:[function(a,b,c){var d=a("./_getNative"),e=d(Object,"create");b.exports=e},{"./_getNative":400}],426:[function(a,b,c){var d=a("./_overArg"),e=d(Object.keys,Object);b.exports=e},{"./_overArg":430}],427:[function(a,b,c){function d(a){var b=[];if(null!=a)for(var c in Object(a))b.push(c);return b}b.exports=d},{}],428:[function(a,b,c){var d=a("./_freeGlobal"),e="object"==typeof c&&c&&!c.nodeType&&c,f=e&&"object"==typeof b&&b&&!b.nodeType&&b,g=f&&f.exports===e,h=g&&d.process,i=function(){try{return h&&h.binding&&h.binding("util")}catch(a){}}();b.exports=i},{"./_freeGlobal":398}],429:[function(a,b,c){function d(a){return f.call(a)}var e=Object.prototype,f=e.toString;b.exports=d},{}],430:[function(a,b,c){function d(a,b){return function(c){return a(b(c))}}b.exports=d},{}],431:[function(a,b,c){function d(a,b,c){return b=f(void 0===b?a.length-1:b,0),function(){for(var d=arguments,g=-1,h=f(d.length-b,0),i=Array(h);++g0){if(++b>=e)return arguments[0]}else b=0;return a.apply(void 0,arguments)}}var e=800,f=16,g=Date.now;b.exports=d},{}],435:[function(a,b,c){function d(){this.__data__=new e,this.size=0}var e=a("./_ListCache");b.exports=d},{"./_ListCache":363}],436:[function(a,b,c){function d(a){var b=this.__data__,c=b.delete(a);return this.size=b.size,c}b.exports=d},{}],437:[function(a,b,c){function d(a){return this.__data__.get(a)}b.exports=d},{}],438:[function(a,b,c){function d(a){return this.__data__.has(a)}b.exports=d},{}],439:[function(a,b,c){function d(a,b){var c=this.__data__;if(c instanceof e){var d=c.__data__;if(!f||d.length-1&&a%1==0&&a<=e}var e=9007199254740991;b.exports=d},{}],452:[function(a,b,c){function d(a){var b=typeof a;return null!=a&&("object"==b||"function"==b)}b.exports=d},{}],453:[function(a,b,c){function d(a){return null!=a&&"object"==typeof a}b.exports=d},{}],454:[function(a,b,c){function d(a){if(!g(a)||e(a)!=h)return!1;var b=f(a);if(null===b)return!0;var c=l.call(b,"constructor")&&b.constructor;return"function"==typeof c&&c instanceof c&&k.call(c)==m}var e=a("./_baseGetTag"),f=a("./_getPrototype"),g=a("./isObjectLike"),h="[object Object]",i=Function.prototype,j=Object.prototype,k=i.toString,l=j.hasOwnProperty,m=k.call(Object);b.exports=d},{"./_baseGetTag":377,"./_getPrototype":401,"./isObjectLike":453}],455:[function(a,b,c){var d=a("./_baseIsTypedArray"),e=a("./_baseUnary"),f=a("./_nodeUtil"),g=f&&f.isTypedArray,h=g?e(g):d;b.exports=h},{"./_baseIsTypedArray":380,"./_baseUnary":388,"./_nodeUtil":428}],456:[function(a,b,c){function d(a){return void 0===a}b.exports=d},{}],457:[function(a,b,c){function d(a){return g(a)?e(a):f(a)}var e=a("./_arrayLikeKeys"),f=a("./_baseKeys"),g=a("./isArrayLike");b.exports=d},{"./_arrayLikeKeys":370,"./_baseKeys":381,"./isArrayLike":447}],458:[function(a,b,c){function d(a){return g(a)?e(a,!0):f(a)}var e=a("./_arrayLikeKeys"),f=a("./_baseKeysIn"),g=a("./isArrayLike");b.exports=d},{"./_arrayLikeKeys":370,"./_baseKeysIn":382,"./isArrayLike":447}],459:[function(a,b,c){var d=a("./_baseMerge"),e=a("./_createAssigner"),f=e(function(a,b,c){d(a,b,c)});b.exports=f},{"./_baseMerge":383,"./_createAssigner":395}],460:[function(a,b,c){function d(){return!1}b.exports=d},{}],461:[function(a,b,c){function d(a){return e(a,f(a))}var e=a("./_copyObject"),f=a("./keysIn");b.exports=d},{"./_copyObject":393,"./keysIn":458}],462:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){var c={};for(var d in a)b.indexOf(d)>=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b,c){var d=a.color,e=a.hoverColor,f=b.muiTheme.baseTheme,g=d||f.palette.textColor,h=e||g;return{root:{color:c.hovered?h:g,position:"relative",fontSize:f.spacing.iconSize,display:"inline-block",userSelect:"none",transition:q.default.easeOut()}}}Object.defineProperty(c,"__esModule",{value:!0});var j=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b){var c=b.muiTheme.baseTheme;return{root:{position:"relative",boxSizing:"border-box",overflow:"visible",transition:q.default.easeOut(),padding:c.spacing.iconSize/2,width:2*c.spacing.iconSize,height:2*c.spacing.iconSize,fontSize:0},tooltip:{boxSizing:"border-box"},overlay:{position:"relative",top:0,width:"100%",height:"100%",background:c.palette.disabledColor},disabled:{color:c.palette.disabledColor,fill:c.palette.disabledColor,cursor:"not-allowed"}}}Object.defineProperty(c,"__esModule",{value:!0});var j=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b){var c=a.rounded,d=a.circle,e=a.transitionEnabled,f=a.zDepth,g=b.muiTheme,h=g.baseTheme,i=g.paper;return{root:{color:i.color,backgroundColor:i.backgroundColor,transition:e&&s.default.easeOut(),boxSizing:"border-box",fontFamily:h.fontFamily,WebkitTapHighlightColor:"rgba(0,0,0,0)",boxShadow:i.zDepthShadows[f-1],borderRadius:d?"50%":c?"2px":"0px"}}}Object.defineProperty(c,"__esModule",{value:!0});var j=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b,c){}function j(a,b,c){var d=b.muiTheme,e=d.baseTheme,f=d.button,g=d.raisedButton,h=a.disabled,i=a.disabledBackgroundColor,j=a.disabledLabelColor,k=a.fullWidth,l=a.icon,m=a.label,n=a.labelPosition,o=a.primary,p=a.secondary,q=a.style,t=o||p?.4:.08,u=g.color,v=g.textColor;h?(u=i||g.disabledColor,v=j||g.disabledTextColor):o?(u=g.primaryColor,v=g.primaryTextColor):p?(u=g.secondaryColor,v=g.secondaryTextColor):(a.backgroundColor&&(u=a.backgroundColor),a.labelColor&&(v=a.labelColor));var w=q&&q.height||f.height,x=2;return{root:{display:"inline-block",transition:r.default.easeOut(),minWidth:k?"100%":f.minWidth},button:{position:"relative",height:w,lineHeight:w+"px",width:"100%",padding:0,borderRadius:x,transition:r.default.easeOut(),backgroundColor:u,textAlign:"center"},label:{position:"relative",opacity:1,fontSize:g.fontSize,letterSpacing:0,textTransform:g.textTransform||f.textTransform||"uppercase",fontWeight:g.fontWeight,margin:0,userSelect:"none",paddingLeft:l&&"before"!==n?8:e.spacing.desktopGutterLess,paddingRight:l&&"before"===n?8:e.spacing.desktopGutterLess,color:v},icon:{verticalAlign:"middle",marginLeft:m&&"before"!==n?12:0,marginRight:m&&"before"===n?12:0},overlay:{height:w,borderRadius:x,backgroundColor:(c.keyboardFocused||c.hovered)&&!h&&(0,s.fade)(v,t),transition:r.default.easeOut(),top:0},ripple:{color:v,opacity:o||p?.16:.1}}}Object.defineProperty(c,"__esModule",{value:!0});var k=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var i=Object.assign||function(a){for(var b=1;b0&&("horizontal"===e?f.root.marginLeft=-6:"vertical"===e&&(f.root.marginTop=-14)),f},p=function(a){function b(){var a,c,d,e;f(this,b);for(var h=arguments.length,i=Array(h),j=0;j=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var i=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a){return o.default.createElement(q.default,a)}Object.defineProperty(c,"__esModule",{value:!0});var j=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var i=Object.assign||function(a){for(var b=1;be?f.completed=!0:d&&b0&&l.default.createElement(n.default,null),l.default.cloneElement(a,(0,j.default)(f,a.props))]});return l.default.createElement("div",{style:f((0,j.default)(g.root,e))},h)}}]),b}(k.Component);p.propTypes={activeStep:k.PropTypes.number,children:k.PropTypes.arrayOf(k.PropTypes.element),linear:k.PropTypes.bool,orientation:k.PropTypes.oneOf(["horizontal","vertical"]),style:k.PropTypes.object},p.defaultProps={orientation:"horizontal",linear:!0},p.contextTypes={muiTheme:k.PropTypes.object.isRequired},p.childContextTypes={stepper:k.PropTypes.object},c.default=p},{"./StepConnector":474,react:677,"simple-assign":690}],478:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}Object.defineProperty(c,"__esModule",{value:!0}),c.Stepper=c.StepLabel=c.StepContent=c.StepButton=c.Step=void 0;var e=a("./Step"),f=d(e),g=a("./StepButton"),h=d(g),i=a("./StepContent"),j=d(i),k=a("./StepLabel"),l=d(k),m=a("./Stepper"),n=d(m);c.Step=f.default,c.StepButton=h.default,c.StepContent=j.default,c.StepLabel=l.default,c.Stepper=n.default},{"./Step":472,"./StepButton":473,"./StepContent":475,"./StepLabel":476,"./Stepper":477}],479:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){var c={};for(var d in a)b.indexOf(d)>=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b); +a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var i=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var i=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(){if(!B){var a=document.createElement("style");a.innerHTML="\n button::-moz-focus-inner,\n input::-moz-focus-inner {\n border: 0;\n padding: 0;\n }\n ",document.body.appendChild(a),B=!0}}function j(){C||(s.default.on(window,"keydown",function(a){D="tab"===(0,u.default)(a)}),C=!0)}Object.defineProperty(c,"__esModule",{value:!0});var k=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var i=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var i=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var i=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var i=Object.assign||function(a){for(var b=1;b=0||Object.prototype.hasOwnProperty.call(a,d)&&(c[d]=a[d]);return c}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b,c){var d=a.verticalPosition,e=a.horizontalPosition,f=a.touch?10:0,g=a.touch?-20:-10,h="bottom"===d?14+f:-14-f,i=b.muiTheme,j=i.baseTheme,k=i.zIndex,l=i.tooltip,m={root:{position:"absolute",fontFamily:j.fontFamily,fontSize:"10px",lineHeight:"22px",padding:"0 8px",zIndex:k.tooltip,color:l.color,overflow:"hidden",top:-1e4,borderRadius:2,userSelect:"none",opacity:0,right:"left"===e?12:null,left:"center"===e?(c.offsetWidth-48)/2*-1:null,transition:q.default.easeOut("0ms","top","450ms")+", "+q.default.easeOut("450ms","transform","0ms")+", "+q.default.easeOut("450ms","opacity","0ms")},label:{position:"relative",whiteSpace:"nowrap"},ripple:{position:"absolute",left:"center"===e?"50%":"left"===e?"100%":"0%",top:"bottom"===d?0:"100%",transform:"translate(-50%, -50%)",borderRadius:"50%",backgroundColor:"transparent",transition:q.default.easeOut("0ms","width","450ms")+", "+q.default.easeOut("0ms","height","450ms")+", "+q.default.easeOut("450ms","backgroundColor","0ms")},rootWhenShown:{top:"top"===d?g:36,opacity:.9,transform:"translate(0px, "+h+"px)",transition:q.default.easeOut("0ms","top","0ms")+", "+q.default.easeOut("450ms","transform","0ms")+", "+q.default.easeOut("450ms","opacity","0ms")},rootWhenTouched:{fontSize:"14px",lineHeight:"32px",padding:"0 16px"},rippleWhenShown:{backgroundColor:l.rippleBackgroundColor,transition:q.default.easeOut("450ms","width","0ms")+", "+q.default.easeOut("450ms","height","0ms")+", "+q.default.easeOut("450ms","backgroundColor","0ms")}};return m}Object.defineProperty(c,"__esModule",{value:!0});var j=Object.assign||function(a){for(var b=1;b300)return void d.stopListeningForScrollAbort();var c=Math.abs(a.touches[0].clientY-d.firstTouchY),f=Math.abs(a.touches[0].clientX-d.firstTouchX);if(c>6||f>6){var g=d.state.ripples,h=g[0],i=n.default.cloneElement(h,{aborted:!0});g=w(g),g=[].concat(e(g),[i]),d.setState({ripples:g},function(){d.end()})}},d.ignoreNextMouseDown=!1,d.state={hasRipples:!1,nextKey:0,ripples:[]},d}return h(b,a),j(b,[{key:"start",value:function(a,b){var c=this.context.muiTheme.ripple;if(this.ignoreNextMouseDown&&!b)return void(this.ignoreNextMouseDown=!1);var d=this.state.ripples;d=[].concat(e(d),[n.default.createElement(v.default,{key:this.state.nextKey,style:this.props.centerRipple?{}:this.getRippleStyle(a),color:this.props.color||c.color,opacity:this.props.opacity,touchGenerated:b})]),this.ignoreNextMouseDown=b,this.setState({hasRipples:!0,nextKey:this.state.nextKey+1,ripples:d})}},{key:"end",value:function(){var a=this.state.ripples;this.setState({ripples:w(a)}),this.props.abortOnScroll&&this.stopListeningForScrollAbort()}},{key:"startListeningForScrollAbort",value:function(a){this.firstTouchY=a.touches[0].clientY,this.firstTouchX=a.touches[0].clientX,document.body.addEventListener("touchmove",this.handleTouchMove)}},{key:"stopListeningForScrollAbort",value:function(){document.body.removeEventListener("touchmove",this.handleTouchMove)}},{key:"getRippleStyle",value:function(a){var b={},c=p.default.findDOMNode(this),d=c.offsetHeight,e=c.offsetWidth,f=t.default.offset(c),g=a.touches&&a.touches.length,h=g?a.touches[0].pageX:a.pageX,i=g?a.touches[0].pageY:a.pageY,j=h-f.left,k=i-f.top,l=this.calcDiag(j,k),m=this.calcDiag(e-j,k),n=this.calcDiag(e-j,d-k),o=this.calcDiag(j,d-k),q=Math.max(l,m,n,o),r=2*q,s=j-q,u=k-q;return b.height=r+"px",b.width=r+"px",b.top=u+"px",b.left=s+"px",b}},{key:"calcDiag",value:function(a,b){return Math.sqrt(a*a+b*b)}},{key:"render",value:function(){var a=this.props,b=a.children,c=a.style,d=this.state,e=d.hasRipples,f=d.ripples,g=this.context.muiTheme.prepareStyles,h=void 0;if(e){var i=(0,l.default)({height:"100%",width:"100%",position:"absolute",top:0,left:0,overflow:"hidden"},c);h=n.default.createElement(r.default,{style:g(i)},f)}return n.default.createElement("div",{onMouseUp:this.handleMouseUp,onMouseDown:this.handleMouseDown,onMouseLeave:this.handleMouseLeave,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd},h,b)}}]),b}(m.Component);x.propTypes={abortOnScroll:m.PropTypes.bool,centerRipple:m.PropTypes.bool,children:m.PropTypes.node,color:m.PropTypes.string,opacity:m.PropTypes.number,style:m.PropTypes.object},x.defaultProps={abortOnScroll:!0},x.contextTypes={muiTheme:m.PropTypes.object.isRequired},c.default=x},{"../utils/dom":505,"./CircleRipple":481,react:677,"react-addons-transition-group":512,"react-dom":513,"simple-assign":690}],490:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var h=function(){function a(a,b){for(var c=0;c1?b-1:0),d=1;dc?c:a}function e(a){var b=a.type,c=a.values;if(b.indexOf("rgb")>-1)for(var d=0;d<3;d++)c[d]=parseInt(c[d]);var e=void 0;return e=b.indexOf("hsl")>-1?a.type+"("+c[0]+", "+c[1]+"%, "+c[2]+"%":a.type+"("+c[0]+", "+c[1]+", "+c[2],e+=4===c.length?", "+a.values[3]+")":")"}function f(a){if(4===a.length){for(var b="#",c=1;c-1){var b=a.values.map(function(a){return a/=255,a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4)});return Number((.2126*b[0]+.7152*b[1]+.0722*b[2]).toFixed(3))}if(a.type.indexOf("hsl")>-1)return a.values[2]/100}function j(a){var b=arguments.length<=1||void 0===arguments[1]?.15:arguments[1];return i(a)>.5?l(a,b):m(a,b)}function k(a,b){return a=g(a),b=d(b,0,1),"rgb"!==a.type&&"hsl"!==a.type||(a.type+="a"),a.values[3]=b,e(a)}function l(a,b){if(a=g(a),b=d(b,0,1),a.type.indexOf("hsl")>-1)a.values[2]*=1-b;else if(a.type.indexOf("rgb")>-1)for(var c=0;c<3;c++)a.values[c]*=1-b;return e(a)}function m(a,b){if(a=g(a),b=d(b,0,1),a.type.indexOf("hsl")>-1)a.values[2]+=(100-a.values[2])*b;else if(a.type.indexOf("rgb")>-1)for(var c=0;c<3;c++)a.values[c]+=(255-a.values[c])*b;return e(a)}Object.defineProperty(c,"__esModule",{value:!0}),c.convertColorToString=e,c.convertHexToRGB=f,c.decomposeColor=g,c.getContrastRatio=h,c.getLuminance=i,c.emphasize=j,c.fade=k,c.darken=l,c.lighten=m},{}],504:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){return function(b,c,d,e,f){if(null!=b[c]){var h=d+"."+c;g[h]=!0}for(var i=arguments.length,j=Array(i>5?i-5:0),k=5;k=0;f--)this.on(a,d[f],e)},on:function(a,b,c){a.addEventListener?a.addEventListener(b,c):a.attachEvent("on"+b,function(){c.call(a)})},off:function(a,b,c){a.removeEventListener?a.removeEventListener(b,c):a.detachEvent("on"+b,c)},isKeyboard:function(a){return["keydown","keypress","keyup"].indexOf(a.type)!==-1}}},{}],507:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d=a("react"),e=d.PropTypes.oneOf(["left","middle","right"]),f=d.PropTypes.oneOf(["top","center","bottom"]);c.default={corners:d.PropTypes.oneOf(["bottom-left","bottom-right","top-left","top-right"]),horizontal:e,vertical:f,origin:d.PropTypes.shape({horizontal:e,vertical:f}),cornersAndCenter:d.PropTypes.oneOf(["bottom-center","bottom-left","bottom-right","top-center","top-left","top-right"]),stringOrNumber:d.PropTypes.oneOfType([d.PropTypes.string,d.PropTypes.number]),zDepth:d.PropTypes.oneOf([0,1,2,3,4,5])}},{react:677}],508:[function(a,b,c){"use strict";function d(a){if(a.isRtl)return function(a){var b={right:"left",left:"right",marginRight:"marginLeft",marginLeft:"marginRight",paddingRight:"paddingLeft",paddingLeft:"paddingRight",borderRight:"borderLeft",borderLeft:"borderRight"},c={};return Object.keys(a).forEach(function(d){var g=a[d],h=d;switch(b.hasOwnProperty(d)&&(h=b[d]),d){case"float":case"textAlign":"right"===g?g="left":"left"===g&&(g="right");break;case"direction":"ltr"===g?g="rtl":"rtl"===g&&(g="ltr");break;case"transform":if(!g)break;var i=void 0;(i=g.match(e))&&(g=g.replace(i[0],i[1]+-parseFloat(i[4]))),(i=g.match(f))&&(g=g.replace(i[0],i[1]+-parseFloat(i[4])+i[5]+i[6]?", "+(-parseFloat(i[7])+i[8]):""));break;case"transformOrigin":if(!g)break;g.indexOf("right")>-1?g=g.replace("right","left"):g.indexOf("left")>-1&&(g=g.replace("left","right"))}c[h]=g}),c}}Object.defineProperty(c,"__esModule",{value:!0}),c.default=d;var e=/((^|\s)translate(3d|X)?\()(\-?[\d]+)/,f=/((^|\s)skew(x|y)?\()\s*(\-?[\d]+)(deg|rad|grad)(,\s*(\-?[\d]+)(deg|rad|grad))?/},{}],509:[function(a,b,c){"use strict";function d(a){if(null===a||void 0===a)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(a)}function e(){try{if(!Object.assign)return!1;var a=new String("abc");if(a[5]="de","5"===Object.getOwnPropertyNames(a)[0])return!1;for(var b={},c=0;c<10;c++)b["_"+String.fromCharCode(c)]=c; +var d=Object.getOwnPropertyNames(b).map(function(a){return b[a]});if("0123456789"!==d.join(""))return!1;var e={};return"abcdefghijklmnopqrst".split("").forEach(function(a){e[a]=a}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},e)).join("")}catch(a){return!1}}var f=Object.prototype.hasOwnProperty,g=Object.prototype.propertyIsEnumerable;b.exports=e()?Object.assign:function(a,b){for(var c,e,h=d(a),i=1;i1)for(var c=1;c8&&v<=11),y=32,z=String.fromCharCode(y),A={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["topCompositionEnd","topKeyPress","topTextInput","topPaste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:["topBlur","topCompositionEnd","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:["topBlur","topCompositionStart","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:["topBlur","topCompositionUpdate","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]}},B=!1,C=null,D={eventTypes:A,extractEvents:function(a,b,c,d){return[j(a,b,c,d),m(a,b,c,d)]}};b.exports=D},{"./EventPropagators":533,"./FallbackCompositionState":534,"./SyntheticCompositionEvent":601,"./SyntheticInputEvent":605,"fbjs/lib/ExecutionEnvironment":302}],517:[function(a,b,c){"use strict";function d(a,b){return a+b.charAt(0).toUpperCase()+b.substring(1)}var e={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridColumn:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},f=["Webkit","ms","Moz","O"];Object.keys(e).forEach(function(a){f.forEach(function(b){e[d(b,a)]=e[a]})});var g={background:{backgroundAttachment:!0,backgroundColor:!0,backgroundImage:!0,backgroundPositionX:!0,backgroundPositionY:!0,backgroundRepeat:!0},backgroundPosition:{backgroundPositionX:!0,backgroundPositionY:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0},outline:{outlineWidth:!0,outlineStyle:!0,outlineColor:!0}},h={isUnitlessNumber:e,shorthandPropertyExpansions:g};b.exports=h},{}],518:[function(a,b,c){"use strict";var d=a("./CSSProperty"),e=a("fbjs/lib/ExecutionEnvironment"),f=(a("./ReactInstrumentation"),a("fbjs/lib/camelizeStyleName"),a("./dangerousStyleValue")),g=a("fbjs/lib/hyphenateStyleName"),h=a("fbjs/lib/memoizeStringOnly"),i=(a("fbjs/lib/warning"),h(function(a){return g(a)})),j=!1,k="cssFloat";if(e.canUseDOM){var l=document.createElement("div").style;try{l.font=""}catch(a){j=!0}void 0===document.documentElement.style.cssFloat&&(k="styleFloat")}var m={createMarkupForStyles:function(a,b){var c="";for(var d in a)if(a.hasOwnProperty(d)){var e=a[d];null!=e&&(c+=i(d)+":",c+=f(d,e,b)+";")}return c||null},setValueForStyles:function(a,b,c){var e=a.style;for(var g in b)if(b.hasOwnProperty(g)){var h=f(g,b[g],c);if("float"!==g&&"cssFloat"!==g||(g=k),h)e[g]=h;else{var i=j&&d.shorthandPropertyExpansions[g];if(i)for(var l in i)e[l]="";else e[g]=""}}}};b.exports=m},{"./CSSProperty":517,"./ReactInstrumentation":576,"./dangerousStyleValue":618,"fbjs/lib/ExecutionEnvironment":302,"fbjs/lib/camelizeStyleName":304,"fbjs/lib/hyphenateStyleName":315,"fbjs/lib/memoizeStringOnly":320,"fbjs/lib/warning":324}],519:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var e=a("./reactProdInvariant"),f=a("./PooledClass"),g=(a("fbjs/lib/invariant"),function(){function a(b){d(this,a),this._callbacks=null,this._contexts=null,this._arg=b}return a.prototype.enqueue=function(a,b){this._callbacks=this._callbacks||[],this._callbacks.push(a),this._contexts=this._contexts||[],this._contexts.push(b)},a.prototype.notifyAll=function(){var a=this._callbacks,b=this._contexts,c=this._arg;if(a&&b){a.length!==b.length?e("24"):void 0,this._callbacks=null,this._contexts=null;for(var d=0;d8));var H=!1;u.canUseDOM&&(H=z("input")&&(!document.documentMode||document.documentMode>11));var I={get:function(){return F.get.call(this)},set:function(a){E=""+a,F.set.call(this,a)}},J={eventTypes:B,extractEvents:function(a,b,c,e){var f,g,h=b?v.getNodeFromInstance(b):window;if(d(h)?G?f=i:g=j:A(h)?H?f=n:(f=p,g=o):q(h)&&(f=r),f){var k=f(a,b);if(k){var l=x.getPooled(B.change,k,c,e);return l.type="change",t.accumulateTwoPhaseDispatches(l),l}}g&&g(a,h,b)}};b.exports=J},{"./EventPluginHub":530,"./EventPropagators":533,"./ReactDOMComponentTree":547,"./ReactUpdates":594,"./SyntheticEvent":603,"./getEventTarget":626,"./isEventSupported":634,"./isTextInputElement":635,"fbjs/lib/ExecutionEnvironment":302}],521:[function(a,b,c){"use strict";function d(a,b){return Array.isArray(b)&&(b=b[1]),b?b.nextSibling:a.firstChild}function e(a,b,c){k.insertTreeBefore(a,b,c)}function f(a,b,c){Array.isArray(b)?h(a,b[0],b[1],c):p(a,b,c)}function g(a,b){if(Array.isArray(b)){var c=b[1];b=b[0],i(a,b,c),a.removeChild(c)}a.removeChild(b)}function h(a,b,c,d){for(var e=b;;){var f=e.nextSibling;if(p(a,e,d),e===c)break;e=f}}function i(a,b,c){for(;;){var d=b.nextSibling;if(d===c)break;a.removeChild(d)}}function j(a,b,c){var d=a.parentNode,e=a.nextSibling;e===b?c&&p(d,document.createTextNode(c),e):c?(o(e,c),i(d,e,b)):i(d,a,b)}var k=a("./DOMLazyTree"),l=a("./Danger"),m=(a("./ReactDOMComponentTree"),a("./ReactInstrumentation"),a("./createMicrosoftUnsafeLocalFunction")),n=a("./setInnerHTML"),o=a("./setTextContent"),p=m(function(a,b,c){a.insertBefore(b,c)}),q=l.dangerouslyReplaceNodeWithMarkup,r={dangerouslyReplaceNodeWithMarkup:q,replaceDelimitedText:j,processUpdates:function(a,b){for(var c=0;c-1?void 0:g("96",a),!j.plugins[c]){b.extractEvents?void 0:g("97",a),j.plugins[c]=b;var d=b.eventTypes;for(var f in d)e(d[f],b,f)?void 0:g("98",f,a)}}}function e(a,b,c){j.eventNameDispatchConfigs.hasOwnProperty(c)?g("99",c):void 0,j.eventNameDispatchConfigs[c]=a;var d=a.phasedRegistrationNames;if(d){for(var e in d)if(d.hasOwnProperty(e)){var h=d[e];f(h,b,c)}return!0}return!!a.registrationName&&(f(a.registrationName,b,c),!0)}function f(a,b,c){j.registrationNameModules[a]?g("100",a):void 0,j.registrationNameModules[a]=b,j.registrationNameDependencies[a]=b.eventTypes[c].dependencies}var g=a("./reactProdInvariant"),h=(a("fbjs/lib/invariant"),null),i={},j={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:null,injectEventPluginOrder:function(a){h?g("101"):void 0,h=Array.prototype.slice.call(a),d()},injectEventPluginsByName:function(a){var b=!1;for(var c in a)if(a.hasOwnProperty(c)){var e=a[c];i.hasOwnProperty(c)&&i[c]===e||(i[c]?g("102",c):void 0,i[c]=e,b=!0)}b&&d()},getPluginModuleForEvent:function(a){var b=a.dispatchConfig;if(b.registrationName)return j.registrationNameModules[b.registrationName]||null;if(void 0!==b.phasedRegistrationNames){var c=b.phasedRegistrationNames;for(var d in c)if(c.hasOwnProperty(d)){var e=j.registrationNameModules[c[d]];if(e)return e}}return null},_resetEventPlugins:function(){h=null;for(var a in i)i.hasOwnProperty(a)&&delete i[a];j.plugins.length=0;var b=j.eventNameDispatchConfigs;for(var c in b)b.hasOwnProperty(c)&&delete b[c];var d=j.registrationNameModules;for(var e in d)d.hasOwnProperty(e)&&delete d[e]}};b.exports=j},{"./reactProdInvariant":637,"fbjs/lib/invariant":316}],532:[function(a,b,c){"use strict";function d(a){return"topMouseUp"===a||"topTouchEnd"===a||"topTouchCancel"===a}function e(a){return"topMouseMove"===a||"topTouchMove"===a}function f(a){return"topMouseDown"===a||"topTouchStart"===a}function g(a,b,c,d){var e=a.type||"unknown-event";a.currentTarget=r.getNodeFromInstance(d),b?p.invokeGuardedCallbackWithCatch(e,c,a):p.invokeGuardedCallback(e,c,a),a.currentTarget=null}function h(a,b){var c=a._dispatchListeners,d=a._dispatchInstances;if(Array.isArray(c))for(var e=0;e1?1-b:void 0;return this._fallbackText=e.slice(a,h),this._fallbackText}}),f.addPoolingTo(d),b.exports=d},{"./PooledClass":538,"./getTextContentAccessor":631,"object-assign":509}],535:[function(a,b,c){"use strict";var d=a("./DOMProperty"),e=d.injection.MUST_USE_PROPERTY,f=d.injection.HAS_BOOLEAN_VALUE,g=d.injection.HAS_NUMERIC_VALUE,h=d.injection.HAS_POSITIVE_NUMERIC_VALUE,i=d.injection.HAS_OVERLOADED_BOOLEAN_VALUE,j={isCustomAttribute:RegExp.prototype.test.bind(new RegExp("^(data|aria)-["+d.ATTRIBUTE_NAME_CHAR+"]*$")), +Properties:{accept:0,acceptCharset:0,accessKey:0,action:0,allowFullScreen:f,allowTransparency:0,alt:0,as:0,async:f,autoComplete:0,autoPlay:f,capture:f,cellPadding:0,cellSpacing:0,charSet:0,challenge:0,checked:e|f,cite:0,classID:0,className:0,cols:h,colSpan:0,content:0,contentEditable:0,contextMenu:0,controls:f,coords:0,crossOrigin:0,data:0,dateTime:0,default:f,defer:f,dir:0,disabled:f,download:i,draggable:0,encType:0,form:0,formAction:0,formEncType:0,formMethod:0,formNoValidate:f,formTarget:0,frameBorder:0,headers:0,height:0,hidden:f,high:0,href:0,hrefLang:0,htmlFor:0,httpEquiv:0,icon:0,id:0,inputMode:0,integrity:0,is:0,keyParams:0,keyType:0,kind:0,label:0,lang:0,list:0,loop:f,low:0,manifest:0,marginHeight:0,marginWidth:0,max:0,maxLength:0,media:0,mediaGroup:0,method:0,min:0,minLength:0,multiple:e|f,muted:e|f,name:0,nonce:0,noValidate:f,open:f,optimum:0,pattern:0,placeholder:0,playsInline:f,poster:0,preload:0,profile:0,radioGroup:0,readOnly:f,referrerPolicy:0,rel:0,required:f,reversed:f,role:0,rows:h,rowSpan:g,sandbox:0,scope:0,scoped:f,scrolling:0,seamless:f,selected:e|f,shape:0,size:h,sizes:0,span:h,spellCheck:0,src:0,srcDoc:0,srcLang:0,srcSet:0,start:g,step:0,style:0,summary:0,tabIndex:0,target:0,title:0,type:0,useMap:0,value:0,width:0,wmode:0,wrap:0,about:0,datatype:0,inlist:0,prefix:0,property:0,resource:0,typeof:0,vocab:0,autoCapitalize:0,autoCorrect:0,autoSave:0,color:0,itemProp:0,itemScope:f,itemType:0,itemID:0,itemRef:0,results:0,security:0,unselectable:0},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{}};b.exports=j},{"./DOMProperty":524}],536:[function(a,b,c){"use strict";function d(a){var b=/[=:]/g,c={"=":"=0",":":"=2"},d=(""+a).replace(b,function(a){return c[a]});return"$"+d}function e(a){var b=/(=0|=2)/g,c={"=0":"=","=2":":"},d="."===a[0]&&"$"===a[1]?a.substring(2):a.substring(1);return(""+d).replace(b,function(a){return c[a]})}var f={escape:d,unescape:e};b.exports=f},{}],537:[function(a,b,c){"use strict";function d(a){null!=a.checkedLink&&null!=a.valueLink?h("87"):void 0}function e(a){d(a),null!=a.value||null!=a.onChange?h("88"):void 0}function f(a){d(a),null!=a.checked||null!=a.onChange?h("89"):void 0}function g(a){if(a){var b=a.getName();if(b)return" Check the render method of `"+b+"`."}return""}var h=a("./reactProdInvariant"),i=a("react/lib/React"),j=a("./ReactPropTypesSecret"),k=(a("fbjs/lib/invariant"),a("fbjs/lib/warning"),{button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0}),l={value:function(a,b,c){return!a[b]||k[a.type]||a.onChange||a.readOnly||a.disabled?null:new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")},checked:function(a,b,c){return!a[b]||a.onChange||a.readOnly||a.disabled?null:new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")},onChange:i.PropTypes.func},m={},n={checkPropTypes:function(a,b,c){for(var d in l){if(l.hasOwnProperty(d))var e=l[d](b,d,a,"prop",null,j);if(e instanceof Error&&!(e.message in m)){m[e.message]=!0;g(c)}}},getValue:function(a){return a.valueLink?(e(a),a.valueLink.value):a.value},getChecked:function(a){return a.checkedLink?(f(a),a.checkedLink.value):a.checked},executeOnChange:function(a,b){return a.valueLink?(e(a),a.valueLink.requestChange(b.target.value)):a.checkedLink?(f(a),a.checkedLink.requestChange(b.target.checked)):a.onChange?a.onChange.call(void 0,b):void 0}};b.exports=n},{"./ReactPropTypesSecret":585,"./reactProdInvariant":637,"fbjs/lib/invariant":316,"fbjs/lib/warning":324,"react/lib/React":650}],538:[function(a,b,c){"use strict";var d=a("./reactProdInvariant"),e=(a("fbjs/lib/invariant"),function(a){var b=this;if(b.instancePool.length){var c=b.instancePool.pop();return b.call(c,a),c}return new b(a)}),f=function(a,b){var c=this;if(c.instancePool.length){var d=c.instancePool.pop();return c.call(d,a,b),d}return new c(a,b)},g=function(a,b,c){var d=this;if(d.instancePool.length){var e=d.instancePool.pop();return d.call(e,a,b,c),e}return new d(a,b,c)},h=function(a,b,c,d){var e=this;if(e.instancePool.length){var f=e.instancePool.pop();return e.call(f,a,b,c,d),f}return new e(a,b,c,d)},i=function(a,b,c,d,e){var f=this;if(f.instancePool.length){var g=f.instancePool.pop();return f.call(g,a,b,c,d,e),g}return new f(a,b,c,d,e)},j=function(a){var b=this;a instanceof b?void 0:d("25"),a.destructor(),b.instancePool.length=0||null!=b.is}function o(a){var b=a.type;m(b),this._currentElement=a,this._tag=b.toLowerCase(),this._namespaceURI=null,this._renderedChildren=null,this._previousStyle=null,this._previousStyleCopy=null,this._hostNode=null,this._hostParent=null,this._rootNodeID=0,this._domID=0,this._hostContainerInfo=null,this._wrapperState=null,this._topLevelWrapper=null,this._flags=0}var p=a("./reactProdInvariant"),q=a("object-assign"),r=a("./AutoFocusUtils"),s=a("./CSSPropertyOperations"),t=a("./DOMLazyTree"),u=a("./DOMNamespaces"),v=a("./DOMProperty"),w=a("./DOMPropertyOperations"),x=a("./EventPluginHub"),y=a("./EventPluginRegistry"),z=a("./ReactBrowserEventEmitter"),A=a("./ReactDOMComponentFlags"),B=a("./ReactDOMComponentTree"),C=a("./ReactDOMInput"),D=a("./ReactDOMOption"),E=a("./ReactDOMSelect"),F=a("./ReactDOMTextarea"),G=(a("./ReactInstrumentation"),a("./ReactMultiChild")),H=a("./ReactServerRenderingTransaction"),I=(a("fbjs/lib/emptyFunction"),a("./escapeTextContentForBrowser")),J=(a("fbjs/lib/invariant"),a("./isEventSupported"),a("fbjs/lib/shallowEqual"),a("./validateDOMNesting"),a("fbjs/lib/warning"),A),K=x.deleteListener,L=B.getNodeFromInstance,M=z.listenTo,N=y.registrationNameModules,O={string:!0,number:!0},P="style",Q="__html",R={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null},S=11,T={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},U={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},V={listing:!0,pre:!0,textarea:!0},W=q({menuitem:!0},U),X=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,Y={},Z={}.hasOwnProperty,$=1;o.displayName="ReactDOMComponent",o.Mixin={mountComponent:function(a,b,c,d){this._rootNodeID=$++,this._domID=c._idCounter++,this._hostParent=b,this._hostContainerInfo=c;var f=this._currentElement.props;switch(this._tag){case"audio":case"form":case"iframe":case"img":case"link":case"object":case"source":case"video":this._wrapperState={listeners:null},a.getReactMountReady().enqueue(k,this);break;case"input":C.mountWrapper(this,f,b),f=C.getHostProps(this,f),a.getReactMountReady().enqueue(k,this);break;case"option":D.mountWrapper(this,f,b),f=D.getHostProps(this,f);break;case"select":E.mountWrapper(this,f,b),f=E.getHostProps(this,f),a.getReactMountReady().enqueue(k,this);break;case"textarea":F.mountWrapper(this,f,b),f=F.getHostProps(this,f),a.getReactMountReady().enqueue(k,this)}e(this,f);var g,l;null!=b?(g=b._namespaceURI,l=b._tag):c._tag&&(g=c._namespaceURI,l=c._tag),(null==g||g===u.svg&&"foreignobject"===l)&&(g=u.html),g===u.html&&("svg"===this._tag?g=u.svg:"math"===this._tag&&(g=u.mathml)),this._namespaceURI=g;var m;if(a.useCreateElement){var n,o=c._ownerDocument;if(g===u.html)if("script"===this._tag){var p=o.createElement("div"),q=this._currentElement.type;p.innerHTML="<"+q+">",n=p.removeChild(p.firstChild)}else n=f.is?o.createElement(this._currentElement.type,f.is):o.createElement(this._currentElement.type);else n=o.createElementNS(g,this._currentElement.type);B.precacheNode(this,n),this._flags|=J.hasCachedChildNodes,this._hostParent||w.setAttributeForRoot(n),this._updateDOMProperties(null,f,a);var s=t(n);this._createInitialChildren(a,f,d,s),m=s}else{var v=this._createOpenTagMarkupAndPutListeners(a,f),x=this._createContentMarkup(a,f,d);m=!x&&U[this._tag]?v+"/>":v+">"+x+""}switch(this._tag){case"input":a.getReactMountReady().enqueue(h,this),f.autoFocus&&a.getReactMountReady().enqueue(r.focusDOMComponent,this);break;case"textarea":a.getReactMountReady().enqueue(i,this),f.autoFocus&&a.getReactMountReady().enqueue(r.focusDOMComponent,this);break;case"select":f.autoFocus&&a.getReactMountReady().enqueue(r.focusDOMComponent,this);break;case"button":f.autoFocus&&a.getReactMountReady().enqueue(r.focusDOMComponent,this);break;case"option":a.getReactMountReady().enqueue(j,this)}return m},_createOpenTagMarkupAndPutListeners:function(a,b){var c="<"+this._currentElement.type;for(var d in b)if(b.hasOwnProperty(d)){var e=b[d];if(null!=e)if(N.hasOwnProperty(d))e&&f(this,d,e,a);else{d===P&&(e&&(e=this._previousStyleCopy=q({},b.style)),e=s.createMarkupForStyles(e,this));var g=null;null!=this._tag&&n(this._tag,b)?R.hasOwnProperty(d)||(g=w.createMarkupForCustomAttribute(d,e)):g=w.createMarkupForProperty(d,e),g&&(c+=" "+g)}}return a.renderToStaticMarkup?c:(this._hostParent||(c+=" "+w.createMarkupForRoot()),c+=" "+w.createMarkupForID(this._domID))},_createContentMarkup:function(a,b,c){var d="",e=b.dangerouslySetInnerHTML;if(null!=e)null!=e.__html&&(d=e.__html);else{var f=O[typeof b.children]?b.children:null,g=null!=f?null:b.children;if(null!=f)d=I(f);else if(null!=g){var h=this.mountChildren(g,a,c);d=h.join("")}}return V[this._tag]&&"\n"===d.charAt(0)?"\n"+d:d},_createInitialChildren:function(a,b,c,d){var e=b.dangerouslySetInnerHTML;if(null!=e)null!=e.__html&&t.queueHTML(d,e.__html);else{var f=O[typeof b.children]?b.children:null,g=null!=f?null:b.children;if(null!=f)t.queueText(d,f);else if(null!=g)for(var h=this.mountChildren(g,a,c),i=0;i"},receiveComponent:function(){},getHostNode:function(){return f.getNodeFromInstance(this)},unmountComponent:function(){f.uncacheNode(this)}}),b.exports=g},{"./DOMLazyTree":522,"./ReactDOMComponentTree":547,"object-assign":509}],550:[function(a,b,c){"use strict";var d={useCreateElement:!0,useFiber:!1};b.exports=d},{}],551:[function(a,b,c){"use strict";var d=a("./DOMChildrenOperations"),e=a("./ReactDOMComponentTree"),f={dangerouslyProcessChildrenUpdates:function(a,b){var c=e.getNodeFromInstance(a);d.processUpdates(c,b)}};b.exports=f},{"./DOMChildrenOperations":521,"./ReactDOMComponentTree":547}],552:[function(a,b,c){"use strict";function d(){this._rootNodeID&&l.updateWrapper(this)}function e(a){var b=this._currentElement.props,c=i.executeOnChange(b,a);k.asap(d,this);var e=b.name;if("radio"===b.type&&null!=e){for(var g=j.getNodeFromInstance(this),h=g;h.parentNode;)h=h.parentNode;for(var l=h.querySelectorAll("input[name="+JSON.stringify(""+e)+'][type="radio"]'),m=0;mb.end?(c=b.end,d=b.start):(c=b.start,d=b.end),e.moveToElementText(a),e.moveStart("character",c),e.setEndPoint("EndToStart",e),e.moveEnd("character",d-c),e.select()}function h(a,b){if(window.getSelection){var c=window.getSelection(),d=a[k()].length,e=Math.min(b.start,d),f=void 0===b.end?e:Math.min(b.end,d);if(!c.extend&&e>f){var g=f;f=e,e=g}var h=j(a,e),i=j(a,f);if(h&&i){var l=document.createRange();l.setStart(h.node,h.offset),c.removeAllRanges(),e>f?(c.addRange(l),c.extend(i.node,i.offset)):(l.setEnd(i.node,i.offset),c.addRange(l))}}}var i=a("fbjs/lib/ExecutionEnvironment"),j=a("./getNodeForCharacterOffset"),k=a("./getTextContentAccessor"),l=i.canUseDOM&&"selection"in document&&!("getSelection"in window),m={getOffsets:l?e:f,setOffsets:l?g:h};b.exports=m},{"./getNodeForCharacterOffset":630,"./getTextContentAccessor":631,"fbjs/lib/ExecutionEnvironment":302}],558:[function(a,b,c){"use strict";var d=a("./reactProdInvariant"),e=a("object-assign"),f=a("./DOMChildrenOperations"),g=a("./DOMLazyTree"),h=a("./ReactDOMComponentTree"),i=a("./escapeTextContentForBrowser"),j=(a("fbjs/lib/invariant"),a("./validateDOMNesting"),function(a){this._currentElement=a,this._stringText=""+a,this._hostNode=null,this._hostParent=null,this._domID=0,this._mountIndex=0,this._closingComment=null,this._commentNodes=null});e(j.prototype,{mountComponent:function(a,b,c,d){var e=c._idCounter++,f=" react-text: "+e+" ",j=" /react-text ";if(this._domID=e,this._hostParent=b,a.useCreateElement){var k=c._ownerDocument,l=k.createComment(f),m=k.createComment(j),n=g(k.createDocumentFragment());return g.queueChild(n,g(l)),this._stringText&&g.queueChild(n,g(k.createTextNode(this._stringText))),g.queueChild(n,g(m)),h.precacheNode(this,l),this._closingComment=m,n}var o=i(this._stringText);return a.renderToStaticMarkup?o:""+o+""},receiveComponent:function(a,b){if(a!==this._currentElement){this._currentElement=a;var c=""+a;if(c!==this._stringText){this._stringText=c;var d=this.getHostNode();f.replaceDelimitedText(d[0],d[1],c)}}},getHostNode:function(){var a=this._commentNodes;if(a)return a;if(!this._closingComment)for(var b=h.getNodeFromInstance(this),c=b.nextSibling;;){if(null==c?d("67",this._domID):void 0,8===c.nodeType&&" /react-text "===c.nodeValue){this._closingComment=c;break}c=c.nextSibling}return a=[this._hostNode,this._closingComment],this._commentNodes=a,a},unmountComponent:function(){this._closingComment=null,this._commentNodes=null,h.uncacheNode(this)}}),b.exports=j},{"./DOMChildrenOperations":521,"./DOMLazyTree":522,"./ReactDOMComponentTree":547,"./escapeTextContentForBrowser":619,"./reactProdInvariant":637,"./validateDOMNesting":643,"fbjs/lib/invariant":316,"object-assign":509}],559:[function(a,b,c){"use strict";function d(){this._rootNodeID&&k.updateWrapper(this)}function e(a){var b=this._currentElement.props,c=h.executeOnChange(b,a);return j.asap(d,this),c}var f=a("./reactProdInvariant"),g=a("object-assign"),h=a("./LinkedValueUtils"),i=a("./ReactDOMComponentTree"),j=a("./ReactUpdates"),k=(a("fbjs/lib/invariant"),a("fbjs/lib/warning"),{getHostProps:function(a,b){null!=b.dangerouslySetInnerHTML?f("91"):void 0;var c=g({},b,{value:void 0,defaultValue:void 0,children:""+a._wrapperState.initialValue,onChange:a._wrapperState.onChange});return c},mountWrapper:function(a,b){var c=h.getValue(b),d=c;if(null==c){var g=b.defaultValue,i=b.children;null!=i&&(null!=g?f("92"):void 0,Array.isArray(i)&&(i.length<=1?void 0:f("93"),i=i[0]),g=""+i),null==g&&(g=""),d=g}a._wrapperState={initialValue:""+d,listeners:null,onChange:e.bind(a)}},updateWrapper:function(a){var b=a._currentElement.props,c=i.getNodeFromInstance(a),d=h.getValue(b);if(null!=d){var e=""+d;e!==c.value&&(c.value=e),null==b.defaultValue&&(c.defaultValue=e)}null!=b.defaultValue&&(c.defaultValue=b.defaultValue)},postMountWrapper:function(a){var b=i.getNodeFromInstance(a);b.value=b.textContent}});b.exports=k},{"./LinkedValueUtils":537,"./ReactDOMComponentTree":547,"./ReactUpdates":594,"./reactProdInvariant":637,"fbjs/lib/invariant":316,"fbjs/lib/warning":324,"object-assign":509}],560:[function(a,b,c){"use strict";function d(a,b){"_hostNode"in a?void 0:i("33"),"_hostNode"in b?void 0:i("33");for(var c=0,d=a;d;d=d._hostParent)c++;for(var e=0,f=b;f;f=f._hostParent)e++;for(;c-e>0;)a=a._hostParent,c--;for(;e-c>0;)b=b._hostParent,e--;for(var g=c;g--;){if(a===b)return a;a=a._hostParent,b=b._hostParent}return null}function e(a,b){"_hostNode"in a?void 0:i("35"),"_hostNode"in b?void 0:i("35");for(;b;){if(b===a)return!0;b=b._hostParent}return!1}function f(a){return"_hostNode"in a?void 0:i("36"),a._hostParent}function g(a,b,c){for(var d=[];a;)d.push(a),a=a._hostParent;var e;for(e=d.length;e-- >0;)b(d[e],"captured",c);for(e=0;e0;)c(i[j],"captured",f)}var i=a("./reactProdInvariant");a("fbjs/lib/invariant");b.exports={isAncestor:e,getLowestCommonAncestor:d,getParentInstance:f,traverseTwoPhase:g,traverseEnterLeave:h}},{"./reactProdInvariant":637,"fbjs/lib/invariant":316}],561:[function(a,b,c){"use strict";function d(a,b){null!=b&&"string"==typeof b.type&&(b.type.indexOf("-")>=0||b.props.is||f(a,b))}var e,f=(a("./DOMProperty"),a("./EventPluginRegistry"),a("react/lib/ReactComponentTreeHook"),a("fbjs/lib/warning"),function(a,b){var c=[];for(var d in b.props){var f=e(b.type,d,a);f||c.push(d)}c.map(function(a){return"`"+a+"`"}).join(", ");1===c.length||c.length>1}),g={onBeforeMountComponent:function(a,b){d(a,b)},onBeforeUpdateComponent:function(a,b){d(a,b)}};b.exports=g},{"./DOMProperty":524,"./EventPluginRegistry":531,"fbjs/lib/warning":324,"react/lib/ReactComponentTreeHook":655}],562:[function(a,b,c){"use strict";function d(a,b,c,d,e,f,g,h){try{b.call(c,d,e,f,g,h)}catch(b){w[a]=!0}}function e(a,b,c,e,f,g){for(var h=0;h1&&void 0!==arguments[1]&&arguments[1]}function j(a,b){0!==A&&(G&&!H&&(H=!0),E=u(),F=0,D=a,G=b)}function k(a,b){0!==A&&(G===b||H||(H=!0),x&&B.push({timerType:b,instanceID:a,duration:u()-E-F}),E=0,F=0,D=null,G=null)}function l(){var a={startTime:E,nestedFlushStartTime:u(),debugID:D,timerType:G};z.push(a),E=0,F=0,D=null,G=null}function m(){var a=z.pop(),b=a.startTime,c=a.nestedFlushStartTime,d=a.debugID,e=a.timerType,f=u()-c;E=b,F+=f,D=d,G=e}function n(a){if(!x||!J)return!1;var b=s.getElement(a);if(null==b||"object"!=typeof b)return!1;var c="string"==typeof b.type;return!c}function o(a,b){if(n(a)){var c=a+"::"+b;I=u(),performance.mark(c)}}function p(a,b){if(n(a)){var c=a+"::"+b,d=s.getDisplayName(a)||"Unknown",e=u();if(e-I>.1){var f=d+" ["+b+"]";performance.measure(f,c)}performance.clearMarks(c),performance.clearMeasures(f)}}var q=a("./ReactInvalidSetStateWarningHook"),r=a("./ReactHostOperationHistoryHook"),s=a("react/lib/ReactComponentTreeHook"),t=a("fbjs/lib/ExecutionEnvironment"),u=a("fbjs/lib/performanceNow"),v=(a("fbjs/lib/warning"),[]),w={},x=!1,y=[],z=[],A=0,B=[],C=0,D=null,E=0,F=0,G=null,H=!1,I=0,J="undefined"!=typeof performance&&"function"==typeof performance.mark&&"function"==typeof performance.clearMarks&&"function"==typeof performance.measure&&"function"==typeof performance.clearMeasures,K={addHook:function(a){v.push(a)},removeHook:function(a){for(var b=0;b/,f=/^<\!\-\-/,g={CHECKSUM_ATTR_NAME:"data-react-checksum",addChecksumToMarkup:function(a){var b=d(a);return f.test(a)?a:a.replace(e," "+g.CHECKSUM_ATTR_NAME+'="'+b+'"$&')},canReuseMarkup:function(a,b){var c=b.getAttribute(g.CHECKSUM_ATTR_NAME);c=c&&parseInt(c,10);var e=d(a);return e===c}};b.exports=g},{"./adler32":615}],579:[function(a,b,c){"use strict";function d(a,b){for(var c=Math.min(a.length,b.length),d=0;d.":"function"==typeof b?" Instead of passing a class like Foo, pass React.createElement(Foo) or .":null!=b&&void 0!==b.props?" This may be caused by unintentionally loading two independent copies of React.":"");var g,h=q.createElement(M,{child:b});if(a){var i=w.get(a);g=i._processChildContext(i._context)}else g=B;var k=m(c);if(k){var l=k._currentElement,o=l.props.child;if(E(o,b)){var p=k._renderedComponent.getPublicInstance(),r=d&&function(){d.call(p)};return N._updateRootComponent(k,h,g,c,r), +p}N.unmountComponentAtNode(c)}var s=e(c),t=s&&!!f(s),u=j(c),v=t&&!k&&!u,x=N._renderNewRootComponent(h,c,v,g)._renderedComponent.getPublicInstance();return d&&d.call(x),x},render:function(a,b,c){return N._renderSubtreeIntoContainer(null,a,b,c)},unmountComponentAtNode:function(a){k(a)?void 0:n("40");var b=m(a);if(!b){j(a),1===a.nodeType&&a.hasAttribute(G);return!1}return delete K[b._instance.rootID],A.batchedUpdates(i,b,a,!1),!0},_mountImageIntoNode:function(a,b,c,f,g){if(k(b)?void 0:n("41"),f){var h=e(b);if(x.canReuseMarkup(a,h))return void s.precacheNode(c,h);var i=h.getAttribute(x.CHECKSUM_ATTR_NAME);h.removeAttribute(x.CHECKSUM_ATTR_NAME);var j=h.outerHTML;h.setAttribute(x.CHECKSUM_ATTR_NAME,i);var l=a,m=d(l,j),p=" (client) "+l.substring(m-20,m+20)+"\n (server) "+j.substring(m-20,m+20);b.nodeType===I?n("42",p):void 0}if(b.nodeType===I?n("43"):void 0,g.useCreateElement){for(;b.lastChild;)b.removeChild(b.lastChild);o.insertTreeBefore(b,a,null)}else D(b,a),s.precacheNode(c,b.firstChild)}};b.exports=N},{"./DOMLazyTree":522,"./DOMProperty":524,"./ReactBrowserEventEmitter":539,"./ReactDOMComponentTree":547,"./ReactDOMContainerInfo":548,"./ReactDOMFeatureFlags":550,"./ReactFeatureFlags":570,"./ReactInstanceMap":575,"./ReactInstrumentation":576,"./ReactMarkupChecksum":578,"./ReactReconciler":587,"./ReactUpdateQueue":593,"./ReactUpdates":594,"./instantiateReactComponent":633,"./reactProdInvariant":637,"./setInnerHTML":639,"./shouldUpdateReactComponent":641,"fbjs/lib/emptyObject":309,"fbjs/lib/invariant":316,"fbjs/lib/warning":324,"react/lib/React":650,"react/lib/ReactCurrentOwner":656}],580:[function(a,b,c){"use strict";function d(a,b,c){return{type:"INSERT_MARKUP",content:a,fromIndex:null,fromNode:null,toIndex:c,afterNode:b}}function e(a,b,c){return{type:"MOVE_EXISTING",content:null,fromIndex:a._mountIndex,fromNode:m.getHostNode(a),toIndex:c,afterNode:b}}function f(a,b){return{type:"REMOVE_NODE",content:null,fromIndex:a._mountIndex,fromNode:b,toIndex:null,afterNode:null}}function g(a){return{type:"SET_MARKUP",content:a,fromIndex:null,fromNode:null,toIndex:null,afterNode:null}}function h(a){return{type:"TEXT_CONTENT",content:a,fromIndex:null,fromNode:null,toIndex:null,afterNode:null}}function i(a,b){return b&&(a=a||[],a.push(b)),a}function j(a,b){l.processChildrenUpdates(a,b)}var k=a("./reactProdInvariant"),l=a("./ReactComponentEnvironment"),m=(a("./ReactInstanceMap"),a("./ReactInstrumentation"),a("react/lib/ReactCurrentOwner"),a("./ReactReconciler")),n=a("./ReactChildReconciler"),o=(a("fbjs/lib/emptyFunction"),a("./flattenChildren")),p=(a("fbjs/lib/invariant"),{Mixin:{_reconcilerInstantiateChildren:function(a,b,c){return n.instantiateChildren(a,b,c)},_reconcilerUpdateChildren:function(a,b,c,d,e,f){var g,h=0;return g=o(b,h),n.updateChildren(a,g,c,d,e,this,this._hostContainerInfo,f,h),g},mountChildren:function(a,b,c){var d=this._reconcilerInstantiateChildren(a,b,c);this._renderedChildren=d;var e=[],f=0;for(var g in d)if(d.hasOwnProperty(g)){var h=d[g],i=0,j=m.mountComponent(h,b,this,this._hostContainerInfo,c,i);h._mountIndex=f++,e.push(j)}return e},updateTextContent:function(a){var b=this._renderedChildren;n.unmountChildren(b,!1);for(var c in b)b.hasOwnProperty(c)&&k("118");var d=[h(a)];j(this,d)},updateMarkup:function(a){var b=this._renderedChildren;n.unmountChildren(b,!1);for(var c in b)b.hasOwnProperty(c)&&k("118");var d=[g(a)];j(this,d)},updateChildren:function(a,b,c){this._updateChildren(a,b,c)},_updateChildren:function(a,b,c){var d=this._renderedChildren,e={},f=[],g=this._reconcilerUpdateChildren(d,a,f,e,b,c);if(g||d){var h,k=null,l=0,n=0,o=0,p=null;for(h in g)if(g.hasOwnProperty(h)){var q=d&&d[h],r=g[h];q===r?(k=i(k,this.moveChild(q,p,l,n)),n=Math.max(q._mountIndex,n),q._mountIndex=l):(q&&(n=Math.max(q._mountIndex,n)),k=i(k,this._mountChildAtIndex(r,f[o],p,l,b,c)),o++),l++,p=m.getHostNode(r)}for(h in e)e.hasOwnProperty(h)&&(k=i(k,this._unmountChild(d[h],e[h])));k&&j(this,k),this._renderedChildren=g}},unmountChildren:function(a){var b=this._renderedChildren;n.unmountChildren(b,a),this._renderedChildren=null},moveChild:function(a,b,c,d){if(a._mountIndex0&&void 0!==arguments[0]?arguments[0]:e();return d(),[]}function g(){arguments.length>0&&void 0!==arguments[0]?arguments[0]:e();return d(),[]}function h(){arguments.length>0&&void 0!==arguments[0]?arguments[0]:e();return d(),[]}function i(){arguments.length>0&&void 0!==arguments[0]?arguments[0]:e();return d(),[]}function j(a){return void d()}function k(a){return void d()}function l(a){return void d()}function m(a){return void d()}function n(a){return t=!0,m(a)}function o(a){return u=!0,h(a)}function p(){return void d()}function q(){return void d()}function r(){return d(),!1}var s=(a("object-assign"),a("./ReactDebugTool"),a("fbjs/lib/warning"),!1),t=!1,u=!1,v={getLastMeasurements:e,getExclusive:f,getInclusive:g,getWasted:h,getOperations:i,printExclusive:j,printInclusive:k,printWasted:l,printOperations:m,start:p,stop:q,isRunning:r,printDOM:n,getMeasurementsSummaryMap:o};b.exports=v},{"./ReactDebugTool":562,"fbjs/lib/warning":324,"object-assign":509}],584:[function(a,b,c){"use strict";var d={};b.exports=d},{}],585:[function(a,b,c){"use strict";var d="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";b.exports=d},{}],586:[function(a,b,c){"use strict";function d(a){this.reinitializeTransaction(),this.renderToStaticMarkup=!1,this.reactMountReady=f.getPooled(null),this.useCreateElement=a}var e=a("object-assign"),f=a("./CallbackQueue"),g=a("./PooledClass"),h=a("./ReactBrowserEventEmitter"),i=a("./ReactInputSelection"),j=(a("./ReactInstrumentation"),a("./Transaction")),k=a("./ReactUpdateQueue"),l={initialize:i.getSelectionInformation,close:i.restoreSelection},m={initialize:function(){var a=h.isEnabled();return h.setEnabled(!1),a},close:function(a){h.setEnabled(a)}},n={initialize:function(){this.reactMountReady.reset()},close:function(){this.reactMountReady.notifyAll()}},o=[l,m,n],p={getTransactionWrappers:function(){return o},getReactMountReady:function(){return this.reactMountReady},getUpdateQueue:function(){return k},checkpoint:function(){return this.reactMountReady.checkpoint()},rollback:function(a){this.reactMountReady.rollback(a)},destructor:function(){f.release(this.reactMountReady),this.reactMountReady=null}};e(d.prototype,j,p),g.addPoolingTo(d),b.exports=d},{"./CallbackQueue":519,"./PooledClass":538,"./ReactBrowserEventEmitter":539,"./ReactInputSelection":574,"./ReactInstrumentation":576,"./ReactUpdateQueue":593,"./Transaction":612,"object-assign":509}],587:[function(a,b,c){"use strict";function d(){e.attachRefs(this,this._currentElement)}var e=a("./ReactRef"),f=(a("./ReactInstrumentation"),a("fbjs/lib/warning"),{mountComponent:function(a,b,c,e,f,g){var h=a.mountComponent(b,c,e,f,g);return a._currentElement&&null!=a._currentElement.ref&&b.getReactMountReady().enqueue(d,a),h},getHostNode:function(a){return a.getHostNode()},unmountComponent:function(a,b){e.detachRefs(a,a._currentElement),a.unmountComponent(b)},receiveComponent:function(a,b,c,f){var g=a._currentElement;if(b!==g||f!==a._context){var h=e.shouldUpdateRefs(g,b);h&&e.detachRefs(a,g),a.receiveComponent(b,c,f),h&&a._currentElement&&null!=a._currentElement.ref&&c.getReactMountReady().enqueue(d,a)}},performUpdateIfNecessary:function(a,b,c){a._updateBatchNumber===c&&a.performUpdateIfNecessary(b)}});b.exports=f},{"./ReactInstrumentation":576,"./ReactRef":588,"fbjs/lib/warning":324}],588:[function(a,b,c){"use strict";function d(a,b,c){"function"==typeof a?a(b.getPublicInstance()):f.addComponentAsRefTo(b,a,c)}function e(a,b,c){"function"==typeof a?a(null):f.removeComponentAsRefFrom(b,a,c)}var f=a("./ReactOwner"),g={};g.attachRefs=function(a,b){if(null!==b&&"object"==typeof b){var c=b.ref;null!=c&&d(c,a,b._owner)}},g.shouldUpdateRefs=function(a,b){var c=null,d=null;null!==a&&"object"==typeof a&&(c=a.ref,d=a._owner);var e=null,f=null;return null!==b&&"object"==typeof b&&(e=b.ref,f=b._owner),c!==e||"string"==typeof e&&f!==d},g.detachRefs=function(a,b){if(null!==b&&"object"==typeof b){var c=b.ref;null!=c&&e(c,a,b._owner)}},b.exports=g},{"./ReactOwner":582}],589:[function(a,b,c){"use strict";function d(a){this.reinitializeTransaction(),this.renderToStaticMarkup=a,this.useCreateElement=!1,this.updateQueue=new h(this)}var e=a("object-assign"),f=a("./PooledClass"),g=a("./Transaction"),h=(a("./ReactInstrumentation"),a("./ReactServerUpdateQueue")),i=[],j={enqueue:function(){}},k={getTransactionWrappers:function(){return i},getReactMountReady:function(){return j},getUpdateQueue:function(){return this.updateQueue},destructor:function(){},checkpoint:function(){},rollback:function(){}};e(d.prototype,g,k),f.addPoolingTo(d),b.exports=d},{"./PooledClass":538,"./ReactInstrumentation":576,"./ReactServerUpdateQueue":590,"./Transaction":612,"object-assign":509}],590:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b){}var f=a("./ReactUpdateQueue"),g=(a("fbjs/lib/warning"),function(){function a(b){d(this,a),this.transaction=b}return a.prototype.isMounted=function(a){return!1},a.prototype.enqueueCallback=function(a,b,c){this.transaction.isInTransaction()&&f.enqueueCallback(a,b,c)},a.prototype.enqueueForceUpdate=function(a){this.transaction.isInTransaction()?f.enqueueForceUpdate(a):e(a,"forceUpdate")},a.prototype.enqueueReplaceState=function(a,b){this.transaction.isInTransaction()?f.enqueueReplaceState(a,b):e(a,"replaceState")},a.prototype.enqueueSetState=function(a,b){this.transaction.isInTransaction()?f.enqueueSetState(a,b):e(a,"setState")},a}());b.exports=g},{"./ReactUpdateQueue":593,"fbjs/lib/warning":324}],591:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c){var d=l.ReactReconcileTransaction.getPooled(!0);a._render(b,d,c),l.ReactReconcileTransaction.release(d)}var f=a("./reactProdInvariant"),g=a("object-assign"),h=a("react/lib/React"),i=a("./ReactDefaultInjection"),j=a("./ReactCompositeComponent"),k=a("./ReactReconciler"),l=a("./ReactUpdates"),m=a("fbjs/lib/emptyObject"),n=(a("./getNextDebugID"),a("fbjs/lib/invariant"),function(){function a(b){d(this,a),this._renderedOutput=b,this._currentElement=b}return a.prototype.mountComponent=function(){},a.prototype.receiveComponent=function(a){this._renderedOutput=a,this._currentElement=a},a.prototype.unmountComponent=function(){},a.prototype.getHostNode=function(){},a.prototype.getPublicInstance=function(){return null},a}()),o=function(a){this.construct(a)};g(o.prototype,j,{_constructComponent:j._constructComponentWithoutOwner,_instantiateReactComponent:function(a){return new n(a)},_replaceNodeWithMarkup:function(){},_renderValidatedComponent:j._renderValidatedComponentWithoutOwnerOrContext});var p=function(){function a(){d(this,a),this._instance=null}return a.prototype.getMountedInstance=function(){return this._instance?this._instance._instance:null},a.prototype.render=function(a,b){return i.inject(),h.isValidElement(a)?void 0:f("12","function"==typeof a?" Instead of passing a component class, make sure to instantiate it by passing it to React.createElement.":""),"string"==typeof a.type?f("13",a.type):void 0,b||(b=m),l.batchedUpdates(e,this,a,b),this.getRenderOutput()},a.prototype.getRenderOutput=function(){return this._instance&&this._instance._renderedComponent&&this._instance._renderedComponent._renderedOutput||null},a.prototype.unmount=function(){this._instance&&k.unmountComponent(this._instance,!1)},a.prototype._render=function(a,b,c){if(this._instance)k.receiveComponent(this._instance,a,b,c);else{var d=new o(a);k.mountComponent(d,b,null,null,c,0),this._instance=d}},a}();b.exports=p},{"./ReactCompositeComponent":543,"./ReactDefaultInjection":564,"./ReactReconciler":587,"./ReactUpdates":594,"./getNextDebugID":629,"./reactProdInvariant":637,"fbjs/lib/emptyObject":309,"fbjs/lib/invariant":316,"object-assign":509,"react/lib/React":650}],592:[function(a,b,c){"use strict";function d(a){}function e(a,b){if(!a||!a.getPublicInstance)return[];var c=a.getPublicInstance(),d=b(c)?[c]:[],f=a._currentElement;if(y.isDOMComponent(c)){var g,h=a._renderedChildren;for(g in h)h.hasOwnProperty(g)&&(d=d.concat(e(h[g],b)))}else o.isValidElement(f)&&"function"==typeof f.type&&(d=d.concat(e(a._renderedComponent,b)));return d}function f(a){return function(b,c){var e;o.isValidElement(b)?i("14"):void 0,y.isDOMComponent(b)?e=w(b):b.tagName&&(e=b);var f=m.eventNameDispatchConfigs[a],g=new d;g.target=e,g.type=a.toLowerCase();var h=new u(f,q.getInstanceFromNode(e),g,e);h.persist(),j(h,c),f.phasedRegistrationNames?n.accumulateTwoPhaseDispatches(h):n.accumulateDirectDispatches(h),t.batchedUpdates(function(){l.enqueueEvents(h),l.processEventQueue(!0)})}}function g(){y.Simulate={};var a;for(a in m.eventNameDispatchConfigs)y.Simulate[a]=f(a)}function h(a){return function(b,c){var e=new d(a);j(e,c),y.isDOMComponent(b)?y.simulateNativeEventOnDOMComponent(a,b,e):b.tagName&&y.simulateNativeEventOnNode(a,b,e)}}var i=a("./reactProdInvariant"),j=a("object-assign"),k=a("./EventConstants"),l=a("./EventPluginHub"),m=a("./EventPluginRegistry"),n=a("./EventPropagators"),o=a("react/lib/React"),p=a("./ReactDOM"),q=a("./ReactDOMComponentTree"),r=a("./ReactBrowserEventEmitter"),s=a("./ReactInstanceMap"),t=a("./ReactUpdates"),u=a("./SyntheticEvent"),v=a("./ReactShallowRenderer"),w=a("./findDOMNode"),x=(a("fbjs/lib/invariant"),k.topLevelTypes),y={renderIntoDocument:function(a){var b=document.createElement("div");return p.render(a,b)},isElement:function(a){return o.isValidElement(a)},isElementOfType:function(a,b){return o.isValidElement(a)&&a.type===b},isDOMComponent:function(a){return!(!a||1!==a.nodeType||!a.tagName)},isDOMComponentElement:function(a){return!!(a&&o.isValidElement(a)&&a.tagName)},isCompositeComponent:function(a){return!y.isDOMComponent(a)&&(null!=a&&"function"==typeof a.render&&"function"==typeof a.setState)},isCompositeComponentWithType:function(a,b){if(!y.isCompositeComponent(a))return!1;var c=s.get(a),d=c._currentElement.type;return d===b},isCompositeComponentElement:function(a){if(!o.isValidElement(a))return!1;var b=a.type.prototype;return"function"==typeof b.render&&"function"==typeof b.setState},isCompositeComponentElementWithType:function(a,b){var c=s.get(a),d=c._currentElement.type;return!(!y.isCompositeComponentElement(a)||d!==b)},getRenderedChildOfCompositeComponent:function(a){if(!y.isCompositeComponent(a))return null;var b=s.get(a);return b._renderedComponent.getPublicInstance()},findAllInRenderedTree:function(a,b){return a?(y.isCompositeComponent(a)?void 0:i("10"),e(s.get(a),b)):[]},scryRenderedDOMComponentsWithClass:function(a,b){return y.findAllInRenderedTree(a,function(a){if(y.isDOMComponent(a)){var c=a.className;"string"!=typeof c&&(c=a.getAttribute("class")||"");var d=c.split(/\s+/);return Array.isArray(b)||(void 0===b?i("11"):void 0,b=b.split(/\s+/)),b.every(function(a){return d.indexOf(a)!==-1})}return!1})},findRenderedDOMComponentWithClass:function(a,b){var c=y.scryRenderedDOMComponentsWithClass(a,b);if(1!==c.length)throw new Error("Did not find exactly one match (found: "+c.length+") for class:"+b);return c[0]},scryRenderedDOMComponentsWithTag:function(a,b){return y.findAllInRenderedTree(a,function(a){return y.isDOMComponent(a)&&a.tagName.toUpperCase()===b.toUpperCase()})},findRenderedDOMComponentWithTag:function(a,b){var c=y.scryRenderedDOMComponentsWithTag(a,b);if(1!==c.length)throw new Error("Did not find exactly one match (found: "+c.length+") for tag:"+b);return c[0]},scryRenderedComponentsWithType:function(a,b){return y.findAllInRenderedTree(a,function(a){return y.isCompositeComponentWithType(a,b)})},findRenderedComponentWithType:function(a,b){var c=y.scryRenderedComponentsWithType(a,b);if(1!==c.length)throw new Error("Did not find exactly one match (found: "+c.length+") for componentType:"+b);return c[0]},mockComponent:function(a,b){return b=b||a.mockTagName||"div",a.prototype.render.mockImplementation(function(){return o.createElement(b,null,this.props.children)}),this},simulateNativeEventOnNode:function(a,b,c){c.target=b,r.ReactEventListener.dispatchEvent(a,c)},simulateNativeEventOnDOMComponent:function(a,b,c){y.simulateNativeEventOnNode(a,w(b),c)},nativeTouchData:function(a,b){return{touches:[{pageX:a,pageY:b}]}},createRenderer:function(){return new v},Simulate:null,SimulateNative:{}},z=l.injection.injectEventPluginOrder;l.injection.injectEventPluginOrder=function(){z.apply(this,arguments),g()};var A=l.injection.injectEventPluginsByName;l.injection.injectEventPluginsByName=function(){A.apply(this,arguments),g()},g(),Object.keys(x).forEach(function(a){var b=0===a.indexOf("top")?a.charAt(3).toLowerCase()+a.substr(4):a;y.SimulateNative[b]=h(a)}),b.exports=y},{"./EventConstants":529,"./EventPluginHub":530,"./EventPluginRegistry":531,"./EventPropagators":533,"./ReactBrowserEventEmitter":539,"./ReactDOM":544,"./ReactDOMComponentTree":547,"./ReactInstanceMap":575,"./ReactShallowRenderer":591,"./ReactUpdates":594,"./SyntheticEvent":603,"./findDOMNode":620,"./reactProdInvariant":637,"fbjs/lib/invariant":316,"object-assign":509,"react/lib/React":650}],593:[function(a,b,c){"use strict";function d(a){i.enqueueUpdate(a)}function e(a){var b=typeof a;if("object"!==b)return b;var c=a.constructor&&a.constructor.name||b,d=Object.keys(a);return d.length>0&&d.length<20?c+" (keys: "+d.join(", ")+")":c}function f(a,b){var c=h.get(a);if(!c){return null}return c}var g=a("./reactProdInvariant"),h=(a("react/lib/ReactCurrentOwner"),a("./ReactInstanceMap")),i=(a("./ReactInstrumentation"),a("./ReactUpdates")),j=(a("fbjs/lib/invariant"),a("fbjs/lib/warning"),{isMounted:function(a){var b=h.get(a);return!!b&&!!b._renderedComponent},enqueueCallback:function(a,b,c){j.validateCallback(b,c);var e=f(a);return e?(e._pendingCallbacks?e._pendingCallbacks.push(b):e._pendingCallbacks=[b],void d(e)):null},enqueueCallbackInternal:function(a,b){a._pendingCallbacks?a._pendingCallbacks.push(b):a._pendingCallbacks=[b],d(a)},enqueueForceUpdate:function(a){var b=f(a,"forceUpdate");b&&(b._pendingForceUpdate=!0,d(b))},enqueueReplaceState:function(a,b){var c=f(a,"replaceState");c&&(c._pendingStateQueue=[b],c._pendingReplaceState=!0,d(c))},enqueueSetState:function(a,b){var c=f(a,"setState");if(c){var e=c._pendingStateQueue||(c._pendingStateQueue=[]);e.push(b),d(c)}},enqueueElementInternal:function(a,b,c){a._pendingElement=b,a._context=c,d(a)},validateCallback:function(a,b){a&&"function"!=typeof a?g("122",b,e(a)):void 0}});b.exports=j},{"./ReactInstanceMap":575,"./ReactInstrumentation":576,"./ReactUpdates":594,"./reactProdInvariant":637,"fbjs/lib/invariant":316,"fbjs/lib/warning":324,"react/lib/ReactCurrentOwner":656}],594:[function(a,b,c){"use strict";function d(){B.ReactReconcileTransaction&&v?void 0:k("123")}function e(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=m.getPooled(),this.reconcileTransaction=B.ReactReconcileTransaction.getPooled(!0)}function f(a,b,c,e,f,g){return d(),v.batchedUpdates(a,b,c,e,f,g)}function g(a,b){return a._mountOrder-b._mountOrder}function h(a){var b=a.dirtyComponentsLength;b!==r.length?k("124",b,r.length):void 0,r.sort(g),s++;for(var c=0;c]/;b.exports=e},{}],620:[function(a,b,c){"use strict";function d(a){if(null==a)return null;if(1===a.nodeType)return a;var b=g.get(a);return b?(b=h(b),b?f.getNodeFromInstance(b):null):void("function"==typeof a.render?e("44"):e("45",Object.keys(a)))}var e=a("./reactProdInvariant"),f=(a("react/lib/ReactCurrentOwner"),a("./ReactDOMComponentTree")),g=a("./ReactInstanceMap"),h=a("./getHostComponentFromComposite");a("fbjs/lib/invariant"),a("fbjs/lib/warning");b.exports=d},{"./ReactDOMComponentTree":547,"./ReactInstanceMap":575,"./getHostComponentFromComposite":627,"./reactProdInvariant":637,"fbjs/lib/invariant":316,"fbjs/lib/warning":324,"react/lib/ReactCurrentOwner":656}],621:[function(a,b,c){(function(c){"use strict";function d(a,b,c,d){if(a&&"object"==typeof a){var e=a,f=void 0===e[c];f&&null!=b&&(e[c]=b)}}function e(a,b){if(null==a)return a;var c={};return f(a,d,c),c}var f=(a("./KeyEscapeUtils"),a("./traverseAllChildren"));a("fbjs/lib/warning");"undefined"!=typeof c&&c.env,1,b.exports=e}).call(this,a("_process"))},{"./KeyEscapeUtils":536,"./traverseAllChildren":642,_process:510,"fbjs/lib/warning":324,"react/lib/ReactComponentTreeHook":655}],622:[function(a,b,c){"use strict";function d(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}b.exports=d},{}],623:[function(a,b,c){"use strict";function d(a){var b,c=a.keyCode;return"charCode"in a?(b=a.charCode,0===b&&13===c&&(b=13)):b=c,b>=32||13===b?b:0}b.exports=d},{}],624:[function(a,b,c){"use strict";function d(a){if(a.key){var b=f[a.key]||a.key;if("Unidentified"!==b)return b}if("keypress"===a.type){var c=e(a);return 13===c?"Enter":String.fromCharCode(c)}return"keydown"===a.type||"keyup"===a.type?g[a.keyCode]||"Unidentified":""}var e=a("./getEventCharCode"),f={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},g={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};b.exports=d},{"./getEventCharCode":623}],625:[function(a,b,c){"use strict";function d(a){var b=this,c=b.nativeEvent;if(c.getModifierState)return c.getModifierState(a);var d=f[a];return!!d&&!!c[d]}function e(a){return d}var f={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};b.exports=e},{}],626:[function(a,b,c){"use strict";function d(a){var b=a.target||a.srcElement||window;return b.correspondingUseElement&&(b=b.correspondingUseElement),3===b.nodeType?b.parentNode:b}b.exports=d},{}],627:[function(a,b,c){"use strict";function d(a){for(var b;(b=a._renderedNodeType)===e.COMPOSITE;)a=a._renderedComponent;return b===e.HOST?a._renderedComponent:b===e.EMPTY?null:void 0}var e=a("./ReactNodeTypes");b.exports=d},{"./ReactNodeTypes":581}],628:[function(a,b,c){"use strict";function d(a){var b=a&&(e&&a[e]||a[f]);if("function"==typeof b)return b}var e="function"==typeof Symbol&&Symbol.iterator,f="@@iterator";b.exports=d},{}],629:[function(a,b,c){"use strict";function d(){return e++}var e=1;b.exports=d},{}],630:[function(a,b,c){"use strict";function d(a){for(;a&&a.firstChild;)a=a.firstChild;return a}function e(a){for(;a;){if(a.nextSibling)return a.nextSibling;a=a.parentNode}}function f(a,b){for(var c=d(a),f=0,g=0;c;){if(3===c.nodeType){if(g=f+c.textContent.length,f<=b&&g>=b)return{node:c,offset:b-f};f=g}c=d(e(c))}}b.exports=f},{}],631:[function(a,b,c){"use strict";function d(){return!f&&e.canUseDOM&&(f="textContent"in document.documentElement?"textContent":"innerText"),f}var e=a("fbjs/lib/ExecutionEnvironment"),f=null;b.exports=d},{"fbjs/lib/ExecutionEnvironment":302}],632:[function(a,b,c){"use strict";function d(a,b){var c={};return c[a.toLowerCase()]=b.toLowerCase(),c["Webkit"+a]="webkit"+b,c["Moz"+a]="moz"+b,c["ms"+a]="MS"+b,c["O"+a]="o"+b.toLowerCase(),c}function e(a){if(h[a])return h[a];if(!g[a])return a;var b=g[a];for(var c in b)if(b.hasOwnProperty(c)&&c in i)return h[a]=b[c];return""}var f=a("fbjs/lib/ExecutionEnvironment"),g={animationend:d("Animation","AnimationEnd"),animationiteration:d("Animation","AnimationIteration"),animationstart:d("Animation","AnimationStart"),transitionend:d("Transition","TransitionEnd")},h={},i={};f.canUseDOM&&(i=document.createElement("div").style,"AnimationEvent"in window||(delete g.animationend.animation,delete g.animationiteration.animation,delete g.animationstart.animation),"TransitionEvent"in window||delete g.transitionend.transition),b.exports=e},{"fbjs/lib/ExecutionEnvironment":302}],633:[function(a,b,c){"use strict";function d(a){if(a){var b=a.getName();if(b)return" Check the render method of `"+b+"`."}return""}function e(a){return"function"==typeof a&&"undefined"!=typeof a.prototype&&"function"==typeof a.prototype.mountComponent&&"function"==typeof a.prototype.receiveComponent}function f(a,b){var c;if(null===a||a===!1)c=j.create(f);else if("object"==typeof a){var h=a;!h||"function"!=typeof h.type&&"string"!=typeof h.type?g("130",null==h.type?h.type:typeof h.type,d(h._owner)):void 0,"string"==typeof h.type?c=k.createInternalComponent(h):e(h.type)?(c=new h.type(h),c.getHostNode||(c.getHostNode=c.getNativeNode)):c=new l(h)}else"string"==typeof a||"number"==typeof a?c=k.createInstanceForText(a):g("131",typeof a);return c._mountIndex=0,c._mountImage=null,c}var g=a("./reactProdInvariant"),h=a("object-assign"),i=a("./ReactCompositeComponent"),j=a("./ReactEmptyComponent"),k=a("./ReactHostComponent"),l=(a("./getNextDebugID"),a("fbjs/lib/invariant"),a("fbjs/lib/warning"),function(a){this.construct(a)});h(l.prototype,i,{_instantiateReactComponent:f}),b.exports=f},{"./ReactCompositeComponent":543,"./ReactEmptyComponent":566,"./ReactHostComponent":571,"./getNextDebugID":629,"./reactProdInvariant":637,"fbjs/lib/invariant":316,"fbjs/lib/warning":324,"object-assign":509}],634:[function(a,b,c){"use strict";/** + * Checks if an event is supported in the current execution environment. + * + * NOTE: This will not work correctly for non-generic events such as `change`, + * `reset`, `load`, `error`, and `select`. + * + * Borrows from Modernizr. + * + * @param {string} eventNameSuffix Event name, e.g. "click". + * @param {?boolean} capture Check if the capture phase is supported. + * @return {boolean} True if the event is supported. + * @internal + * @license Modernizr 3.0.0pre (Custom Build) | MIT + */ +function d(a,b){if(!f.canUseDOM||b&&!("addEventListener"in document))return!1;var c="on"+a,d=c in document;if(!d){var g=document.createElement("div");g.setAttribute(c,"return;"),d="function"==typeof g[c]}return!d&&e&&"wheel"===a&&(d=document.implementation.hasFeature("Events.wheel","3.0")),d}var e,f=a("fbjs/lib/ExecutionEnvironment");f.canUseDOM&&(e=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0),b.exports=d},{"fbjs/lib/ExecutionEnvironment":302}],635:[function(a,b,c){"use strict";function d(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return"input"===b?!!e[a.type]:"textarea"===b}var e={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};b.exports=d},{}],636:[function(a,b,c){"use strict";function d(a){return'"'+e(a)+'"'}var e=a("./escapeTextContentForBrowser");b.exports=d},{"./escapeTextContentForBrowser":619}],637:[function(a,b,c){"use strict";function d(a){for(var b=arguments.length-1,c="Minified React error #"+a+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+a,d=0;d]/,i=a("./createMicrosoftUnsafeLocalFunction"),j=i(function(a,b){if(a.namespaceURI!==f.svg||"innerHTML"in a)a.innerHTML=b;else{d=d||document.createElement("div"),d.innerHTML=""+b+"";for(var c=d.firstChild;c.firstChild;)a.appendChild(c.firstChild)}});if(e.canUseDOM){var k=document.createElement("div");k.innerHTML=" ",""===k.innerHTML&&(j=function(a,b){if(a.parentNode&&a.parentNode.replaceChild(a,a),g.test(b)||"<"===b[0]&&h.test(b)){a.innerHTML=String.fromCharCode(65279)+b;var c=a.firstChild;1===c.data.length?a.removeChild(c):c.deleteData(0,1)}else a.innerHTML=b}),k=null}b.exports=j},{"./DOMNamespaces":523,"./createMicrosoftUnsafeLocalFunction":617,"fbjs/lib/ExecutionEnvironment":302}],640:[function(a,b,c){"use strict";var d=a("fbjs/lib/ExecutionEnvironment"),e=a("./escapeTextContentForBrowser"),f=a("./setInnerHTML"),g=function(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType)return void(c.nodeValue=b)}a.textContent=b};d.canUseDOM&&("textContent"in document.documentElement||(g=function(a,b){return 3===a.nodeType?void(a.nodeValue=b):void f(a,e(b))})),b.exports=g},{"./escapeTextContentForBrowser":619,"./setInnerHTML":639,"fbjs/lib/ExecutionEnvironment":302}],641:[function(a,b,c){"use strict";function d(a,b){var c=null===a||a===!1,d=null===b||b===!1;if(c||d)return c===d;var e=typeof a,f=typeof b;return"string"===e||"number"===e?"string"===f||"number"===f:"object"===f&&a.type===b.type&&a.key===b.key}b.exports=d},{}],642:[function(a,b,c){"use strict";function d(a,b){return a&&"object"==typeof a&&null!=a.key?j.escape(a.key):b.toString(36)}function e(a,b,c,f){var m=typeof a;if("undefined"!==m&&"boolean"!==m||(a=null),null===a||"string"===m||"number"===m||"object"===m&&a.$$typeof===h)return c(f,a,""===b?k+d(a,0):b),1;var n,o,p=0,q=""===b?k:b+l;if(Array.isArray(a))for(var r=0;r=0},q=10,r=750,s={x:null,y:null},t=null,u={x:{page:"pageX",client:"clientX",envScroll:"currentPageScrollLeft"},y:{page:"pageY",client:"clientY",envScroll:"currentPageScrollTop"}},v=["topTouchStart","topTouchCancel","topTouchEnd","topTouchMove"],w=["topMouseDown","topMouseMove","topMouseUp"].concat(v),x={touchTap:{phasedRegistrationNames:{bubbled:m({onTouchTap:null}),captured:m({onTouchTapCapture:null})},dependencies:w}},y=function(){return Date.now?Date.now:function(){return+new Date}}();b.exports=f},{"./TouchEventUtils":645,"fbjs/lib/keyOf":319,"react-dom/lib/EventConstants":529,"react-dom/lib/EventPluginUtils":532,"react-dom/lib/EventPropagators":533,"react-dom/lib/SyntheticUIEvent":610,"react-dom/lib/ViewportMetrics":613}],645:[function(a,b,c){var d={extractSingleTouch:function(a){var b=a.touches,c=a.changedTouches,d=b&&b.length>0,e=c&&c.length>0;return!d&&e?c[0]:d?b[0]:a}};b.exports=d},{}],646:[function(a,b,c){b.exports=function(a,b){if(a&&b-a<750)return!0}},{}],647:[function(a,b,c){var d=(a("fbjs/lib/invariant"),a("./defaultClickRejectionStrategy")),e=!1;b.exports=function(b){b=b||{};var c=b.shouldRejectClick||d;e=!0,a("react-dom/lib/EventPluginHub").injection.injectEventPluginsByName({TapEventPlugin:a("./TapEventPlugin.js")(c)})}},{"./TapEventPlugin.js":644,"./defaultClickRejectionStrategy":646,"fbjs/lib/invariant":316,"react-dom/lib/EventPluginHub":530}],648:[function(a,b,c){arguments[4][536][0].apply(c,arguments)},{dup:536}],649:[function(a,b,c){arguments[4][538][0].apply(c,arguments)},{"./reactProdInvariant":675,dup:538,"fbjs/lib/invariant":316}],650:[function(a,b,c){"use strict";var d=a("object-assign"),e=a("./ReactChildren"),f=a("./ReactComponent"),g=a("./ReactPureComponent"),h=a("./ReactClass"),i=a("./ReactDOMFactories"),j=a("./ReactElement"),k=a("./ReactPropTypes"),l=a("./ReactVersion"),m=a("./onlyChild"),n=(a("fbjs/lib/warning"),j.createElement),o=j.createFactory,p=j.cloneElement,q=d,r={Children:{map:e.map,forEach:e.forEach,count:e.count,toArray:e.toArray,only:m},Component:f,PureComponent:g,createElement:n,cloneElement:p,isValidElement:j.isValidElement,PropTypes:k,createClass:h.createClass,createFactory:o,createMixin:function(a){return a},DOM:i,version:l,__spread:q};b.exports=r},{"./ReactChildren":652,"./ReactClass":653,"./ReactComponent":654,"./ReactDOMFactories":657,"./ReactElement":658,"./ReactElementValidator":660,"./ReactPropTypes":664,"./ReactPureComponent":666,"./ReactVersion":669,"./onlyChild":674,"fbjs/lib/warning":324,"object-assign":509}],651:[function(a,b,c){"use strict";var d=a("react-dom/lib/ReactDOM"),e=a("react-dom/lib/ReactInstanceMap");c.getReactDOM=function(){return d},c.getReactInstanceMap=function(){return e}},{"react-dom/lib/ReactDOM":544,"react-dom/lib/ReactInstanceMap":575,"react-dom/lib/ReactPerf":583,"react-dom/lib/ReactTestUtils":592}],652:[function(a,b,c){"use strict";function d(a){return(""+a).replace(u,"$&/")}function e(a,b){this.func=a,this.context=b,this.count=0}function f(a,b,c){var d=a.func,e=a.context;d.call(e,b,a.count++)}function g(a,b,c){if(null==a)return a;var d=e.getPooled(b,c);r(a,f,d),e.release(d)}function h(a,b,c,d){this.result=a,this.keyPrefix=b,this.func=c,this.context=d,this.count=0}function i(a,b,c){var e=a.result,f=a.keyPrefix,g=a.func,h=a.context,i=g.call(h,b,a.count++);Array.isArray(i)?j(i,e,c,q.thatReturnsArgument):null!=i&&(p.isValidElement(i)&&(i=p.cloneAndReplaceKey(i,f+(!i.key||b&&b.key===i.key?"":d(i.key)+"/")+c)),e.push(i))}function j(a,b,c,e,f){var g="";null!=c&&(g=d(c)+"/");var j=h.getPooled(b,g,e,f);r(a,i,j),h.release(j)}function k(a,b,c){if(null==a)return a;var d=[];return j(a,d,null,b,c),d}function l(a,b,c){return null}function m(a,b){return r(a,l,null)}function n(a){var b=[];return j(a,b,null,q.thatReturnsArgument),b}var o=a("./PooledClass"),p=a("./ReactElement"),q=a("fbjs/lib/emptyFunction"),r=a("./traverseAllChildren"),s=o.twoArgumentPooler,t=o.fourArgumentPooler,u=/\/+/g;e.prototype.destructor=function(){this.func=null,this.context=null,this.count=0},o.addPoolingTo(e,s),h.prototype.destructor=function(){this.result=null,this.keyPrefix=null,this.func=null,this.context=null,this.count=0},o.addPoolingTo(h,t);var v={forEach:g,map:k,mapIntoWithKeyPrefixInternal:j,count:m,toArray:n};b.exports=v},{"./PooledClass":649,"./ReactElement":658,"./traverseAllChildren":676,"fbjs/lib/emptyFunction":308}],653:[function(a,b,c){"use strict";function d(a){return a}function e(a,b){var c=u.hasOwnProperty(b)?u[b]:null;w.hasOwnProperty(b)&&("OVERRIDE_BASE"!==c?m("73",b):void 0),a&&("DEFINE_MANY"!==c&&"DEFINE_MANY_MERGED"!==c?m("74",b):void 0)}function f(a,b){if(b){"function"==typeof b?m("75"):void 0,p.isValidElement(b)?m("76"):void 0;var c=a.prototype,d=c.__reactAutoBindPairs;b.hasOwnProperty(s)&&v.mixins(a,b.mixins);for(var f in b)if(b.hasOwnProperty(f)&&f!==s){var g=b[f],h=c.hasOwnProperty(f);if(e(h,f),v.hasOwnProperty(f))v[f](a,g);else{var k=u.hasOwnProperty(f),l="function"==typeof g,n=l&&!k&&!h&&b.autobind!==!1;if(n)d.push(f,g),c[f]=g;else if(h){var o=u[f];!k||"DEFINE_MANY_MERGED"!==o&&"DEFINE_MANY"!==o?m("77",o,f):void 0,"DEFINE_MANY_MERGED"===o?c[f]=i(c[f],g):"DEFINE_MANY"===o&&(c[f]=j(c[f],g))}else c[f]=g}}}else;}function g(a,b){if(b)for(var c in b){var d=b[c];if(b.hasOwnProperty(c)){var e=c in v;e?m("78",c):void 0;var f=c in a;f?m("79",c):void 0,a[c]=d}}}function h(a,b){a&&b&&"object"==typeof a&&"object"==typeof b?void 0:m("80");for(var c in b)b.hasOwnProperty(c)&&(void 0!==a[c]?m("81",c):void 0,a[c]=b[c]);return a}function i(a,b){return function(){var c=a.apply(this,arguments),d=b.apply(this,arguments);if(null==c)return d;if(null==d)return c;var e={};return h(e,c),h(e,d),e}}function j(a,b){return function(){a.apply(this,arguments),b.apply(this,arguments)}}function k(a,b){var c=b.bind(a);return c}function l(a){for(var b=a.__reactAutoBindPairs,c=0;c1){for(var q=Array(p),r=0;r1){for(var t=Array(s),u=0;u.")}return b}function f(a,b){if(a._store&&!a._store.validated&&null==a.key){a._store.validated=!0;var c=m.uniqueKey||(m.uniqueKey={}),d=e(b);if(!c[d]){c[d]=!0;var f="";a&&a._owner&&a._owner!==i.current&&(f=" It was passed a child from "+a._owner.getName()+".")}}}function g(a,b){if("object"==typeof a)if(Array.isArray(a))for(var c=0;c>"),B={array:g("array"),bool:g("boolean"),func:g("function"),number:g("number"),object:g("object"),string:g("string"),symbol:g("symbol"),any:h(),arrayOf:i,element:j(),instanceOf:k,node:o(),objectOf:m,oneOf:l,oneOfType:n,shape:p};e.prototype=Error.prototype,b.exports=B},{"./ReactElement":658,"./ReactPropTypeLocationNames":663,"./ReactPropTypesSecret":665,"./getIteratorFn":673,"fbjs/lib/emptyFunction":308,"fbjs/lib/warning":324}],665:[function(a,b,c){arguments[4][585][0].apply(c,arguments)},{dup:585}],666:[function(a,b,c){"use strict";function d(a,b,c){this.props=a,this.context=b,this.refs=i,this.updater=c||h}function e(){}var f=a("object-assign"),g=a("./ReactComponent"),h=a("./ReactNoopUpdateQueue"),i=a("fbjs/lib/emptyObject");e.prototype=g.prototype,d.prototype=new e,d.prototype.constructor=d,f(d.prototype,g.prototype),d.prototype.isPureReactComponent=!0,b.exports=d},{"./ReactComponent":654,"./ReactNoopUpdateQueue":662,"fbjs/lib/emptyObject":309,"object-assign":509}],667:[function(a,b,c){"use strict";var d=a("./flattenChildren"),e={getChildMapping:function(a,b){return a?d(a):a},mergeChildMappings:function(a,b){function c(c){return b.hasOwnProperty(c)?b[c]:a[c]}a=a||{},b=b||{};var d={},e=[];for(var f in a)b.hasOwnProperty(f)?e.length&&(d[f]=e,e=[]):e.push(f);var g,h={};for(var i in b){if(d.hasOwnProperty(i))for(g=0;g=0;c--){var e=b[c];a=e(a)}return a}}c.__esModule=!0,c.default=d},{}],679:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}c.__esModule=!0;var e=a("./utils/createEagerElementUtil"),f=d(e),g=a("./isReferentiallyTransparentFunctionComponent"),h=d(g),i=function(a){var b=(0,h.default)(a);return function(c,d){return(0,f.default)(!1,b,a,c,d)}};c.default=i},{"./isReferentiallyTransparentFunctionComponent":683,"./utils/createEagerElementUtil":687}],680:[function(a,b,c){"use strict";c.__esModule=!0;var d=function(a,b){arguments.length<=2||void 0===arguments[2]||arguments[2],!(arguments.length<=3||void 0===arguments[3])&&arguments[3];return a};c.default=d},{"./wrapDisplayName":688}],681:[function(a,b,c){"use strict";c.__esModule=!0;var d=function(a){if("string"==typeof a)return a;if(a)return a.displayName||a.name||"Component"};c.default=d},{}],682:[function(a,b,c){"use strict";c.__esModule=!0;var d=function(a){return Boolean(a&&a.prototype&&"object"==typeof a.prototype.isReactComponent)};c.default=d},{}],683:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}c.__esModule=!0;var e=a("./isClassComponent.js"),f=d(e),g=function(a){return Boolean(!("function"!=typeof a||(0,f.default)(a)||a.defaultProps||a.contextTypes||a.propTypes))};c.default=g},{"./isClassComponent.js":682}],684:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}c.__esModule=!0;var e=a("./shouldUpdate"),f=d(e),g=a("./shallowEqual"),h=d(g),i=a("./createHelper"),j=d(i),k=(0,f.default)(function(a,b){return!(0,h.default)(a,b)});c.default=(0,j.default)(k,"pure",!0,!0)},{"./createHelper":680,"./shallowEqual":685,"./shouldUpdate":686}],685:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}c.__esModule=!0;var e=a("fbjs/lib/shallowEqual"),f=d(e);c.default=f.default},{"fbjs/lib/shallowEqual":323}],686:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("react"),i=a("./createHelper"),j=d(i),k=a("./createEagerFactory"),l=d(k),m=function(a){return function(b){var c=(0,l.default)(b);return function(b){function d(){return e(this,d),f(this,b.apply(this,arguments))}return g(d,b),d.prototype.shouldComponentUpdate=function(b){return a(this.props,b)},d.prototype.render=function(){return c(this.props)},d}(h.Component)}};c.default=(0,j.default)(m,"shouldUpdate")},{"./createEagerFactory":679,"./createHelper":680,react:677}],687:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}c.__esModule=!0;var e=Object.assign||function(a){for(var b=1;b=0;--d){var e=this.tryEntries[d],f=e.completion;if("root"===e.tryLoc)return b("end");if(e.tryLoc<=this.prev){var g=s.call(e,"catchLoc"),h=s.call(e,"finallyLoc");if(g&&h){if(this.prev=0;--c){var d=this.tryEntries[c];if(d.tryLoc<=this.prev&&s.call(d,"finallyLoc")&&this.prev=0;--b){var c=this.tryEntries[b];if(c.finallyLoc===a)return this.complete(c.completion,c.afterLoc),n(c),C}},catch:function(a){for(var b=this.tryEntries.length-1;b>=0;--b){var c=this.tryEntries[b];if(c.tryLoc===a){var d=c.completion;if("throw"===d.type){var e=d.arg;n(c)}return e}}throw new Error("illegal catch attempt")},delegateYield:function(a,b,c){return this.delegate={iterator:p(a),resultName:b,nextLoc:c},C}}}("object"==typeof c?c:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,a("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:510}],690:[function(a,b,c){b.exports=function(a){for(var b=1;b-1?b:a}function n(a,b){b=b||{};var c=b.body;if("string"==typeof a)this.url=a;else{if(a.bodyUsed)throw new TypeError("Already read");this.url=a.url,this.credentials=a.credentials,b.headers||(this.headers=new e(a.headers)),this.method=a.method,this.mode=a.mode,c||null==a._bodyInit||(c=a._bodyInit,a.bodyUsed=!0)}if(this.credentials=b.credentials||this.credentials||"omit",!b.headers&&this.headers||(this.headers=new e(b.headers)),this.method=m(b.method||this.method||"GET"),this.mode=b.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&c)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(c)}function o(a){var b=new FormData;return a.trim().split("&").forEach(function(a){if(a){var c=a.split("="),d=c.shift().replace(/\+/g," "),e=c.join("=").replace(/\+/g," ");b.append(decodeURIComponent(d),decodeURIComponent(e))}}),b}function p(a){var b=new e;return a.split("\r\n").forEach(function(a){var c=a.split(":"),d=c.shift().trim();if(d){var e=c.join(":").trim();b.append(d,e)}}),b}function q(a,b){b||(b={}),this.type="default",this.status="status"in b?b.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in b?b.statusText:"OK",this.headers=new e(b.headers),this.url=b.url||"",this._initBody(a)}if(!a.fetch){var r={searchParams:"URLSearchParams"in a,iterable:"Symbol"in a&&"iterator"in Symbol,blob:"FileReader"in a&&"Blob"in a&&function(){try{return new Blob,!0}catch(a){return!1}}(),formData:"FormData"in a,arrayBuffer:"ArrayBuffer"in a};if(r.arrayBuffer)var s=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],t=function(a){return a&&DataView.prototype.isPrototypeOf(a)},u=ArrayBuffer.isView||function(a){return a&&s.indexOf(Object.prototype.toString.call(a))>-1};e.prototype.append=function(a,d){a=b(a),d=c(d);var e=this.map[a];e||(e=[],this.map[a]=e),e.push(d)},e.prototype.delete=function(a){delete this.map[b(a)]},e.prototype.get=function(a){var c=this.map[b(a)];return c?c[0]:null},e.prototype.getAll=function(a){return this.map[b(a)]||[]},e.prototype.has=function(a){return this.map.hasOwnProperty(b(a))},e.prototype.set=function(a,d){this.map[b(a)]=[c(d)]},e.prototype.forEach=function(a,b){Object.getOwnPropertyNames(this.map).forEach(function(c){this.map[c].forEach(function(d){a.call(b,d,c,this)},this)},this)},e.prototype.keys=function(){var a=[];return this.forEach(function(b,c){a.push(c)}),d(a)},e.prototype.values=function(){var a=[];return this.forEach(function(b){a.push(b)}),d(a)},e.prototype.entries=function(){var a=[];return this.forEach(function(b,c){a.push([c,b])}),d(a)},r.iterable&&(e.prototype[Symbol.iterator]=e.prototype.entries);var v=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];n.prototype.clone=function(){return new n(this,{body:this._bodyInit})},l.call(n.prototype),l.call(q.prototype),q.prototype.clone=function(){return new q(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new e(this.headers),url:this.url})},q.error=function(){var a=new q(null,{status:0,statusText:""});return a.type="error",a};var w=[301,302,303,307,308];q.redirect=function(a,b){if(w.indexOf(b)===-1)throw new RangeError("Invalid status code");return new q(null,{status:b,headers:{location:a}})},a.Headers=e,a.Request=n,a.Response=q,a.fetch=function(a,b){return new Promise(function(c,d){var e=new n(a,b),f=new XMLHttpRequest;f.onload=function(){var a={status:f.status,statusText:f.statusText,headers:p(f.getAllResponseHeaders()||"")};a.url="responseURL"in f?f.responseURL:a.headers.get("X-Request-URL");var b="response"in f?f.response:f.responseText;c(new q(b,a))},f.onerror=function(){d(new TypeError("Network request failed"))},f.ontimeout=function(){d(new TypeError("Network request failed"))},f.open(e.method,e.url,!0),"include"===e.credentials&&(f.withCredentials=!0),"responseType"in f&&r.blob&&(f.responseType="blob"),e.headers.forEach(function(a,b){f.setRequestHeader(b,a)}),f.send("undefined"==typeof e._bodyInit?null:e._bodyInit)})},a.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},{}],693:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}Object.defineProperty(c,"__esModule",{value:!0});var e=a("react"),f=d(e),g=a("material-ui/RefreshIndicator"),h=d(g),i={refresh:{display:"inline-block",position:"relative"}},j=function(){return f.default.createElement("div",{className:"yoast-wizard-overlay-loader"},f.default.createElement(h.default,{size:40,left:10,top:100,status:"loading",style:i.refresh,"justify-content":"center","z-index":11}))};c.default=j},{"material-ui/RefreshIndicator":471,react:677}],694:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var h=Object.assign||function(a){for(var b=1;b0&&(a[e].previous=b[d-1]),d>-1&&d0&&void 0!==arguments[0]?arguments[0]:[],c={};return b.forEach(function(b){a.props.fields[b]&&(c[b]=a.props.fields[b])}),c}},{key:"postStep",value:function(a,b){a&&(this.setState({isLoading:!0,errorMessage:""}),this.clickedButton=b.currentTarget,(0,u.default)(this.props.endpoint.url,{data:this.refs.step.state.fieldValues[this.state.currentStepId],headers:this.props.endpoint.headers}).then(this.handleSuccessful.bind(this,a)).catch(this.handleFailure.bind(this)))}},{key:"getFirstStep",value:function(a){return Object.getOwnPropertyNames(a)[0]}},{key:"handleSuccessful",value:function(a){this.setState({isLoading:!1,currentStepId:a}),-1===this.clickedButton.className.indexOf("step")&&m.default.findDOMNode(this.refs.step.refs.stepContainer).focus()}},{key:"handleFailure",value:function(){this.setState({isLoading:!1,errorMessage:(0,F.default)({mixedString:this.props.translate("A problem occurred when saving the current step, {{link}}please file a bug report{{/link}} describing what step you are on and which changes you want to make (if any)."),components:{link:k.default.createElement("a",{href:"https://yoa.st/bugreport",target:"_blank"})}})})}},{key:"setNextStep",value:function(a){var b=this.getCurrentStep();this.postStep(b.next,a)}},{key:"setPreviousStep",value:function(a){var b=this.getCurrentStep();this.postStep(b.previous,a)}},{key:"getCurrentStep",value:function(){return this.state.steps[this.state.currentStepId]}},{key:"getCurrentStepNumber",value:function(){var a=this.state.currentStepId,b=Object.keys(this.state.steps),c=b.indexOf(a);return c>-1?c+1:0}},{key:"getNavigationbutton",value:function(a,b,c,d){var e=this,f=!1;return"next"!==a||c.next||(b.label=this.props.translate("Close"),b["aria-label"]=this.props.translate("Close the Wizard"),b.onClick=function(){return""!==e.props.finishUrl?void(window.location.href=e.props.finishUrl):void history.go(-1)}),"previous"!==a||c.previous||(f=!0),f?"":k.default.createElement(w.default,h({className:d},b))}},{key:"render",value:function(){var a=this,b=this.getCurrentStep(),c=this.getNavigationbutton("previous",{label:this.props.translate("Previous"),"aria-label":this.props.translate("Previous step"),onClick:this.setPreviousStep.bind(this),disableFocusRipple:!0,disableTouchRipple:!0,disableKeyboardFocus:!0},b,"yoast-wizard--button yoast-wizard--button__previous"),d=this.getNavigationbutton("next",{label:this.props.translate("Next"),"aria-label":this.props.translate("Next step"),primary:!0,onClick:this.setNextStep.bind(this),disableFocusRipple:!0,disableTouchRipple:!0,disableKeyboardFocus:!0},b,"yoast-wizard--button yoast-wizard--button__next");return k.default.createElement(A.default,{muiTheme:D.default},k.default.createElement("div",{className:"yoast-wizard-body"},k.default.createElement(y.default,{height:93,width:200}),k.default.createElement(q.default,{steps:this.props.steps,stepIndex:this.getCurrentStepNumber()-1,onClick:function(b,c){return a.postStep(b,c)}}),k.default.createElement("div",{className:"yoast-wizard-container"},k.default.createElement("div",{className:"yoast-wizard"},this.renderErrorMessage(),k.default.createElement(o.default,{ref:"step",currentStep:this.state.currentStepId,title:b.title,fields:b.fields,customComponents:this.props.customComponents}),k.default.createElement("div",{className:"yoast-wizard--navigation"},c,d)),this.state.isLoading?k.default.createElement("div",{className:"yoast-wizard-overlay"},k.default.createElement(s.default,null)):"")))}},{key:"renderErrorMessage",value:function(){return""===this.state.errorMessage?"":k.default.createElement("div",{className:"yoast-wizard-notice yoast-wizard-notice__error"},this.state.errorMessage)}}]),b}(k.default.Component);G.propTypes={endpoint:k.default.PropTypes.object.isRequired,steps:k.default.PropTypes.object.isRequired,fields:k.default.PropTypes.object.isRequired,customComponents:k.default.PropTypes.object,finishUrl:k.default.PropTypes.string,translate:k.default.PropTypes.any},G.defaultProps={customComponents:{},finishUrl:""},c.default=(0,B.localize)(G)},{"../../utils/i18n":715,"../basic/YoastLogo":705,"./LoadingIndicator":693,"./Step":695,"./StepIndicator":697,"./config/yoast-theme":702,"./helpers/ajaxHelper":703,"interpolate-components":358,"material-ui/RaisedButton":469,"material-ui/styles/MuiThemeProvider":490,react:677,"react-dom":513}],695:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var h=function(){function a(a,b){for(var c=0;c1&&void 0!==arguments[1]?arguments[1]:"",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,d=g();return""===b?d.gettext(a):d.ngettext(a,b,c)}function i(a){var b=a.displayName||a.name||"",c={translate:h};return m.default.createClass({displayName:"Localized"+b,render:function(){var b=(0,o.default)({},this.props,c);return m.default.createElement(a,b)}})}Object.defineProperty(c,"__esModule",{value:!0}),c.setTranslations=f,c.getGlobalJed=g,c.translate=h,c.localize=i;var j=a("jed"),k=d(j),l=a("react"),m=d(l),n=a("lodash/assign"),o=d(n),p=null},{jed:360,"lodash/assign":441,react:677}]},{},[4]); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/jquery.tablesorter.min.js b/wp-content/plugins/wordpress-seo/js/dist/jquery.tablesorter.min.js new file mode 100644 index 0000000..8ca383e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/jquery.tablesorter.min.js @@ -0,0 +1,3 @@ +(function($){$.extend({tablesorter:new +function(){var parsers=[],widgets=[];this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",cssChildRow:"expand-child",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,sortLocaleCompare:true,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",decimal:'/\.|\,/g',onRenderHeader:null,selectorHeaders:'thead th',debug:false};function benchmark(s,d){log(s+","+(new Date().getTime()-d.getTime())+"ms");}this.benchmark=benchmark;function log(s){if(typeof console!="undefined"&&typeof console.debug!="undefined"){console.log(s);}else{alert(s);}}function buildParserCache(table,$headers){if(table.config.debug){var parsersDebug="";}if(table.tBodies.length==0)return;var rows=table.tBodies[0].rows;if(rows[0]){var list=[],cells=rows[0].cells,l=cells.length;for(var i=0;i1){arr=arr.concat(checkCellColSpan(table,headerArr,row++));}else{if(table.tHead.length==1||(cell.rowSpan>1||!r[row+1])){arr.push(cell);}}}return arr;};function checkHeaderMetadata(cell){if(($.metadata)&&($(cell).metadata().sorter===false)){return true;};return false;}function checkHeaderOptions(table,i){if((table.config.headers[i])&&(table.config.headers[i].sorter===false)){return true;};return false;}function checkHeaderOptionsSortingLocked(table,i){if((table.config.headers[i])&&(table.config.headers[i].lockedOrder))return table.config.headers[i].lockedOrder;return false;}function applyWidget(table){var c=table.config.widgets;var l=c.length;for(var i=0;i');$("tr:first td",table.tBodies[0]).each(function(){colgroup.append($('').css('width',$(this).width()));});$(table).prepend(colgroup);};}function updateHeaderSortCount(table,sortList){var c=table.config,l=sortList.length;for(var i=0;i b["+i+"]) ? 1 : 0));";};function makeSortTextDesc(i){return"((b["+i+"] < a["+i+"]) ? -1 : ((b["+i+"] > a["+i+"]) ? 1 : 0));";};function makeSortNumeric(i){return"a["+i+"]-b["+i+"];";};function makeSortNumericDesc(i){return"b["+i+"]-a["+i+"];";};function sortText(a,b){if(table.config.sortLocaleCompare)return a.localeCompare(b);return((ab)?1:0));};function sortTextDesc(a,b){if(table.config.sortLocaleCompare)return b.localeCompare(a);return((ba)?1:0));};function sortNumeric(a,b){return a-b;};function sortNumericDesc(a,b){return b-a;};function getCachedSortType(parsers,i){return parsers[i].type;};this.construct=function(settings){return this.each(function(){if(!this.tHead||!this.tBodies)return;var $this,$document,$headers,cache,config,shiftDown=0,sortOrder;this.config={};config=$.extend(this.config,$.tablesorter.defaults,settings);$this=$(this);$.data(this,"tablesorter",config);$headers=buildHeaders(this);this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);var sortCSS=[config.cssDesc,config.cssAsc];fixColumnWidth(this);$headers.click(function(e){var totalRows=($this[0].tBodies[0]&&$this[0].tBodies[0].rows.length)||0;if(!this.sortDisabled&&totalRows>0){$this.trigger("sortStart");var $cell=$(this);var i=this.column;this.order=this.count++%2;if(this.lockedOrder)this.order=this.lockedOrder;if(!e[config.sortMultiSortKey]){config.sortList=[];if(config.sortForce!=null){var a=config.sortForce;for(var j=0;j0){$this.trigger("sorton",[config.sortList]);}applyWidget(this);});};this.addParser=function(parser){var l=parsers.length,a=true;for(var i=0;i1&&(n+="a"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Моля въведете още "+t+" символ";return t>1&&(n+="a"),n},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(e){var t="Можете да направите до "+e.maximum+" ";return e.maximum>1?t+="избора":t+="избор",t},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ca.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ca.js new file mode 100644 index 0000000..cd854e3 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ca.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Si us plau, elimina "+t+" car";return t==1?n+="àcter":n+="àcters",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Si us plau, introdueix "+t+" car";return t==1?n+="àcter":n+="àcters",n},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var t="Només es pot seleccionar "+e.maximum+" element";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/cs.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/cs.js new file mode 100644 index 0000000..6f139d7 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/cs.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/cs",[],function(){function e(e,t){switch(e){case 2:return t?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím zadejte o jeden znak méně":n<=4?"Prosím zadejte o "+e(n,!0)+" znaky méně":"Prosím zadejte o "+n+" znaků méně"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím zadejte ještě jeden znak":n<=4?"Prosím zadejte ještě další "+e(n,!0)+" znaky":"Prosím zadejte ještě dalších "+n+" znaků"},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(t){var n=t.maximum;return n==1?"Můžete zvolit jen jednu položku":n<=4?"Můžete zvolit maximálně "+e(n,!1)+" položky":"Můžete zvolit maximálně "+n+" položek"},noResults:function(){return"Nenalezeny žádné položky"},searching:function(){return"Vyhledávání…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/da.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/da.js new file mode 100644 index 0000000..112eaaf --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/da.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Angiv venligst "+t+" tegn mindre";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Angiv venligst "+t+" tegn mere";return n},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var t="Du kan kun vælge "+e.maximum+" emne";return e.maximum!=1&&(t+="r"),t},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/de.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/de.js new file mode 100644 index 0000000..7e6e944 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/de.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/de",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Bitte "+t+" Zeichen weniger eingeben"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Bitte "+t+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var t="Sie können nur "+e.maximum+" Eintr";return e.maximum===1?t+="ag":t+="äge",t+=" auswählen",t},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/el.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/el.js new file mode 100644 index 0000000..9440588 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/el.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Παρακαλώ διαγράψτε "+t+" χαρακτήρ";return t==1&&(n+="α"),t!=1&&(n+="ες"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Παρακαλώ συμπληρώστε "+t+" ή περισσότερους χαρακτήρες";return n},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(e){var t="Μπορείτε να επιλέξετε μόνο "+e.maximum+" επιλογ";return e.maximum==1&&(t+="ή"),e.maximum!=1&&(t+="ές"),t},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/en.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/en.js new file mode 100644 index 0000000..2dd1790 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/en.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/es.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/es.js new file mode 100644 index 0000000..677a7c0 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/es.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"La carga falló"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor, elimine "+t+" car";return t==1?n+="ácter":n+="acteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Por favor, introduzca "+t+" car";return t==1?n+="ácter":n+="acteres",n},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var t="Sólo puede seleccionar "+e.maximum+" elemento";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/et.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/et.js new file mode 100644 index 0000000..fbe61bd --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/et.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" vähem",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" rohkem",n},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var t="Saad vaid "+e.maximum+" tulemus";return e.maximum==1?t+="e":t+="t",t+=" valida",t},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/eu.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/eu.js new file mode 100644 index 0000000..08703d9 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/eu.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gutxiago",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gehiago",n},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return e.maximum===1?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/fa.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/fa.js new file mode 100644 index 0000000..a516fd7 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/fa.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="لطفاً "+t+" کاراکتر را حذف نمایید";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="لطفاً تعداد "+t+" کاراکتر یا بیشتر وارد نمایید";return n},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(e){var t="شما تنها می‌توانید "+e.maximum+" آیتم را انتخاب نمایید";return t},noResults:function(){return"هیچ نتیجه‌ای یافت نشد"},searching:function(){return"در حال جستجو..."}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/fi.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/fi.js new file mode 100644 index 0000000..5f25d4e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/fi.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Ole hyvä ja anna "+t+" merkkiä vähemmän"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Ole hyvä ja anna "+t+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(e){return"Voit valita ainoastaan "+e.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/fr.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/fr.js new file mode 100644 index 0000000..520f30f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/fr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Supprimez "+t+" caractère";return t!==1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Saisissez "+t+" caractère";return t!==1&&(n+="s"),n},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){var t="Vous pouvez seulement sélectionner "+e.maximum+" élément";return e.maximum!==1&&(t+="s"),t},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/gl.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/gl.js new file mode 100644 index 0000000..35c6a98 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/gl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/gl",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Elimine ";return t===1?n+="un carácter":n+=t+" caracteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Engada ";return t===1?n+="un carácter":n+=t+" caracteres",n},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){var t="Só pode ";return e.maximum===1?t+="un elemento":t+=e.maximum+" elementos",t},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/he.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/he.js new file mode 100644 index 0000000..6c958c9 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/he.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="נא למחוק ";return t===1?n+="תו אחד":n+=t+" תווים",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="נא להכניס ";return t===1?n+="תו אחד":n+=t+" תווים",n+=" או יותר",n},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(e){var t="באפשרותך לבחור עד ";return e.maximum===1?t+="פריט אחד":t+=e.maximum+" פריטים",t},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/hi.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/hi.js new file mode 100644 index 0000000..6a2096e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/hi.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" अक्षर को हटा दें";return t>1&&(n=t+" अक्षरों को हटा दें "),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="कृपया "+t+" या अधिक अक्षर दर्ज करें";return n},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(e){var t="आप केवल "+e.maximum+" आइटम का चयन कर सकते हैं";return t},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/hr.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/hr.js new file mode 100644 index 0000000..6606445 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/hr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hr",[],function(){function e(e){var t=" "+e+" znak";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+="a"):t+="ova",t}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Unesite "+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return"Unesite još "+e(n)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(e){return"Maksimalan broj odabranih stavki je "+e.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/hu.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/hu.js new file mode 100644 index 0000000..fec1e0a --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/hu.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Túl hosszú. "+t+" karakterrel több, mint kellene."},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Túl rövid. Még "+t+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/id.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/id.js new file mode 100644 index 0000000..d5fa650 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/id.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Hapuskan "+t+" huruf"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Masukkan "+t+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(e){return"Anda hanya dapat memilih "+e.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/is.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/is.js new file mode 100644 index 0000000..5266e42 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/is.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/is",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vinsamlegast styttið texta um "+t+" staf";return t<=1?n:n+"i"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vinsamlegast skrifið "+t+" staf";return t>1&&(n+="i"),n+=" í viðbót",n},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(e){return"Þú getur aðeins valið "+e.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/it.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/it.js new file mode 100644 index 0000000..42c8c31 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/it.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Per favore cancella "+t+" caratter";return t!==1?n+="i":n+="e",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Per favore inserisci "+t+" o più caratteri";return n},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var t="Puoi selezionare solo "+e.maximum+" element";return e.maximum!==1?t+="i":t+="o",t},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ja.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ja.js new file mode 100644 index 0000000..2e27197 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ja.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" 文字を削除してください";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="少なくとも "+t+" 文字を入力してください";return n},loadingMore:function(){return"読み込み中…"},maximumSelected:function(e){var t=e.maximum+" 件しか選択できません";return t},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/km.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/km.js new file mode 100644 index 0000000..875b461 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/km.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="សូមលុបចេញ "+t+" អក្សរ";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="សូមបញ្ចូល"+t+" អក្សរ រឺ ច្រើនជាងនេះ";return n},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(e){var t="អ្នកអាចជ្រើសរើសបានតែ "+e.maximum+" ជម្រើសប៉ុណ្ណោះ";return t},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ko.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ko.js new file mode 100644 index 0000000..8bad406 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ko.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/lt.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/lt.js new file mode 100644 index 0000000..fc83694 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/lt.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%10===1&&(e%100<11||e%100>19)?t:e%10>=2&&e%10<=9&&(e%100<11||e%100>19)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"į","ius","ių"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"į","ius","ių"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ą","us","ų"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/lv.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/lv.js new file mode 100644 index 0000000..7746e79 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/lv.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lv",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Lūdzu ievadiet par "+n;return r+=" simbol"+e(n,"iem","u","iem"),r+" mazāk"},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Lūdzu ievadiet vēl "+n;return r+=" simbol"+e(n,"us","u","us"),r},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(t){var n="Jūs varat izvēlēties ne vairāk kā "+t.maximum;return n+=" element"+e(t.maximum,"us","u","us"),n},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/mk.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/mk.js new file mode 100644 index 0000000..58ae6ad --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/mk.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/mk",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Ве молиме внесете "+e.maximum+" помалку карактер";return e.maximum!==1&&(n+="и"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Ве молиме внесете уште "+e.maximum+" карактер";return e.maximum!==1&&(n+="и"),n},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(e){var t="Можете да изберете само "+e.maximum+" ставк";return e.maximum===1?t+="а":t+="и",t},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ms.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ms.js new file mode 100644 index 0000000..8323d55 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ms.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Sila hapuskan "+t+" aksara"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Sila masukkan "+t+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(e){return"Anda hanya boleh memilih "+e.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/nb.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/nb.js new file mode 100644 index 0000000..1c4e333 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/nb.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/nl.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/nl.js new file mode 100644 index 0000000..46f987d --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/nl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Gelieve "+t+" karakters te verwijderen";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Gelieve "+t+" of meer karakters in te voeren";return n},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var t=e.maximum==1?"kan":"kunnen",n="Er "+t+" maar "+e.maximum+" item";return e.maximum!=1&&(n+="s"),n+=" worden geselecteerd",n},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/pl.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/pl.js new file mode 100644 index 0000000..f2407a1 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/pl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pl",[],function(){var e=["znak","znaki","znaków"],t=["element","elementy","elementów"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Usuń "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Podaj przynajmniej "+r+" "+n(r,e)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(e){return"Możesz zaznaczyć tylko "+e.maximum+" "+n(e.maximum,t)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/pt-BR.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/pt-BR.js new file mode 100644 index 0000000..3db40b6 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/pt-BR.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Apague "+t+" caracter";return t!=1&&(n+="es"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Digite "+t+" ou mais caracteres";return n},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var t="Você só pode selecionar "+e.maximum+" ite";return e.maximum==1?t+="m":t+="ns",t},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/pt.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/pt.js new file mode 100644 index 0000000..0befe03 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/pt.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor apague "+t+" ";return n+=t!=1?"caracteres":"carácter",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Introduza "+t+" ou mais caracteres";return n},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var t="Apenas pode seleccionar "+e.maximum+" ";return t+=e.maximum!=1?"itens":"item",t},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ro.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ro.js new file mode 100644 index 0000000..e8ebb35 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ro.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return t!==1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vă rugăm să introduceți "+t+"sau mai multe caractere";return n},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",e.maximum!==1&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ru.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ru.js new file mode 100644 index 0000000..6db6893 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/ru.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ru",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите на "+n+" символ";return r+=e(n,"","a","ов"),r+=" меньше",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(n,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(t.maximum,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sk.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sk.js new file mode 100644 index 0000000..1fefd70 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sk.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadajte o jeden znak menej":n>=2&&n<=4?"Prosím, zadajte o "+e[n](!0)+" znaky menej":"Prosím, zadajte o "+n+" znakov menej"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadajte ešte jeden znak":n<=4?"Prosím, zadajte ešte ďalšie "+e[n](!0)+" znaky":"Prosím, zadajte ešte ďalších "+n+" znakov"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(t){return t.maximum==1?"Môžete zvoliť len jednu položku":t.maximum>=2&&t.maximum<=4?"Môžete zvoliť najviac "+e[t.maximum](!1)+" položky":"Môžete zvoliť najviac "+t.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sr-Cyrl.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sr-Cyrl.js new file mode 100644 index 0000000..7f037b8 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sr-Cyrl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr-Cyrl",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Обришите "+n+" симбол";return r+=e(n,"","а","а"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Укуцајте бар још "+n+" симбол";return r+=e(n,"","а","а"),r},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(t){var n="Можете изабрати само "+t.maximum+" ставк";return n+=e(t.maximum,"у","е","и"),n},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sr.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sr.js new file mode 100644 index 0000000..90c141b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Obrišite "+n+" simbol";return r+=e(n,"","a","a"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Ukucajte bar još "+n+" simbol";return r+=e(n,"","a","a"),r},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(t){var n="Možete izabrati samo "+t.maximum+" stavk";return n+=e(t.maximum,"u","e","i"),n},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sv.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sv.js new file mode 100644 index 0000000..2194e13 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/sv.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vänligen sudda ut "+t+" tecken";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vänligen skriv in "+t+" eller fler tecken";return n},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(e){var t="Du kan max välja "+e.maximum+" element";return t},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/th.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/th.js new file mode 100644 index 0000000..456520b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/th.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/th",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="โปรดลบออก "+t+" ตัวอักษร";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="โปรดพิมพ์เพิ่มอีก "+t+" ตัวอักษร";return n},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(e){var t="คุณสามารถเลือกได้ไม่เกิน "+e.maximum+" รายการ";return t},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/tr.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/tr.js new file mode 100644 index 0000000..ff4a591 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/tr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/tr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" karakter daha girmelisiniz";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="En az "+t+" karakter daha girmelisiniz";return n},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(e){var t="Sadece "+e.maximum+" seçim yapabilirsiniz";return t},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/uk.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/uk.js new file mode 100644 index 0000000..66a1a8e --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/uk.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/uk",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Будь ласка, видаліть "+n+" "+e(t.maximum,"літеру","літери","літер")},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Будь ласка, введіть "+t+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(t){return"Ви можете вибрати лише "+t.maximum+" "+e(t.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/vi.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/vi.js new file mode 100644 index 0000000..750fa9d --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/vi.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/vi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vui lòng nhập ít hơn "+t+" ký tự";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vui lòng nhập nhiều hơn "+t+' ký tự"';return n},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(e){var t="Chỉ có thể chọn được "+e.maximum+" lựa chọn";return t},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/zh-CN.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/zh-CN.js new file mode 100644 index 0000000..fdea008 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/zh-CN.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/zh-TW.js b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/zh-TW.js new file mode 100644 index 0000000..33eba48 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/i18n/zh-TW.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="請刪掉"+t+"個字元";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="請再輸入"+t+"個字元";return n},loadingMore:function(){return"載入中…"},maximumSelected:function(e){var t="你只能選擇最多"+e.maximum+"項";return t},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/select2/select2.min.js b/wp-content/plugins/wordpress-seo/js/dist/select2/select2.min.js new file mode 100644 index 0000000..43f0a65 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/select2/select2.min.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.slice(0,n.length-1).concat(a),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=v.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),n.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;hc;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('
      ');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('

      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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wordpress-seo/images/banner/local-seo-for-woocommerce.png b/wp-content/plugins/wordpress-seo/images/banner/local-seo-for-woocommerce.png new file mode 100644 index 0000000000000000000000000000000000000000..e43b35c01f341c11139a3c1f9bbfa5a6458e49c2 GIT binary patch literal 82027 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 Gf=2(UTI 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 Bvt9rI literal 0 HcmV?d00001 diff --git a/wp-content/plugins/wordpress-seo/images/banner/local-seo.png b/wp-content/plugins/wordpress-seo/images/banner/local-seo.png new file mode 100644 index 0000000000000000000000000000000000000000..476bb65e98f1a7bcb0f2ade8a682999a3645753d GIT binary patch literal 76899 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

    • '),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("unselect",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html(''),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('
        '),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('
      • ×
      • ');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e0||0===c.length)){var d=a('×');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change"); +if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){d.status&&"0"===d.status||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("focus",function(){c.isOpen()&&e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
      • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null; +},e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(a,b,c,d){if(null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,f=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=a(this).data("select2");null==c&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=c[b].apply(c,f)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c}); \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/js/dist/wp-seo-admin-400.min.js b/wp-content/plugins/wordpress-seo/js/dist/wp-seo-admin-400.min.js new file mode 100644 index 0000000..7640c29 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/js/dist/wp-seo-admin-400.min.js @@ -0,0 +1,27 @@ +!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g0){var d=this.state.results.map(function(a,c){return j.default.createElement(s,{key:a.objectID,post:a,showDetail:b.showDetail.bind(b,c)})});a=j.default.createElement("ul",{role:"list",className:"wpseo-kb-search-results"},d),(0,p.default)(this.props.foundResultsText.replace("%d",c))}else""!==this.state.searchString&&(a=j.default.createElement("p",null,this.props.noResultsText),(0,p.default)(this.props.noResultsText));return a}},{key:"renderDetail",value:function(){var a=this.state.showDetail,b=this.state.results[a];return j.default.createElement("div",{className:"wpseo-kb-search-detail"},j.default.createElement("div",{className:"wpseo-kb-search-navigation"},j.default.createElement("button",{className:"button dashicon-button wpseo-kb-search-back-button","aria-label":this.props.backLabel,onClick:this.hideDetail},this.props.back),j.default.createElement("a",{href:b.permalink,className:"button dashicon-button wpseo-kb-search-ext-link ","aria-label":this.props.openLabel,target:"_blank"},this.props.open)),j.default.createElement(t,{post:b,iframeTitle:this.props.iframeTitle}))}},{key:"renderError",value:function(a){return console.error(a),(0,p.default)(this.props.errorMessage),j.default.createElement("p",null,this.props.errorMessage)}},{key:"render",value:function(){var a="",b=j.default.createElement(r,{headingText:this.props.headingText,submitAction:this.searchButtonClicked,searchString:this.state.searchString,searchButtonText:this.props.searchButtonText});return a=this.state.errorMessage?j.default.createElement("div",null,b,this.renderError(this.state.errorMessage)):this.state.searching?j.default.createElement("div",null,b,j.default.createElement(u,{loadingPlaceholder:this.props.loadingPlaceholder})):this.state.showDetail===!1?j.default.createElement("div",null,b,this.state.results.length>0?j.default.createElement("h2",{className:"screen-reader-text"},this.props.searchResultsHeading):"",this.renderSearchResults()):this.renderDetail(),j.default.createElement("div",{className:"wpseo-kb-search-container"},a)}}]),b}(j.default.Component);q.propTypes={foundResultsText:j.default.PropTypes.string,noResultsText:j.default.PropTypes.string,headingText:j.default.PropTypes.string,searchButtonText:j.default.PropTypes.string,searchResultsHeading:j.default.PropTypes.string,iframeTitle:j.default.PropTypes.string,algoliaApplicationId:j.default.PropTypes.string.isRequired,algoliaApiKey:j.default.PropTypes.string.isRequired,algoliaIndexName:j.default.PropTypes.string.isRequired,errorMessage:j.default.PropTypes.string.isRequired,loadingPlaceholder:j.default.PropTypes.string.isRequired,open:j.default.PropTypes.string.isRequired,openLabel:j.default.PropTypes.string.isRequired,back:j.default.PropTypes.string.isRequired,backLabel:j.default.PropTypes.string.isRequired},q.defaultProps={foundResultsText:"Number of search results: %d",noResultsText:"No results found.",headingText:"Search the Yoast knowledge base",searchButtonText:"Search",searchResultsHeading:"Search results",iframeTitle:"Knowledge base article",algoliaApplicationId:"RC8G2UCWJK",algoliaApiKey:"459903434a7963f83e7d4cd9bfe89c0d",algoliaIndexName:"knowledge_base_all",errorMessage:"Something went wrong. Please try again later.",loadingPlaceholder:"Loading...",back:"Back",backLabel:"Back to search results",open:"Open",openLabel:"Open the knowledge base article in a new window or read it in the iframe below"};var r=function(a){return j.default.createElement("div",{className:"wpseo-kb-search-search-bar"},j.default.createElement("h2",{id:"wpseo-kb-search-heading"},a.headingText),j.default.createElement("form",{onSubmit:function(b){b.preventDefault(),a.submitAction(b)}},j.default.createElement("input",{type:"text","aria-labelledby":"wpseo-kb-search-heading",defaultValue:a.searchString}),j.default.createElement("button",{type:"submit",className:"button wpseo-kb-search-search-button"},a.searchButtonText)))},s=function(a){var b=a.post,c=b.excerpt||b.metadesc;return j.default.createElement("li",null,j.default.createElement("a",{href:b.permalink,onClick:function(b){b.preventDefault(),a.showDetail()},className:"wpseo-kb-search-result-link"},j.default.createElement("div",{className:"wpseo-kb-search-result"},j.default.createElement("h3",{className:"wpseo-kb-search-result-title"},b.post_title),c&&j.default.createElement("p",null,c))))},t=function(a){var b=a.post.permalink+"amp?source=wpseo-kb-search";return j.default.createElement("iframe",{src:b,className:"kb-search-content-frame",title:a.iframeTitle})},u=function(a){return j.default.createElement("div",{className:"wpseo-kb-loader"},a.loadingPlaceholder)};c.default=q},{"a11y-speak":4,algoliasearch:13,"lodash/isUndefined":58,react:215}],3:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}var e=a("./kb-search/wp-seo-kb-search-init"),f=d(e),g=a("a11y-speak"),h=d(g);!function(){function a(a){var b=!1,c="",d=[],e=["userid","name","user_description"],f=["date"],g=["title","parent_title","excerpt","excerpt_only","caption","focuskw","pt_single","pt_plural","modified","id"],i=["term404","searchphrase"],j=["term_title","term_description"],k=["category","category_description","tag","tag_description"];a.hasClass("posttype-template")?d=d.concat(i,j):a.hasClass("homepage-template")?d=d.concat(e,f,g,i,j,k):a.hasClass("taxonomy-template")?d=d.concat(e,f,g,i):a.hasClass("author-template")?d=d.concat(g,f,i,j,k):a.hasClass("date-template")?d=d.concat(e,g,i,j,k):a.hasClass("search-template")?d=d.concat(e,f,g,j,k,["term404"]):a.hasClass("error404-template")&&(d=d.concat(e,f,g,j,k,["searchphrase"])),jQuery.each(d,function(d,e){if(c=a.attr("id")+"-"+e+"-warning",a.val().search("%%"+e+"%%")!==-1){a.addClass("wpseo-variable-warning-element");var f=wpseoAdminL10n.variable_warning.replace("%s","%%"+e+"%%");jQuery("#"+c).length?jQuery("#"+c).html(f):a.after('
        '+f+"
        "),(0,h.default)(wpseoAdminL10n.variable_warning.replace("%s",e),"assertive"),b=!0}else jQuery("#"+c).length&&jQuery("#"+c).remove()}),b===!1&&a.removeClass("wpseo-variable-warning-element")}function b(a,b,c,d){jQuery.post(ajaxurl,{action:"wpseo_set_option",option:a,newval:b,_wpnonce:d},function(a){a&&jQuery("#"+c).hide()})}function c(a){jQuery.post(ajaxurl,{action:"wpseo_kill_blocking_files",_ajax_nonce:a}).done(function(a){var b=jQuery(".yoast-notice-blocking-files"),c=jQuery("#blocking_files");c.html(a.data.message),b.attr("tabindex","-1").focus(),a.success?b.removeClass("notice-error").addClass("notice-success"):b.addClass("yoast-blocking-files-error")})}function d(){jQuery("#og_frontpage_desc").val(jQuery("#meta_description").val())}function e(){var a=jQuery("#wpseo-conf");if(a.length){var b=a.attr("action").split("#")[0];a.attr("action",b+window.location.hash)}}function g(){var a=jQuery("#TB_ajaxContent");jQuery.post(ajaxurl,{_wpnonce:a.find("input[name=fb_admin_nonce]").val(),admin_name:a.find("input[name=fb_admin_name]").val(),admin_id:a.find("input[name=fb_admin_id]").val(),action:"wpseo_add_fb_admin"},function(b){var c=jQuery.parseJSON(b);switch(a.find("p.notice").remove(),c.success){case 1:a.find("input[type=text]").val(""),jQuery("#user_admin").append(c.html),jQuery("#connected_fb_admins").show(),tb_remove();break;case 0:a.find(".form-wrap").prepend(c.html)}})}function i(){var a="400px";jQuery("#company_or_person").select2({width:a,language:wpseoSelect2Locale}),jQuery("#twitter_card_type").select2({width:a,language:wpseoSelect2Locale}),jQuery("#post_types-post-maintax").select2({width:a,language:wpseoSelect2Locale}),jQuery("#profile").select2({width:a,language:wpseoSelect2Locale})}function j(){var a=window.location.hash.replace("#top#","");""!==a&&"#"!==a.charAt(0)||(a=jQuery(".wpseotab").attr("id")),jQuery("#"+a).addClass("active"),jQuery("#"+a+"-tab").addClass("nav-tab-active").click()}jQuery(window).on("hashchange",e),jQuery(document).on("ready",e),window.wpseoDetectWrongVariables=a,window.setWPOption=b,window.wpseoKillBlockingFiles=c,window.wpseoCopyHomeMeta=d,window.wpseo_add_fb_admin=g,window.wpseoSetTabHash=e,jQuery(document).ready(function(){(0,f.default)(),jQuery("#enablexmlsitemap").change(function(){jQuery("#sitemapinfo").toggle(jQuery(this).is(":checked"))}).change(),jQuery("#disable-author input[type='radio']").change(function(){jQuery(this).is(":checked")&&jQuery("#author-archives-titles-metas-content").toggle("off"===jQuery(this).val())}).change(),jQuery("#disable-date input[type='radio']").change(function(){jQuery(this).is(":checked")&&jQuery("#date-archives-titles-metas-content").toggle("off"===jQuery(this).val())}).change(),jQuery("#disable-post_format").change(function(){jQuery("#post_format-titles-metas").toggle(jQuery(this).is(":not(:checked)"))}).change(),jQuery("#breadcrumbs-enable").change(function(){jQuery("#breadcrumbsinfo").toggle(jQuery(this).is(":checked"))}).change(),jQuery("#disable_author_sitemap").find("input:radio").change(function(){jQuery(this).is(":checked")&&jQuery("#xml_user_block").toggle("off"===jQuery(this).val())}).change(),jQuery("#cleanpermalinks").change(function(){jQuery("#cleanpermalinksdiv").toggle(jQuery(this).is(":checked"))}).change(),jQuery("#wpseo-tabs").find("a").click(function(){jQuery("#wpseo-tabs").find("a").removeClass("nav-tab-active"),jQuery(".wpseotab").removeClass("active");var a=jQuery(this).attr("id").replace("-tab","");jQuery("#"+a).addClass("active"),jQuery(this).addClass("nav-tab-active")}),jQuery("#company_or_person").change(function(){var a=jQuery(this).val();"company"===a?(jQuery("#knowledge-graph-company").show(),jQuery("#knowledge-graph-person").hide()):"person"===a?(jQuery("#knowledge-graph-company").hide(),jQuery("#knowledge-graph-person").show()):(jQuery("#knowledge-graph-company").hide(),jQuery("#knowledge-graph-person").hide())}).change(),jQuery(".template").change(function(){a(jQuery(this))}).change(),jQuery("#blocking_files .button").on("click",function(){c(jQuery(this).data("nonce"))}),jQuery(".switch-yoast-seo input").on("keydown",function(a){"keydown"===a.type&&13===a.which&&a.preventDefault()}),j(),i()})}()},{"./kb-search/wp-seo-kb-search-init":1,"a11y-speak":4}],4:[function(a,b,c){var d,e,f=function(a){a=a||"polite";var b=document.createElement("div");b.id="a11y-speak-"+a,b.className="a11y-speak-region";var c="clip: rect(1px, 1px, 1px, 1px); position: absolute; height: 1px; width: 1px; overflow: hidden;";return b.setAttribute("style",c),b.setAttribute("aria-live",a),b.setAttribute("aria-relevant","additions text"),b.setAttribute("aria-atomic","true"),document.querySelector("body").appendChild(b),b},g=function(a){return"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?a():void document.addEventListener("DOMContentLoaded",a)};g(function(){d=document.getElementById("a11y-speak-polite"),e=document.getElementById("a11y-speak-assertive"),null===d&&(d=f("polite")),null===e&&(e=f("assertive"))});var h=function(){for(var a=document.querySelectorAll(".a11y-speak-region"),b=0;b]+>/g," "),e&&"assertive"===b?e.textContent=a:d&&(d.textContent=a)};b.exports=i},{}],5:[function(a,b,c){(function(d){function e(){return"undefined"!=typeof document&&"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}function f(){var a=arguments,b=this.useColors;if(a[0]=(b?"%c":"")+this.namespace+(b?" %c":" ")+a[0]+(b?"%c ":" ")+"+"+c.humanize(this.diff),!b)return a;var d="color: "+this.color;a=[a[0],d,"color: inherit"].concat(Array.prototype.slice.call(a,1));var e=0,f=0;return a[0].replace(/%[a-z%]/g,function(a){"%%"!==a&&(e++,"%c"===a&&(f=e))}),a.splice(f,0,d),a}function g(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function h(a){try{null==a?c.storage.removeItem("debug"):c.storage.debug=a}catch(a){}}function i(){try{return c.storage.debug}catch(a){}if("undefined"!=typeof d&&"env"in d)return d.env.DEBUG}function j(){try{return window.localStorage}catch(a){}}c=b.exports=a("./debug"),c.log=g,c.formatArgs=f,c.save=h,c.load=i,c.useColors=e,c.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:j(),c.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],c.formatters.j=function(a){try{return JSON.stringify(a)}catch(a){return"[UnexpectedJSONParseError]: "+a.message}},c.enable(i())}).call(this,a("_process"))},{"./debug":6,_process:62}],6:[function(a,b,c){function d(){return c.colors[k++%c.colors.length]}function e(a){function b(){}function e(){var a=e,b=+new Date,f=b-(j||b);a.diff=f,a.prev=j,a.curr=b,j=b,null==a.useColors&&(a.useColors=c.useColors()),null==a.color&&a.useColors&&(a.color=d());for(var g=new Array(arguments.length),h=0;h1e4)){var b=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(a);if(b){var c=parseFloat(b[1]),d=(b[2]||"ms").toLowerCase();switch(d){case"years":case"year":case"yrs":case"yr":case"y":return c*l;case"days":case"day":case"d":return c*k;case"hours":case"hour":case"hrs":case"hr":case"h":return c*j;case"minutes":case"minute":case"mins":case"min":case"m":return c*i;case"seconds":case"second":case"secs":case"sec":case"s":return c*h;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}}}function e(a){return a>=k?Math.round(a/k)+"d":a>=j?Math.round(a/j)+"h":a>=i?Math.round(a/i)+"m":a>=h?Math.round(a/h)+"s":a+"ms"}function f(a){return g(a,k,"day")||g(a,j,"hour")||g(a,i,"minute")||g(a,h,"second")||a+" ms"}function g(a,b,c){if(!(a0)return d(a);if("number"===c&&isNaN(a)===!1)return b.long?f(a):e(a);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(a))}},{}],8:[function(a,b,c){function d(){i.apply(this,arguments)}function e(){var a="Not implemented in this environment.\nIf you feel this is a mistake, write to support@algolia.com";throw new k.AlgoliaSearchError(a)}b.exports=d;var f=a("./Index.js"),g=a("./deprecate.js"),h=a("./deprecatedMessage.js"),i=a("./AlgoliaSearchCore.js"),j=a("inherits"),k=a("./errors");j(d,i),d.prototype.deleteIndex=function(a,b){return this._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(a),hostType:"write",callback:b})},d.prototype.moveIndex=function(a,b,c){var d={operation:"move",destination:b};return this._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(a)+"/operation",body:d,hostType:"write",callback:c})},d.prototype.copyIndex=function(a,b,c){var d={operation:"copy",destination:b};return this._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(a)+"/operation",body:d,hostType:"write",callback:c})},d.prototype.getLogs=function(b,c,d){var e=a("./clone.js"),f={};return"object"==typeof b?(f=e(b),d=c):0===arguments.length||"function"==typeof b?d=b:1===arguments.length||"function"==typeof c?(d=c,f.offset=b):(f.offset=b,f.length=c),void 0===f.offset&&(f.offset=0),void 0===f.length&&(f.length=10),this._jsonRequest({method:"GET",url:"/1/logs?"+this._getSearchParams(f,""),hostType:"read",callback:d})},d.prototype.listIndexes=function(a,b){var c="";return void 0===a||"function"==typeof a?b=a:c="?page="+a,this._jsonRequest({method:"GET",url:"/1/indexes"+c,hostType:"read",callback:b})},d.prototype.initIndex=function(a){return new f(this,a)},d.prototype.listUserKeys=function(a){return this._jsonRequest({method:"GET",url:"/1/keys",hostType:"read",callback:a})},d.prototype.getUserKeyACL=function(a,b){return this._jsonRequest({method:"GET",url:"/1/keys/"+a,hostType:"read",callback:b})},d.prototype.deleteUserKey=function(a,b){return this._jsonRequest({method:"DELETE",url:"/1/keys/"+a,hostType:"write",callback:b})},d.prototype.addUserKey=function(b,c,d){var e=a("isarray"),f="Usage: client.addUserKey(arrayOfAcls[, params, callback])";if(!e(b))throw new Error(f);1!==arguments.length&&"function"!=typeof c||(d=c,c=null);var g={acl:b};return c&&(g.validity=c.validity,g.maxQueriesPerIPPerHour=c.maxQueriesPerIPPerHour,g.maxHitsPerQuery=c.maxHitsPerQuery,g.indexes=c.indexes,g.description=c.description,c.queryParameters&&(g.queryParameters=this._getSearchParams(c.queryParameters,"")),g.referers=c.referers),this._jsonRequest({method:"POST",url:"/1/keys",body:g,hostType:"write",callback:d})},d.prototype.addUserKeyWithValidity=g(function(a,b,c){return this.addUserKey(a,b,c)},h("client.addUserKeyWithValidity()","client.addUserKey()")),d.prototype.updateUserKey=function(b,c,d,e){var f=a("isarray"),g="Usage: client.updateUserKey(key, arrayOfAcls[, params, callback])";if(!f(c))throw new Error(g);2!==arguments.length&&"function"!=typeof d||(e=d,d=null);var h={acl:c};return d&&(h.validity=d.validity,h.maxQueriesPerIPPerHour=d.maxQueriesPerIPPerHour,h.maxHitsPerQuery=d.maxHitsPerQuery,h.indexes=d.indexes,h.description=d.description,d.queryParameters&&(h.queryParameters=this._getSearchParams(d.queryParameters,"")),h.referers=d.referers),this._jsonRequest({method:"PUT",url:"/1/keys/"+b,body:h,hostType:"write",callback:e})},d.prototype.startQueriesBatch=g(function(){this._batch=[]},h("client.startQueriesBatch()","client.search()")),d.prototype.addQueryInBatch=g(function(a,b,c){this._batch.push({indexName:a,query:b,params:c})},h("client.addQueryInBatch()","client.search()")),d.prototype.sendQueriesBatch=g(function(a){return this.search(this._batch,a)},h("client.sendQueriesBatch()","client.search()")),d.prototype.batch=function(b,c){var d=a("isarray"),e="Usage: client.batch(operations[, callback])";if(!d(b))throw new Error(e);return this._jsonRequest({method:"POST",url:"/1/indexes/*/batch",body:{requests:b},hostType:"write",callback:c})},d.prototype.destroy=e,d.prototype.enableRateLimitForward=e,d.prototype.disableRateLimitForward=e,d.prototype.useSecuredAPIKey=e,d.prototype.disableSecuredAPIKey=e,d.prototype.generateSecuredApiKey=e},{"./AlgoliaSearchCore.js":9,"./Index.js":10,"./clone.js":19,"./deprecate.js":20,"./deprecatedMessage.js":21,"./errors":22,inherits:56,isarray:57}],9:[function(a,b,c){function d(b,c,d){var f=a("debug")("algoliasearch"),h=a("./clone.js"),j=a("isarray"),k=a("./map.js"),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(d._allowEmptyCredentials!==!0&&!b)throw new i.AlgoliaSearchError("Please provide an application ID. "+l);if(d._allowEmptyCredentials!==!0&&!c)throw new i.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=b,this.apiKey=c;var m=g([this.applicationID+"-1.algolianet.com",this.applicationID+"-2.algolianet.com",this.applicationID+"-3.algolianet.com"]);this.hosts={read:[],write:[]},this.hostIndex={read:0,write:0},d=d||{};var n=d.protocol||"https:",o=void 0===d.timeout?2e3:d.timeout;if(/:$/.test(n)||(n+=":"),"http:"!==d.protocol&&"https:"!==d.protocol)throw new i.AlgoliaSearchError("protocol must be `http:` or `https:` (was `"+d.protocol+"`)");d.hosts?j(d.hosts)?(this.hosts.read=h(d.hosts),this.hosts.write=h(d.hosts)):(this.hosts.read=h(d.hosts.read),this.hosts.write=h(d.hosts.write)):(this.hosts.read=[this.applicationID+"-dsn.algolia.net"].concat(m),this.hosts.write=[this.applicationID+".algolia.net"].concat(m)),this.hosts.read=k(this.hosts.read,e(n)),this.hosts.write=k(this.hosts.write,e(n)),this.requestTimeout=o,this.extraHeaders=[],this.cache=d._cache||{},this._ua=d._ua,this._useCache=!(void 0!==d._useCache&&!d._cache)||d._useCache,this._useFallback=void 0===d.useFallback||d.useFallback,this._setTimeout=d._setTimeout,f("init done, %j",this)}function e(a){return function(b){return a+"//"+b.toLowerCase()}}function f(a){if(void 0===Array.prototype.toJSON)return JSON.stringify(a);var b=Array.prototype.toJSON;delete Array.prototype.toJSON;var c=JSON.stringify(a);return Array.prototype.toJSON=b,c}function g(a){for(var b,c,d=a.length;0!==d;)c=Math.floor(Math.random()*d),d-=1,b=a[d],a[d]=a[c],a[c]=b;return a}function h(a){var b={};for(var c in a)if(Object.prototype.hasOwnProperty.call(a,c)){var d;d="x-algolia-api-key"===c||"x-algolia-application-id"===c?"**hidden for security purposes**":a[c],b[c]=d}return b}b.exports=d;var i=a("./errors"),j=a("./exitPromise.js"),k=a("./IndexCore.js"),l=500;d.prototype.initIndex=function(a){return new k(this,a)},d.prototype.setExtraHeader=function(a,b){this.extraHeaders.push({name:a.toLowerCase(),value:b})},d.prototype.addAlgoliaAgent=function(a){this._ua+=";"+a},d.prototype._jsonRequest=function(b){function c(a,j){function l(a){var b=a&&a.body&&a.body.message&&a.body.status||a.statusCode||a&&a.body&&200;g("received response: statusCode: %s, computed statusCode: %d, headers: %j",a.statusCode,b,a.headers);var c=2===Math.floor(b/100),f=new Date;if(q.push({currentHost:w,headers:h(e),content:d||null,contentLength:void 0!==d?d.length:null,method:j.method,timeout:j.timeout,url:j.url,startTime:v,endTime:f,duration:f-v,statusCode:b}),c)return m._useCache&&k&&(k[u]=a.responseText),a.body;var l=4!==Math.floor(b/100);if(l)return n+=1,s();g("unrecoverable error");var o=new i.AlgoliaSearchError(a.body&&a.body.message,{debugData:q,statusCode:b});return m._promise.reject(o)}function r(a){g("error: %s, stack: %s",a.message,a.stack);var c=new Date;return q.push({currentHost:w,headers:h(e),content:d||null,contentLength:void 0!==d?d.length:null,method:j.method,timeout:j.timeout,url:j.url,startTime:v,endTime:c,duration:c-v}),a instanceof i.AlgoliaSearchError||(a=new i.Unknown(a&&a.message,a)),n+=1,a instanceof i.Unknown||a instanceof i.UnparsableJSON||n>=m.hosts[b.hostType].length&&(o||!p)?(a.debugData=q,m._promise.reject(a)):a instanceof i.RequestTimeout?t():s()}function s(){return g("retrying request"),m.hostIndex[b.hostType]=(m.hostIndex[b.hostType]+1)%m.hosts[b.hostType].length,c(a,j)}function t(){return g("retrying request with higher timeout"),m.hostIndex[b.hostType]=(m.hostIndex[b.hostType]+1)%m.hosts[b.hostType].length,j.timeout=m.requestTimeout*(n+1),c(a,j)}var u,v=new Date;if(m._useCache&&(u=b.url),m._useCache&&d&&(u+="_body_"+j.body),m._useCache&&k&&void 0!==k[u])return g("serving response from cache"),m._promise.resolve(JSON.parse(k[u]));if(n>=m.hosts[b.hostType].length)return!p||o?(g("could not get any response"),m._promise.reject(new i.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: "+m.applicationID,{debugData:q}))):(g("switching to fallback"),n=0,j.method=b.fallback.method,j.url=b.fallback.url,j.jsonBody=b.fallback.body,j.jsonBody&&(j.body=f(j.jsonBody)),e=m._computeRequestHeaders(),j.timeout=m.requestTimeout*(n+1),m.hostIndex[b.hostType]=0,o=!0,c(m._request.fallback,j));var w=m.hosts[b.hostType][m.hostIndex[b.hostType]],x=w+j.url,y={body:j.body,jsonBody:j.jsonBody,method:j.method,headers:e,timeout:j.timeout,debug:g};return g("method: %s, url: %s, headers: %j, timeout: %d",y.method,x,y.headers,y.timeout),a===m._request.fallback&&g("using fallback"),a.call(m,x,y).then(l,r)}var d,e,g=a("debug")("algoliasearch:"+b.url),k=b.cache,m=this,n=0,o=!1,p=m._useFallback&&m._request.fallback&&b.fallback;this.apiKey.length>l&&void 0!==b.body&&(void 0!==b.body.params||void 0!==b.body.requests)?(b.body.apiKey=this.apiKey,e=this._computeRequestHeaders(!1)):e=this._computeRequestHeaders(),void 0!==b.body&&(d=f(b.body)),g("request start");var q=[],r=c(m._request,{url:b.url,method:b.method,body:d,jsonBody:b.body,timeout:m.requestTimeout*(n+1)});return b.callback?void r.then(function(a){j(function(){b.callback(null,a)},m._setTimeout||setTimeout)},function(a){j(function(){b.callback(a)},m._setTimeout||setTimeout)}):r},d.prototype._getSearchParams=function(a,b){if(void 0===a||null===a)return b;for(var c in a)null!==c&&void 0!==a[c]&&a.hasOwnProperty(c)&&(b+=""===b?"":"&",b+=c+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(a[c])?f(a[c]):a[c]));return b},d.prototype._computeRequestHeaders=function(b){var c=a("foreach"),d={"x-algolia-agent":this._ua,"x-algolia-application-id":this.applicationID};return b!==!1&&(d["x-algolia-api-key"]=this.apiKey),this.userToken&&(d["x-algolia-usertoken"]=this.userToken),this.securityTags&&(d["x-algolia-tagfilters"]=this.securityTags),this.extraHeaders&&c(this.extraHeaders,function(a){d[a.name]=a.value}),d},d.prototype.search=function(b,c,d){var e=a("isarray"),f=a("./map.js"),g="Usage: client.search(arrayOfQueries[, callback])";if(!e(b))throw new Error(g);"function"==typeof c?(d=c,c={}):void 0===c&&(c={});var h=this,i={requests:f(b,function(a){var b="";return void 0!==a.query&&(b+="query="+encodeURIComponent(a.query)),{indexName:a.indexName,params:h._getSearchParams(a.params,b)}})},j=f(i.requests,function(a,b){return b+"="+encodeURIComponent("/1/indexes/"+encodeURIComponent(a.indexName)+"?"+a.params)}).join("&"),k="/1/indexes/*/queries";return void 0!==c.strategy&&(k+="?strategy="+c.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:k,body:i,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:j}},callback:d})},d.prototype.setSecurityTags=function(a){if("[object Array]"===Object.prototype.toString.call(a)){for(var b=[],c=0;cg&&(b=g),"published"!==a.status?k._promise.delay(b).then(c):a})}function d(a){i(function(){b(null,a)},k._setTimeout||setTimeout)}function e(a){i(function(){b(a)},k._setTimeout||setTimeout)}var f=100,g=5e3,h=0,j=this,k=j.as,l=c();return b?void l.then(d,e):l},d.prototype.clearIndex=function(a){var b=this;return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(b.indexName)+"/clear",hostType:"write",callback:a})},d.prototype.getSettings=function(a){var b=this;return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(b.indexName)+"/settings?getVersion=2",hostType:"read",callback:a})},d.prototype.searchSynonyms=function(a,b){return"function"==typeof a?(b=a,a={}):void 0===a&&(a={}),this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/search",body:a,hostType:"read",callback:b})},d.prototype.saveSynonym=function(a,b,c){return"function"==typeof b?(c=b,b={}):void 0===b&&(b={}),this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/"+encodeURIComponent(a.objectID)+"?forwardToSlaves="+(b.forwardToSlaves?"true":"false"),body:a,hostType:"write",callback:c})},d.prototype.getSynonym=function(a,b){return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/"+encodeURIComponent(a),hostType:"read",callback:b})},d.prototype.deleteSynonym=function(a,b,c){return"function"==typeof b?(c=b,b={}):void 0===b&&(b={}),this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/"+encodeURIComponent(a)+"?forwardToSlaves="+(b.forwardToSlaves?"true":"false"),hostType:"write",callback:c})},d.prototype.clearSynonyms=function(a,b){return"function"==typeof a?(b=a,a={}):void 0===a&&(a={}),this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/clear?forwardToSlaves="+(a.forwardToSlaves?"true":"false"),hostType:"write",callback:b})},d.prototype.batchSynonyms=function(a,b,c){return"function"==typeof b?(c=b,b={}):void 0===b&&(b={}),this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/batch?forwardToSlaves="+(b.forwardToSlaves?"true":"false")+"&replaceExistingSynonyms="+(b.replaceExistingSynonyms?"true":"false"),hostType:"write",body:a,callback:c})},d.prototype.setSettings=function(a,b,c){1!==arguments.length&&"function"!=typeof b||(c=b,b={});var d=b.forwardToSlaves||!1,e=this;return this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(e.indexName)+"/settings?forwardToSlaves="+(d?"true":"false"),hostType:"write",body:a,callback:c})},d.prototype.listUserKeys=function(a){var b=this;return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(b.indexName)+"/keys",hostType:"read",callback:a})},d.prototype.getUserKeyACL=function(a,b){var c=this;return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/keys/"+a,hostType:"read",callback:b})},d.prototype.deleteUserKey=function(a,b){var c=this;return this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(c.indexName)+"/keys/"+a,hostType:"write",callback:b})},d.prototype.addUserKey=function(b,c,d){var e=a("isarray"),f="Usage: index.addUserKey(arrayOfAcls[, params, callback])";if(!e(b))throw new Error(f);1!==arguments.length&&"function"!=typeof c||(d=c,c=null);var g={acl:b};return c&&(g.validity=c.validity,g.maxQueriesPerIPPerHour=c.maxQueriesPerIPPerHour,g.maxHitsPerQuery=c.maxHitsPerQuery,g.description=c.description,c.queryParameters&&(g.queryParameters=this.as._getSearchParams(c.queryParameters,"")),g.referers=c.referers),this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/keys",body:g,hostType:"write",callback:d})},d.prototype.addUserKeyWithValidity=g(function(a,b,c){return this.addUserKey(a,b,c)},h("index.addUserKeyWithValidity()","index.addUserKey()")),d.prototype.updateUserKey=function(b,c,d,e){var f=a("isarray"),g="Usage: index.updateUserKey(key, arrayOfAcls[, params, callback])";if(!f(c))throw new Error(g);2!==arguments.length&&"function"!=typeof d||(e=d,d=null);var h={acl:c};return d&&(h.validity=d.validity,h.maxQueriesPerIPPerHour=d.maxQueriesPerIPPerHour,h.maxHitsPerQuery=d.maxHitsPerQuery,h.description=d.description,d.queryParameters&&(h.queryParameters=this.as._getSearchParams(d.queryParameters,"")),h.referers=d.referers),this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/keys/"+b,body:h,hostType:"write",callback:e})}},{"./IndexBrowser":11,"./IndexCore.js":12,"./clone.js":19,"./deprecate.js":20,"./deprecatedMessage.js":21,"./errors":22,"./exitPromise.js":23,"./map.js":24,"./merge.js":25,inherits:56,isarray:57}],11:[function(a,b,c){"use strict";function d(){}b.exports=d;var e=a("inherits"),f=a("events").EventEmitter;e(d,f),d.prototype.stop=function(){this._stopped=!0,this._clean()},d.prototype._end=function(){this.emit("end"),this._clean()},d.prototype._error=function(a){this.emit("error",a),this._clean()},d.prototype._result=function(a){this.emit("result",a)},d.prototype._clean=function(){this.removeAllListeners("stop"),this.removeAllListeners("end"),this.removeAllListeners("error"),this.removeAllListeners("result")}},{events:30,inherits:56}],12:[function(a,b,c){function d(a,b){this.indexName=b,this.as=a,this.typeAheadArgs=null,this.typeAheadValueOption=null,this.cache={}}var e=a("./buildSearchMethod.js"),f=a("./deprecate.js"),g=a("./deprecatedMessage.js");b.exports=d,d.prototype.clearCache=function(){this.cache={}},d.prototype.search=e("query"),d.prototype.similarSearch=e("similarQuery"),d.prototype.browse=function(b,c,d){var e,f,g=a("./merge.js"),h=this;0===arguments.length||1===arguments.length&&"function"==typeof arguments[0]?(e=0,d=arguments[0],b=void 0):"number"==typeof arguments[0]?(e=arguments[0],"number"==typeof arguments[1]?f=arguments[1]:"function"==typeof arguments[1]&&(d=arguments[1],f=void 0),b=void 0,c=void 0):"object"==typeof arguments[0]?("function"==typeof arguments[1]&&(d=arguments[1]),c=arguments[0],b=void 0):"string"==typeof arguments[0]&&"function"==typeof arguments[1]&&(d=arguments[1],c=void 0),c=g({},c||{},{page:e,hitsPerPage:f,query:b});var i=this.as._getSearchParams(c,"");return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(h.indexName)+"/browse?"+i,hostType:"read",callback:d})},d.prototype.browseFrom=function(a,b){return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/browse?cursor="+encodeURIComponent(a),hostType:"read",callback:b})},d.prototype.searchForFacetValues=function(b,c){var d=a("./clone.js"),e=a("./omit.js"),f="Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])";if(void 0===b.facetName||void 0===b.facetQuery)throw new Error(f);var g=b.facetName,h=e(d(b),function(a){return"facetName"===a}),i=this.as._getSearchParams(h,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/facets/"+encodeURIComponent(g)+"/query",hostType:"read",body:{params:i},callback:c})},d.prototype.searchFacet=f(function(a,b){return this.searchForFacetValues(a,b)},g("index.searchFacet(params[, callback])","index.searchForFacetValues(params[, callback])")),d.prototype._search=function(a,b,c){return this.as._jsonRequest({cache:this.cache,method:"POST",url:b||"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:{params:a},hostType:"read",fallback:{method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName),body:{params:a}},callback:c})},d.prototype.getObject=function(a,b,c){var d=this;1!==arguments.length&&"function"!=typeof b||(c=b,b=void 0);var e="";if(void 0!==b){e="?attributes=";for(var f=0;f was loaded but did not call our provided callback"),JSONPScriptError:e("JSONPScriptError"," \ No newline at end of file diff --git a/wp-content/plugins/wordpress-seo/wp-seo-main.php b/wp-content/plugins/wordpress-seo/wp-seo-main.php new file mode 100644 index 0000000..01d45b0 --- /dev/null +++ b/wp-content/plugins/wordpress-seo/wp-seo-main.php @@ -0,0 +1,493 @@ + ABSPATH . 'wp-admin/includes/class-wp-list-table.php', + 'walker_category' => ABSPATH . 'wp-includes/category-template.php', + 'pclzip' => ABSPATH . 'wp-admin/includes/class-pclzip.php', + ); + } + + $cn = strtolower( $class ); + + if ( ! class_exists( $class ) && isset( $classes[ $cn ] ) ) { + require_once( $classes[ $cn ] ); + } +} + +if ( file_exists( WPSEO_PATH . '/vendor/autoload_52.php' ) ) { + require WPSEO_PATH . '/vendor/autoload_52.php'; +} +elseif ( ! class_exists( 'WPSEO_Options' ) ) { // Still checking since might be site-level autoload R. + add_action( 'admin_init', 'yoast_wpseo_missing_autoload', 1 ); + + return; +} + +if ( function_exists( 'spl_autoload_register' ) ) { + spl_autoload_register( 'wpseo_auto_load' ); +} + +/* ********************* DEFINES DEPENDING ON AUTOLOADED CODE ********************* */ + +/** + * Defaults to production, for safety + */ +if ( ! defined( 'YOAST_ENVIRONMENT' ) ) { + define( 'YOAST_ENVIRONMENT', 'production' ); +} + +/** + * Only use minified assets when we are in a production environment + */ +if ( ! defined( 'WPSEO_CSSJS_SUFFIX' ) ) { + define( 'WPSEO_CSSJS_SUFFIX', ( 'development' !== YOAST_ENVIRONMENT ) ? '.min' : '' ); +} + +/* ***************************** PLUGIN (DE-)ACTIVATION *************************** */ + +/** + * Run single site / network-wide activation of the plugin. + * + * @param bool $networkwide Whether the plugin is being activated network-wide. + */ +function wpseo_activate( $networkwide = false ) { + if ( ! is_multisite() || ! $networkwide ) { + _wpseo_activate(); + } + else { + /* Multi-site network activation - activate the plugin for all blogs */ + wpseo_network_activate_deactivate( true ); + } +} + +/** + * Run single site / network-wide de-activation of the plugin. + * + * @param bool $networkwide Whether the plugin is being de-activated network-wide. + */ +function wpseo_deactivate( $networkwide = false ) { + if ( ! is_multisite() || ! $networkwide ) { + _wpseo_deactivate(); + } + else { + /* Multi-site network activation - de-activate the plugin for all blogs */ + wpseo_network_activate_deactivate( false ); + } +} + +/** + * Run network-wide (de-)activation of the plugin + * + * @param bool $activate True for plugin activation, false for de-activation. + */ +function wpseo_network_activate_deactivate( $activate = true ) { + global $wpdb; + + $network_blogs = $wpdb->get_col( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE site_id = %d", $wpdb->siteid ) ); + + if ( is_array( $network_blogs ) && $network_blogs !== array() ) { + foreach ( $network_blogs as $blog_id ) { + switch_to_blog( $blog_id ); + + if ( $activate === true ) { + _wpseo_activate(); + } + else { + _wpseo_deactivate(); + } + + restore_current_blog(); + } + } +} + +/** + * Runs on activation of the plugin. + */ +function _wpseo_activate() { + require_once( WPSEO_PATH . 'inc/wpseo-functions.php' ); + require_once( WPSEO_PATH . 'inc/class-wpseo-installation.php' ); + + wpseo_load_textdomain(); // Make sure we have our translations available for the defaults. + + new WPSEO_Installation(); + + WPSEO_Options::get_instance(); + if ( ! is_multisite() ) { + WPSEO_Options::initialize(); + } + else { + WPSEO_Options::maybe_set_multisite_defaults( true ); + } + WPSEO_Options::ensure_options_exist(); + + if ( is_multisite() && ms_is_switched() ) { + delete_option( 'rewrite_rules' ); + } + else { + $wpseo_rewrite = new WPSEO_Rewrite(); + $wpseo_rewrite->schedule_flush(); + } + + wpseo_add_capabilities(); + + // Clear cache so the changes are obvious. + WPSEO_Utils::clear_cache(); + + do_action( 'wpseo_activate' ); +} + +/** + * On deactivation, flush the rewrite rules so XML sitemaps stop working. + */ +function _wpseo_deactivate() { + require_once( WPSEO_PATH . 'inc/wpseo-functions.php' ); + + if ( is_multisite() && ms_is_switched() ) { + delete_option( 'rewrite_rules' ); + } + else { + add_action( 'shutdown', 'flush_rewrite_rules' ); + } + + wpseo_remove_capabilities(); + + // Clear cache so the changes are obvious. + WPSEO_Utils::clear_cache(); + + do_action( 'wpseo_deactivate' ); +} + +/** + * Run wpseo activation routine on creation / activation of a multisite blog if WPSEO is activated + * network-wide. + * + * Will only be called by multisite actions. + * + * @internal Unfortunately will fail if the plugin is in the must-use directory + * @see https://core.trac.wordpress.org/ticket/24205 + * + * @param int $blog_id Blog ID. + */ +function wpseo_on_activate_blog( $blog_id ) { + if ( ! function_exists( 'is_plugin_active_for_network' ) ) { + require_once( ABSPATH . '/wp-admin/includes/plugin.php' ); + } + + if ( is_plugin_active_for_network( plugin_basename( WPSEO_FILE ) ) ) { + switch_to_blog( $blog_id ); + wpseo_activate( false ); + restore_current_blog(); + } +} + + +/* ***************************** PLUGIN LOADING *************************** */ + +/** + * Load translations + */ +function wpseo_load_textdomain() { + $wpseo_path = str_replace( '\\', '/', WPSEO_PATH ); + $mu_path = str_replace( '\\', '/', WPMU_PLUGIN_DIR ); + + if ( false !== stripos( $wpseo_path, $mu_path ) ) { + load_muplugin_textdomain( 'wordpress-seo', dirname( WPSEO_BASENAME ) . '/languages/' ); + } + else { + load_plugin_textdomain( 'wordpress-seo', false, dirname( WPSEO_BASENAME ) . '/languages/' ); + } +} + +add_action( 'plugins_loaded', 'wpseo_load_textdomain' ); + + +/** + * On plugins_loaded: load the minimum amount of essential files for this plugin + */ +function wpseo_init() { + require_once( WPSEO_PATH . 'inc/wpseo-functions.php' ); + require_once( WPSEO_PATH . 'inc/wpseo-functions-deprecated.php' ); + + // Make sure our option and meta value validation routines and default values are always registered and available. + WPSEO_Options::get_instance(); + WPSEO_Meta::init(); + + $options = WPSEO_Options::get_options( array( 'wpseo', 'wpseo_permalinks', 'wpseo_xml' ) ); + if ( version_compare( $options['version'], WPSEO_VERSION, '<' ) ) { + new WPSEO_Upgrade(); + // Get a cleaned up version of the $options. + $options = WPSEO_Options::get_options( array( 'wpseo', 'wpseo_permalinks', 'wpseo_xml' ) ); + } + + if ( $options['stripcategorybase'] === true ) { + $GLOBALS['wpseo_rewrite'] = new WPSEO_Rewrite; + } + + if ( $options['enablexmlsitemap'] === true ) { + $GLOBALS['wpseo_sitemaps'] = new WPSEO_Sitemaps; + } + + if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) { + require_once( WPSEO_PATH . 'inc/wpseo-non-ajax-functions.php' ); + } + + // Init it here because the filter must be present on the frontend as well or it won't work in the customizer. + new WPSEO_Customizer(); +} + +/** + * Loads the rest api endpoints. + */ +function wpseo_init_rest_api() { + // We can't do anything when requirements are not met. + if ( WPSEO_Utils::is_api_available() ) { + // Boot up REST API. + $configuration_service = new WPSEO_Configuration_Service(); + $configuration_service->initialize(); + } +} + +/** + * Used to load the required files on the plugins_loaded hook, instead of immediately. + */ +function wpseo_frontend_init() { + add_action( 'init', 'initialize_wpseo_front' ); + + $options = WPSEO_Options::get_option( 'wpseo_internallinks' ); + if ( $options['breadcrumbs-enable'] === true ) { + /** + * If breadcrumbs are active (which they supposedly are if the users has enabled this settings, + * there's no reason to have bbPress breadcrumbs as well. + * + * @internal The class itself is only loaded when the template tag is encountered via + * the template tag function in the wpseo-functions.php file + */ + add_filter( 'bbp_get_breadcrumb', '__return_false' ); + } + + add_action( 'template_redirect', 'wpseo_frontend_head_init', 999 ); +} + +/** + * Instantiate the different social classes on the frontend + */ +function wpseo_frontend_head_init() { + $options = WPSEO_Options::get_option( 'wpseo_social' ); + if ( $options['twitter'] === true ) { + add_action( 'wpseo_head', array( 'WPSEO_Twitter', 'get_instance' ), 40 ); + } + + if ( $options['opengraph'] === true ) { + $GLOBALS['wpseo_og'] = new WPSEO_OpenGraph; + } + +} + +/** + * Used to load the required files on the plugins_loaded hook, instead of immediately. + */ +function wpseo_admin_init() { + new WPSEO_Admin_Init(); +} + + +/* ***************************** BOOTSTRAP / HOOK INTO WP *************************** */ +$spl_autoload_exists = function_exists( 'spl_autoload_register' ); +$filter_exists = function_exists( 'filter_input' ); + +if ( ! $spl_autoload_exists ) { + add_action( 'admin_init', 'yoast_wpseo_missing_spl', 1 ); +} + +if ( ! $filter_exists ) { + add_action( 'admin_init', 'yoast_wpseo_missing_filter', 1 ); +} + +if ( ! function_exists( 'wp_installing' ) ) { + /** + * We need to define wp_installing in WordPress versions older than 4.4 + * + * @return bool + */ + function wp_installing() { + return defined( 'WP_INSTALLING' ); + } +} + +if ( ! wp_installing() && ( $spl_autoload_exists && $filter_exists ) ) { + add_action( 'plugins_loaded', 'wpseo_init', 14 ); + add_action( 'rest_api_init', 'wpseo_init_rest_api' ); + + if ( is_admin() ) { + + new Yoast_Alerts(); + + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { + require_once( WPSEO_PATH . 'admin/ajax.php' ); + + // Plugin conflict ajax hooks. + new Yoast_Plugin_Conflict_Ajax(); + + if ( filter_input( INPUT_POST, 'action' ) === 'inline-save' ) { + add_action( 'plugins_loaded', 'wpseo_admin_init', 15 ); + } + } + else { + add_action( 'plugins_loaded', 'wpseo_admin_init', 15 ); + } + } + else { + add_action( 'plugins_loaded', 'wpseo_frontend_init', 15 ); + } + + add_action( 'plugins_loaded', 'load_yoast_notifications' ); +} + +// Activation and deactivation hook. +register_activation_hook( WPSEO_FILE, 'wpseo_activate' ); +register_deactivation_hook( WPSEO_FILE, 'wpseo_deactivate' ); +add_action( 'wpmu_new_blog', 'wpseo_on_activate_blog' ); +add_action( 'activate_blog', 'wpseo_on_activate_blog' ); + +// Loading OnPage integration. +new WPSEO_OnPage(); + + +/** + * Wraps for notifications center class. + */ +function load_yoast_notifications() { + // Init Yoast_Notification_Center class. + Yoast_Notification_Center::get(); +} + + +/** + * Throw an error if the PHP SPL extension is disabled (prevent white screens) and self-deactivate plugin + * + * @since 1.5.4 + * + * @return void + */ +function yoast_wpseo_missing_spl() { + if ( is_admin() ) { + add_action( 'admin_notices', 'yoast_wpseo_missing_spl_notice' ); + + yoast_wpseo_self_deactivate(); + } +} + +/** + * Returns the notice in case of missing spl extension + */ +function yoast_wpseo_missing_spl_notice() { + $message = esc_html__( 'The Standard PHP Library (SPL) extension seem to be unavailable. Please ask your web host to enable it.', 'wordpress-seo' ); + yoast_wpseo_activation_failed_notice( $message ); +} + +/** + * Throw an error if the Composer autoload is missing and self-deactivate plugin + * + * @return void + */ +function yoast_wpseo_missing_autoload() { + if ( is_admin() ) { + add_action( 'admin_notices', 'yoast_wpseo_missing_autoload_notice' ); + + yoast_wpseo_self_deactivate(); + } +} + +/** + * Returns the notice in case of missing Composer autoload + */ +function yoast_wpseo_missing_autoload_notice() { + /* translators: %1$s expands to Yoast SEO, %2$s / %3$s: links to the installation manual in the Readme for the Yoast SEO code repository on GitHub */ + $message = esc_html__( 'The %1$s plugin installation is incomplete. Please refer to %2$sinstallation instructions%3$s.', 'wordpress-seo' ); + $message = sprintf( $message, 'Yoast SEO', '', '' ); + yoast_wpseo_activation_failed_notice( $message ); +} + +/** + * Throw an error if the filter extension is disabled (prevent white screens) and self-deactivate plugin + * + * @since 2.0 + * + * @return void + */ +function yoast_wpseo_missing_filter() { + if ( is_admin() ) { + add_action( 'admin_notices', 'yoast_wpseo_missing_filter_notice' ); + + yoast_wpseo_self_deactivate(); + } +} + +/** + * Returns the notice in case of missing filter extension + */ +function yoast_wpseo_missing_filter_notice() { + $message = esc_html__( 'The filter extension seem to be unavailable. Please ask your web host to enable it.', 'wordpress-seo' ); + yoast_wpseo_activation_failed_notice( $message ); +} + +/** + * Echo's the Activation failed notice with any given message. + * + * @param string $message Message string. + */ +function yoast_wpseo_activation_failed_notice( $message ) { + echo '

        ' . __( 'Activation failed:', 'wordpress-seo' ) . ' ' . $message . '

        '; +} + +/** + * The method will deactivate the plugin, but only once, done by the static $is_deactivated + */ +function yoast_wpseo_self_deactivate() { + static $is_deactivated; + + if ( $is_deactivated === null ) { + $is_deactivated = true; + deactivate_plugins( plugin_basename( WPSEO_FILE ) ); + if ( isset( $_GET['activate'] ) ) { + unset( $_GET['activate'] ); + } + } +} diff --git a/wp-content/plugins/wordpress-seo/wp-seo.php b/wp-content/plugins/wordpress-seo/wp-seo.php new file mode 100644 index 0000000..1bf9f5f --- /dev/null +++ b/wp-content/plugins/wordpress-seo/wp-seo.php @@ -0,0 +1,47 @@ +. + */ + +if ( ! function_exists( 'add_filter' ) ) { + header( 'Status: 403 Forbidden' ); + header( 'HTTP/1.1 403 Forbidden' ); + exit(); +} + +if ( ! defined( 'WPSEO_FILE' ) ) { + define( 'WPSEO_FILE', __FILE__ ); +} + +// Load the Yoast SEO plugin. +require_once( dirname( WPSEO_FILE ) . '/wp-seo-main.php' ); diff --git a/wp-content/plugins/wordpress-seo/wpml-config.xml b/wp-content/plugins/wordpress-seo/wpml-config.xml new file mode 100644 index 0000000..cc4c61b --- /dev/null +++ b/wp-content/plugins/wordpress-seo/wpml-config.xml @@ -0,0 +1,57 @@ + + + _yoast_wpseo_title + _yoast_wpseo_bctitle + _yoast_wpseo_metadesc + _yoast_wpseo_metakeywords + _yoast_wpseo_focuskw + _yoast_wpseo_meta-robots-noindex + _yoast_wpseo_meta-robots-nofollow + _yoast_wpseo_meta-robots-adv + _yoast_wpseo_canonical + _yoast_wpseo_redirect + _yoast_wpseo_opengraph-description + _yoast_wpseo_google-plus-description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +