-
Notifications
You must be signed in to change notification settings - Fork 798
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Shortcodes: enable inline PDFs #14960
Conversation
Thank you for the great PR description! When this PR is ready for review, please apply the Scheduled Jetpack release: April 7, 2020. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When testing this, what was the steps you followed to get a plain link in the editor? When I first pasted the link into the editor, the embed failed and I got this:
I then had to convert to link, and then remove the link.
That makes me wonder if this shouldn't be better handled in a new block. In fact, the Gutenberg team seems to be considering adding its own PDF block:
WordPress/gutenberg#19077
Could you fix all PHPCS warnings for that file? Our pre-commit hook would not let you commit this otherwise:
yarn php:lint modules/shortcodes/inline-pdfs.php
yarn run v1.21.1
$ composer php:lint modules/shortcodes/inline-pdfs.php
> vendor/bin/phpcs -p -s 'modules/shortcodes/inline-pdfs.php'
E 1 / 1 (100%)
FILE: ...ev/wp-content/plugins/jetpack/modules/shortcodes/inline-pdfs.php
----------------------------------------------------------------------
FOUND 4 ERRORS AFFECTING 3 LINES
----------------------------------------------------------------------
1 | ERROR | There must be no blank lines before the file comment
| | (Squiz.Commenting.FileComment.SpacingAfterOpen)
6 | ERROR | There must be exactly one blank line after the file
| | comment
| | (Squiz.Commenting.FileComment.SpacingAfterComment)
6 | ERROR | Missing @package tag in file comment
| | (Squiz.Commenting.FileComment.MissingPackageTag)
9 | ERROR | Missing doc comment for function
| | inline_pdf_embed_handler()
| | (Squiz.Commenting.FunctionComment.Missing)
----------------------------------------------------------------------
Since this is a copy of a WordPress.com feature, I think it would be useful to synchronize the 2 features between the 2 codebases. You can see r191075-wpcom for an example of the file we update to keep those things in sync.
This may be an opportunity to have a wider release of the feature on WordPress.com? Do you know if there is a specific reason why the feature is still restricted to a12s there?
Edit: I found the related thread at p7DVsv-8fu-p2. I update the PR description accordingly.
Here is a quick diff to address some of the feedback I left below:
diff --git a/modules/shortcodes/inline-pdfs.php b/modules/shortcodes/inline-pdfs.php
index 41d76396d..b780082b6 100644
--- a/modules/shortcodes/inline-pdfs.php
+++ b/modules/shortcodes/inline-pdfs.php
@@ -1,16 +1,38 @@
<?php
-
/**
* Inline PDFs
- * Takes one-line embeds of a PDF URL (*.pdf), and attempts to embed it directly in the post instead of leaving it as a link.
+ *
+ * Takes one-line embeds of a PDF URL (*.pdf),
+ * and attempts to embed it directly in the post instead of leaving it as a link.
+ *
+ * @package Jetpack
+ */
+
+wp_embed_register_handler( 'inline-pdfs', '#https?://[^<]*\.pdf$#i', 'jetpack_inline_pdf_embed_handler' );
+
+/**
+ * Callback to modify output of inline PDF URLs.
+ *
+ * @param array $matches Regex partial matches against the URL passed.
+ * @param array $attr Attributes received in embed response.
+ * @param array $url Requested URL to be embedded.
*/
-wp_embed_register_handler( 'inline-pdfs', '#https?://[^<]*\.pdf$#i', 'inline_pdf_embed_handler' );
+function jetpack_inline_pdf_embed_handler( $matches, $attr, $url ) {
+ /** This action is documented in modules/widgets/social-media-icons.php */
+ do_action( 'jetpack_bump_stats_extras', 'embeds', 'pdf' );
-function inline_pdf_embed_handler( $matches, $attr, $url ) {
- return sprintf(
- '<object data="%1$s" type="application/pdf" width="100%%" height="800">
- <p><a href="%1$s">%1$s</a></p>
- </object>',
- esc_attr( $url )
- );
+ if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
+ return sprintf(
+ '<p><a href="%1$s">%2$s</a></p>',
+ esc_url( $url ),
+ esc_html__( 'PDF Document', 'jetpack' )
+ );
+ } else {
+ return sprintf(
+ '<object data="%1$s" type="application/pdf" width="100%%" height="800">
+ <p><a href="%1$s">%1$s</a></p>
+ </object>',
+ esc_attr( $url )
+ );
+ }
}
Thank you, @jeherve! That's a massive boost to my contribution. I'll make the suggested changes, keep testing, and ping back for another review.
I'd like to suggest we push this now, separately — as it'll still serve a purpose for many people. Just a plain URL embed, easy. |
This seems pretty major change to how people's content might change... Should you have this as a setting and default off to old site, or not do this for posts before feature release date? |
@simison Thank you for the important note on how front-end content appearance might change when this ships and sites are updated. I considered the behavior change and opted to proceed with the improvement for several reasons.
|
Hi @jeherve All feedback address except for the AMP support. Choosing to not add that for now. ✅ Unit test added, passes |
This file should be synced with WordPress.com. How do we accomplish that? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This works well in my tests. Merging.
This file should be synced with WordPress.com. How do we accomplish that?
I'll take care of this in D41074-code.
r205041-wpcom |
* Initial changelog entry * Changelog: add #14904 * Changelog: add #14910 * Changelog: add #14913 * Changelog: add #14916 * Changelog: add #14922 * Changelog: add #14924 * Changelog: add #14925 * Changelog: add #14928 * Changelog: add #14840 * Changelog: add #14841 * Changelog: add #14842 * Changelog: add #14826 * Changelog: add #14835 * Changelog: add #14859 * Changelog: add #14884 * Changelog: add #14888 * Changelog: add #14817 * Changelog: add #14814 * Changelog: add #14819 * Changelog;: add #14797 * Changelog: add #14798 * Changelog: add #14802 * Changelog: add #13676 * Changelog: add #13744 * Changelog: add #13777 * Changelog: add #14446 * Changelog: add #14739 * Changelog: add #14770 * Changelog: add #14784 * Changelog: add #14897 * Changelog: add #14898 * Changelog: add #14968 * Changelog: add #14985 * Changelog: add #15044 * Changelog: add #15052 * Update to remove Podcast since it remains in Beta * Changelog: add #14803 * Changelog: add #15028 * Changelog: add #15065 * Changelog:add #14886 * Changelog: add #15118 * Changelog: add #14990 * Changelog: add #14528 * Changelog: add #15120 * Changelog: add #15126 * Changelog: add #15049 * Chanegelog: add #14852 * Changelog: add #15090 * Changelog: add #15138 * Changelog: add #15124 * Changelog:add #15055 * Changelog: add #15017 * Changelog: add #15109 * Changelog: add #15145 * Changelog:add #15096 * Changelog:add #15153 * Changelog: add #15133 * Changelog: add #14960 * Changelog: add #15127 * Changelog: add #15056 * Copy current changelog to changelog archive. * Clarify changelog description
Fixes #14959
Changes proposed in this Pull Request:
Adds new file to enable inline PDF embed handling.
The block editor view:
Before, frontend:
After, frontend:
Is this a new feature or does it add/remove features to an existing part of Jetpack?
Testing instructions:
If not supported in a given environment, the embed object should fall back to a plain link.
Proposed changelog entry for your changes:
Apologies if I missed a lot of steps any important code flags and formatting... Jetpack development has increased in complexity 10x since I last contributed a patch.