Custom Facebook Feed - Version 2.12.3

Version Description

  • Tweak: Added a text link in the settings page footer to our new free YouTube plugin
  • Tweak: When reconnecting an account on the settings page, if there's an issue with the existing access token then it'll be automatically replaced.
  • Tweak: Added 'rel="noopener"' to all external links and added 'rel="noreferrer"' to all non-Facebook links. Thanks to Dev VIP for the suggestion.
  • Fix: Fixed an issue with some call-to-action link URLs when a link protocol wasn't included
  • Fix: Fixed a JavaScript conflict with the Forminator plugin
  • Fix: Fixed duplicate post message displaying due to ellipsis HTML character
  • Fix: If a shared link post had no post text then the link title was used causing it to be displayed twice in the post
Download this release

Release Info

Developer smashballoon
Plugin Icon 128x128 Custom Facebook Feed
Version 2.12.3
Comparing to
See all releases

Code changes from version 2.12.2 to 2.12.3

README.txt CHANGED
@@ -4,7 +4,7 @@ Tags: Facebook, Facebook feed, Facebook posts, Facebook wall, Facebook page
4
Requires at least: 3.0
5
Requires PHP: 5.2
6
Tested up to: 5.3
7
- Stable tag: 2.12.2
8
License: GPLv2 or later
9
License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
@@ -255,6 +255,16 @@ The most common reason for this is that an add-on or extension you have installe
255
9. It's super easy to display your Facebook feed in any page or post
256
257
== Changelog ==
258
= 2.12.2 =
259
* Fix: Fixed a JavaScript error in the admin caused by the previous update. Apologies for any inconvenience.
260
4
Requires at least: 3.0
5
Requires PHP: 5.2
6
Tested up to: 5.3
7
+ Stable tag: 2.12.3
8
License: GPLv2 or later
9
License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
255
9. It's super easy to display your Facebook feed in any page or post
256
257
== Changelog ==
258
+
259
+ = 2.12.3 =
260
+ * Tweak: Added a text link in the settings page footer to our new free [YouTube plugin](https://wordpress.org/plugins/feeds-for-youtube/)
261
+ * Tweak: When reconnecting an account on the settings page, if there's an issue with the existing access token then it'll be automatically replaced.
262
+ * Tweak: Added 'rel="noopener"' to all external links and added 'rel="noreferrer"' to all non-Facebook links. Thanks to Dev VIP for the suggestion.
263
+ * Fix: Fixed an issue with some call-to-action link URLs when a link protocol wasn't included
264
+ * Fix: Fixed a JavaScript conflict with the [Forminator](https://wordpress.org/plugins/forminator/) plugin
265
+ * Fix: Fixed duplicate post message displaying due to ellipsis HTML character
266
+ * Fix: If a shared link post had no post text then the link title was used causing it to be displayed twice in the post
267
+
268
= 2.12.2 =
269
* Fix: Fixed a JavaScript error in the admin caused by the previous update. Apologies for any inconvenience.
270
custom-facebook-feed-admin.php CHANGED
@@ -383,10 +383,27 @@ function cff_settings_page() {
383
</td>
384
</tr>
385
386
<tr valign="top">
387
<th scope="row" style="padding-bottom: 10px;"><?php _e('Facebook Access Token', 'custom-facebook-feed'); ?><br /><i style="font-weight: normal; font-size: 12px; color: red;"><?php _e('Required', 'custom-facebook-feed'); ?></i></th>
388
<td>
389
- <textarea name="cff_access_token" id="cff_access_token" style="min-width: 60%;" data-accesstoken="<?php esc_attr_e( $access_token_val ); ?>"><?php esc_attr_e( $access_token_val ); ?></textarea><br /><a class="cff-tooltip-link" style="margin-left: 3px;" href="JavaScript:void(0);"><?php _e("What is this?", 'custom-facebook-feed'); ?></a>
390
<p class="cff-tooltip cff-more-info"><?php _e("In order to connect to Facebook and get a feed, you need to use an Access Token. To get one, simply use the blue button above to log into your Facebook account. You will then receive a token that will be used to connect to Facebook's API. If you already have an Access Token then you can enter it here.", 'custom-facebook-feed'); ?></p>
391
392
<div class="cff-notice cff-profile-error cff-access-token">
@@ -741,7 +758,7 @@ function cff_settings_page() {
741
742
<a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_source=plugin-free&utm_campaign=cff" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png?2019' , __FILE__ ) ?>" /></a>
743
744
- <p class="cff_plugins_promo dashicons-before dashicons-admin-plugins"> <?php _e('Check out our other free plugins: <a href="https://wordpress.org/plugins/instagram-feed/" target="_blank">Instagram</a> and <a href="https://wordpress.org/plugins/custom-twitter-feeds/" target="_blank">Twitter</a>.', 'instagram-feed' ); ?></p>
745
746
<div class="cff-share-plugin">
747
<h3><?php _e('Like the plugin? Help spread the word!', 'custom-facebook-feed'); ?></h3>
@@ -4070,8 +4087,7 @@ add_action( 'admin_enqueue_scripts', 'cff_admin_style' );
4070
//Enqueue admin scripts
4071
function cff_admin_scripts() {
4072
//Declare color-picker as a dependency
4073
- wp_enqueue_script( 'cff_admin_script', plugin_dir_url( __FILE__ ) . 'js/cff-admin-scripts.js', array( 'wp-color-picker' ), CFFVER );
4074
-
4075
if( !wp_script_is('jquery-ui-draggable') ) {
4076
wp_enqueue_script(
4077
array(
@@ -4083,7 +4099,8 @@ function cff_admin_scripts() {
4083
}
4084
wp_enqueue_script(
4085
array(
4086
- 'hoverIntent'
4087
)
4088
);
4089
}
383
</td>
384
</tr>
385
386
+ <?php
387
+ //When connecting an account check the current access token to see if it has an error. If so then add a class to the field and replace it automatically in JS when getting a new one.
388
+ $cff_replace_token = false;
389
+ if( isset($_GET['access_token']) && isset($_GET['final_response']) ){
390
+
391
+ if( $_GET['final_response'] == 'true' ){
392
+ $api_page_id = trim($page_id_val);
393
+ $url = 'https://graph.facebook.com/'.$api_page_id.'?limit=1&fields=id&access_token='.$access_token_val;
394
+ $accounts_data = cff_fetchUrl($url);
395
+ //If there's an error (and it's not the PPCA one) then mark the token as needing to be replaced
396
+ if (strpos($accounts_data, 'error') !== false && strpos($accounts_data, 'Public') == false) $cff_replace_token = true;
397
+ }
398
+
399
+ }
400
+
401
+ ?>
402
+
403
<tr valign="top">
404
<th scope="row" style="padding-bottom: 10px;"><?php _e('Facebook Access Token', 'custom-facebook-feed'); ?><br /><i style="font-weight: normal; font-size: 12px; color: red;"><?php _e('Required', 'custom-facebook-feed'); ?></i></th>
405
<td>
406
+ <textarea name="cff_access_token" id="cff_access_token" <?php if($cff_replace_token) echo 'class="cff-replace-token"' ?> style="min-width: 60%;" data-accesstoken="<?php esc_attr_e( $access_token_val ); ?>"><?php esc_attr_e( $access_token_val ); ?></textarea><br /><a class="cff-tooltip-link" style="margin-left: 3px;" href="JavaScript:void(0);"><?php _e("What is this?", 'custom-facebook-feed'); ?></a>
407
<p class="cff-tooltip cff-more-info"><?php _e("In order to connect to Facebook and get a feed, you need to use an Access Token. To get one, simply use the blue button above to log into your Facebook account. You will then receive a token that will be used to connect to Facebook's API. If you already have an Access Token then you can enter it here.", 'custom-facebook-feed'); ?></p>
408
409
<div class="cff-notice cff-profile-error cff-access-token">
758
759
<a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_source=plugin-free&utm_campaign=cff" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png?2019' , __FILE__ ) ?>" /></a>
760
761
+ <p class="cff_plugins_promo dashicons-before dashicons-admin-plugins"> <?php _e('Check out our other free plugins for <a href="https://wordpress.org/plugins/instagram-feed/" target="_blank">Instagram</a>, <a href="https://wordpress.org/plugins/custom-twitter-feeds/" target="_blank">Twitter</a>, and <a href="https://wordpress.org/plugins/feeds-for-youtube/" target="_blank">YouTube</a>.', 'instagram-feed' ); ?></p>
762
763
<div class="cff-share-plugin">
764
<h3><?php _e('Like the plugin? Help spread the word!', 'custom-facebook-feed'); ?></h3>
4087
//Enqueue admin scripts
4088
function cff_admin_scripts() {
4089
//Declare color-picker as a dependency
4090
+ wp_enqueue_script( 'cff_admin_script', plugin_dir_url( __FILE__ ) . 'js/cff-admin-scripts.js', CFFVER );
4091
if( !wp_script_is('jquery-ui-draggable') ) {
4092
wp_enqueue_script(
4093
array(
4099
}
4100
wp_enqueue_script(
4101
array(
4102
+ 'hoverIntent',
4103
+ 'wp-color-picker'
4104
)
4105
);
4106
}
custom-facebook-feed.php CHANGED
@@ -3,7 +3,7 @@
3
Plugin Name: Smash Balloon Custom Facebook Feed
4
Plugin URI: https://smashballoon.com/custom-facebook-feed
5
Description: Add completely customizable Facebook feeds to your WordPress site
6
- Version: 2.12.2
7
Author: Smash Balloon
8
Author URI: http://smashballoon.com/
9
License: GPLv2 or later
@@ -24,7 +24,7 @@ along with this program; if not, write to the Free Software
24
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25
*/
26
27
- define('CFFVER', '2.12.2');
28
29
// Db version.
30
if ( ! defined( 'CFF_DBVERSION' ) ) {
@@ -928,7 +928,8 @@ function display_cff($atts) {
928
$cff_nofollow = $atts['nofollow'];
929
( $cff_nofollow == 'on' || $cff_nofollow == 'true' || $cff_nofollow == true ) ? $cff_nofollow = true : $cff_nofollow = false;
930
if( $atts[ 'nofollow' ] == 'false' ) $cff_nofollow = false;
931
- ( $cff_nofollow ) ? $cff_nofollow = ' rel="nofollow"' : $cff_nofollow = '';
932
933
//If the number of posts is set to zero then don't show any and set limit to one
934
if ( ($atts['num'] == '0' || $atts['num'] == 0) && $atts['num'] !== ''){
@@ -1611,10 +1612,11 @@ function display_cff($atts) {
1611
}
1612
1613
//Replace ellipsis char in description text
1614
$description_text = str_replace( '…','...', $description_text);
1615
1616
//If the description is the same as the post text then don't show it
1617
- if( $description_text == $cff_story_raw || $description_text == $cff_message_raw || $description_text == $cff_name_raw ){
1618
$cff_description = '';
1619
} else {
1620
//Add links and create HTML
@@ -1646,8 +1648,8 @@ function display_cff($atts) {
1646
}
1647
1648
1649
- //Use the name
1650
- if (!empty($news->name) && empty($news->message)) {
1651
$cff_name_raw = $news->name;
1652
$post_text = htmlspecialchars($cff_name_raw);
1653
$cff_post_text_type = 'name';
@@ -1755,8 +1757,13 @@ function display_cff($atts) {
1755
//Add a call to action button if included
1756
if( isset($news->call_to_action->value->link) ){
1757
$cff_cta_link = $news->call_to_action->value->link;
1758
- //If it's not an absolute link then it means it's a relative Facebook one so prefix it with facebook.com
1759
- if (strpos($cff_cta_link, 'http') === false) $cff_cta_link = 'https://facebook.com' . $cff_cta_link;
1760
1761
$cff_button_type = $news->call_to_action->type;
1762
@@ -1781,7 +1788,7 @@ function display_cff($atts) {
1781
}
1782
1783
isset($news->call_to_action->value->app_link) ? $cff_app_link = $news->call_to_action->value->app_link : $cff_app_link = '';
1784
- $cff_post_text .= '<p class="cff-cta-link" '.$cff_title_styles.'><a href="'.$cff_cta_link.'" target="_blank" data-app-link="'.$cff_app_link.'" style="color: #'.$cff_posttext_link_color.';" >'.$cff_cta_button_text.'</a></p>';
1785
}
1786
1787
//LINK
@@ -1802,7 +1809,7 @@ function display_cff($atts) {
1802
$cff_shared_link .= '<div class="cff-text-link ';
1803
if (!$cff_link_image) $cff_shared_link .= 'cff-no-image';
1804
//The link title:
1805
- if( isset($news->name) ) $cff_shared_link .= '"><'.$cff_link_title_format.' class="cff-link-title" '.$cff_link_title_styles.'><a href="'.$link.'" '.$target.$cff_nofollow.' style="color:#' . $cff_link_title_color . ';">'. $news->name . '</a></'.$cff_link_title_format.'>';
1806
//The link source:
1807
if( !empty($news->link) ){
1808
$cff_link_caption = htmlentities($news->link, ENT_QUOTES, 'UTF-8');
@@ -2700,7 +2707,7 @@ function cff_autolink_do($text, $link_color, $sub, $limit, $tagfill, $auto_title
2700
2701
2702
if( substr( $link_url_enc, 0, 4 ) !== "http" ) $link_url_enc = 'http://' . $link_url_enc;
2703
- $buffer .= "<a href=\"{$link_url_enc}\">{$display_url_enc}</a>";
2704
2705
2706
}else{
3
Plugin Name: Smash Balloon Custom Facebook Feed
4
Plugin URI: https://smashballoon.com/custom-facebook-feed
5
Description: Add completely customizable Facebook feeds to your WordPress site
6
+ Version: 2.12.3
7
Author: Smash Balloon
8
Author URI: http://smashballoon.com/
9
License: GPLv2 or later
24
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25
*/
26
27
+ define('CFFVER', '2.12.3');
28
29
// Db version.
30
if ( ! defined( 'CFF_DBVERSION' ) ) {
928
$cff_nofollow = $atts['nofollow'];
929
( $cff_nofollow == 'on' || $cff_nofollow == 'true' || $cff_nofollow == true ) ? $cff_nofollow = true : $cff_nofollow = false;
930
if( $atts[ 'nofollow' ] == 'false' ) $cff_nofollow = false;
931
+ ( $cff_nofollow ) ? $cff_nofollow = ' rel="nofollow noopener"' : $cff_nofollow = '';
932
+ $cff_nofollow_referrer = ' rel="nofollow noopener noreferrer"';
933
934
//If the number of posts is set to zero then don't show any and set limit to one
935
if ( ($atts['num'] == '0' || $atts['num'] == 0) && $atts['num'] !== ''){
1612
}
1613
1614
//Replace ellipsis char in description text
1615
+ $raw_desc = $description_text;
1616
$description_text = str_replace( '…','...', $description_text);
1617
1618
//If the description is the same as the post text then don't show it
1619
+ if( $raw_desc == $cff_story_raw || $raw_desc == $cff_message_raw || $raw_desc == $cff_name_raw ){
1620
$cff_description = '';
1621
} else {
1622
//Add links and create HTML
1648
}
1649
1650
1651
+ //Use the name if there's no other text, unless it's a shared link post as then it's already used as the shared link box title
1652
+ if ( !empty($news->name) && empty($news->message) && $cff_post_type != 'link' ) {
1653
$cff_name_raw = $news->name;
1654
$post_text = htmlspecialchars($cff_name_raw);
1655
$cff_post_text_type = 'name';
1757
//Add a call to action button if included
1758
if( isset($news->call_to_action->value->link) ){
1759
$cff_cta_link = $news->call_to_action->value->link;
1760
+
1761
+ if( $cff_cta_link[0] == '/' ){
1762
+ $cff_cta_link = 'https://facebook.com' . $cff_cta_link;
1763
+ } else {
1764
+ //If it doesn't start with 'http' then add it otherwise the link doesn't work. Don't do this if it's a tel num.
1765
+ if (strpos($cff_cta_link, 'http') === false && strpos($cff_cta_link, 'tel:') === false) $cff_cta_link = 'http://' . $cff_cta_link;
1766
+ }
1767
1768
$cff_button_type = $news->call_to_action->type;
1769
1788
}
1789
1790
isset($news->call_to_action->value->app_link) ? $cff_app_link = $news->call_to_action->value->app_link : $cff_app_link = '';
1791
+ $cff_post_text .= '<p class="cff-cta-link" '.$cff_title_styles.'><a href="'.$cff_cta_link.'" target="_blank" data-app-link="'.$cff_app_link.'" style="color: #'.$cff_posttext_link_color.';" '.$cff_nofollow_referrer.' >'.$cff_cta_button_text.'</a></p>';
1792
}
1793
1794
//LINK
1809
$cff_shared_link .= '<div class="cff-text-link ';
1810
if (!$cff_link_image) $cff_shared_link .= 'cff-no-image';
1811
//The link title:
1812
+ if( isset($news->name) ) $cff_shared_link .= '"><'.$cff_link_title_format.' class="cff-link-title" '.$cff_link_title_styles.'><a href="'.$link.'" '.$target.$cff_nofollow_referrer.' style="color:#' . $cff_link_title_color . ';">'. $news->name . '</a></'.$cff_link_title_format.'>';
1813
//The link source:
1814
if( !empty($news->link) ){
1815
$cff_link_caption = htmlentities($news->link, ENT_QUOTES, 'UTF-8');
2707
2708
2709
if( substr( $link_url_enc, 0, 4 ) !== "http" ) $link_url_enc = 'http://' . $link_url_enc;
2710
+ $buffer .= "<a href=\"{$link_url_enc}\" rel='nofollow noopener noreferrer'>{$display_url_enc}</a>";
2711
2712
2713
}else{
js/cff-admin-scripts.js CHANGED
@@ -266,7 +266,7 @@ jQuery(document).ready(function($) {
266
}
267
268
//Add token to setting
269
- if( $('#cff_access_token').val().trim() == '' ){
270
//If multifeed then add ID to front so it's assigned to that ID in the feed
271
if( $('#cff_page_id').hasClass('cff_multifeed_enabled') ) selectedPageToken = selectedPageId + ':' + selectedPageToken;
272
266
}
267
268
//Add token to setting
269
+ if( $('#cff_access_token').val().trim() == '' || $('#cff_access_token').hasClass('cff-replace-token') ){
270
//If multifeed then add ID to front so it's assigned to that ID in the feed
271
if( $('#cff_page_id').hasClass('cff_multifeed_enabled') ) selectedPageToken = selectedPageId + ':' + selectedPageToken;
272
js/cff-scripts.js CHANGED
@@ -240,7 +240,7 @@ if(!cff_js_exists){
240
//Add target attr to post text links via JS so aren't included in char count
241
$self.find('.cff-text a').add( $self.find('.cff-post-desc a') ).attr({
242
'target' : '_blank',
243
- 'rel' : 'nofollow'
244
});
245
246
//Share tooltip function
240
//Add target attr to post text links via JS so aren't included in char count
241
$self.find('.cff-text a').add( $self.find('.cff-post-desc a') ).attr({
242
'target' : '_blank',
243
+ 'rel' : 'nofollow noopener noreferrer'
244
});
245
246
//Share tooltip function
js/cff-scripts.min.js CHANGED
@@ -58,6 +58,6 @@ cffLinkHashtags();$post_text.find('a').attr('target','_blank')});$post_text.find
58
function cffLinkHashtags(){var cffTextStr=$self.find('.cff-text').html(),cffDescStr=$self.find('.cff-post-desc').html(),regex=/(^|\s)#(\w*[\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]+\w*)/gi,linkcolor=$self.find('.cff-text').attr('data-color');function replacer(hash){var replacementString=jQuery.trim(hash);if(/^#[0-9A-F]{6}#x2F;i.test(replacementString)){return replacementString}else{return' <a href="https://www.facebook.com/hashtag/'+replacementString.substring(1)+'" target="_blank" rel="nofollow" style="color:#'+linkcolor+'">'+replacementString+'</a>'}}
59
if(typeof cfflinkhashtags=='undefined')cfflinkhashtags='true';if(cfflinkhashtags=='true'){var $cffText=$self.find('.cff-text');if($cffText.length>0){cffTextStr=cffTextStr.replace(/<br>/g,"<br> ");$cffText.html(cffTextStr.replace(regex,replacer))}}
60
if($self.find('.cff-post-desc').length>0)$self.find('.cff-post-desc').html(cffDescStr.replace(regex,replacer))}
61
- cffLinkHashtags();$self.find('.cff-text a').add($self.find('.cff-post-desc a')).attr({'target':'_blank','rel':'nofollow'});$self.find('.cff-share-link').unbind().bind('click',function(e){e.preventDefault();var $cffShareTooltip=$self.find('.cff-share-tooltip')
62
if($cffShareTooltip.is(':visible')){$cffShareTooltip.hide().find('a').removeClass('cff-show')}else{$cffShareTooltip.show();var time=0;$cffShareTooltip.find('a').each(function(){var $cffShareIcon=jQuery(this);setTimeout(function(){$cffShareIcon.addClass('cff-show')},time);time+=20})}})});jQuery('.cff-wrapper').each(function(){var $cff=jQuery(this).find('#cff');if($cff.hasClass('cff-masonry-js')){cffAddMasonry($cff);setTimeout(function(){cffAddMasonry($cff)},500);jQuery(window).resize(function(){setTimeout(function(){cffAddMasonry($cff)},500)});if($cff.find('.cff-credit').length)$cff.css('padding-bottom',30)}})}
63
cff_init()}
58
function cffLinkHashtags(){var cffTextStr=$self.find('.cff-text').html(),cffDescStr=$self.find('.cff-post-desc').html(),regex=/(^|\s)#(\w*[\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]+\w*)/gi,linkcolor=$self.find('.cff-text').attr('data-color');function replacer(hash){var replacementString=jQuery.trim(hash);if(/^#[0-9A-F]{6}#x2F;i.test(replacementString)){return replacementString}else{return' <a href="https://www.facebook.com/hashtag/'+replacementString.substring(1)+'" target="_blank" rel="nofollow" style="color:#'+linkcolor+'">'+replacementString+'</a>'}}
59
if(typeof cfflinkhashtags=='undefined')cfflinkhashtags='true';if(cfflinkhashtags=='true'){var $cffText=$self.find('.cff-text');if($cffText.length>0){cffTextStr=cffTextStr.replace(/<br>/g,"<br> ");$cffText.html(cffTextStr.replace(regex,replacer))}}
60
if($self.find('.cff-post-desc').length>0)$self.find('.cff-post-desc').html(cffDescStr.replace(regex,replacer))}
61
+ cffLinkHashtags();$self.find('.cff-text a').add($self.find('.cff-post-desc a')).attr({'target':'_blank','rel':'nofollow noopener noreferrer'});$self.find('.cff-share-link').unbind().bind('click',function(e){e.preventDefault();var $cffShareTooltip=$self.find('.cff-share-tooltip')
62
if($cffShareTooltip.is(':visible')){$cffShareTooltip.hide().find('a').removeClass('cff-show')}else{$cffShareTooltip.show();var time=0;$cffShareTooltip.find('a').each(function(){var $cffShareIcon=jQuery(this);setTimeout(function(){$cffShareIcon.addClass('cff-show')},time);time+=20})}})});jQuery('.cff-wrapper').each(function(){var $cff=jQuery(this).find('#cff');if($cff.hasClass('cff-masonry-js')){cffAddMasonry($cff);setTimeout(function(){cffAddMasonry($cff)},500);jQuery(window).resize(function(){setTimeout(function(){cffAddMasonry($cff)},500)});if($cff.find('.cff-credit').length)$cff.css('padding-bottom',30)}})}
63
cff_init()}