<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[41584] trunk: Retire Press This and extract it to a plugin.</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/41584">41584</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/41584","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>azaozz</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2017-09-24 14:21:42 +0000 (Sun, 24 Sep 2017)</dd>
</dl>
<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Retire Press This and extract it to a plugin. First run.
Props kraftbj, azaozz.
See <a href="https://core.trac.wordpress.org/ticket/41689">#41689</a>.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkGruntfilejs">trunk/Gruntfile.js</a></li>
<li><a href="#trunksrcwpadminadminajaxphp">trunk/src/wp-admin/admin-ajax.php</a></li>
<li><a href="#trunksrcwpadminincludesajaxactionsphp">trunk/src/wp-admin/includes/ajax-actions.php</a></li>
<li><a href="#trunksrcwpadminincludesclassplugininstallerskinphp">trunk/src/wp-admin/includes/class-plugin-installer-skin.php</a></li>
<li><a href="#trunksrcwpadminincludesupdatecorephp">trunk/src/wp-admin/includes/update-core.php</a></li>
<li><a href="#trunksrcwpadminpluginsphp">trunk/src/wp-admin/plugins.php</a></li>
<li><a href="#trunksrcwpadminpressthisphp">trunk/src/wp-admin/press-this.php</a></li>
<li><a href="#trunksrcwpadmintoolsphp">trunk/src/wp-admin/tools.php</a></li>
<li><a href="#trunksrcwpincludesdeprecatedphp">trunk/src/wp-includes/deprecated.php</a></li>
<li><a href="#trunksrcwpincludeslinktemplatephp">trunk/src/wp-includes/link-template.php</a></li>
<li><a href="#trunksrcwpincludesscriptloaderphp">trunk/src/wp-includes/script-loader.php</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#trunksrcwpadmincsspressthiseditorcss">trunk/src/wp-admin/css/press-this-editor.css</a></li>
<li><a href="#trunksrcwpadmincsspressthiscss">trunk/src/wp-admin/css/press-this.css</a></li>
<li><a href="#trunksrcwpadminincludesclasswppressthisphp">trunk/src/wp-admin/includes/class-wp-press-this.php</a></li>
<li><a href="#trunksrcwpadminjsbookmarkletjs">trunk/src/wp-admin/js/bookmarklet.js</a></li>
<li><a href="#trunksrcwpadminjsbookmarkletminjs">trunk/src/wp-admin/js/bookmarklet.min.js</a></li>
<li><a href="#trunksrcwpadminjspressthisjs">trunk/src/wp-admin/js/press-this.js</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkGruntfilejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/Gruntfile.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/Gruntfile.js 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/Gruntfile.js 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -493,7 +493,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-includes/js/tinymce/plugins/wp*/plugin.js',
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Exceptions
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- '!wp-admin/js/bookmarklet.*', // Minified and updated in /src with the precommit task. See uglify:bookmarklet.
</del><span class="cx" style="display: block; padding: 0 10px"> '!wp-admin/js/custom-header.js', // Why? We should minify this.
</span><span class="cx" style="display: block; padding: 0 10px"> '!wp-admin/js/farbtastic.js',
</span><span class="cx" style="display: block; padding: 0 10px"> '!wp-admin/js/iris.min.js',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -540,15 +539,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> ext: '.min.js',
</span><span class="cx" style="display: block; padding: 0 10px"> src: ['wp-includes/js/jquery/ui/*.js']
</span><span class="cx" style="display: block; padding: 0 10px"> },
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- bookmarklet: {
- options: {
- compress: {
- negate_iife: false
- }
- },
- src: SOURCE_DIR + 'wp-admin/js/bookmarklet.js',
- dest: SOURCE_DIR + 'wp-admin/js/bookmarklet.min.js'
- },
</del><span class="cx" style="display: block; padding: 0 10px"> masonry: {
</span><span class="cx" style="display: block; padding: 0 10px"> options: {
</span><span class="cx" style="display: block; padding: 0 10px"> // Preserve comments that start with a bang.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -823,7 +813,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> grunt.registerTask( 'precommit:js', [
</span><span class="cx" style="display: block; padding: 0 10px"> 'browserify',
</span><span class="cx" style="display: block; padding: 0 10px"> 'jshint:corejs',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'uglify:bookmarklet',
</del><span class="cx" style="display: block; padding: 0 10px"> 'uglify:masonry',
</span><span class="cx" style="display: block; padding: 0 10px"> 'qunit:compiled'
</span><span class="cx" style="display: block; padding: 0 10px"> ] );
</span></span></pre></div>
<a id="trunksrcwpadminadminajaxphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/admin-ajax.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/admin-ajax.php 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/admin-ajax.php 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -61,14 +61,15 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor',
</span><span class="cx" style="display: block; padding: 0 10px"> 'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 'get-revision-diffs',
</span><span class="cx" style="display: block; padding: 0 10px"> 'save-user-color-scheme', 'update-widget', 'query-themes', 'parse-embed', 'set-attachment-thumbnail',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'parse-media-shortcode', 'destroy-sessions', 'install-plugin', 'update-plugin', 'press-this-save-post',
- 'press-this-add-category', 'crop-image', 'generate-password', 'save-wporg-username', 'delete-plugin',
- 'search-plugins', 'search-install-plugins', 'activate-plugin', 'update-theme', 'delete-theme',
- 'install-theme', 'get-post-thumbnail-html', 'get-community-events',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'parse-media-shortcode', 'destroy-sessions', 'install-plugin', 'update-plugin', 'crop-image',
+ 'generate-password', 'save-wporg-username', 'delete-plugin', 'search-plugins',
+ 'search-install-plugins', 'activate-plugin', 'update-theme', 'delete-theme', 'install-theme',
+ 'get-post-thumbnail-html', 'get-community-events',
</ins><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Deprecated
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-$core_actions_post[] = 'wp-fullscreen-save-post';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+$core_actions_post_deprecated = array( 'wp-fullscreen-save-post', 'press-this-save-post', 'press-this-add-category' );
+$core_actions_post = array_merge( $core_actions_post, $core_actions_post_deprecated );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Register core Ajax calls.
</span><span class="cx" style="display: block; padding: 0 10px"> if ( ! empty( $_GET['action'] ) && in_array( $_GET['action'], $core_actions_get ) )
</span></span></pre></div>
<a id="trunksrcwpadmincsspressthiseditorcss"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: trunk/src/wp-admin/css/press-this-editor.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/css/press-this-editor.css 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/css/press-this-editor.css 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,122 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-/*
-Press This TinyMCE editor styles :)
-*/
-
-
-/**
-* Links
-*/
-a {
- color: #0073aa;
-}
-
-a:visited {
- color: #0073aa;
-}
-
-a:hover,
-a:focus,
-a:active {
- color: #00a0d2;
-}
-
-
-/**
-* Lists
-*/
-ul,
-ol {
- margin: 0 0 1.5em 3em;
-}
-
-ul {
- list-style: disc;
-}
-
-ol {
- list-style: decimal;
-}
-
-li > ul,
-li > ol {
- margin-bottom: 0;
- margin-left: 1.5em;
-}
-
-dt {
- font-weight: 700;
-}
-
-dd {
- margin: 0 1.5em 1.5em;
-}
-
-
-/**
-* Media
-*
-* Basic image and object styles
-*/
-img {
- max-width: 100%;
- height: auto;
-}
-
-/* Makes sure embeds and iframes fit inside their containers */
-embed,
-iframe,
-object {
- max-width: 100%;
-}
-
-
-/**
-* TinyMCE styles
-*
-* Pretty dang good.
-*/
-body {
- color: #404040;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
- font-size: 20px;
- font-weight: 400;
- line-height: 1.6;
-}
-@media (max-width: 900px) {
- body#tinymce {
- padding-top: 30px !important;
- }
-}
-@media (max-width: 640px) {
- body {
- font-size: 16px;
- }
-}
-@media (max-width: 320px) {
- body {
- margin: 0 15px;
- }
-}
-
-#tinymce b,
-#tinymce strong {
- /* overrides TinyMCE's !important. Woohoo. */
- font-weight: 700 !important;
-}
-
-blockquote {
- margin: 1em 1.5em;
- color: #9ea7af;
- font-size: em(25px);
- font-style: italic;
-}
-@media (max-width: 900px) {
- blockquote {
- margin: 1.5em 1em;
- }
-}
-
-ul,
-ol {
- margin: 0 0 1.5em .75em;
-}
</del></span></pre></div>
<a id="trunksrcwpadmincsspressthiscss"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: trunk/src/wp-admin/css/press-this.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/css/press-this.css 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/css/press-this.css 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,2177 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-/*
-Press This styles :)
-*/
-
-
-/**
-* Normalize
-*
-* normalize.css v3.0.0 | MIT License | git.io/normalize
-*/
-html {
- font-family: sans-serif;
- -ms-text-size-adjust: 100%;
- -webkit-text-size-adjust: 100%;
-}
-
-body {
- margin: 0;
-}
-
-*,
-*:before,
-*:after {
- box-sizing: border-box;
-}
-@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi) {
- *,
- *:before,
- *:after {
- -webkit-font-smoothing: antialiased;
- }
-}
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section,
-summary {
- display: block;
-}
-
-audio,
-canvas,
-progress,
-video {
- display: inline-block;
- vertical-align: baseline;
-}
-
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-
-[hidden],
-template {
- display: none;
-}
-
-a {
- background: transparent;
-}
-
-a:active,
-a:hover {
- outline: 0;
-}
-
-abbr[title] {
- border-bottom: 1px dotted;
-}
-
-b,
-strong {
- font-weight: 700;
-}
-
-dfn {
- font-style: italic;
-}
-
-h1 {
- font-size: 2em;
- margin: 0.67em 0;
-}
-
-mark {
- background: #ff0;
- color: #000;
-}
-
-small {
- font-size: 80%;
-}
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sup {
- top: -0.5em;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-img {
- border: 0;
-}
-
-svg:not(:root) {
- overflow: hidden;
-}
-
-figure {
- margin: 1em 40px;
-}
-
-hr {
- box-sizing: content-box;
- height: 0;
-}
-
-pre {
- overflow: auto;
-}
-
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-
-button,
-input,
-optgroup,
-select,
-textarea {
- color: inherit;
- font: inherit;
- margin: 0;
-}
-
-button {
- overflow: visible;
-}
-
-button,
-select {
- text-transform: none;
-}
-
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
-}
-
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-
-input {
- line-height: normal;
-}
-
-input[type="checkbox"],
-input[type="radio"] {
- box-sizing: border-box;
- padding: 0;
-}
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-
-input[type="search"] {
- -webkit-appearance: textfield;
- box-sizing: content-box;
-}
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-fieldset {
- border: 0;
- margin: 0;
- padding: 0;
-}
-
-legend {
- border: 0;
- padding: 0;
-}
-
-textarea {
- overflow: auto;
-}
-
-optgroup {
- font-weight: 700;
-}
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-td,
-th {
- padding: 0;
-}
-
-::-webkit-input-placeholder {
- color: #72777c;
-}
-
-::-moz-placeholder {
- color: #72777c;
- opacity: 1;
-}
-
-:-ms-input-placeholder {
- color: #72777c;
-}
-
-.clearfix:before,
-.clearfix:after {
- content: "";
- display: table;
-}
-.clearfix:after {
- clear: both;
-}
-
-.hide-if-js {
- display: none;
-}
-
-.screen-reader-text {
- position: absolute;
- margin: -1px;
- padding: 0;
- height: 1px;
- width: 1px;
- overflow: hidden;
- clip: rect(0 0 0 0);
- border: 0;
-}
-
-
-/**
-* Typography
-*
-* Base element typographic styles.
-*/
-body,
-button,
-input,
-select,
-textarea {
- color: #404040;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
- font-size: 20px;
- font-weight: 400;
- line-height: 1.6;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- clear: both;
-}
-
-p {
- margin-bottom: 1.5em;
-}
-
-b,
-strong {
- font-weight: 700;
-}
-
-
-/**
-* Buttons
-*
-* Pushing buttons is what I do.
-*/
-
-.scan-submit {
- display: inline-block;
- margin: 0;
- padding: 0 10px 1px;
- border-width: 1px;
- border-style: solid;
- border-radius: 3px;
- font-size: 13px;
- line-height: 2;
- text-decoration: none;
- white-space: nowrap;
- cursor: pointer;
- -webkit-appearance: none;
-}
-
-.split-button {
- position: relative;
- display: inline-block;
- vertical-align: middle;
-}
-
-.split-button-body {
- display: none;
- position: absolute;
- bottom: 39px;
- right: 0;
- border: 1px solid #ddd;
- background-color: #fff;
- min-width: 180px;
- max-width: 100%;
- margin: 0;
- padding: 8px;
- list-style: none;
- box-shadow: 1px 0 4px rgba( 0, 0, 0, 0.15 );
-}
-
-.split-button-body:before,
-.split-button-body:after {
- position: absolute;
- right: 12px;
- display: block;
- width: 0;
- height: 0;
- border-style: solid;
- border-color: transparent;
- content: "";
-}
-
-.split-button-body:before {
- bottom: -18px;
- border-top-color: #ccc;
- border-width: 9px;
- right: 11px;
-}
-
-.split-button-body:after {
- bottom: -16px;
- border-top-color: #fff;
- border-width: 8px;
-}
-
-.split-button-body .split-button-option {
- display: block;
- padding: 5px 15px;
- margin: 0;
- width: 100%;
- border: 0;
- text-align: left;
- line-height: 2;
- background: none;
- color: inherit;
- text-decoration: none;
- outline: none;
- transition: none;
-}
-
-.split-button-body .split-button-option:hover,
-.split-button-body .split-button-option:active {
- color: inherit;
-}
-
-.is-open .split-button-body {
- display: block;
-}
-
-.split-button-primary,
-.split-button-toggle {
- border-radius: 0;
- display: block;
- margin: 0;
- font-size: 13px;
- text-decoration: none;
- white-space: nowrap;
- cursor: pointer;
- -webkit-appearance: none;
- line-height: 2;
- padding: 0 10px 1px;
- background: #0085ba;
- border-color: #0073aa #006799 #006799;
- border-width: 1px;
- border-style: solid;
- box-shadow: 0 1px 0 #006799;
- color: #fff;
- text-shadow: 0 -1px 1px #006799,
- 1px 0 1px #006799,
- 0 1px 1px #006799,
- -1px 0 1px #006799;
-}
-
-.split-button-primary {
- border-top-left-radius: 3px;
- border-bottom-left-radius: 3px;
- border-right: 0 none;
- float: left;
-}
-
-.split-button-toggle {
- padding: 0;
- border-top-right-radius: 3px;
- border-bottom-right-radius: 3px;
- border-left: 1px solid #006799;
- float: right;
-}
-
-.split-button-toggle i {
- margin: 4px 20px 3px 0;
- padding: 0 10px;
-}
-
-.split-button-primary:hover,
-.split-button-toggle:hover {
- outline: none;
- background: #008ec2;
- border-color: #006799;
-}
-
-.split-button-primary:focus,
-.split-button-toggle:focus {
- outline: none;
- box-shadow: 0 1px 0 #0073aa,
- 0 0 2px 1px #33b3db;
-}
-
-.split-button-primary:active,
-.split-button-toggle:active {
- background: #0073aa;
- border-color: #006799;
- box-shadow: inset 0 2px 10px #006799, 0 1px 0 #0073aa;
-}
-
-/**
-* Forms
-*
-* So many input types.
-*/
-button,
-input,
-select,
-textarea {
- font-size: 100%;
- margin: 0;
- vertical-align: baseline;
- *vertical-align: middle;
-}
-
-[type="checkbox"],
-[type="radio"] {
- padding: 0;
-}
-
-[type="search"] {
- -webkit-appearance: textfield;
- box-sizing: content-box;
-}
-
-[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-
-[type="text"],
-[type="email"],
-[type="url"],
-[type="password"],
-[type="search"],
-textarea {
- padding: 0.4em 0.75em;
- color: #32373c;
- border: 1px solid #ccc;
-}
-
-[type="text"]:focus,
-[type="email"]:focus,
-[type="url"]:focus,
-[type="password"]:focus,
-[type="search"]:focus,
-textarea:focus {
- color: #32373c;
- outline: 0;
-}
-
-textarea {
- overflow: auto;
- padding-left: 3px;
- vertical-align: top;
-}
-
-
-/**
-* Links
-*/
-a {
- color: #0073aa;
-}
-
-a:visited {
- color: #0073aa;
-}
-
-a:hover,
-a:focus,
-a:active {
- color: #00a0d2;
-}
-
-
-/**
-* Lists
-*/
-ul,
-ol {
- margin: 0 0 1.5em 3em;
-}
-
-ul {
- list-style: disc;
-}
-
-ol {
- list-style: decimal;
-}
-
-li > ul,
-li > ol {
- margin-bottom: 0;
- margin-left: 1.5em;
-}
-
-dt {
- font-weight: 700;
-}
-
-dd {
- margin: 0 1.5em 1.5em;
-}
-
-
-/**
-* Post formats
-*
-* Complete styles for post formats UI
-*/
-/* TODO if we remove the <br> during merge, this can go. */
-#post-formats-select br {
- display: none;
-}
-
-.post-format {
- width: 1px;
- height: 1px;
- position: absolute;
- top: -9999px;
-}
-
-.lt-ie9 .post-format {
- margin: 17px 12px 0 13px;
- width: auto;
- height: auto;
- position: static;
- top: auto;
- float: left;
- width: 16px;
- height: 16px;
-}
-
-.post-format-icon {
- position: relative;
- display: block;
- padding: 13px 2px 14px 13px;
- cursor: pointer;
-}
-
-.post-format-icon:before,
-.post-format-icon:after {
- content: "";
- display: inline-block;
- width: 20px;
- height: 20px;
- margin-right: 10px;
- font-size: 20px;
- line-height: 1;
- font-family: dashicons;
- text-decoration: inherit;
- color: #9ea7af;
- font-weight: 400;
- font-style: normal;
- vertical-align: top;
- text-align: center;
- transition: color .1s ease-in 0;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.post-format-icon:before {
- content: "\f109";
-}
-
-.post-format-icon:after {
- display: none;
- content: "\f147";
- float: right;
-}
-
-.post-format:checked + .post-format-icon {
- box-shadow: inset 6px 0 0 #00a0d2;
- background: rgba(46, 162, 204, 0.1);
-}
-
-.post-format:checked + .post-format-icon:before,
-.post-format:checked + .post-format-icon:after {
- color: #32373c;
-}
-
-.post-format:focus + .post-format-icon {
- background: #00a0d2;
- color: #fff;
-}
-
-.post-format:focus + .post-format-icon:before,
-.post-format:focus + .post-format-icon:after {
- color: #fff;
-}
-
-.post-format:checked + .post-format-icon:after {
- display: block;
-}
-
-.lt-ie9 .post-format-icon {
- margin-left: 16px;
-}
-
-.post-format-aside:before {
- content: "\f123";
-}
-
-.post-format-chat:before {
- content: "\f125";
-}
-
-.post-format-gallery:before {
- content: "\f161";
-}
-
-.post-format-link:before {
- content: "\f103";
-}
-
-.post-format-image:before {
- content: "\f128";
-}
-
-.post-format-quote:before {
- content: "\f122";
-}
-
-.post-format-status:before {
- content: "\f130";
-}
-
-.post-format-video:before {
- content: "\f126";
-}
-
-.post-format-audio:before {
- content: "\f127";
-}
-
-
-/**
-* Tags
-*
-* Complete styles for tags UI
-*/
-.tagsdiv p {
- margin: 0;
-}
-
-.tagsdiv .ajaxtag {
- position: relative;
-}
-
-.tagsdiv .newtag {
- display: block;
- position: relative;
- padding: 11px 58px 11px 16px;
- width: 100%;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
- font-size: 16px;
-}
-
-.tagsdiv .tagadd {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 1px;
- border: 0;
- border-radius: 0;
- margin: 0;
- padding: 0 16px;
- background: #f7f7f7;
- border-left: 1px solid #f1f1f1;
- box-shadow: none;
-}
-
-.tagsdiv .tagadd:hover,
-.tagsdiv .tagadd:active,
-.tagsdiv .tagadd:focus {
- outline: 0;
- background: #2991b7;
- border-color: #20708e;
- color: #fff;
- box-shadow: none;
-}
-
-.tagsdiv .howto {
- color: #727272;
- font-style: italic;
- margin: 10px 0 6px 16px;
-}
-
-/* Tags */
-.tagchecklist {
- margin: 0;
- padding: 16px 28px 5px;
- list-style: none;
-}
-
-.tagchecklist:before,
-.tagchecklist:after {
- content: "";
- display: table;
-}
-
-.tagchecklist:after {
- clear: both;
-}
-
-.tagchecklist > li {
- float: left;
- margin-right: 25px;
- font-size: 13px;
- line-height: 1.8;
- white-space: nowrap;
- cursor: default;
-}
-
-@media (max-width: 600px) {
- .tagchecklist > li {
- margin-bottom: 15px;
- font-size: 16px;
- line-height: 1.3;
- }
-}
-
-.tagchecklist .ntdelbutton {
- position: absolute;
- width: 24px;
- height: 24px;
- border: none;
- margin: 0 0 0 -19px;
- padding: 0;
- background: none;
- cursor: pointer;
- text-indent: 0;;
- position: absolute;
-}
-
-.tagchecklist .ntdelbutton .remove-tag-icon:before {
- content: "\f153";
- display: block;
- margin-left: 2px;
- height: 20px;
- width: 20px;
- border-radius: 50%;
- background: transparent;
- color: #0073aa;
- /* line-height tweak to vertically center the icon cross browsers */
- font: 400 16px/1.28 dashicons;
- text-align: center;
- -webkit-font-smoothing: antialiased;
-}
-
-.tagchecklist .ntdelbutton:focus {
- outline: 0;
-}
-
-.tagchecklist .ntdelbutton:hover .remove-tag-icon:before,
-.tagchecklist .ntdelbutton:focus .remove-tag-icon:before {
- color: #c00;
-}
-
-.tagchecklist .ntdelbutton:focus .remove-tag-icon:before {
- box-shadow:
- 0 0 0 1px #5b9dd9,
- 0 0 2px 1px rgba(30, 140, 190, .8);
-}
-
-/* THE TAG CLOUD. */
-.tagsdiv + p {
- margin: 0;
-}
-
-.press-this .tagcloud-link {
- display: block;
- margin: 0 16px 5px;
- padding: 0;
- text-decoration: none;
- outline: 0;
- color: inherit;
-}
-
-.press-this .tagcloud-link:hover,
-.press-this .tagcloud-link:active {
- color: inherit;
-}
-
-.tagcloud-link:focus {
- text-decoration: underline;
-}
-
-.popular-tags {
- border: none;
- line-height: 2em;
- padding: 8px 12px 12px;
- text-align: justify;
-}
-
-.popular-tags a {
- padding: 0 3px;
-}
-
-.the-tagcloud {
- margin: 0;
- padding: 16px;
-}
-
-.the-tagcloud ul {
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-.the-tagcloud ul li {
- display: inline-block;
-}
-
-.the-tagcloud a {
- text-decoration: none;
- outline: 0;
-}
-
-.the-tagcloud a:focus {
- text-decoration: underline;
-}
-
-.tagcloud h3 {
- margin: 2px 0 12px;
-}
-
-
-/**
-* Categories
-*
-* Complete styles for post categories UI
-*/
-input[type="search"].categories-search,
-.add-category-name {
- display: block;
- width: 100%;
- padding: 0.85714em 1.07143em;
- border: 0;
- border-radius: 0;
- border-bottom: 1px solid #e5e5e5;
- font-size: 14px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-@media (max-width: 600px) {
- input[type="search"].categories-search,
- .add-category-name {
- /* Needs to be 16px to prevent zooming on iOS. Guh. */
- font-size: 16px;
- }
-}
-
-.press-this .add-cat-toggle {
- float: right;
- margin-top: -45px;
- line-height: 20px;
- padding: 12px 10px 8px;
- color: #0073aa;
- text-decoration: none;
- transition: none;
-}
-
-.press-this .add-cat-toggle:focus {
- color: #00a0d2;
-}
-
-.press-this .add-cat-toggle.is-toggled {
- padding: 10px;
-}
-
-.press-this .add-cat-toggle.is-toggled .dashicons:before {
- content: "\f179";
-}
-
-.add-category {
- position: relative;
- border-bottom: 1px solid #e5e5e5;
-}
-
-.add-category.is-hidden {
- display: none;
-}
-
-.add-category .add-cat-submit {
- position: absolute;
- top: 0;
- right: 0;
- border: 0;
- border-radius: 0;
- padding: 12px 16px;
- background: #f7f7f7;
- border-left: 1px solid #f1f1f1;
-}
-
-.add-category .add-cat-submit:hover,
-.add-category .add-cat-submit:active,
-.add-category .add-cat-submit:focus {
- outline: 0;
- background: #2991b7;
- border-color: #20708e;
- color: #fff;
-}
-
-/* Parent category select */
-.postform-wrapper {
- padding: 12px;
-}
-
-.postform {
- display: block;
- margin: 0;
- width: 100%;
- height: 34px;
- border: 0;
- border-radius: 0;
- border: 1px solid #e5e5e5;
- background: #fff;
- background-size: 20px 20px;
- overflow: hidden;
- line-height: 21px;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- white-space: nowrap;
- cursor: pointer;
- outline: 0;
-}
-
-.postform:focus {
- border-color: #0073aa;
- box-shadow: 0 0 0 3px #00a0d2;
- outline: 0;
- -moz-outline: none;
- -moz-user-focus: ignore;
-}
-
-.postform::-ms-expand {
- display: none;
-}
-
-.postform::-ms-value {
- background: none;
- color: #727272;
-}
-
-.postform:-moz-focusring {
- color: transparent;
- text-shadow: 0 0 0 #727272;
-}
-
-/* Category list */
-.categories-select {
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-.categories-select ul {
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-.category {
- position: relative;
- display: block;
- padding: 13px 16px 14px 16px;
- cursor: pointer;
- background: #fff;
-}
-
-.category:focus,
-.category.selected:focus {
- outline: 0;
- background: #00a0d2;
- color: #fff;
-}
-
-.category.selected {
- box-shadow: inset 6px 0 0 #00a0d2;
- background: #E9F5F9;
-}
-
-.category.selected:after {
- display: inline-block;
- content: "\f147";
- position: absolute;
- top: 13px;
- right: 0;
- width: 20px;
- height: 20px;
- margin-right: 10px;
- font-size: 20px;
- line-height: 1;
- font-family: dashicons;
- text-decoration: inherit;
- color: #23282d;
- font-weight: 400;
- font-style: normal;
- vertical-align: top;
- text-align: center;
- transition: color .1s ease-in 0;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.category.selected:focus:after {
- color: #fff;
-}
-
-.categories-select ul .category {
- padding-left: 24px;
-}
-
-.categories-select ul ul .category {
- padding-left: 32px;
-}
-
-.categories-select ul ul ul .category {
- padding-left: 40px;
-}
-
-.categories-select ul ul ul ul .category {
- padding-left: 48px;
-}
-
-.categories-select ul ul ul ul ul .category {
- padding-left: 56px;
-}
-
-.categories-select ul ul ul ul ul ul .category {
- padding-left: 64px;
-}
-
-.categories-select .is-hidden {
- display: none;
-}
-
-.categories-select .is-hidden.searched-parent {
- display: block;
-}
-
-/* Category search */
-.categories-search-wrapper {
- position: relative;
-}
-
-.categories-search-wrapper.is-hidden {
- display: none;
-}
-
-.categories-search-wrapper label {
- position: absolute;
- top: 50%;
- right: 10px;
- margin-top: -10px;
- color: #9ea7af;
-}
-
-
-/**
-* Main
-*/
-html {
- overflow: auto;
-}
-
-body {
- overflow-x: hidden;
- height: 100%;
-}
-
-html {
- background: #fff;
- box-shadow: -10px 0 0 rgba(0, 0, 0, 0.3);
-}
-
-@media (max-width: 900px) {
- body {
- font-size: 16px;
- }
-}
-
-@media (max-width: 320px) {
- body {
- font-size: 14px;
- }
-}
-
-.lt-ie9 {
- overflow: visible;
-}
-
-.adminbar {
- position: relative;
- width: 100%;
- padding: 0 0.8em;
- min-height: 3.2em;
- background: #23282d;
- color: #fff;
- z-index: 9999;
-}
-
-.adminbar:before,
-.adminbar:after {
- content: "";
- display: table;
-}
-
-.adminbar:after {
- clear: both;
-}
-
-.adminbar .dashicons {
- color: #a0a5aa; /* same as WP admin bar icons */
-}
-
-.press-this .adminbar button {
- position: absolute;
- top: 50%;
- right: 6px;
- margin-top: -13px;
- padding: 0 10px 1px;
- font-size: 13px;
- text-decoration: none;
- transition: none;
-}
-
-@media (max-width: 320px) {
- .adminbar {
- min-height: 45px;
- }
-}
-
-.current-site {
- margin-top: 0.5625em;
- font-size: 16px;
- line-height: 44px;
- font-weight: 400;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
-
-@media (max-width: 600px) {
- .current-site {
- margin: 3px 0 0;
- }
-}
-
-@media (max-width: 320px) {
- .current-site {
- margin: 0;
- font-size: 14px;
- }
-}
-
-.current-site-link {
- text-decoration: none;
-}
-
-.current-site-link:focus {
- outline: 0;
-}
-
-.current-site-link:focus .current-site-name{
- text-decoration: underline;
-}
-
-.current-site-name {
- color: #ededed;
-}
-
-@media (max-width: 320px) {
- .current-site-name {
- font-weight: 600;
- }
-}
-
-.current-site .dashicons-wordpress {
- position: relative;
- top: -1px;
- margin-right: 10px;
- vertical-align: middle;
-}
-
-.options,
-.options.open .on-closed,
-.options.closed .on-open {
- display: none;
-}
-
-@media (max-width: 900px) {
- .options {
- display: block;
- }
-}
-
-.options-panel-back.is-hidden {
- display: none;
-}
-
-.options:focus .dashicons {
- color: #fff;
- text-decoration: none;
-}
-
-.options .dashicons {
- margin-top: 3px;
-}
-
-.options {
- color: #00a0d2;
-}
-
-.alert {
- position: relative;
- margin: 0;
- padding: 16px 50px;
- border-bottom: 1px solid #e5e5e5;
- font-size: 14px;
-}
-
-.alert:before {
- content: "";
- position: absolute;
- top: 50%;
- left: 30px;
- width: 8px;
- height: 8px;
- margin-top: -4px;
- border-radius: 50%;
- background: #00a0d2;
-}
-
-@media (max-width: 600px) {
- .alert {
- padding: 16px 35px;
- }
- .alert:before {
- left: 15px;
- }
-}
-
-.alert.is-error:before {
- background: red;
-}
-
-.scan {
- position: relative;
- border-bottom: 1px solid #e5e5e5;
-}
-
-@media (max-width: 900px) {
- .scan form {
- transition: opacity .3s ease-in-out;
- }
- .scan.is-hidden form {
- opacity: .2;
- pointer-events: none;
- }
-}
-
-.scan-url {
- display: block;
- border: 0;
- padding: 0.85714em 1.07143em;
- font-size: 14px;
- width: 100%;
-}
-
-@media (max-width: 600px) {
- .scan-url {
- font-size: 16px;
- }
-}
-
-.scan-submit {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- padding: 0 1.07143em;
- background: #f7f7f7;
- border-color: #ddd;
- border: 0;
- border-left: 1px solid #f1f1f1;
- border-radius: 0;
- color: #555;
- font-size: 14px;
- line-height: 1.6;
-}
-
-.scan-submit:hover,
-.scan-submit:focus {
- background: #008ec2;
- border-color: #006799;
- color: #fff;
- outline: 0;
-}
-
-.scan-submit:active {
- background: #0073aa;
- border-color: #006799;
- color: #fff;
-}
-
-.scan-submit:visited {
- color: #555;
-}
-
-.wrapper {
- position: relative;
- margin-bottom: 60px;
- margin-right: 320px;
-}
-
-.wrapper:before,
-.wrapper:after {
- content: "";
- display: table;
-}
-
-.wrapper:after {
- clear: both;
-}
-
-@media (max-width: 900px) {
- .wrapper {
- margin: 0;
- width: 100%;
- }
-}
-
-.editor-wrapper {
- overflow: auto;
- float: left;
- width: 100%;
-}
-
-.editor-wrapper:before,
-.editor-wrapper:after {
- content: "";
- display: table;
-}
-
-.editor-wrapper:after {
- clear: both;
-}
-
-.editor {
- padding: 0 1.5em 4.75em;
- max-width: 700px;
- margin: 0 auto;
-}
-
-.spinner {
- height: 20px;
- width: 20px;
- display: inline-block;
- visibility: hidden;
- background: url(../images/spinner.gif) no-repeat center;
- background-size: 20px 20px;
- opacity: 0.7;
- filter: alpha(opacity=70);
- line-height: 1;
- vertical-align: middle;
-}
-
-@media print,
- (-webkit-min-device-pixel-ratio: 1.25),
- (min-resolution: 120dpi) {
-
- .spinner {
- background-image: url(../images/spinner-2x.gif);
- }
-}
-
-.spinner.is-active {
- visibility: visible;
-}
-
-/* Make the text inside the editor textarea white. Prevents a "flash" on loading the page */
-#pressthis {
- color: #fff;
-}
-
-@media (min-width: 901px) {
- .editor {
- max-width: 760px;
- }
-}
-
-@media (max-width: 320px) {
- .editor {
- padding: 0;
- }
-}
-
-.post-title,
-.post-title-placeholder {
- margin: 0;
- padding: .83em 0;
- width: 100%;
- border-bottom: 1px solid #e5e5e5;
- font-size: 32px;
- line-height: 1.4;
- font-weight: 700;
-}
-
-.post-title:active,
-.post-title:focus,
-.post-title-placeholder:active,
-.post-title-placeholder:focus {
- outline: 0;
- box-shadow: inset 0px -3px 0 #00a0d2;
- border-color: #00a0d2;
-}
-
-@media (max-width: 900px) {
- .post-title,
- .post-title-placeholder {
- font-size: 24px;
- }
-}
-
-@media (max-height: 400px) {
- .post-title,
- .post-title-placeholder {
- padding: 15px 0;
- font-size: 16px;
- }
-}
-
-@media (max-width: 320px) {
- .post-title,
- .post-title-placeholder {
- font-size: 16px;
- font-weight: 600;
- padding: 1.14286em 1.42857em;
- }
-}
-
-.post-title {
- /* IE8 fallback */
- background: url(data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH5BAEHAAIALAAAAAABAAEAAAICVAEAOw==);
- background: none, none;
-}
-
-.post-title:before {
- /* Keeps empty container from collapsing */
- content: "\a0";
- display: inline-block;
- width: 0;
- speak: none;
-}
-
-.post-title-placeholder {
- position: absolute;
- border: 0;
- color: #82878c;
- z-index: -1;
-}
-
-.post-title-placeholder.is-hidden {
- display: none;
-}
-
-/* Suggested images */
-.media-list-container {
- position: relative;
- padding: 2px 0;
- border-bottom: 1px solid #e5e5e5;
- display: none;
-}
-
-.media-list-inner-container {
- overflow: auto;
- max-height: 150px;
- max-height: 40vw;
-}
-
-.media-list-container.has-media {
- display: block;
-}
-
-.media-list-inner-container:before,
-.media-list-inner-container:after {
- content: "";
- display: table;
-}
-
-.media-list-inner-container:after {
- clear: both;
-}
-
-.media-list {
- margin: 0;
- padding: 0;
-}
-
-@media (min-width: 321px) {
- .media-list-inner-container {
- max-height: 250px;
- max-height: 40vw;
- }
-}
-
-@media (min-width: 601px) {
- .media-list-inner-container {
- max-height: 200px;
- max-height: 18.75vw;
- }
-}
-
-.wppt-all-media-list {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-.suggested-media-thumbnail:focus,
-.is-embed:focus {
- outline: 0;
- box-shadow: inset 0 0 0 3px #00a0d2;
-}
-
-.suggested-media-thumbnail {
- position: relative;
- display: block;
- float: left;
- width: 16.66%;
- padding: 16.66% 0 0 16.66%;
- background-position: center;
- background-repeat: no-repeat;
- background-size: cover;
- background-color: #d8d8d8;
- color: #fff;
- color: rgba(255, 255, 255, 0.6);
- cursor: pointer;
-}
-
-.suggested-media-thumbnail:hover,
-.suggested-media-thumbnail:active,
-.suggested-media-thumbnail:focus {
- color: #fff;
-}
-
-.suggested-media-thumbnail:before,
-.suggested-media-thumbnail:after {
- display: inline-block;
- position: absolute;
- font-size: 20px;
- line-height: 1;
- font-family: dashicons;
- text-decoration: inherit;
- font-weight: 400;
- font-style: normal;
- transition: color .1s ease-in 0;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.suggested-media-thumbnail:before {
- left: 50%;
- top: 50%;
- margin: -20px 0 0 -20px;
- font-size: 40px;
-}
-
-.suggested-media-thumbnail:after {
- content: "\f132";
- right: 3%;
- bottom: 2%;
-}
-
-@media (min-width: 601px) {
- .suggested-media-thumbnail {
- width: 12.5%;
- padding: 12.5% 0 0 12.5%;
- }
-}
-
-.is-embed:before {
- content: "\f104";
- color: #fff;
- color: rgba(255, 255, 255, 0.9);
-}
-
-.is-embed.is-audio:hover:before,
-.is-embed.is-audio:active:before,
-.is-embed.is-audio:focus:before,
-.is-embed.is-tweet:hover:before,
-.is-embed.is-tweet:active:before,
-.is-embed.is-tweet:focus:before {
- color: #fff;
-}
-
-.is-embed.is-video {
- background-color: #23282d;
-}
-
-.is-embed.is-video:hover:before,
-.is-embed.is-video:active:before,
-.is-embed.is-video:focus:before {
- color: rgba(255, 255, 255, 0.2);
-}
-
-.is-embed.is-video:before {
- content: "\f236";
-}
-
-.is-embed.is-audio {
- background-color: #ff7d44;
-}
-
-.is-embed.is-audio:before {
- content: "\f127";
-}
-
-.is-embed.is-tweet {
- background-color: #55acee;
-}
-
-.is-embed.is-tweet:before {
- content: "\f301";
-}
-
-.no-media {
- margin: 0;
- padding: 0;
- border: 0;
-}
-
-/* Actions bar */
-.press-this-actions {
- position: fixed;
- bottom: 0;
- left: 0;
- width: 100%;
- background: #f1f1f1;
- background: rgba(241, 241, 241, 0.9);
- border-top: 1px solid #e5e5e5;
-}
-
-@media (max-width: 900px) {
- .press-this-actions {
- -webkit-transform: translateY(0);
- transform: translateY(0);
- transition: -webkit-transform .3s ease-in-out;
- transition: transform .3s ease-in-out;
- transition: transform .3s ease-in-out, -webkit-transform .3s ease-in-out;
- }
- .press-this-actions.is-hidden {
- -webkit-transform: translateY(100%);
- transform: translateY(100%);
- }
-}
-
-.add-media {
- float: left;
- margin: 14px 0 14px 30px;
- font-size: 0;
-}
-
-@media (max-width: 320px) {
- .add-media {
- margin: 10px 0 10px 10px;
- }
-}
-
-.insert-media {
- color: #9ea7af;
- float: left;
- margin: 0;
- padding: 0;
- border: 0;
- border-radius: 0;
- background: none;
- box-shadow: none;
- overflow: hidden;
-}
-
-.insert-media:hover,
-.insert-media:focus,
-.insert-media:active {
- color: #23282d;
-}
-
-.insert-media:focus,
-.insert-media:active {
- outline: 0;
- color: #00a0d2;
- box-shadow:
- 0 0 0 1px #5b9dd9,
- 0 0 2px 1px rgba(30, 140, 190, .8);
-}
-
-.insert-media .dashicons {
- padding: 11px;
- width: 63px;
- height: 58px;
- font-size: 40px;
-}
-
-@media (max-width: 320px) {
- .insert-media .dashicons {
- width: 55px;
- height: 49px;
- padding: 14px;
- font-size: 20px;
- }
-}
-
-.post-actions {
- float: right;
- margin: 14px 30px 14px 0;
- font-size: 13px;
-}
-
-@media (max-width: 320px) {
- .post-actions {
- margin: 10px 10px 10px 0;
- }
-}
-
-.publish-button .saving-draft,
-.publish-button.is-saving .publish {
- display: none;
-}
-
-.publish-button.is-saving .saving-draft {
- display: inline;
-}
-
-/* TinyMCE styles */
-.editor .wp-media-buttons {
- float: none;
-}
-
-.editor div.mce-toolbar-grp {
- padding: 0.71429em 0;
- background: none;
- border: 0;
-}
-
-@media (max-height: 400px), (max-width: 320px) {
- .editor div.mce-toolbar-grp {
- padding: 0;
- }
-}
-
-.mce-stack-layout:before,
-.mce-stack-layout:after {
- content: "";
- display: table;
-}
-
-.mce-stack-layout:after {
- clear: both;
-}
-
-.mce-container.mce-toolbar {
- float: left;
-}
-
-.mce-container.mce-toolbar:nth-child(2) {
- float: right;
-}
-
-@media (max-width: 600px) {
- .mce-first .mce-btn:nth-child(3),
- .mce-first .mce-btn:nth-child(4) {
- position: absolute;
- margin: -1px;
- padding: 0;
- height: 1px;
- width: 1px;
- overflow: hidden;
- clip: rect(0 0 0 0);
- border: 0;
- }
-
- .mce-first .mce-btn:nth-child(3):focus,
- .mce-first .mce-btn:nth-child(4):focus {
- position: static;
- margin: 1px;
- padding: inherit;
- height: auto;
- width: auto;
- overflow: visible;
- clip: auto;
- border: 1px solid #999;
- }
-}
-
-#wp-link-wrap {
- font-size: 13px;
-}
-
-#wp-link-wrap input[type="text"] {
- padding: 3px 5px;
- margin: 1px;
-}
-
-@media screen and (max-width: 782px) {
- #wp-link-wrap {
- font-size: 14px;
- }
-
- #wp-link-wrap input[type="text"] {
- padding: 6px 10px;
- }
-}
-
-#wp-link-wrap .howto {
- color: #666;
- font-style: italic;
-}
-
-/* Options panel (sidebar) */
-.options-panel {
- position: relative;
- float: right;
- margin-right: -320px;
- width: 320px;
- border-left: 1px solid #e5e5e5;
- font-size: 14px;
- /* Keeps background the full height of the screen, but only visually. Clicks go through. */
- box-shadow: 5001px 5000px 0 5000px #fff, 5000px 5000px 0 5000px #e5e5e5;
- outline: 0;
-}
-
-.options-panel-back {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- width: 320px;
- outline: 0;
-}
-
-@media (max-width: 900px) {
- .options-panel {
- background: #fff;
- -webkit-transform: translateX(-100%);
- transform: translateX(-100%);
- transition: -webkit-transform .3s ease-in-out;
- transition: transform .3s ease-in-out;
- transition: transform .3s ease-in-out, -webkit-transform .3s ease-in-out;
- }
-
- .options-panel.is-hidden {
- visibility: hidden;
- }
-
- .options-panel.is-off-screen {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
-}
-
-@media (max-width: 320px) {
- .options-panel {
- margin-right: -100%;
- width: 100%;
- border: 0;
- box-shadow: 5001px 5000px 0 5000px #fff;
- }
-
- .options-panel-back {
- width: 100%;
- }
-}
-
-.post-options {
- background: #fff;
- position: absolute;
- right: 0;
- width: 100%;
- overflow-x: hidden;
-}
-
-.post-options .post-option-contents {
- margin-left: 3px;
- color: #32373c;
-}
-
-.post-option-forward:before {
- position: absolute;
- top: 50%;
- right: 8px;
- margin-top: -10px;
- content: "\f345"
-}
-
-.post-option-back:before {
- content: "\f341";
-}
-
-.lt-ie9 .options-panel,
-.lt-ie9 .post-options {
- border-left: 1px solid #e5e5e5;
-}
-
-.lt-ie9 .post-options.is-off-screen {
- border: 0;
-}
-
-.post-option {
- position: relative;
-}
-
-.post-options .post-option {
- display: block;
- width: 100%;
- margin: 0;
- padding: 13px 37px 13px 14px;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
- text-decoration: none;
- text-align: left;
- background: none;
- color: #9ea7af;
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
- transition: -webkit-transform .3s ease-in-out;
- transition: transform .3s ease-in-out;
- transition: transform .3s ease-in-out, -webkit-transform .3s ease-in-out;
-}
-
-.post-options .post-option:focus {
- outline: 0;
- box-shadow: inset 5px 0 0 #00a0d2;
- border-color: #e5e5e5;
-}
-
-.is-off-screen > .post-option {
- right: 100%;
-}
-
-.is-hidden > .post-option {
- visibility: hidden;
-}
-
-@media (min-width: 1px) {
- .is-off-screen > .post-option {
- right: auto;
- -webkit-transform: translateX(-100%);
- transform: translateX(-100%);
- }
-}
-
-.post-option-title {
- display: inline-block;
- margin: 0 0 0 8px;
- font-size: 14px;
- font-weight: 400;
-}
-
-.setting-modal {
- position: relative;
- top: 0;
- left: 0;
- width: 100%;
- overflow: hidden;
- transition: -webkit-transform .3s ease-in-out;
- transition: transform .3s ease-in-out;
- transition: transform .3s ease-in-out, -webkit-transform .3s ease-in-out;
-}
-
-.setting-modal.is-hidden {
- visibility: hidden;
- height: 0;
-}
-
-.setting-modal.is-off-screen {
- left: 100%;
-}
-
-@media (min-width: 1px) {
- .setting-modal.is-off-screen {
- left: 0;
- -webkit-transform: translateX(100%);
- transform: translateX(100%);
- }
-}
-
-.press-this .modal-close {
- display: block;
- width: 100%;
- padding: 13px 14px;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
- background: none;
- color: #00a0d2;
- text-decoration: none;
- text-align: left;
-}
-
-.press-this .modal-close:focus {
- outline: 0;
- box-shadow: inset 5px 0 0 #00a0d2;
- border-color: #e5e5e5;
-}
-
-.setting-title {
- position: relative;
- top: -1px;
- margin-left: 11px;
-}
-
-/* Text editor */
-#pressthis {
- color: #404040;
- resize: none;
- padding-top: 30px;
- font-size: 16px;
-}
-
-.wp-editor-wrap .quicktags-toolbar {
- background: transparent;
- border: none;
-}
-
-/* Switch editor buttons */
-.wp-editor-wrap .wp-editor-tools {
- z-index: 0;
-}
-
-.wp-editor-wrap .wp-editor-tabs {
- padding: 2px;
-}
-
-.wp-editor-wrap .wp-switch-editor {
- top: 0;
- margin: 3px 0 0 5px;
- padding: 3px 8px;
- background: #f5f5f5;
- color: #555;
- border-color: #ccc;
-}
-
-.wp-editor-wrap .wp-switch-editor:hover {
- background: #fafafa;
- border-color: #999;
- color: #23282d;
-}
-
-.wp-editor-wrap.tmce-active .switch-tmce,
-.wp-editor-wrap.html-active .switch-html {
- background: #fff;
- border-color: #d8d8d8;
-}
-
-/* Inline link dialog */
-.wp-link-input input {
- border: 1px solid #ddd;
- box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.07 );
- background-color: #fff;
- color: #32373c;
- outline: none;
- transition: 0.05s border-color ease-in-out;
-}
-
-/* UI Autocomplete (for inline link and wpLink) */
-.ui-autocomplete {
- padding: 0;
- margin: 0;
- list-style: none;
- position: absolute;
- z-index: 10000;
- border: 1px solid #5b9dd9;
- box-shadow: 0 1px 2px rgba( 30, 140, 190, 0.8 );
- background-color: #fff;
- font-size: 14px;
-}
-
-.ui-autocomplete li {
- margin-bottom: 0;
- padding: 4px 10px;
- white-space: nowrap;
- text-align: left;
- cursor: pointer;
-}
-
-/* Colors for the wplink toolbar autocomplete. */
-.ui-autocomplete .ui-state-focus {
- background-color: #ddd;
-}
-
-/* Colors for the tags autocomplete. */
-.wp-tags-autocomplete .ui-state-focus {
- background-color: #0073aa;
- color: #fff;
-}
</del></span></pre></div>
<a id="trunksrcwpadminincludesajaxactionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/includes/ajax-actions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/includes/ajax-actions.php 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/includes/ajax-actions.php 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3189,28 +3189,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Ajax handler for saving a post from Press This.
- *
- * @since 4.2.0
- */
-function wp_ajax_press_this_save_post() {
- include( ABSPATH . 'wp-admin/includes/class-wp-press-this.php' );
- $wp_press_this = new WP_Press_This();
- $wp_press_this->save_post();
-}
-
-/**
- * Ajax handler for creating new category from Press This.
- *
- * @since 4.2.0
- */
-function wp_ajax_press_this_add_category() {
- include( ABSPATH . 'wp-admin/includes/class-wp-press-this.php' );
- $wp_press_this = new WP_Press_This();
- $wp_press_this->add_category();
-}
-
-/**
</del><span class="cx" style="display: block; padding: 0 10px"> * Ajax handler for cropping an image.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 4.3.0
</span></span></pre></div>
<a id="trunksrcwpadminincludesclassplugininstallerskinphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/includes/class-plugin-installer-skin.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/includes/class-plugin-installer-skin.php 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/includes/class-plugin-installer-skin.php 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -49,10 +49,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $from = isset($_GET['from']) ? wp_unslash( $_GET['from'] ) : 'plugins';
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( 'import' == $from )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( 'import' == $from ) {
</ins><span class="cx" style="display: block; padding: 0 10px"> $install_actions['activate_plugin'] = '<a class="button button-primary" href="' . wp_nonce_url( 'plugins.php?action=activate&from=import&plugin=' . urlencode( $plugin_file ), 'activate-plugin_' . $plugin_file ) . '" target="_parent">' . __( 'Activate Plugin & Run Importer' ) . '</a>';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- else
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ } else if ( 'press-this' == $from ) {
+ $install_actions['activate_plugin'] = '<a class="button button-primary" href="' . wp_nonce_url( 'plugins.php?action=activate&from=press-this&plugin=' . urlencode( $plugin_file ), 'activate-plugin_' . $plugin_file ) . '" target="_parent">' . __( 'Activate Plugin & Return to Press This' ) . '</a>';
+ } else {
</ins><span class="cx" style="display: block; padding: 0 10px"> $install_actions['activate_plugin'] = '<a class="button button-primary" href="' . wp_nonce_url( 'plugins.php?action=activate&plugin=' . urlencode( $plugin_file ), 'activate-plugin_' . $plugin_file ) . '" target="_parent">' . __( 'Activate Plugin' ) . '</a>';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ }
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( is_multisite() && current_user_can( 'manage_network_plugins' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $install_actions['network_activate'] = '<a class="button button-primary" href="' . wp_nonce_url( 'plugins.php?action=activate&networkwide=1&plugin=' . urlencode( $plugin_file ), 'activate-plugin_' . $plugin_file ) . '" target="_parent">' . __( 'Network Activate' ) . '</a>';
</span></span></pre></div>
<a id="trunksrcwpadminincludesclasswppressthisphp"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: trunk/src/wp-admin/includes/class-wp-press-this.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/includes/class-wp-press-this.php 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/includes/class-wp-press-this.php 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,1538 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-<?php
-/**
- * Press This class and display functionality
- *
- * @package WordPress
- * @subpackage Press_This
- * @since 4.2.0
- */
-
-/**
- * Press This class.
- *
- * @since 4.2.0
- */
-class WP_Press_This {
- // Used to trigger the bookmarklet update notice.
- const VERSION = 8;
- public $version = 8;
-
- private $images = array();
-
- private $embeds = array();
-
- private $domain = '';
-
- /**
- * Constructor.
- *
- * @since 4.2.0
- */
- public function __construct() {}
-
- /**
- * App and site settings data, including i18n strings for the client-side.
- *
- * @since 4.2.0
- *
- * @return array Site settings.
- */
- public function site_settings() {
- return array(
- /**
- * Filters whether or not Press This should redirect the user in the parent window upon save.
- *
- * @since 4.2.0
- *
- * @param bool $redirect Whether to redirect in parent window or not. Default false.
- */
- 'redirInParent' => apply_filters( 'press_this_redirect_in_parent', false ),
- );
- }
-
- /**
- * Get the source's images and save them locally, for posterity, unless we can't.
- *
- * @since 4.2.0
- *
- * @param int $post_id Post ID.
- * @param string $content Optional. Current expected markup for Press This. Expects slashed. Default empty.
- * @return string New markup with old image URLs replaced with the local attachment ones if swapped.
- */
- public function side_load_images( $post_id, $content = '' ) {
- $content = wp_unslash( $content );
-
- if ( preg_match_all( '/<img [^>]+>/', $content, $matches ) && current_user_can( 'upload_files' ) ) {
- foreach ( (array) $matches[0] as $image ) {
- // This is inserted from our JS so HTML attributes should always be in double quotes.
- if ( ! preg_match( '/src="([^"]+)"/', $image, $url_matches ) ) {
- continue;
- }
-
- $image_src = $url_matches[1];
-
- // Don't try to sideload a file without a file extension, leads to WP upload error.
- if ( ! preg_match( '/[^\?]+\.(?:jpe?g|jpe|gif|png)(?:\?|$)/i', $image_src ) ) {
- continue;
- }
-
- // Sideload image, which gives us a new image src.
- $new_src = media_sideload_image( $image_src, $post_id, null, 'src' );
-
- if ( ! is_wp_error( $new_src ) ) {
- // Replace the POSTED content <img> with correct uploaded ones.
- // Need to do it in two steps so we don't replace links to the original image if any.
- $new_image = str_replace( $image_src, $new_src, $image );
- $content = str_replace( $image, $new_image, $content );
- }
- }
- }
-
- // Expected slashed
- return wp_slash( $content );
- }
-
- /**
- * Ajax handler for saving the post as draft or published.
- *
- * @since 4.2.0
- */
- public function save_post() {
- if ( empty( $_POST['post_ID'] ) || ! $post_id = (int) $_POST['post_ID'] ) {
- wp_send_json_error( array( 'errorMessage' => __( 'Missing post ID.' ) ) );
- }
-
- if ( empty( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'update-post_' . $post_id ) ||
- ! current_user_can( 'edit_post', $post_id ) ) {
-
- wp_send_json_error( array( 'errorMessage' => __( 'Invalid post.' ) ) );
- }
-
- $post_data = array(
- 'ID' => $post_id,
- 'post_title' => ( ! empty( $_POST['post_title'] ) ) ? sanitize_text_field( trim( $_POST['post_title'] ) ) : '',
- 'post_content' => ( ! empty( $_POST['post_content'] ) ) ? trim( $_POST['post_content'] ) : '',
- 'post_type' => 'post',
- 'post_status' => 'draft',
- 'post_format' => ( ! empty( $_POST['post_format'] ) ) ? sanitize_text_field( $_POST['post_format'] ) : '',
- );
-
- // Only accept categories if the user actually can assign
- $category_tax = get_taxonomy( 'category' );
- if ( current_user_can( $category_tax->cap->assign_terms ) ) {
- $post_data['post_category'] = ( ! empty( $_POST['post_category'] ) ) ? $_POST['post_category'] : array();
- }
-
- // Only accept taxonomies if the user can actually assign
- if ( ! empty( $_POST['tax_input'] ) ) {
- $tax_input = $_POST['tax_input'];
- foreach ( $tax_input as $tax => $_ti ) {
- $tax_object = get_taxonomy( $tax );
- if ( ! $tax_object || ! current_user_can( $tax_object->cap->assign_terms ) ) {
- unset( $tax_input[ $tax ] );
- }
- }
-
- $post_data['tax_input'] = $tax_input;
- }
-
- // Toggle status to pending if user cannot actually publish
- if ( ! empty( $_POST['post_status'] ) && 'publish' === $_POST['post_status'] ) {
- if ( current_user_can( 'publish_posts' ) ) {
- $post_data['post_status'] = 'publish';
- } else {
- $post_data['post_status'] = 'pending';
- }
- }
-
- $post_data['post_content'] = $this->side_load_images( $post_id, $post_data['post_content'] );
-
- /**
- * Filters the post data of a Press This post before saving/updating.
- *
- * The {@see 'side_load_images'} action has already run at this point.
- *
- * @since 4.5.0
- *
- * @param array $post_data The post data.
- */
- $post_data = apply_filters( 'press_this_save_post', $post_data );
-
- $updated = wp_update_post( $post_data, true );
-
- if ( is_wp_error( $updated ) ) {
- wp_send_json_error( array( 'errorMessage' => $updated->get_error_message() ) );
- } else {
- if ( isset( $post_data['post_format'] ) ) {
- if ( current_theme_supports( 'post-formats', $post_data['post_format'] ) ) {
- set_post_format( $post_id, $post_data['post_format'] );
- } elseif ( $post_data['post_format'] ) {
- set_post_format( $post_id, false );
- }
- }
-
- $forceRedirect = false;
-
- if ( 'publish' === get_post_status( $post_id ) ) {
- $redirect = get_post_permalink( $post_id );
- } elseif ( isset( $_POST['pt-force-redirect'] ) && $_POST['pt-force-redirect'] === 'true' ) {
- $forceRedirect = true;
- $redirect = get_edit_post_link( $post_id, 'js' );
- } else {
- $redirect = false;
- }
-
- /**
- * Filters the URL to redirect to when Press This saves.
- *
- * @since 4.2.0
- *
- * @param string $url Redirect URL. If `$status` is 'publish', this will be the post permalink.
- * Otherwise, the default is false resulting in no redirect.
- * @param int $post_id Post ID.
- * @param string $status Post status.
- */
- $redirect = apply_filters( 'press_this_save_redirect', $redirect, $post_id, $post_data['post_status'] );
-
- if ( $redirect ) {
- wp_send_json_success( array( 'redirect' => $redirect, 'force' => $forceRedirect ) );
- } else {
- wp_send_json_success( array( 'postSaved' => true ) );
- }
- }
- }
-
- /**
- * Ajax handler for adding a new category.
- *
- * @since 4.2.0
- */
- public function add_category() {
- if ( false === wp_verify_nonce( $_POST['new_cat_nonce'], 'add-category' ) ) {
- wp_send_json_error();
- }
-
- $taxonomy = get_taxonomy( 'category' );
-
- if ( ! current_user_can( $taxonomy->cap->edit_terms ) || empty( $_POST['name'] ) ) {
- wp_send_json_error();
- }
-
- $parent = isset( $_POST['parent'] ) && (int) $_POST['parent'] > 0 ? (int) $_POST['parent'] : 0;
- $names = explode( ',', $_POST['name'] );
- $added = $data = array();
-
- foreach ( $names as $cat_name ) {
- $cat_name = trim( $cat_name );
- $cat_nicename = sanitize_title( $cat_name );
-
- if ( empty( $cat_nicename ) ) {
- continue;
- }
-
- // @todo Find a more performant way to check existence, maybe get_term() with a separate parent check.
- if ( term_exists( $cat_name, $taxonomy->name, $parent ) ) {
- if ( count( $names ) === 1 ) {
- wp_send_json_error( array( 'errorMessage' => __( 'This category already exists.' ) ) );
- } else {
- continue;
- }
- }
-
- $cat_id = wp_insert_term( $cat_name, $taxonomy->name, array( 'parent' => $parent ) );
-
- if ( is_wp_error( $cat_id ) ) {
- continue;
- } elseif ( is_array( $cat_id ) ) {
- $cat_id = $cat_id['term_id'];
- }
-
- $added[] = $cat_id;
- }
-
- if ( empty( $added ) ) {
- wp_send_json_error( array( 'errorMessage' => __( 'This category cannot be added. Please change the name and try again.' ) ) );
- }
-
- foreach ( $added as $new_cat_id ) {
- $new_cat = get_category( $new_cat_id );
-
- if ( is_wp_error( $new_cat ) ) {
- wp_send_json_error( array( 'errorMessage' => __( 'Error while adding the category. Please try again later.' ) ) );
- }
-
- $data[] = array(
- 'term_id' => $new_cat->term_id,
- 'name' => $new_cat->name,
- 'parent' => $new_cat->parent,
- );
- }
- wp_send_json_success( $data );
- }
-
- /**
- * Downloads the source's HTML via server-side call for the given URL.
- *
- * @since 4.2.0
- *
- * @param string $url URL to scan.
- * @return string Source's HTML sanitized markup
- */
- public function fetch_source_html( $url ) {
- if ( empty( $url ) ) {
- return new WP_Error( 'invalid-url', __( 'A valid URL was not provided.' ) );
- }
-
- $remote_url = wp_safe_remote_get( $url, array(
- 'timeout' => 30,
- // Use an explicit user-agent for Press This
- 'user-agent' => 'Press This (WordPress/' . get_bloginfo( 'version' ) . '); ' . get_bloginfo( 'url' )
- ) );
-
- if ( is_wp_error( $remote_url ) ) {
- return $remote_url;
- }
-
- $allowed_elements = array(
- 'img' => array(
- 'src' => true,
- 'width' => true,
- 'height' => true,
- ),
- 'iframe' => array(
- 'src' => true,
- ),
- 'link' => array(
- 'rel' => true,
- 'itemprop' => true,
- 'href' => true,
- ),
- 'meta' => array(
- 'property' => true,
- 'name' => true,
- 'content' => true,
- )
- );
-
- $source_content = wp_remote_retrieve_body( $remote_url );
- $source_content = wp_kses( $source_content, $allowed_elements );
-
- return $source_content;
- }
-
- /**
- * Utility method to limit an array to 50 values.
- *
- * @ignore
- * @since 4.2.0
- *
- * @param array $value Array to limit.
- * @return array Original array if fewer than 50 values, limited array, empty array otherwise.
- */
- private function _limit_array( $value ) {
- if ( is_array( $value ) ) {
- if ( count( $value ) > 50 ) {
- return array_slice( $value, 0, 50 );
- }
-
- return $value;
- }
-
- return array();
- }
-
- /**
- * Utility method to limit the length of a given string to 5,000 characters.
- *
- * @ignore
- * @since 4.2.0
- *
- * @param string $value String to limit.
- * @return bool|int|string If boolean or integer, that value. If a string, the original value
- * if fewer than 5,000 characters, a truncated version, otherwise an
- * empty string.
- */
- private function _limit_string( $value ) {
- $return = '';
-
- if ( is_numeric( $value ) || is_bool( $value ) ) {
- $return = $value;
- } else if ( is_string( $value ) ) {
- if ( mb_strlen( $value ) > 5000 ) {
- $return = mb_substr( $value, 0, 5000 );
- } else {
- $return = $value;
- }
-
- $return = html_entity_decode( $return, ENT_QUOTES, 'UTF-8' );
- $return = sanitize_text_field( trim( $return ) );
- }
-
- return $return;
- }
-
- /**
- * Utility method to limit a given URL to 2,048 characters.
- *
- * @ignore
- * @since 4.2.0
- *
- * @param string $url URL to check for length and validity.
- * @return string Escaped URL if of valid length (< 2048) and makeup. Empty string otherwise.
- */
- private function _limit_url( $url ) {
- if ( ! is_string( $url ) ) {
- return '';
- }
-
- // HTTP 1.1 allows 8000 chars but the "de-facto" standard supported in all current browsers is 2048.
- if ( strlen( $url ) > 2048 ) {
- return ''; // Return empty rather than a truncated/invalid URL
- }
-
- // Does not look like a URL.
- if ( ! preg_match( '/^([!#$&-;=?-\[\]_a-z~]|%[0-9a-fA-F]{2})+$/', $url ) ) {
- return '';
- }
-
- // If the URL is root-relative, prepend the protocol and domain name
- if ( $url && $this->domain && preg_match( '%^/[^/]+%', $url ) ) {
- $url = $this->domain . $url;
- }
-
- // Not absolute or protocol-relative URL.
- if ( ! preg_match( '%^(?:https?:)?//[^/]+%', $url ) ) {
- return '';
- }
-
- return esc_url_raw( $url, array( 'http', 'https' ) );
- }
-
- /**
- * Utility method to limit image source URLs.
- *
- * Excluded URLs include share-this type buttons, loaders, spinners, spacers, WordPress interface images,
- * tiny buttons or thumbs, mathtag.com or quantserve.com images, or the WordPress.com stats gif.
- *
- * @ignore
- * @since 4.2.0
- *
- * @param string $src Image source URL.
- * @return string If not matched an excluded URL type, the original URL, empty string otherwise.
- */
- private function _limit_img( $src ) {
- $src = $this->_limit_url( $src );
-
- if ( preg_match( '!/ad[sx]?/!i', $src ) ) {
- // Ads
- return '';
- } else if ( preg_match( '!(/share-?this[^.]+?\.[a-z0-9]{3,4})(\?.*)?$!i', $src ) ) {
- // Share-this type button
- return '';
- } else if ( preg_match( '!/(spinner|loading|spacer|blank|rss)\.(gif|jpg|png)!i', $src ) ) {
- // Loaders, spinners, spacers
- return '';
- } else if ( preg_match( '!/([^./]+[-_])?(spinner|loading|spacer|blank)s?([-_][^./]+)?\.[a-z0-9]{3,4}!i', $src ) ) {
- // Fancy loaders, spinners, spacers
- return '';
- } else if ( preg_match( '!([^./]+[-_])?thumb[^.]*\.(gif|jpg|png)$!i', $src ) ) {
- // Thumbnails, too small, usually irrelevant to context
- return '';
- } else if ( false !== stripos( $src, '/wp-includes/' ) ) {
- // Classic WordPress interface images
- return '';
- } else if ( preg_match( '![^\d]\d{1,2}x\d+\.(gif|jpg|png)$!i', $src ) ) {
- // Most often tiny buttons/thumbs (< 100px wide)
- return '';
- } else if ( preg_match( '!/pixel\.(mathtag|quantserve)\.com!i', $src ) ) {
- // See mathtag.com and https://www.quantcast.com/how-we-do-it/iab-standard-measurement/how-we-collect-data/
- return '';
- } else if ( preg_match( '!/[gb]\.gif(\?.+)?$!i', $src ) ) {
- // WordPress.com stats gif
- return '';
- }
-
- return $src;
- }
-
- /**
- * Limit embed source URLs to specific providers.
- *
- * Not all core oEmbed providers are supported. Supported providers include YouTube, Vimeo,
- * Daily Motion, SoundCloud, and Twitter.
- *
- * @ignore
- * @since 4.2.0
- *
- * @param string $src Embed source URL.
- * @return string If not from a supported provider, an empty string. Otherwise, a reformatted embed URL.
- */
- private function _limit_embed( $src ) {
- $src = $this->_limit_url( $src );
-
- if ( empty( $src ) )
- return '';
-
- if ( preg_match( '!//(m|www)\.youtube\.com/(embed|v)/([^?]+)\?.+$!i', $src, $src_matches ) ) {
- // Embedded Youtube videos (www or mobile)
- $src = 'https://www.youtube.com/watch?v=' . $src_matches[3];
- } else if ( preg_match( '!//player\.vimeo\.com/video/([\d]+)([?/].*)?$!i', $src, $src_matches ) ) {
- // Embedded Vimeo iframe videos
- $src = 'https://vimeo.com/' . (int) $src_matches[1];
- } else if ( preg_match( '!//vimeo\.com/moogaloop\.swf\?clip_id=([\d]+)$!i', $src, $src_matches ) ) {
- // Embedded Vimeo Flash videos
- $src = 'https://vimeo.com/' . (int) $src_matches[1];
- } else if ( preg_match( '!//(www\.)?dailymotion\.com/embed/video/([^/?]+)([/?].+)?!i', $src, $src_matches ) ) {
- // Embedded Daily Motion videos
- $src = 'https://www.dailymotion.com/video/' . $src_matches[2];
- } else {
- $oembed = _wp_oembed_get_object();
-
- if ( ! $oembed->get_provider( $src, array( 'discover' => false ) ) ) {
- $src = '';
- }
- }
-
- return $src;
- }
-
- /**
- * Process a meta data entry from the source.
- *
- * @ignore
- * @since 4.2.0
- *
- * @param string $meta_name Meta key name.
- * @param mixed $meta_value Meta value.
- * @param array $data Associative array of source data.
- * @return array Processed data array.
- */
- private function _process_meta_entry( $meta_name, $meta_value, $data ) {
- if ( preg_match( '/:?(title|description|keywords|site_name)$/', $meta_name ) ) {
- $data['_meta'][ $meta_name ] = $meta_value;
- } else {
- switch ( $meta_name ) {
- case 'og:url':
- case 'og:video':
- case 'og:video:secure_url':
- $meta_value = $this->_limit_embed( $meta_value );
-
- if ( ! isset( $data['_embeds'] ) ) {
- $data['_embeds'] = array();
- }
-
- if ( ! empty( $meta_value ) && ! in_array( $meta_value, $data['_embeds'] ) ) {
- $data['_embeds'][] = $meta_value;
- }
-
- break;
- case 'og:image':
- case 'og:image:secure_url':
- case 'twitter:image0:src':
- case 'twitter:image0':
- case 'twitter:image:src':
- case 'twitter:image':
- $meta_value = $this->_limit_img( $meta_value );
-
- if ( ! isset( $data['_images'] ) ) {
- $data['_images'] = array();
- }
-
- if ( ! empty( $meta_value ) && ! in_array( $meta_value, $data['_images'] ) ) {
- $data['_images'][] = $meta_value;
- }
-
- break;
- }
- }
-
- return $data;
- }
-
- /**
- * Fetches and parses _meta, _images, and _links data from the source.
- *
- * @since 4.2.0
- *
- * @param string $url URL to scan.
- * @param array $data Optional. Existing data array if you have one. Default empty array.
- * @return array New data array.
- */
- public function source_data_fetch_fallback( $url, $data = array() ) {
- if ( empty( $url ) ) {
- return array();
- }
-
- // Download source page to tmp file.
- $source_content = $this->fetch_source_html( $url );
- if ( is_wp_error( $source_content ) ) {
- return array( 'errors' => $source_content->get_error_messages() );
- }
-
- // Fetch and gather <meta> data first, so discovered media is offered 1st to user.
- if ( empty( $data['_meta'] ) ) {
- $data['_meta'] = array();
- }
-
- if ( preg_match_all( '/<meta [^>]+>/', $source_content, $matches ) ) {
- $items = $this->_limit_array( $matches[0] );
-
- foreach ( $items as $value ) {
- if ( preg_match( '/(property|name)="([^"]+)"[^>]+content="([^"]+)"/', $value, $new_matches ) ) {
- $meta_name = $this->_limit_string( $new_matches[2] );
- $meta_value = $this->_limit_string( $new_matches[3] );
-
- // Sanity check. $key is usually things like 'title', 'description', 'keywords', etc.
- if ( strlen( $meta_name ) > 100 ) {
- continue;
- }
-
- $data = $this->_process_meta_entry( $meta_name, $meta_value, $data );
- }
- }
- }
-
- // Fetch and gather <img> data.
- if ( empty( $data['_images'] ) ) {
- $data['_images'] = array();
- }
-
- if ( preg_match_all( '/<img [^>]+>/', $source_content, $matches ) ) {
- $items = $this->_limit_array( $matches[0] );
-
- foreach ( $items as $value ) {
- if ( ( preg_match( '/width=(\'|")(\d+)\\1/i', $value, $new_matches ) && $new_matches[2] < 256 ) ||
- ( preg_match( '/height=(\'|")(\d+)\\1/i', $value, $new_matches ) && $new_matches[2] < 128 ) ) {
-
- continue;
- }
-
- if ( preg_match( '/src=(\'|")([^\'"]+)\\1/i', $value, $new_matches ) ) {
- $src = $this->_limit_img( $new_matches[2] );
- if ( ! empty( $src ) && ! in_array( $src, $data['_images'] ) ) {
- $data['_images'][] = $src;
- }
- }
- }
- }
-
- // Fetch and gather <iframe> data.
- if ( empty( $data['_embeds'] ) ) {
- $data['_embeds'] = array();
- }
-
- if ( preg_match_all( '/<iframe [^>]+>/', $source_content, $matches ) ) {
- $items = $this->_limit_array( $matches[0] );
-
- foreach ( $items as $value ) {
- if ( preg_match( '/src=(\'|")([^\'"]+)\\1/', $value, $new_matches ) ) {
- $src = $this->_limit_embed( $new_matches[2] );
-
- if ( ! empty( $src ) && ! in_array( $src, $data['_embeds'] ) ) {
- $data['_embeds'][] = $src;
- }
- }
- }
- }
-
- // Fetch and gather <link> data.
- if ( empty( $data['_links'] ) ) {
- $data['_links'] = array();
- }
-
- if ( preg_match_all( '/<link [^>]+>/', $source_content, $matches ) ) {
- $items = $this->_limit_array( $matches[0] );
-
- foreach ( $items as $value ) {
- if ( preg_match( '/rel=["\'](canonical|shortlink|icon)["\']/i', $value, $matches_rel ) && preg_match( '/href=[\'"]([^\'" ]+)[\'"]/i', $value, $matches_url ) ) {
- $rel = $matches_rel[1];
- $url = $this->_limit_url( $matches_url[1] );
-
- if ( ! empty( $url ) && empty( $data['_links'][ $rel ] ) ) {
- $data['_links'][ $rel ] = $url;
- }
- }
- }
- }
-
- return $data;
- }
-
- /**
- * Handles backward-compat with the legacy version of Press This by supporting its query string params.
- *
- * @since 4.2.0
- *
- * @return array
- */
- public function merge_or_fetch_data() {
- // Get data from $_POST and $_GET, as appropriate ($_POST > $_GET), to remain backward compatible.
- $data = array();
-
- // Only instantiate the keys we want. Sanity check and sanitize each one.
- foreach ( array( 'u', 's', 't', 'v' ) as $key ) {
- if ( ! empty( $_POST[ $key ] ) ) {
- $value = wp_unslash( $_POST[ $key ] );
- } else if ( ! empty( $_GET[ $key ] ) ) {
- $value = wp_unslash( $_GET[ $key ] );
- } else {
- continue;
- }
-
- if ( 'u' === $key ) {
- $value = $this->_limit_url( $value );
-
- if ( preg_match( '%^(?:https?:)?//[^/]+%i', $value, $domain_match ) ) {
- $this->domain = $domain_match[0];
- }
- } else {
- $value = $this->_limit_string( $value );
- }
-
- if ( ! empty( $value ) ) {
- $data[ $key ] = $value;
- }
- }
-
- /**
- * Filters whether to enable in-source media discovery in Press This.
- *
- * @since 4.2.0
- *
- * @param bool $enable Whether to enable media discovery.
- */
- if ( apply_filters( 'enable_press_this_media_discovery', true ) ) {
- /*
- * If no title, _images, _embed, and _meta was passed via $_POST, fetch data from source as fallback,
- * making PT fully backward compatible with the older bookmarklet.
- */
- if ( empty( $_POST ) && ! empty( $data['u'] ) ) {
- if ( isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'scan-site' ) ) {
- $data = $this->source_data_fetch_fallback( $data['u'], $data );
- } else {
- $data['errors'] = 'missing nonce';
- }
- } else {
- foreach ( array( '_images', '_embeds' ) as $type ) {
- if ( empty( $_POST[ $type ] ) ) {
- continue;
- }
-
- $data[ $type ] = array();
- $items = $this->_limit_array( $_POST[ $type ] );
-
- foreach ( $items as $key => $value ) {
- if ( $type === '_images' ) {
- $value = $this->_limit_img( wp_unslash( $value ) );
- } else {
- $value = $this->_limit_embed( wp_unslash( $value ) );
- }
-
- if ( ! empty( $value ) ) {
- $data[ $type ][] = $value;
- }
- }
- }
-
- foreach ( array( '_meta', '_links' ) as $type ) {
- if ( empty( $_POST[ $type ] ) ) {
- continue;
- }
-
- $data[ $type ] = array();
- $items = $this->_limit_array( $_POST[ $type ] );
-
- foreach ( $items as $key => $value ) {
- // Sanity check. These are associative arrays, $key is usually things like 'title', 'description', 'keywords', etc.
- if ( empty( $key ) || strlen( $key ) > 100 ) {
- continue;
- }
-
- if ( $type === '_meta' ) {
- $value = $this->_limit_string( wp_unslash( $value ) );
-
- if ( ! empty( $value ) ) {
- $data = $this->_process_meta_entry( $key, $value, $data );
- }
- } else {
- if ( in_array( $key, array( 'canonical', 'shortlink', 'icon' ), true ) ) {
- $data[ $type ][ $key ] = $this->_limit_url( wp_unslash( $value ) );
- }
- }
- }
- }
- }
-
- // Support passing a single image src as `i`
- if ( ! empty( $_REQUEST['i'] ) && ( $img_src = $this->_limit_img( wp_unslash( $_REQUEST['i'] ) ) ) ) {
- if ( empty( $data['_images'] ) ) {
- $data['_images'] = array( $img_src );
- } elseif ( ! in_array( $img_src, $data['_images'], true ) ) {
- array_unshift( $data['_images'], $img_src );
- }
- }
- }
-
- /**
- * Filters the Press This data array.
- *
- * @since 4.2.0
- *
- * @param array $data Press This Data array.
- */
- return apply_filters( 'press_this_data', $data );
- }
-
- /**
- * Adds another stylesheet inside TinyMCE.
- *
- * @since 4.2.0
- *
- * @param string $styles URL to editor stylesheet.
- * @return string Possibly modified stylesheets list.
- */
- public function add_editor_style( $styles ) {
- if ( ! empty( $styles ) ) {
- $styles .= ',';
- }
-
- $press_this = admin_url( 'css/press-this-editor.css' );
- if ( is_rtl() ) {
- $press_this = str_replace( '.css', '-rtl.css', $press_this );
- }
-
- return $styles . $press_this;
- }
-
- /**
- * Outputs the post format selection HTML.
- *
- * @since 4.2.0
- *
- * @param WP_Post $post Post object.
- */
- public function post_formats_html( $post ) {
- if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) ) {
- $post_formats = get_theme_support( 'post-formats' );
-
- if ( is_array( $post_formats[0] ) ) {
- $post_format = get_post_format( $post->ID );
-
- if ( ! $post_format ) {
- $post_format = '0';
- }
-
- // Add in the current one if it isn't there yet, in case the current theme doesn't support it.
- if ( $post_format && ! in_array( $post_format, $post_formats[0] ) ) {
- $post_formats[0][] = $post_format;
- }
-
- ?>
- <div id="post-formats-select">
- <fieldset><legend class="screen-reader-text"><?php _e( 'Post Formats' ); ?></legend>
- <input type="radio" name="post_format" class="post-format" id="post-format-0" value="0" <?php checked( $post_format, '0' ); ?> />
- <label for="post-format-0" class="post-format-icon post-format-standard"><?php echo get_post_format_string( 'standard' ); ?></label>
- <?php
-
- foreach ( $post_formats[0] as $format ) {
- $attr_format = esc_attr( $format );
- ?>
- <br />
- <input type="radio" name="post_format" class="post-format" id="post-format-<?php echo $attr_format; ?>" value="<?php echo $attr_format; ?>" <?php checked( $post_format, $format ); ?> />
- <label for="post-format-<?php echo $attr_format ?>" class="post-format-icon post-format-<?php echo $attr_format; ?>"><?php echo esc_html( get_post_format_string( $format ) ); ?></label>
- <?php
- }
-
- ?>
- </fieldset>
- </div>
- <?php
- }
- }
- }
-
- /**
- * Outputs the categories HTML.
- *
- * @since 4.2.0
- *
- * @param WP_Post $post Post object.
- */
- public function categories_html( $post ) {
- $taxonomy = get_taxonomy( 'category' );
-
- // Bail if user cannot assign terms
- if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) {
- return;
- }
-
- // Only show "add" if user can edit terms
- if ( current_user_can( $taxonomy->cap->edit_terms ) ) {
- ?>
- <button type="button" class="add-cat-toggle button-link" aria-expanded="false">
- <span class="dashicons dashicons-plus"></span><span class="screen-reader-text"><?php _e( 'Toggle add category' ); ?></span>
- </button>
- <div class="add-category is-hidden">
- <label class="screen-reader-text" for="new-category"><?php echo $taxonomy->labels->add_new_item; ?></label>
- <input type="text" id="new-category" class="add-category-name" placeholder="<?php echo esc_attr( $taxonomy->labels->new_item_name ); ?>" value="" aria-required="true">
- <label class="screen-reader-text" for="new-category-parent"><?php echo $taxonomy->labels->parent_item_colon; ?></label>
- <div class="postform-wrapper">
- <?php
- wp_dropdown_categories( array(
- 'taxonomy' => 'category',
- 'hide_empty' => 0,
- 'name' => 'new-category-parent',
- 'orderby' => 'name',
- 'hierarchical' => 1,
- 'show_option_none' => '— ' . $taxonomy->labels->parent_item . ' —'
- ) );
- ?>
- </div>
- <button type="button" class="add-cat-submit"><?php _e( 'Add' ); ?></button>
- </div>
- <?php
-
- }
- ?>
- <div class="categories-search-wrapper">
- <input id="categories-search" type="search" class="categories-search" placeholder="<?php esc_attr_e( 'Search categories by name' ) ?>">
- <label for="categories-search">
- <span class="dashicons dashicons-search"></span><span class="screen-reader-text"><?php _e( 'Search categories' ); ?></span>
- </label>
- </div>
- <div aria-label="<?php esc_attr_e( 'Categories' ); ?>">
- <ul class="categories-select">
- <?php wp_terms_checklist( $post->ID, array( 'taxonomy' => 'category', 'list_only' => true ) ); ?>
- </ul>
- </div>
- <?php
- }
-
- /**
- * Outputs the tags HTML.
- *
- * @since 4.2.0
- *
- * @param WP_Post $post Post object.
- */
- public function tags_html( $post ) {
- $taxonomy = get_taxonomy( 'post_tag' );
- $user_can_assign_terms = current_user_can( $taxonomy->cap->assign_terms );
- $esc_tags = get_terms_to_edit( $post->ID, 'post_tag' );
-
- if ( ! $esc_tags || is_wp_error( $esc_tags ) ) {
- $esc_tags = '';
- }
-
- ?>
- <div class="tagsdiv" id="post_tag">
- <div class="jaxtag">
- <input type="hidden" name="tax_input[post_tag]" class="the-tags" value="<?php echo $esc_tags; // escaped in get_terms_to_edit() ?>">
- <?php
-
- if ( $user_can_assign_terms ) {
- ?>
- <div class="ajaxtag hide-if-no-js">
- <label class="screen-reader-text" for="new-tag-post_tag"><?php _e( 'Tags' ); ?></label>
- <p>
- <input type="text" id="new-tag-post_tag" name="newtag[post_tag]" class="newtag form-input-tip" size="16" autocomplete="off" value="" aria-describedby="new-tag-desc" />
- <button type="button" class="tagadd"><?php _e( 'Add' ); ?></button>
- </p>
- </div>
- <p class="howto" id="new-tag-desc">
- <?php echo $taxonomy->labels->separate_items_with_commas; ?>
- </p>
- <?php
- }
-
- ?>
- </div>
- <ul class="tagchecklist" role="list"></ul>
- </div>
- <?php
-
- if ( $user_can_assign_terms ) {
- ?>
- <button type="button" class="button-link tagcloud-link" id="link-post_tag" aria-expanded="false"><?php echo $taxonomy->labels->choose_from_most_used; ?></button>
- <?php
- }
- }
-
- /**
- * Get a list of embeds with no duplicates.
- *
- * @since 4.2.0
- *
- * @param array $data The site's data.
- * @return array Embeds selected to be available.
- */
- public function get_embeds( $data ) {
- $selected_embeds = array();
-
- // Make sure to add the Pressed page if it's a valid oembed itself
- if ( ! empty ( $data['u'] ) && $this->_limit_embed( $data['u'] ) ) {
- $data['_embeds'][] = $data['u'];
- }
-
- if ( ! empty( $data['_embeds'] ) ) {
- foreach ( $data['_embeds'] as $src ) {
- $prot_relative_src = preg_replace( '/^https?:/', '', $src );
-
- if ( in_array( $prot_relative_src, $this->embeds ) ) {
- continue;
- }
-
- $selected_embeds[] = $src;
- $this->embeds[] = $prot_relative_src;
- }
- }
-
- return $selected_embeds;
- }
-
- /**
- * Get a list of images with no duplicates.
- *
- * @since 4.2.0
- *
- * @param array $data The site's data.
- * @return array
- */
- public function get_images( $data ) {
- $selected_images = array();
-
- if ( ! empty( $data['_images'] ) ) {
- foreach ( $data['_images'] as $src ) {
- if ( false !== strpos( $src, 'gravatar.com' ) ) {
- $src = preg_replace( '%http://[\d]+\.gravatar\.com/%', 'https://secure.gravatar.com/', $src );
- }
-
- $prot_relative_src = preg_replace( '/^https?:/', '', $src );
-
- if ( in_array( $prot_relative_src, $this->images ) ||
- ( false !== strpos( $src, 'avatar' ) && count( $this->images ) > 15 ) ) {
- // Skip: already selected or some type of avatar and we've already gathered more than 15 images.
- continue;
- }
-
- $selected_images[] = $src;
- $this->images[] = $prot_relative_src;
- }
- }
-
- return $selected_images;
- }
-
- /**
- * Gets the source page's canonical link, based on passed location and meta data.
- *
- * @since 4.2.0
- *
- * @param array $data The site's data.
- * @return string Discovered canonical URL, or empty
- */
- public function get_canonical_link( $data ) {
- $link = '';
-
- if ( ! empty( $data['_links']['canonical'] ) ) {
- $link = $data['_links']['canonical'];
- } elseif ( ! empty( $data['u'] ) ) {
- $link = $data['u'];
- } elseif ( ! empty( $data['_meta'] ) ) {
- if ( ! empty( $data['_meta']['twitter:url'] ) ) {
- $link = $data['_meta']['twitter:url'];
- } else if ( ! empty( $data['_meta']['og:url'] ) ) {
- $link = $data['_meta']['og:url'];
- }
- }
-
- if ( empty( $link ) && ! empty( $data['_links']['shortlink'] ) ) {
- $link = $data['_links']['shortlink'];
- }
-
- return $link;
- }
-
- /**
- * Gets the source page's site name, based on passed meta data.
- *
- * @since 4.2.0
- *
- * @param array $data The site's data.
- * @return string Discovered site name, or empty
- */
- public function get_source_site_name( $data ) {
- $name = '';
-
- if ( ! empty( $data['_meta'] ) ) {
- if ( ! empty( $data['_meta']['og:site_name'] ) ) {
- $name = $data['_meta']['og:site_name'];
- } else if ( ! empty( $data['_meta']['application-name'] ) ) {
- $name = $data['_meta']['application-name'];
- }
- }
-
- return $name;
- }
-
- /**
- * Gets the source page's title, based on passed title and meta data.
- *
- * @since 4.2.0
- *
- * @param array $data The site's data.
- * @return string Discovered page title, or empty
- */
- public function get_suggested_title( $data ) {
- $title = '';
-
- if ( ! empty( $data['t'] ) ) {
- $title = $data['t'];
- } elseif ( ! empty( $data['_meta'] ) ) {
- if ( ! empty( $data['_meta']['twitter:title'] ) ) {
- $title = $data['_meta']['twitter:title'];
- } else if ( ! empty( $data['_meta']['og:title'] ) ) {
- $title = $data['_meta']['og:title'];
- } else if ( ! empty( $data['_meta']['title'] ) ) {
- $title = $data['_meta']['title'];
- }
- }
-
- return $title;
- }
-
- /**
- * Gets the source page's suggested content, based on passed data (description, selection, etc).
- *
- * Features a blockquoted excerpt, as well as content attribution, if any.
- *
- * @since 4.2.0
- *
- * @param array $data The site's data.
- * @return string Discovered content, or empty
- */
- public function get_suggested_content( $data ) {
- $content = $text = '';
-
- if ( ! empty( $data['s'] ) ) {
- $text = $data['s'];
- } else if ( ! empty( $data['_meta'] ) ) {
- if ( ! empty( $data['_meta']['twitter:description'] ) ) {
- $text = $data['_meta']['twitter:description'];
- } else if ( ! empty( $data['_meta']['og:description'] ) ) {
- $text = $data['_meta']['og:description'];
- } else if ( ! empty( $data['_meta']['description'] ) ) {
- $text = $data['_meta']['description'];
- }
-
- // If there is an ellipsis at the end, the description is very likely auto-generated. Better to ignore it.
- if ( $text && substr( $text, -3 ) === '...' ) {
- $text = '';
- }
- }
-
- $default_html = array( 'quote' => '', 'link' => '', 'embed' => '' );
-
- if ( ! empty( $data['u'] ) && $this->_limit_embed( $data['u'] ) ) {
- $default_html['embed'] = '<p>[embed]' . $data['u'] . '[/embed]</p>';
-
- if ( ! empty( $data['s'] ) ) {
- // If the user has selected some text, do quote it.
- $default_html['quote'] = '<blockquote>%1$s</blockquote>';
- }
- } else {
- $default_html['quote'] = '<blockquote>%1$s</blockquote>';
- $default_html['link'] = '<p>' . _x( 'Source:', 'Used in Press This to indicate where the content comes from.' ) .
- ' <em><a href="%1$s">%2$s</a></em></p>';
- }
-
- /**
- * Filters the default HTML tags used in the suggested content for the editor.
- *
- * The HTML strings use printf format. After filtering the content is added at the specified places with `sprintf()`.
- *
- * @since 4.2.0
- *
- * @param array $default_html Associative array with three possible keys:
- * - 'quote' where %1$s is replaced with the site description or the selected content.
- * - 'link' where %1$s is link href, %2$s is link text, usually the source page title.
- * - 'embed' which contains an [embed] shortcode when the source page offers embeddable content.
- * @param array $data Associative array containing the data from the source page.
- */
- $default_html = apply_filters( 'press_this_suggested_html', $default_html, $data );
-
- if ( ! empty( $default_html['embed'] ) ) {
- $content .= $default_html['embed'];
- }
-
- // Wrap suggested content in the specified HTML.
- if ( ! empty( $default_html['quote'] ) && $text ) {
- $content .= sprintf( $default_html['quote'], $text );
- }
-
- // Add source attribution if there is one available.
- if ( ! empty( $default_html['link'] ) ) {
- $title = $this->get_suggested_title( $data );
- $url = $this->get_canonical_link( $data );
-
- if ( ! $title ) {
- $title = $this->get_source_site_name( $data );
- }
-
- if ( $url && $title ) {
- $content .= sprintf( $default_html['link'], $url, $title );
- }
- }
-
- return $content;
- }
-
- /**
- * Serves the app's base HTML, which in turns calls the load script.
- *
- * @since 4.2.0
- *
- * @global WP_Locale $wp_locale
- * @global bool $is_IE
- */
- public function html() {
- global $wp_locale;
-
- $wp_version = get_bloginfo( 'version' );
-
- // Get data, new (POST) and old (GET).
- $data = $this->merge_or_fetch_data();
-
- $post_title = $this->get_suggested_title( $data );
-
- $post_content = $this->get_suggested_content( $data );
-
- // Get site settings array/data.
- $site_settings = $this->site_settings();
-
- // Pass the images and embeds
- $images = $this->get_images( $data );
- $embeds = $this->get_embeds( $data );
-
- $site_data = array(
- 'v' => ! empty( $data['v'] ) ? $data['v'] : '',
- 'u' => ! empty( $data['u'] ) ? $data['u'] : '',
- 'hasData' => ! empty( $data ) && ! isset( $data['errors'] ),
- );
-
- if ( ! empty( $images ) ) {
- $site_data['_images'] = $images;
- }
-
- if ( ! empty( $embeds ) ) {
- $site_data['_embeds'] = $embeds;
- }
-
- // Add press-this-editor.css and remove theme's editor-style.css, if any.
- remove_editor_styles();
-
- add_filter( 'mce_css', array( $this, 'add_editor_style' ) );
-
- if ( ! empty( $GLOBALS['is_IE'] ) ) {
- @header( 'X-UA-Compatible: IE=edge' );
- }
-
- @header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) );
-
-?>
-<!DOCTYPE html>
-<!--[if IE 7]> <html class="lt-ie9 lt-ie8" <?php language_attributes(); ?>> <![endif]-->
-<!--[if IE 8]> <html class="lt-ie9" <?php language_attributes(); ?>> <![endif]-->
-<!--[if gt IE 8]><!--> <html <?php language_attributes(); ?>> <!--<![endif]-->
-<head>
- <meta http-equiv="Content-Type" content="<?php echo esc_attr( get_bloginfo( 'html_type' ) ); ?>; charset=<?php echo esc_attr( get_option( 'blog_charset' ) ); ?>" />
- <meta name="viewport" content="width=device-width">
- <title><?php esc_html_e( 'Press This!' ) ?></title>
-
- <script>
- window.wpPressThisData = <?php echo wp_json_encode( $site_data ); ?>;
- window.wpPressThisConfig = <?php echo wp_json_encode( $site_settings ); ?>;
- </script>
-
- <script type="text/javascript">
- var ajaxurl = '<?php echo esc_js( admin_url( 'admin-ajax.php', 'relative' ) ); ?>',
- pagenow = 'press-this',
- typenow = 'post',
- adminpage = 'press-this-php',
- thousandsSeparator = '<?php echo addslashes( $wp_locale->number_format['thousands_sep'] ); ?>',
- decimalPoint = '<?php echo addslashes( $wp_locale->number_format['decimal_point'] ); ?>',
- isRtl = <?php echo (int) is_rtl(); ?>;
- </script>
-
- <?php
- /*
- * $post->ID is needed for the embed shortcode so we can show oEmbed previews in the editor.
- * Maybe find a way without it.
- */
- $post = get_default_post_to_edit( 'post', true );
- $post_ID = (int) $post->ID;
-
- wp_enqueue_media( array( 'post' => $post_ID ) );
- wp_enqueue_style( 'press-this' );
- wp_enqueue_script( 'press-this' );
- wp_enqueue_script( 'json2' );
- wp_enqueue_script( 'editor' );
-
- $categories_tax = get_taxonomy( 'category' );
- $show_categories = current_user_can( $categories_tax->cap->assign_terms ) || current_user_can( $categories_tax->cap->edit_terms );
-
- $tag_tax = get_taxonomy( 'post_tag' );
- $show_tags = current_user_can( $tag_tax->cap->assign_terms );
-
- $supports_formats = false;
- $post_format = 0;
-
- if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) ) {
- $supports_formats = true;
-
- if ( ! ( $post_format = get_post_format( $post_ID ) ) ) {
- $post_format = 0;
- }
- }
-
- /** This action is documented in wp-admin/admin-header.php */
- do_action( 'admin_enqueue_scripts', 'press-this.php' );
-
- /** This action is documented in wp-admin/admin-header.php */
- do_action( 'admin_print_styles-press-this.php' );
-
- /** This action is documented in wp-admin/admin-header.php */
- do_action( 'admin_print_styles' );
-
- /** This action is documented in wp-admin/admin-header.php */
- do_action( 'admin_print_scripts-press-this.php' );
-
- /** This action is documented in wp-admin/admin-header.php */
- do_action( 'admin_print_scripts' );
-
- /** This action is documented in wp-admin/admin-header.php */
- do_action( 'admin_head-press-this.php' );
-
- /** This action is documented in wp-admin/admin-header.php */
- do_action( 'admin_head' );
- ?>
-</head>
-<?php
-
- $admin_body_class = 'press-this';
- $admin_body_class .= ( is_rtl() ) ? ' rtl' : '';
- $admin_body_class .= ' branch-' . str_replace( array( '.', ',' ), '-', floatval( $wp_version ) );
- $admin_body_class .= ' version-' . str_replace( '.', '-', preg_replace( '/^([.0-9]+).*/', '$1', $wp_version ) );
- $admin_body_class .= ' admin-color-' . sanitize_html_class( get_user_option( 'admin_color' ), 'fresh' );
- $admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_user_locale() ) ) );
-
- /** This filter is documented in wp-admin/admin-header.php */
- $admin_body_classes = apply_filters( 'admin_body_class', '' );
-
-?>
-<body class="wp-admin wp-core-ui <?php echo $admin_body_classes . ' ' . $admin_body_class; ?>">
- <div id="adminbar" class="adminbar">
- <h1 id="current-site" class="current-site">
- <a class="current-site-link" href="<?php echo esc_url( home_url( '/' ) ); ?>" target="_blank" rel="home">
- <span class="dashicons dashicons-wordpress"></span>
- <span class="current-site-name"><?php bloginfo( 'name' ); ?></span>
- </a>
- </h1>
- <button type="button" class="options button-link closed">
- <span class="dashicons dashicons-tag on-closed"></span>
- <span class="screen-reader-text on-closed"><?php _e( 'Show post options' ); ?></span>
- <span aria-hidden="true" class="on-open"><?php _e( 'Done' ); ?></span>
- <span class="screen-reader-text on-open"><?php _e( 'Hide post options' ); ?></span>
- </button>
- </div>
-
- <div id="scanbar" class="scan">
- <form method="GET">
- <label for="url-scan" class="screen-reader-text"><?php _e( 'Scan site for content' ); ?></label>
- <input type="url" name="u" id="url-scan" class="scan-url" value="<?php echo esc_attr( $site_data['u'] ) ?>" placeholder="<?php esc_attr_e( 'Enter a URL to scan' ) ?>" />
- <input type="submit" name="url-scan-submit" id="url-scan-submit" class="scan-submit" value="<?php esc_attr_e( 'Scan' ) ?>" />
- <?php wp_nonce_field( 'scan-site' ); ?>
- </form>
- </div>
-
- <form id="pressthis-form" method="post" action="post.php" autocomplete="off">
- <input type="hidden" name="post_ID" id="post_ID" value="<?php echo $post_ID; ?>" />
- <input type="hidden" name="action" value="press-this-save-post" />
- <input type="hidden" name="post_status" id="post_status" value="draft" />
- <input type="hidden" name="wp-preview" id="wp-preview" value="" />
- <input type="hidden" name="post_title" id="post_title" value="" />
- <input type="hidden" name="pt-force-redirect" id="pt-force-redirect" value="" />
- <?php
-
- wp_nonce_field( 'update-post_' . $post_ID, '_wpnonce', false );
- wp_nonce_field( 'add-category', '_ajax_nonce-add-category', false );
-
- ?>
-
- <div class="wrapper">
- <div class="editor-wrapper">
- <div class="alerts" role="alert" aria-live="assertive" aria-relevant="all" aria-atomic="true">
- <?php
-
- if ( isset( $data['v'] ) && $this->version > $data['v'] ) {
- ?>
- <p class="alert is-notice">
- <?php printf( __( 'You should upgrade <a href="%s" target="_blank">your bookmarklet</a> to the latest version!' ), admin_url( 'tools.php' ) ); ?>
- </p>
- <?php
- }
-
- ?>
- </div>
-
- <div id="app-container" class="editor">
- <span id="title-container-label" class="post-title-placeholder" aria-hidden="true"><?php _e( 'Post title' ); ?></span>
- <h2 id="title-container" class="post-title" contenteditable="true" spellcheck="true" aria-label="<?php esc_attr_e( 'Post title' ); ?>" tabindex="0"><?php echo esc_html( $post_title ); ?></h2>
-
- <div class="media-list-container">
- <div class="media-list-inner-container">
- <h2 class="screen-reader-text"><?php _e( 'Suggested media' ); ?></h2>
- <ul class="media-list"></ul>
- </div>
- </div>
-
- <?php
- wp_editor( $post_content, 'pressthis', array(
- 'drag_drop_upload' => true,
- 'editor_height' => 600,
- 'media_buttons' => false,
- 'textarea_name' => 'post_content',
- 'teeny' => true,
- 'tinymce' => array(
- 'resize' => false,
- 'wordpress_adv_hidden' => false,
- 'add_unload_trigger' => false,
- 'statusbar' => false,
- 'autoresize_min_height' => 600,
- 'wp_autoresize_on' => true,
- 'plugins' => 'lists,media,paste,tabfocus,fullscreen,wordpress,wpautoresize,wpeditimage,wpgallery,wplink,wptextpattern,wpview',
- 'toolbar1' => 'bold,italic,bullist,numlist,blockquote,link,unlink',
- 'toolbar2' => 'undo,redo',
- ),
- 'quicktags' => array(
- 'buttons' => 'strong,em,link,block,del,ins,img,ul,ol,li,code,more',
- ),
- ) );
-
- ?>
- </div>
- </div>
-
- <div class="options-panel-back is-hidden" tabindex="-1"></div>
- <div class="options-panel is-off-screen is-hidden" tabindex="-1">
- <div class="post-options">
-
- <?php if ( $supports_formats ) : ?>
- <button type="button" class="post-option">
- <span class="dashicons dashicons-admin-post"></span>
- <span class="post-option-title"><?php _ex( 'Format', 'post format' ); ?></span>
- <span class="post-option-contents" id="post-option-post-format"><?php echo esc_html( get_post_format_string( $post_format ) ); ?></span>
- <span class="dashicons post-option-forward"></span>
- </button>
- <?php endif; ?>
-
- <?php if ( $show_categories ) : ?>
- <button type="button" class="post-option">
- <span class="dashicons dashicons-category"></span>
- <span class="post-option-title"><?php _e( 'Categories' ); ?></span>
- <span class="dashicons post-option-forward"></span>
- </button>
- <?php endif; ?>
-
- <?php if ( $show_tags ) : ?>
- <button type="button" class="post-option">
- <span class="dashicons dashicons-tag"></span>
- <span class="post-option-title"><?php _e( 'Tags' ); ?></span>
- <span class="dashicons post-option-forward"></span>
- </button>
- <?php endif; ?>
- </div>
-
- <?php if ( $supports_formats ) : ?>
- <div class="setting-modal is-off-screen is-hidden">
- <button type="button" class="modal-close">
- <span class="dashicons post-option-back"></span>
- <span class="setting-title" aria-hidden="true"><?php _ex( 'Format', 'post format' ); ?></span>
- <span class="screen-reader-text"><?php _e( 'Back to post options' ) ?></span>
- </button>
- <?php $this->post_formats_html( $post ); ?>
- </div>
- <?php endif; ?>
-
- <?php if ( $show_categories ) : ?>
- <div class="setting-modal is-off-screen is-hidden">
- <button type="button" class="modal-close">
- <span class="dashicons post-option-back"></span>
- <span class="setting-title" aria-hidden="true"><?php _e( 'Categories' ); ?></span>
- <span class="screen-reader-text"><?php _e( 'Back to post options' ) ?></span>
- </button>
- <?php $this->categories_html( $post ); ?>
- </div>
- <?php endif; ?>
-
- <?php if ( $show_tags ) : ?>
- <div class="setting-modal tags is-off-screen is-hidden">
- <button type="button" class="modal-close">
- <span class="dashicons post-option-back"></span>
- <span class="setting-title" aria-hidden="true"><?php _e( 'Tags' ); ?></span>
- <span class="screen-reader-text"><?php _e( 'Back to post options' ) ?></span>
- </button>
- <?php $this->tags_html( $post ); ?>
- </div>
- <?php endif; ?>
- </div><!-- .options-panel -->
- </div><!-- .wrapper -->
-
- <div class="press-this-actions">
- <div class="pressthis-media-buttons">
- <button type="button" class="insert-media" data-editor="pressthis">
- <span class="dashicons dashicons-admin-media"></span>
- <span class="screen-reader-text"><?php _e( 'Add Media' ); ?></span>
- </button>
- </div>
- <div class="post-actions">
- <span class="spinner"> </span>
- <div class="split-button">
- <div class="split-button-head">
- <button type="button" class="publish-button split-button-primary" aria-live="polite">
- <span class="publish"><?php echo ( current_user_can( 'publish_posts' ) ) ? __( 'Publish' ) : __( 'Submit for Review' ); ?></span>
- <span class="saving-draft"><?php _e( 'Saving…' ); ?></span>
- </button><button type="button" class="split-button-toggle" aria-haspopup="true" aria-expanded="false">
- <i class="dashicons dashicons-arrow-down-alt2"></i>
- <span class="screen-reader-text"><?php _e('More actions'); ?></span>
- </button>
- </div>
- <ul class="split-button-body">
- <li><button type="button" class="button-link draft-button split-button-option"><?php _e( 'Save Draft' ); ?></button></li>
- <li><button type="button" class="button-link standard-editor-button split-button-option"><?php _e( 'Standard Editor' ); ?></button></li>
- <li><button type="button" class="button-link preview-button split-button-option"><?php _e( 'Preview' ); ?></button></li>
- </ul>
- </div>
- </div>
- </div>
- </form>
-
- <?php
- /** This action is documented in wp-admin/admin-footer.php */
- do_action( 'admin_footer', '' );
-
- /** This action is documented in wp-admin/admin-footer.php */
- do_action( 'admin_print_footer_scripts-press-this.php' );
-
- /** This action is documented in wp-admin/admin-footer.php */
- do_action( 'admin_print_footer_scripts' );
-
- /** This action is documented in wp-admin/admin-footer.php */
- do_action( 'admin_footer-press-this.php' );
- ?>
-</body>
-</html>
-<?php
- die();
- }
-}
</del></span></pre></div>
<a id="trunksrcwpadminincludesupdatecorephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/includes/update-core.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/includes/update-core.php 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/includes/update-core.php 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -719,6 +719,19 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-includes/js/plupload/plupload.full.min.js',
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-includes/js/swfupload/plugins',
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-includes/js/swfupload/swfupload.swf',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+'wp-admin/css/press-this-editor.css',
+'wp-admin/css/press-this-editor-rtl.css',
+'wp-admin/css/press-this-editor-rtl.min.css',
+'wp-admin/css/press-this-editor.min.css',
+'wp-admin/css/press-this.css',
+'wp-admin/css/press-this-rtl.css',
+'wp-admin/css/press-this-rtl.min.css',
+'wp-admin/css/press-this.min.css',
+'wp-admin/includes/class-wp-press-this.php',
+'wp-admin/js/press-this.js',
+'wp-admin/js/press-this.min.js',
+'wp-admin/js/bookmarklet.js',
+'wp-admin/js/bookmarklet.min.js',
</ins><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -851,7 +864,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /*
</span><span class="cx" style="display: block; padding: 0 10px"> * Import $wp_version, $required_php_version, and $required_mysql_version from the new version.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * DO NOT globalise any variables imported from `version-current.php` in this function.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * DO NOT globalise any variables imported from `version-current.php` in this function.
</ins><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * BC Note: $wp_filesystem->wp_content_dir() returned unslashed pre-2.8
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span></span></pre></div>
<a id="trunksrcwpadminjsbookmarkletjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: trunk/src/wp-admin/js/bookmarklet.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/js/bookmarklet.js 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/js/bookmarklet.js 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,179 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-/**
- * @summary Creates a form with a URL, title, and content based on the current opened URL and the content of the associated web page.
- *
- * @since 4.2.0
- *
- * @param {window} window The window.
- * @param {document} document The document.
- * @param {string} href The current opened URL.
- * @param {string} pt_url The URL to post the content to.
- *
- * @returns {void}
- */
-( function( window, document, href, pt_url ) {
- var encURI = window.encodeURIComponent,
- form = document.createElement( 'form' ),
- head = document.getElementsByTagName( 'head' )[0],
- target = '_press_this_app',
- canPost = true,
- windowWidth, windowHeight, selection,
- metas, links, content, images, iframes, img;
-
- if ( ! pt_url ) {
- return;
- }
-
- if ( href.match( /^https?:/ ) ) {
- pt_url += '&u=' + encURI( href );
- // Check whether the unencoded url and the encoded url use the same protocol.
- if ( href.match( /^https:/ ) && pt_url.match( /^http:/ ) ) {
- canPost = false;
- }
- } else {
- top.location.href = pt_url;
- return;
- }
-
- if ( window.getSelection ) {
- selection = window.getSelection() + '';
- } else if ( document.getSelection ) {
- selection = document.getSelection() + '';
- } else if ( document.selection ) {
- selection = document.selection.createRange().text || '';
- }
-
- pt_url += '&buster=' + ( new Date().getTime() );
-
- if ( ! canPost ) {
- if ( document.title ) {
- pt_url += '&t=' + encURI( document.title.substr( 0, 256 ) );
- }
-
- if ( selection ) {
- pt_url += '&s=' + encURI( selection.substr( 0, 512 ) );
- }
- }
-
- windowWidth = window.outerWidth || document.documentElement.clientWidth || 600;
- windowHeight = window.outerHeight || document.documentElement.clientHeight || 700;
-
- windowWidth = ( windowWidth < 800 || windowWidth > 5000 ) ? 600 : ( windowWidth * 0.7 );
- windowHeight = ( windowHeight < 800 || windowHeight > 3000 ) ? 700 : ( windowHeight * 0.9 );
-
- if ( ! canPost ) {
- window.open( pt_url, target, 'location,resizable,scrollbars,width=' + windowWidth + ',height=' + windowHeight );
- return;
- }
-
- /**
- * @summary Creates a hidden input field and sets its name and value.
- *
- * @since 4.2.0
- *
- * @param name The input field name.
- * @param value The input field value.
- *
- * @returns {void}
- */
- function add( name, value ) {
- if ( typeof value === 'undefined' ) {
- return;
- }
-
- var input = document.createElement( 'input' );
-
- input.name = name;
- input.value = value;
- input.type = 'hidden';
-
- form.appendChild( input );
- }
-
- metas = head.getElementsByTagName( 'meta' ) || [];
-
- for ( var m = 0; m < metas.length; m++ ) {
- if ( m > 200 ) {
- break;
- }
-
- var q = metas[ m ],
- q_name = q.getAttribute( 'name' ),
- q_prop = q.getAttribute( 'property' ),
- q_cont = q.getAttribute( 'content' );
-
- if ( q_cont ) {
- if ( q_name ) {
- add( '_meta[' + q_name + ']', q_cont );
- } else if ( q_prop ) {
- add( '_meta[' + q_prop + ']', q_cont );
- }
- }
- }
-
- links = head.getElementsByTagName( 'link' ) || [];
-
- for ( var y = 0; y < links.length; y++ ) {
- if ( y >= 50 ) {
- break;
- }
-
- var g = links[ y ],
- g_rel = g.getAttribute( 'rel' );
-
- if ( g_rel === 'canonical' || g_rel === 'icon' || g_rel === 'shortlink' ) {
- add( '_links[' + g_rel + ']', g.getAttribute( 'href' ) );
- }
- }
-
- if ( document.body.getElementsByClassName ) {
- content = document.body.getElementsByClassName( 'hfeed' )[0];
- }
-
- content = document.getElementById( 'content' ) || content || document.body;
- images = content.getElementsByTagName( 'img' ) || [];
-
- for ( var n = 0; n < images.length; n++ ) {
- if ( n >= 100 ) {
- break;
- }
-
- img = images[ n ];
-
- // If we know the image width and/or height, check them now and drop the "uninteresting" images.
- if ( img.src.indexOf( 'avatar' ) > -1 || img.className.indexOf( 'avatar' ) > -1 ||
- ( img.width && img.width < 256 ) || ( img.height && img.height < 128 ) ) {
-
- continue;
- }
-
- add( '_images[]', img.src );
- }
-
- iframes = document.body.getElementsByTagName( 'iframe' ) || [];
-
- for ( var p = 0; p < iframes.length; p++ ) {
- if ( p >= 50 ) {
- break;
- }
-
- add( '_embeds[]', iframes[ p ].src );
- }
-
- if ( document.title ) {
- add( 't', document.title );
- }
-
- if ( selection ) {
- add( 's', selection );
- }
-
- form.setAttribute( 'method', 'POST' );
- form.setAttribute( 'action', pt_url );
- form.setAttribute( 'target', target );
- form.setAttribute( 'style', 'display: none;' );
-
- window.open( 'about:blank', target, 'location,resizable,scrollbars,width=' + windowWidth + ',height=' + windowHeight );
-
- document.body.appendChild( form );
- form.submit();
-} )( window, document, top.location.href, window.pt_url );
</del></span></pre></div>
<a id="trunksrcwpadminjsbookmarkletminjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: trunk/src/wp-admin/js/bookmarklet.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/js/bookmarklet.min.js 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/js/bookmarklet.min.js 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-(function(a,b,c,d){function e(a,c){if("undefined"!=typeof c){var d=b.createElement("input");d.name=a,d.value=c,d.type="hidden",p.appendChild(d)}}var f,g,h,i,j,k,l,m,n,o=a.encodeURIComponent,p=b.createElement("form"),q=b.getElementsByTagName("head")[0],r="_press_this_app",s=!0;if(d){if(!c.match(/^https?:/))return void(top.location.href=d);if(d+="&u="+o(c),c.match(/^https:/)&&d.match(/^http:/)&&(s=!1),a.getSelection?h=a.getSelection()+"":b.getSelection?h=b.getSelection()+"":b.selection&&(h=b.selection.createRange().text||""),d+="&buster="+(new Date).getTime(),s||(b.title&&(d+="&t="+o(b.title.substr(0,256))),h&&(d+="&s="+o(h.substr(0,512)))),f=a.outerWidth||b.documentElement.clientWidth||600,g=a.outerHeight|
|b.documentElement.clientHeight||700,f=f<800||f>5e3?600:.7*f,g=g<800||g>3e3?700:.9*g,!s)return void a.open(d,r,"location,resizable,scrollbars,width="+f+",height="+g);i=q.getElementsByTagName("meta")||[];for(var t=0;t<i.length&&!(t>200);t++){var u=i[t],v=u.getAttribute("name"),w=u.getAttribute("property"),x=u.getAttribute("content");x&&(v?e("_meta["+v+"]",x):w&&e("_meta["+w+"]",x))}j=q.getElementsByTagName("link")||[];for(var y=0;y<j.length&&!(y>=50);y++){var z=j[y],A=z.getAttribute("rel");"canonical"!==A&&"icon"!==A&&"shortlink"!==A||e("_links["+A+"]",z.getAttribute("href"))}b.body.getElementsByClassName&&(k=b.body.getElementsByClassName("hfeed")[0]),k=b.getElementById("content")||k||b.body,l=k.getElementsBy
TagName("img")||[];for(var B=0;B<l.length&&!(B>=100);B++)n=l[B],n.src.indexOf("avatar")>-1||n.className.indexOf("avatar")>-1||n.width&&n.width<256||n.height&&n.height<128||e("_images[]",n.src);m=b.body.getElementsByTagName("iframe")||[];for(var C=0;C<m.length&&!(C>=50);C++)e("_embeds[]",m[C].src);b.title&&e("t",b.title),h&&e("s",h),p.setAttribute("method","POST"),p.setAttribute("action",d),p.setAttribute("target",r),p.setAttribute("style","display: none;"),a.open("about:blank",r,"location,resizable,scrollbars,width="+f+",height="+g),b.body.appendChild(p),p.submit()}})(window,document,top.location.href,window.pt_url);
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpadminjspressthisjs"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: trunk/src/wp-admin/js/press-this.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/js/press-this.js 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/js/press-this.js 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,899 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-/**
- * PressThis App
- *
- */
-( function( $, window ) {
- var PressThis = function() {
- var editor, $mediaList, $mediaThumbWrap,
- $window = $( window ),
- $document = $( document ),
- saveAlert = false,
- sidebarIsOpen = false,
- settings = window.wpPressThisConfig || {},
- data = window.wpPressThisData || {},
- smallestWidth = 128,
- hasSetFocus = false,
- catsCache = [],
- isOffScreen = 'is-off-screen',
- isHidden = 'is-hidden',
- offscreenHidden = isOffScreen + ' ' + isHidden,
- iOS = /iPad|iPod|iPhone/.test( window.navigator.userAgent ),
- $textEditor = $( '#pressthis' ),
- textEditor = $textEditor[0],
- textEditorMinHeight = 600,
- textLength = 0,
- transitionEndEvent = ( function() {
- var style = document.documentElement.style;
-
- if ( typeof style.transition !== 'undefined' ) {
- return 'transitionend';
- }
-
- if ( typeof style.WebkitTransition !== 'undefined' ) {
- return 'webkitTransitionEnd';
- }
-
- return false;
- }() );
-
- /* ***************************************************************
- * HELPER FUNCTIONS
- *************************************************************** */
-
- /**
- * Emulates our PHP __() gettext function, powered by the strings exported in pressThisL10n.
- *
- * @param key string Key of the string to be translated, as found in pressThisL10n.
- * @returns string Original or translated string, or empty string if no key.
- */
- function __( key ) {
- if ( key && window.pressThisL10n ) {
- return window.pressThisL10n[key] || key;
- }
-
- return key || '';
- }
-
- /**
- * Allow only HTTP or protocol relative URLs.
- *
- * @param url string The URL.
- * @returns string Processed URL.
- */
- function checkUrl( url ) {
- url = $.trim( url || '' );
-
- if ( /^(?:https?:)?\/\//.test( url ) ) {
- url = wp.sanitize.stripTags( url );
- return url.replace( /["\\]+/g, '' );
- }
-
- return '';
- }
-
- /**
- * Show UX spinner
- */
- function showSpinner() {
- $( '.spinner' ).addClass( 'is-active' );
- $( '.post-actions button' ).attr( 'disabled', 'disabled' );
- }
-
- /**
- * Hide UX spinner
- */
- function hideSpinner() {
- $( '.spinner' ).removeClass( 'is-active' );
- $( '.post-actions button' ).removeAttr( 'disabled' );
- }
-
- function textEditorResize( reset ) {
- var pageYOffset, height;
-
- if ( editor && ! editor.isHidden() ) {
- return;
- }
-
- reset = ( reset === 'reset' ) || ( textLength && textLength > textEditor.value.length );
- height = textEditor.style.height;
-
- if ( reset ) {
- pageYOffset = window.pageYOffset;
-
- textEditor.style.height = 'auto';
- textEditor.style.height = Math.max( textEditor.scrollHeight, textEditorMinHeight ) + 'px';
- window.scrollTo( window.pageXOffset, pageYOffset );
- } else if ( parseInt( textEditor.style.height, 10 ) < textEditor.scrollHeight ) {
- textEditor.style.height = textEditor.scrollHeight + 'px';
- }
-
- textLength = textEditor.value.length;
- }
-
- function mceGetCursorOffset() {
- if ( ! editor ) {
- return false;
- }
-
- var node = editor.selection.getNode(),
- range, view, offset;
-
- if ( editor.wp && editor.wp.getView && ( view = editor.wp.getView( node ) ) ) {
- offset = view.getBoundingClientRect();
- } else {
- range = editor.selection.getRng();
-
- try {
- offset = range.getClientRects()[0];
- } catch( er ) {}
-
- if ( ! offset ) {
- offset = node.getBoundingClientRect();
- }
- }
-
- return offset.height ? offset : false;
- }
-
- // Make sure the caret is always visible.
- function mceKeyup( event ) {
- var VK = window.tinymce.util.VK,
- key = event.keyCode;
-
- // Bail on special keys.
- if ( key <= 47 && ! ( key === VK.SPACEBAR || key === VK.ENTER || key === VK.DELETE || key === VK.BACKSPACE || key === VK.UP || key === VK.LEFT || key === VK.DOWN || key === VK.UP ) ) {
- return;
- // OS keys, function keys, num lock, scroll lock
- } else if ( ( key >= 91 && key <= 93 ) || ( key >= 112 && key <= 123 ) || key === 144 || key === 145 ) {
- return;
- }
-
- mceScroll( key );
- }
-
- function mceScroll( key ) {
- var cursorTop, cursorBottom, editorBottom,
- offset = mceGetCursorOffset(),
- bufferTop = 50,
- bufferBottom = 65,
- VK = window.tinymce.util.VK;
-
- if ( ! offset ) {
- return;
- }
-
- cursorTop = offset.top + editor.iframeElement.getBoundingClientRect().top;
- cursorBottom = cursorTop + offset.height;
- cursorTop = cursorTop - bufferTop;
- cursorBottom = cursorBottom + bufferBottom;
- editorBottom = $window.height();
-
- // Don't scroll if the node is taller than the visible part of the editor
- if ( editorBottom < offset.height ) {
- return;
- }
-
- if ( cursorTop < 0 && ( key === VK.UP || key === VK.LEFT || key === VK.BACKSPACE ) ) {
- window.scrollTo( window.pageXOffset, cursorTop + window.pageYOffset );
- } else if ( cursorBottom > editorBottom ) {
- window.scrollTo( window.pageXOffset, cursorBottom + window.pageYOffset - editorBottom );
- }
- }
-
- /**
- * Replace emoji images with chars and sanitize the text content.
- */
- function getTitleText() {
- var $element = $( '#title-container' );
-
- $element.find( 'img.emoji' ).each( function() {
- var $image = $( this );
- $image.replaceWith( $( '<span>' ).text( $image.attr( 'alt' ) ) );
- });
-
- return wp.sanitize.sanitizeText( $element.text() );
- }
-
- /**
- * Prepare the form data for saving.
- */
- function prepareFormData() {
- var $form = $( '#pressthis-form' ),
- $input = $( '<input type="hidden" name="post_category[]" value="">' );
-
- editor && editor.save();
-
- $( '#post_title' ).val( getTitleText() );
-
- // Make sure to flush out the tags with tagBox before saving
- if ( window.tagBox ) {
- $( 'div.tagsdiv' ).each( function() {
- window.tagBox.flushTags( this, false, 1 );
- } );
- }
-
- // Get selected categories
- $( '.categories-select .category' ).each( function( i, element ) {
- var $cat = $( element );
-
- if ( $cat.hasClass( 'selected' ) ) {
- // Have to append a node as we submit the actual form on preview
- $form.append( $input.clone().val( $cat.attr( 'data-term-id' ) || '' ) );
- }
- });
- }
-
- /**
- * Submit the post form via AJAX, and redirect to the proper screen if published vs saved as a draft.
- *
- * @param action string publish|draft
- */
- function submitPost( action ) {
- var data;
-
- saveAlert = false;
- showSpinner();
-
- if ( 'publish' === action ) {
- $( '#post_status' ).val( 'publish' );
- }
-
- prepareFormData();
- data = $( '#pressthis-form' ).serialize();
-
- $.ajax( {
- type: 'post',
- url: window.ajaxurl,
- data: data
- }).always( function() {
- hideSpinner();
- clearNotices();
- $( '.publish-button' ).removeClass( 'is-saving' );
- }).done( function( response ) {
- if ( ! response.success ) {
- renderError( response.data.errorMessage );
- } else if ( response.data.redirect ) {
- if ( window.opener && ( settings.redirInParent || response.data.force ) ) {
- try {
- window.opener.location.href = response.data.redirect;
-
- window.setTimeout( function() {
- window.self.close();
- }, 200 );
- } catch( er ) {
- window.location.href = response.data.redirect;
- }
- } else {
- window.location.href = response.data.redirect;
- }
- }
- }).fail( function() {
- renderError( __( 'serverError' ) );
- });
- }
-
- /**
- * Inserts the media a user has selected from the presented list inside the editor, as an image or embed, based on type
- *
- * @param type string img|embed
- * @param src string Source URL
- * @param link string Optional destination link, for images (defaults to src)
- */
- function insertSelectedMedia( $element ) {
- var src, link, newContent = '';
-
- src = checkUrl( $element.attr( 'data-wp-src' ) || '' );
- link = checkUrl( data.u );
-
- if ( $element.hasClass( 'is-image' ) ) {
- if ( ! link ) {
- link = src;
- }
-
- newContent = '<a href="' + link + '"><img class="alignnone size-full" src="' + src + '" alt="" /></a>';
- } else {
- newContent = '[embed]' + src + '[/embed]';
- }
-
- if ( editor && ! editor.isHidden() ) {
- if ( ! hasSetFocus ) {
- editor.setContent( '<p>' + newContent + '</p>' + editor.getContent() );
- } else {
- editor.execCommand( 'mceInsertContent', false, newContent );
- }
- } else if ( window.QTags ) {
- window.QTags.insertContent( newContent );
- }
- }
-
- /**
- * Save a new user-generated category via AJAX
- */
- function saveNewCategory() {
- var data,
- name = $( '#new-category' ).val();
-
- if ( ! name ) {
- return;
- }
-
- data = {
- action: 'press-this-add-category',
- post_id: $( '#post_ID' ).val() || 0,
- name: name,
- new_cat_nonce: $( '#_ajax_nonce-add-category' ).val() || '',
- parent: $( '#new-category-parent' ).val() || 0
- };
-
- $.post( window.ajaxurl, data, function( response ) {
- if ( ! response.success ) {
- renderError( response.data.errorMessage );
- } else {
- var $parent, $ul,
- $wrap = $( 'ul.categories-select' );
-
- $.each( response.data, function( i, newCat ) {
- var $node = $( '<li>' ).append( $( '<div class="category selected" tabindex="0" role="checkbox" aria-checked="true">' )
- .attr( 'data-term-id', newCat.term_id )
- .text( newCat.name ) );
-
- if ( newCat.parent ) {
- if ( ! $ul || ! $ul.length ) {
- $parent = $wrap.find( 'div[data-term-id="' + newCat.parent + '"]' ).parent();
- $ul = $parent.find( 'ul.children:first' );
-
- if ( ! $ul.length ) {
- $ul = $( '<ul class="children">' ).appendTo( $parent );
- }
- }
-
- $ul.prepend( $node );
- } else {
- $wrap.prepend( $node );
- }
-
- $node.focus();
- } );
-
- refreshCatsCache();
- }
- } );
- }
-
- /* ***************************************************************
- * RENDERING FUNCTIONS
- *************************************************************** */
-
- /**
- * Hide the form letting users enter a URL to be scanned, if a URL was already passed.
- */
- function renderToolsVisibility() {
- if ( data.hasData ) {
- $( '#scanbar' ).hide();
- }
- }
-
- /**
- * Render error notice
- *
- * @param msg string Notice/error message
- * @param error string error|notice CSS class for display
- */
- function renderNotice( msg, error ) {
- var $alerts = $( '.editor-wrapper div.alerts' ),
- className = error ? 'is-error' : 'is-notice';
-
- $alerts.append( $( '<p class="alert ' + className + '">' ).text( msg ) );
- }
-
- /**
- * Render error notice
- *
- * @param msg string Error message
- */
- function renderError( msg ) {
- renderNotice( msg, true );
- }
-
- function clearNotices() {
- $( 'div.alerts' ).empty();
- }
-
- /**
- * Render notices on page load, if any already
- */
- function renderStartupNotices() {
- // Render errors sent in the data, if any
- if ( data.errors ) {
- $.each( data.errors, function( i, msg ) {
- renderError( msg );
- } );
- }
- }
-
- /**
- * Add an image to the list of found images.
- */
- function addImg( src, displaySrc, i ) {
- var $element = $mediaThumbWrap.clone().addClass( 'is-image' );
-
- $element.attr( 'data-wp-src', src ).css( 'background-image', 'url(' + displaySrc + ')' )
- .find( 'span' ).text( __( 'suggestedImgAlt' ).replace( '%d', i + 1 ) );
-
- $mediaList.append( $element );
- }
-
- /**
- * Render the detected images and embed for selection, if any
- */
- function renderDetectedMedia() {
- var found = 0;
-
- $mediaList = $( 'ul.media-list' );
- $mediaThumbWrap = $( '<li class="suggested-media-thumbnail" tabindex="0"><span class="screen-reader-text"></span></li>' );
-
- if ( data._embeds ) {
- $.each( data._embeds, function ( i, src ) {
- var displaySrc = '',
- cssClass = '',
- $element = $mediaThumbWrap.clone().addClass( 'is-embed' );
-
- src = checkUrl( src );
-
- if ( src.indexOf( 'youtube.com/' ) > -1 ) {
- displaySrc = 'https://i.ytimg.com/vi/' + src.replace( /.+v=([^&]+).*/, '$1' ) + '/hqdefault.jpg';
- cssClass += ' is-video';
- } else if ( src.indexOf( 'youtu.be/' ) > -1 ) {
- displaySrc = 'https://i.ytimg.com/vi/' + src.replace( /\/([^\/])$/, '$1' ) + '/hqdefault.jpg';
- cssClass += ' is-video';
- } else if ( src.indexOf( 'dailymotion.com' ) > -1 ) {
- displaySrc = src.replace( '/video/', '/thumbnail/video/' );
- cssClass += ' is-video';
- } else if ( src.indexOf( 'soundcloud.com' ) > -1 ) {
- cssClass += ' is-audio';
- } else if ( src.indexOf( 'twitter.com' ) > -1 ) {
- cssClass += ' is-tweet';
- } else {
- cssClass += ' is-video';
- }
-
- $element.attr( 'data-wp-src', src ).find( 'span' ).text( __( 'suggestedEmbedAlt' ).replace( '%d', i + 1 ) );
-
- if ( displaySrc ) {
- $element.css( 'background-image', 'url(' + displaySrc + ')' );
- }
-
- $mediaList.append( $element );
- found++;
- } );
- }
-
- if ( data._images ) {
- $.each( data._images, function( i, src ) {
- var displaySrc, img = new Image();
-
- src = checkUrl( src );
- displaySrc = src.replace( /^(http[^\?]+)(\?.*)?$/, '$1' );
-
- if ( src.indexOf( 'files.wordpress.com/' ) > -1 ) {
- displaySrc = displaySrc.replace( /\?.*$/, '' ) + '?w=' + smallestWidth;
- } else if ( src.indexOf( 'gravatar.com/' ) > -1 ) {
- displaySrc = displaySrc.replace( /\?.*$/, '' ) + '?s=' + smallestWidth;
- } else {
- displaySrc = src;
- }
-
- img.onload = function() {
- if ( ( img.width && img.width < 256 ) ||
- ( img.height && img.height < 128 ) ) {
-
- return;
- }
-
- addImg( src, displaySrc, i );
- };
-
- img.src = src;
- found++;
- } );
- }
-
- if ( found ) {
- $( '.media-list-container' ).addClass( 'has-media' );
- }
- }
-
- /* ***************************************************************
- * MONITORING FUNCTIONS
- *************************************************************** */
-
- /**
- * Interactive navigation behavior for the options modal (post format, tags, categories)
- */
- function monitorOptionsModal() {
- var $postOptions = $( '.post-options' ),
- $postOption = $( '.post-option' ),
- $settingModal = $( '.setting-modal' ),
- $modalClose = $( '.modal-close' );
-
- $postOption.on( 'click', function() {
- var index = $( this ).index(),
- $targetSettingModal = $settingModal.eq( index );
-
- $postOptions.addClass( isOffScreen )
- .one( transitionEndEvent, function() {
- $( this ).addClass( isHidden );
- } );
-
- $targetSettingModal.removeClass( offscreenHidden )
- .one( transitionEndEvent, function() {
- $( this ).find( '.modal-close' ).focus();
- } );
- } );
-
- $modalClose.on( 'click', function() {
- var $targetSettingModal = $( this ).parent(),
- index = $targetSettingModal.index();
-
- $postOptions.removeClass( offscreenHidden );
- $targetSettingModal.addClass( isOffScreen );
-
- if ( transitionEndEvent ) {
- $targetSettingModal.one( transitionEndEvent, function() {
- $( this ).addClass( isHidden );
- $postOption.eq( index - 1 ).focus();
- } );
- } else {
- setTimeout( function() {
- $targetSettingModal.addClass( isHidden );
- $postOption.eq( index - 1 ).focus();
- }, 350 );
- }
- } );
- }
-
- /**
- * Interactive behavior for the sidebar toggle, to show the options modals
- */
- function openSidebar() {
- sidebarIsOpen = true;
-
- $( '.options' ).removeClass( 'closed' ).addClass( 'open' );
- $( '.press-this-actions, #scanbar' ).addClass( isHidden );
- $( '.options-panel-back' ).removeClass( isHidden );
-
- $( '.options-panel' ).removeClass( offscreenHidden )
- .one( transitionEndEvent, function() {
- $( '.post-option:first' ).focus();
- } );
- }
-
- function closeSidebar() {
- sidebarIsOpen = false;
-
- $( '.options' ).removeClass( 'open' ).addClass( 'closed' );
- $( '.options-panel-back' ).addClass( isHidden );
- $( '.press-this-actions, #scanbar' ).removeClass( isHidden );
-
- $( '.options-panel' ).addClass( isOffScreen )
- .one( transitionEndEvent, function() {
- $( this ).addClass( isHidden );
- // Reset to options list
- $( '.post-options' ).removeClass( offscreenHidden );
- $( '.setting-modal').addClass( offscreenHidden );
- });
- }
-
- /**
- * Interactive behavior for the post title's field placeholder
- */
- function monitorPlaceholder() {
- var $titleField = $( '#title-container' ),
- $placeholder = $( '.post-title-placeholder' );
-
- $titleField.on( 'focus', function() {
- $placeholder.addClass( 'is-hidden' );
- }).on( 'blur', function() {
- if ( ! $titleField.text() && ! $titleField.html() ) {
- $placeholder.removeClass( 'is-hidden' );
- }
- }).on( 'keyup', function() {
- saveAlert = true;
- }).on( 'paste', function( event ) {
- var text, range,
- clipboard = event.originalEvent.clipboardData || window.clipboardData;
-
- if ( clipboard ) {
- try{
- text = clipboard.getData( 'Text' ) || clipboard.getData( 'text/plain' );
-
- if ( text ) {
- text = $.trim( text.replace( /\s+/g, ' ' ) );
-
- if ( window.getSelection ) {
- range = window.getSelection().getRangeAt(0);
-
- if ( range ) {
- if ( ! range.collapsed ) {
- range.deleteContents();
- }
-
- range.insertNode( document.createTextNode( text ) );
- }
- } else if ( document.selection ) {
- range = document.selection.createRange();
-
- if ( range ) {
- range.text = text;
- }
- }
- }
- } catch ( er ) {}
-
- event.preventDefault();
- }
-
- saveAlert = true;
-
- setTimeout( function() {
- $titleField.text( getTitleText() );
- }, 50 );
- });
-
- if ( $titleField.text() || $titleField.html() ) {
- $placeholder.addClass('is-hidden');
- }
- }
-
- function toggleCatItem( $element ) {
- if ( $element.hasClass( 'selected' ) ) {
- $element.removeClass( 'selected' ).attr( 'aria-checked', 'false' );
- } else {
- $element.addClass( 'selected' ).attr( 'aria-checked', 'true' );
- }
- }
-
- function monitorCatList() {
- $( '.categories-select' ).on( 'click.press-this keydown.press-this', function( event ) {
- var $element = $( event.target );
-
- if ( $element.is( 'div.category' ) ) {
- if ( event.type === 'keydown' && event.keyCode !== 32 ) {
- return;
- }
-
- toggleCatItem( $element );
- event.preventDefault();
- }
- });
- }
-
- function splitButtonClose() {
- $( '.split-button' ).removeClass( 'is-open' );
- $( '.split-button-toggle' ).attr( 'aria-expanded', 'false' );
- }
-
- /* ***************************************************************
- * PROCESSING FUNCTIONS
- *************************************************************** */
-
- /**
- * Calls all the rendring related functions to happen on page load
- */
- function render(){
- // We're on!
- renderToolsVisibility();
- renderDetectedMedia();
- renderStartupNotices();
-
- if ( window.tagBox ) {
- window.tagBox.init();
- }
-
- // iOS doesn't fire click events on "standard" elements without this...
- if ( iOS ) {
- $( document.body ).css( 'cursor', 'pointer' );
- }
- }
-
- /**
- * Set app events and other state monitoring related code.
- */
- function monitor() {
- var $splitButton = $( '.split-button' );
-
- $document.on( 'tinymce-editor-init', function( event, ed ) {
- editor = ed;
-
- editor.on( 'nodechange', function() {
- hasSetFocus = true;
- });
-
- editor.on( 'focus', function() {
- splitButtonClose();
- });
-
- editor.on( 'show', function() {
- setTimeout( function() {
- editor.execCommand( 'wpAutoResize' );
- }, 300 );
- });
-
- editor.on( 'hide', function() {
- setTimeout( function() {
- textEditorResize( 'reset' );
- }, 100 );
- });
-
- editor.on( 'keyup', mceKeyup );
- editor.on( 'undo redo', mceScroll );
-
- }).on( 'click.press-this keypress.press-this', '.suggested-media-thumbnail', function( event ) {
- if ( event.type === 'click' || event.keyCode === 13 ) {
- insertSelectedMedia( $( this ) );
- }
- }).on( 'click.press-this', function( event ) {
- if ( ! $( event.target ).closest( 'button' ).hasClass( 'split-button-toggle' ) ) {
- splitButtonClose();
- }
- });
-
- // Publish, Draft and Preview buttons
- $( '.post-actions' ).on( 'click.press-this', function( event ) {
- var location,
- $target = $( event.target ),
- $button = $target.closest( 'button' );
-
- if ( $button.length ) {
- if ( $button.hasClass( 'draft-button' ) ) {
- $( '.publish-button' ).addClass( 'is-saving' );
- submitPost( 'draft' );
- } else if ( $button.hasClass( 'publish-button' ) ) {
- $button.addClass( 'is-saving' );
-
- if ( window.history.replaceState ) {
- location = window.location.href;
- location += ( location.indexOf( '?' ) !== -1 ) ? '&' : '?';
- location += 'wp-press-this-reload=true';
-
- window.history.replaceState( null, null, location );
- }
-
- submitPost( 'publish' );
- } else if ( $button.hasClass( 'preview-button' ) ) {
- prepareFormData();
- window.opener && window.opener.focus();
-
- $( '#wp-preview' ).val( 'dopreview' );
- $( '#pressthis-form' ).attr( 'target', '_blank' ).submit().attr( 'target', '' );
- $( '#wp-preview' ).val( '' );
- } else if ( $button.hasClass( 'standard-editor-button' ) ) {
- $( '.publish-button' ).addClass( 'is-saving' );
- $( '#pt-force-redirect' ).val( 'true' );
- submitPost( 'draft' );
- } else if ( $button.hasClass( 'split-button-toggle' ) ) {
- if ( $splitButton.hasClass( 'is-open' ) ) {
- $splitButton.removeClass( 'is-open' );
- $button.attr( 'aria-expanded', 'false' );
- } else {
- $splitButton.addClass( 'is-open' );
- $button.attr( 'aria-expanded', 'true' );
- }
- }
- }
- });
-
- monitorOptionsModal();
- monitorPlaceholder();
- monitorCatList();
-
- $( '.options' ).on( 'click.press-this', function() {
- if ( $( this ).hasClass( 'open' ) ) {
- closeSidebar();
- } else {
- openSidebar();
- }
- });
-
- // Close the sidebar when focus moves outside of it.
- $( '.options-panel, .options-panel-back' ).on( 'focusout.press-this', function() {
- setTimeout( function() {
- var node = document.activeElement,
- $node = $( node );
-
- if ( sidebarIsOpen && node && ! $node.hasClass( 'options-panel-back' ) &&
- ( node.nodeName === 'BODY' ||
- ( ! $node.closest( '.options-panel' ).length &&
- ! $node.closest( '.options' ).length ) ) ) {
-
- closeSidebar();
- }
- }, 50 );
- });
-
- $( '#post-formats-select input' ).on( 'change', function() {
- var $this = $( this );
-
- if ( $this.is( ':checked' ) ) {
- $( '#post-option-post-format' ).text( $( 'label[for="' + $this.attr( 'id' ) + '"]' ).text() || '' );
- }
- } );
-
- $window.on( 'beforeunload.press-this', function() {
- if ( saveAlert || ( editor && editor.isDirty() ) ) {
- return __( 'saveAlert' );
- }
- } ).on( 'resize.press-this', function() {
- if ( ! editor || editor.isHidden() ) {
- textEditorResize( 'reset' );
- }
- });
-
- $( 'button.add-cat-toggle' ).on( 'click.press-this', function() {
- var $this = $( this );
-
- $this.toggleClass( 'is-toggled' );
- $this.attr( 'aria-expanded', 'false' === $this.attr( 'aria-expanded' ) ? 'true' : 'false' );
- $( '.setting-modal .add-category, .categories-search-wrapper' ).toggleClass( 'is-hidden' );
- } );
-
- $( 'button.add-cat-submit' ).on( 'click.press-this', saveNewCategory );
-
- $( '.categories-search' ).on( 'keyup.press-this', function() {
- var search = $( this ).val().toLowerCase() || '';
-
- // Don't search when less thasn 3 extended ASCII chars
- if ( /[\x20-\xFF]+/.test( search ) && search.length < 2 ) {
- return;
- }
-
- $.each( catsCache, function( i, cat ) {
- cat.node.removeClass( 'is-hidden searched-parent' );
- } );
-
- if ( search ) {
- $.each( catsCache, function( i, cat ) {
- if ( cat.text.indexOf( search ) === -1 ) {
- cat.node.addClass( 'is-hidden' );
- } else {
- cat.parents.addClass( 'searched-parent' );
- }
- } );
- }
- } );
-
- $textEditor.on( 'focus.press-this input.press-this propertychange.press-this', textEditorResize );
-
- return true;
- }
-
- function refreshCatsCache() {
- $( '.categories-select' ).find( 'li' ).each( function() {
- var $this = $( this );
-
- catsCache.push( {
- node: $this,
- parents: $this.parents( 'li' ),
- text: $this.children( '.category' ).text().toLowerCase()
- } );
- } );
- }
-
- // Let's go!
- $document.ready( function() {
- render();
- monitor();
- refreshCatsCache();
- });
-
- // Expose public methods?
- return {
- renderNotice: renderNotice,
- renderError: renderError
- };
- };
-
- window.wp = window.wp || {};
- window.wp.pressThis = new PressThis();
-
-}( jQuery, window ));
</del></span></pre></div>
<a id="trunksrcwpadminpluginsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/plugins.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/plugins.php 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/plugins.php 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -63,6 +63,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( isset($_GET['from']) && 'import' == $_GET['from'] ) {
</span><span class="cx" style="display: block; padding: 0 10px"> wp_redirect( self_admin_url("import.php?import=" . str_replace('-importer', '', dirname($plugin))) ); // overrides the ?error=true one above and redirects to the Imports page, stripping the -importer suffix
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ } else if ( isset($_GET['from']) && 'press-this' == $_GET['from'] ) {
+ wp_redirect( self_admin_url( "press-this.php") );
</ins><span class="cx" style="display: block; padding: 0 10px"> } else {
</span><span class="cx" style="display: block; padding: 0 10px"> wp_redirect( self_admin_url("plugins.php?activate=true&plugin_status=$status&paged=$page&s=$s") ); // overrides the ?error=true one above
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="trunksrcwpadminpressthisphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/press-this.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/press-this.php 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/press-this.php 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6,19 +6,70 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * @subpackage Press_This
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-define('IFRAME_REQUEST' , true);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+define( 'IFRAME_REQUEST' , true );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /** WordPress Administration Bootstrap */
</span><span class="cx" style="display: block; padding: 0 10px"> require_once( dirname( __FILE__ ) . '/admin.php' );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-if ( ! current_user_can( 'edit_posts' ) || ! current_user_can( get_post_type_object( 'post' )->cap->create_posts ) ) {
- wp_die(
- '<h1>' . __( 'Cheatin’ uh?' ) . '</h1>' .
- '<p>' . __( 'Sorry, you are not allowed to create posts as this user.' ) . '</p>',
- 403
- );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+function wp_load_press_this() {
+ $plugin_slug = 'press-this';
+ $plugin_file = 'press-this/press-this-plugin.php';
+
+ if ( ! current_user_can( 'edit_posts' ) || ! current_user_can( get_post_type_object( 'post' )->cap->create_posts ) ) {
+ wp_die(
+ __( 'Sorry, you are not allowed to create posts as this user.' ),
+ __( 'Cheatin’ uh?' ),
+ 403
+ );
+ } elseif ( is_plugin_active( $plugin_file ) ) {
+ include( WP_PLUGIN_DIR . '/press-this/class-wp-press-this-plugin.php' );
+ $wp_press_this = new WP_Press_This_Plugin();
+ $wp_press_this->html();
+ } elseif ( current_user_can( 'activate_plugins' ) ) {
+ if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_file ) ) {
+ $url = wp_nonce_url( add_query_arg( array(
+ 'action' => 'activate',
+ 'plugin' => $plugin_file,
+ 'from' => 'press-this',
+ ), admin_url( 'plugins.php' ) ), 'activate-plugin_' . $plugin_file );
+ $action = sprintf(
+ '<a href="%1$s" aria-label="%2$s">%2$s</a>',
+ esc_url( $url ),
+ __( 'Activate Press This' )
+ );
+ } else {
+ if ( is_main_site() ) {
+ $url = wp_nonce_url( add_query_arg( array(
+ 'action' => 'install-plugin',
+ 'plugin' => $plugin_slug,
+ 'from' => 'press-this',
+ ), self_admin_url( 'update.php' ) ), 'install-plugin_' . $plugin_slug );
+ $action = sprintf(
+ '<a href="%1$s" class="install-now" data-slug="%2$s" data-name="%2$s" aria-label="%3$s">%3$s</a>',
+ esc_url( $url ),
+ esc_attr( $plugin_slug ),
+ __( 'Install Now' )
+ );
+ } else {
+ $action = sprintf(
+ /* translators: URL to wp-admin/press-this.php */
+ __( 'Press This is not installed. Please install Press This from <a href="%s">the main site</a>.' ),
+ get_admin_url( get_current_network_id(), 'press-this.php' )
+ );
+ }
+ }
+ wp_die(
+ __( 'The Press This plugin is required.' ) . '<br />' . $action,
+ __( 'Install Required' ),
+ 200
+ );
+ } else {
+ wp_die(
+ __( 'Press This is not available. Please contact your site administrator.' ),
+ __( 'Install Required' ),
+ 200
+ );
+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-include( ABSPATH . 'wp-admin/includes/class-wp-press-this.php' );
-$wp_press_this = new WP_Press_This();
-$wp_press_this->html();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+wp_load_press_this();
</ins></span></pre></div>
<a id="trunksrcwpadmintoolsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/tools.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/tools.php 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-admin/tools.php 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -12,11 +12,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $title = __('Tools');
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> get_current_screen()->add_help_tab( array(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'id' => 'press-this',
- 'title' => __('Press This'),
- 'content' => '<p>' . __('Press This is a bookmarklet that makes it easy to blog about something you come across on the web. You can use it to just grab a link, or to post an excerpt. Press This will even allow you to choose from images included on the page and use them in your post. Just drag the Press This link on this screen to your bookmarks bar in your browser, and you’ll be on your way to easier content creation. Clicking on it while on another website opens a popup window with all these options.') . '</p>',
-) );
-get_current_screen()->add_help_tab( array(
</del><span class="cx" style="display: block; padding: 0 10px"> 'id' => 'converter',
</span><span class="cx" style="display: block; padding: 0 10px"> 'title' => __('Categories and Tags Converter'),
</span><span class="cx" style="display: block; padding: 0 10px"> 'content' => '<p>' . __('Categories have hierarchy, meaning that you can nest sub-categories. Tags do not have hierarchy and cannot be nested. Sometimes people start out using one on their posts, then later realize that the other would work better for their content.' ) . '</p>' .
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -34,67 +29,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> ?>
</span><span class="cx" style="display: block; padding: 0 10px"> <div class="wrap">
</span><span class="cx" style="display: block; padding: 0 10px"> <h1><?php echo esc_html( $title ); ?></h1>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-<?php if ( current_user_can('edit_posts') ) : ?>
-<div class="card pressthis">
- <h2><?php _e('Press This') ?></h2>
- <p><?php _e( 'Press This is a little tool that lets you grab bits of the web and create new posts with ease.' );?></p>
- <p><?php _e( 'Use Press This to clip text, images and videos from any web page. Then edit and add more straight from Press This before you save or publish it in a post on your site.' ); ?></p>
-
-
- <form>
- <h3><?php _e( 'Install Press This' ); ?></h3>
- <h4><?php _e( 'Bookmarklet' ); ?></h4>
- <p><?php _e( 'Drag the bookmarklet below to your bookmarks bar. Then, when you’re on a page you want to share, simply “press” it.' ); ?></p>
-
- <p class="pressthis-bookmarklet-wrapper">
- <a class="pressthis-bookmarklet" onclick="return false;" href="<?php echo htmlspecialchars( get_shortcut_link() ); ?>"><span><?php _e( 'Press This' ); ?></span></a>
- <button type="button" class="button pressthis-js-toggle js-show-pressthis-code-wrap" aria-expanded="false" aria-controls="pressthis-code-wrap">
- <span class="dashicons dashicons-clipboard"></span>
- <span class="screen-reader-text"><?php _e( 'Copy “Press This” bookmarklet code' ) ?></span>
- </button>
- </p>
-
- <div class="hidden js-pressthis-code-wrap clear" id="pressthis-code-wrap">
- <p id="pressthis-code-desc">
- <?php _e( 'If you can’t drag the bookmarklet to your bookmarks, copy the following code and create a new bookmark. Paste the code into the new bookmark’s URL field.' ) ?>
- </p>
- <p>
- <textarea class="js-pressthis-code" rows="5" cols="120" readonly="readonly" aria-labelledby="pressthis-code-desc"><?php echo htmlspecialchars( get_shortcut_link() ); ?></textarea>
- </p>
- </div>
-
- <h4><?php _e( 'Direct link (best for mobile)' ); ?></h4>
- <p><?php _e( 'Follow the link to open Press This. Then add it to your device’s bookmarks or home screen.' ); ?></p>
-
- <p>
- <a class="button" href="<?php echo htmlspecialchars( admin_url( 'press-this.php' ) ); ?>"><?php _e( 'Open Press This' ) ?></a>
- </p>
- <script>
- jQuery( document ).ready( function( $ ) {
- var $showPressThisWrap = $( '.js-show-pressthis-code-wrap' );
- var $pressthisCode = $( '.js-pressthis-code' );
-
- $showPressThisWrap.on( 'click', function( event ) {
- var $this = $( this );
-
- $this.parent().next( '.js-pressthis-code-wrap' ).slideToggle( 200 );
- $this.attr( 'aria-expanded', $this.attr( 'aria-expanded' ) === 'false' ? 'true' : 'false' );
- });
-
- // Select Press This code when focusing (tabbing) or clicking the textarea.
- $pressthisCode.on( 'click focus', function() {
- var self = this;
- setTimeout( function() { self.select(); }, 50 );
- });
-
- });
- </script>
- </form>
-</div>
</del><span class="cx" style="display: block; padding: 0 10px"> <?php
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-endif;
-
</del><span class="cx" style="display: block; padding: 0 10px"> if ( current_user_can( 'import' ) ) :
</span><span class="cx" style="display: block; padding: 0 10px"> $cats = get_taxonomy('category');
</span><span class="cx" style="display: block; padding: 0 10px"> $tags = get_taxonomy('post_tag');
</span></span></pre></div>
<a id="trunksrcwpincludesdeprecatedphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/deprecated.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/deprecated.php 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-includes/deprecated.php 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3887,3 +3887,60 @@
</span><span class="cx" style="display: block; padding: 0 10px"> else
</span><span class="cx" style="display: block; padding: 0 10px"> return strcmp( $a->$_menu_item_sort_prop, $b->$_menu_item_sort_prop );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+/**
+ * Retrieves the Press This bookmarklet link.
+ *
+ * @since 2.6.0
+ * @deprecated 4.9.0
+ *
+ */
+function get_shortcut_link() {
+ _deprecated_function( __FUNCTION__, '4.9.0' );
+
+ $link = '';
+
+ /**
+ * Filters the Press This bookmarklet link.
+ *
+ * @since 2.6.0
+ * @deprecated 4.9.0
+ *
+ * @param string $link The Press This bookmarklet link.
+ */
+ return apply_filters( 'shortcut_link', $link );
+}
+
+/**
+* Ajax handler for saving a post from Press This.
+*
+* @since 4.2.0
+* @deprecated 4.9.0
+*/
+function wp_ajax_press_this_save_post() {
+ _deprecated_function( __FUNCTION__, '4.9.0' );
+ if ( is_plugin_active( 'press-this/press-this-plugin.php' ) ) {
+ include( WP_PLUGIN_DIR . '/press-this/class-wp-press-this-plugin.php' );
+ $wp_press_this = new WP_Press_This_Plugin();
+ $wp_press_this->save_post();
+ } else {
+ wp_send_json_error( array( 'errorMessage' => __( 'The Press This plugin is required.' ) ) );
+ }
+}
+
+/**
+* Ajax handler for creating new category from Press This.
+*
+* @since 4.2.0
+* @deprecated 4.9.0
+*/
+function wp_ajax_press_this_add_category() {
+ _deprecated_function( __FUNCTION__, '4.9.0' );
+ if ( is_plugin_active( 'press-this/press-this-plugin.php' ) ) {
+ include( WP_PLUGIN_DIR . '/press-this/class-wp-press-this-plugin.php' );
+ $wp_press_this = new WP_Press_This_Plugin();
+ $wp_press_this->add_category();
+ } else {
+ wp_send_json_error( array( 'errorMessage' => __( 'The Press This plugin is required.' ) ) );
+ }
+}
</ins></span></pre></div>
<a id="trunksrcwpincludeslinktemplatephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/link-template.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/link-template.php 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-includes/link-template.php 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2898,62 +2898,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Retrieves the Press This bookmarklet link.
- *
- * @since 2.6.0
- *
- * @global bool $is_IE Whether the browser matches an Internet Explorer user agent.
- */
-function get_shortcut_link() {
- global $is_IE;
-
- include_once( ABSPATH . 'wp-admin/includes/class-wp-press-this.php' );
-
- $link = '';
-
- if ( $is_IE ) {
- /*
- * Return the old/shorter bookmarklet code for MSIE 8 and lower,
- * since they only support a max length of ~2000 characters for
- * bookmark[let] URLs, which is way to small for our smarter one.
- * Do update the version number so users do not get the "upgrade your
- * bookmarklet" notice when using PT in those browsers.
- */
- $ua = $_SERVER['HTTP_USER_AGENT'];
-
- if ( ! empty( $ua ) && preg_match( '/\bMSIE (\d)/', $ua, $matches ) && (int) $matches[1] <= 8 ) {
- $url = wp_json_encode( admin_url( 'press-this.php' ) );
-
- $link = 'javascript:var d=document,w=window,e=w.getSelection,k=d.getSelection,x=d.selection,' .
- 's=(e?e():(k)?k():(x?x.createRange().text:0)),f=' . $url . ',l=d.location,e=encodeURIComponent,' .
- 'u=f+"?u="+e(l.href)+"&t="+e(d.title)+"&s="+e(s)+"&v=' . WP_Press_This::VERSION . '";' .
- 'a=function(){if(!w.open(u,"t","toolbar=0,resizable=1,scrollbars=1,status=1,width=600,height=700"))l.href=u;};' .
- 'if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else a();void(0)';
- }
- }
-
- if ( empty( $link ) ) {
- $src = @file_get_contents( ABSPATH . 'wp-admin/js/bookmarklet.min.js' );
-
- if ( $src ) {
- $url = wp_json_encode( admin_url( 'press-this.php' ) . '?v=' . WP_Press_This::VERSION );
- $link = 'javascript:' . str_replace( 'window.pt_url', $url, $src );
- }
- }
-
- $link = str_replace( array( "\r", "\n", "\t" ), '', $link );
-
- /**
- * Filters the Press This bookmarklet link.
- *
- * @since 2.6.0
- *
- * @param string $link The Press This bookmarklet link.
- */
- return apply_filters( 'shortcut_link', $link );
-}
-
-/**
</del><span class="cx" style="display: block; padding: 0 10px"> * Retrieves the URL for the current site where the front end is accessible.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * Returns the 'home' option with the appropriate protocol. The protocol will be 'https'
</span></span></pre></div>
<a id="trunksrcwpincludesscriptloaderphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/script-loader.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/script-loader.php 2017-09-24 11:27:17 UTC (rev 41583)
+++ trunk/src/wp-includes/script-loader.php 2017-09-24 14:21:42 UTC (rev 41584)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -673,17 +673,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'permalinkSaved' => __( 'Permalink saved' ),
</span><span class="cx" style="display: block; padding: 0 10px"> ) );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $scripts->add( 'press-this', "/wp-admin/js/press-this$suffix.js", array( 'jquery', 'tags-box', 'wp-sanitize' ), false, 1 );
- did_action( 'init' ) && $scripts->localize( 'press-this', 'pressThisL10n', array(
- 'newPost' => __( 'Title' ),
- 'serverError' => __( 'Connection lost or the server is busy. Please try again later.' ),
- 'saveAlert' => __( 'The changes you made will be lost if you navigate away from this page.' ),
- /* translators: %d: nth embed found in a post */
- 'suggestedEmbedAlt' => __( 'Suggested embed #%d' ),
- /* translators: %d: nth image found in a post */
- 'suggestedImgAlt' => __( 'Suggested image #%d' ),
- ) );
-
</del><span class="cx" style="display: block; padding: 0 10px"> $scripts->add( 'editor-expand', "/wp-admin/js/editor-expand$suffix.js", array( 'jquery', 'underscore' ), false, 1 );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $scripts->add( 'link', "/wp-admin/js/link$suffix.js", array( 'wp-lists', 'postbox' ), false, 1 );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -963,7 +952,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $styles->add( 'customize-controls', "/wp-admin/css/customize-controls$suffix.css", array( 'wp-admin', 'colors', 'ie', 'imgareaselect' ) );
</span><span class="cx" style="display: block; padding: 0 10px"> $styles->add( 'customize-widgets', "/wp-admin/css/customize-widgets$suffix.css", array( 'wp-admin', 'colors' ) );
</span><span class="cx" style="display: block; padding: 0 10px"> $styles->add( 'customize-nav-menus', "/wp-admin/css/customize-nav-menus$suffix.css", array( 'wp-admin', 'colors' ) );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $styles->add( 'press-this', "/wp-admin/css/press-this$suffix.css", array( 'buttons' ) );
</del><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $styles->add( 'ie', "/wp-admin/css/ie$suffix.css" );
</span><span class="cx" style="display: block; padding: 0 10px"> $styles->add_data( 'ie', 'conditional', 'lte IE 7' );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1002,7 +990,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> // wp-admin
</span><span class="cx" style="display: block; padding: 0 10px"> 'common', 'forms', 'admin-menu', 'dashboard', 'list-tables', 'edit', 'revisions', 'media', 'themes', 'about', 'nav-menus',
</span><span class="cx" style="display: block; padding: 0 10px"> 'widgets', 'site-icon', 'l10n', 'install', 'wp-color-picker', 'customize-controls', 'customize-widgets', 'customize-nav-menus', 'customize-preview',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'ie', 'login', 'press-this',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'ie', 'login',
</ins><span class="cx" style="display: block; padding: 0 10px"> // wp-includes
</span><span class="cx" style="display: block; padding: 0 10px"> 'buttons', 'admin-bar', 'wp-auth-check', 'editor-buttons', 'media-views', 'wp-pointer',
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp-jquery-ui-dialog',
</span></span></pre>
</div>
</div>
</body>
</html>