Skip to content

Commit

Permalink
Added twitter timeline widget
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredharbour committed Jul 23, 2013
1 parent c28dc47 commit 3809073
Show file tree
Hide file tree
Showing 5 changed files with 230 additions and 9 deletions.
5 changes: 5 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
Espresso Change Log

This will hopefully allow for some basic transparency regarding what gets changed in espresso. Anything we add to the framework will be listed here.

1.0.9
-------------------------------------
- Added twitter timeline widget clone from JetPack.

1.0.6
-------------------------------------
- fixed an issue with the amazon plugin AND portfolio slideshow pro that caused the body classes to disappear
Expand Down
2 changes: 1 addition & 1 deletion functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*
**/
define('PARENT_THEME_NAME', 'Espresso');
define('PARENT_THEME_VERSION', '1.0.8');
define('PARENT_THEME_VERSION', '1.0.9');
define('PARENT_THEME_RELEASE_DATE', date_i18n('F j, Y', '1297144800'));
define('ESPRESSO_NO_CLASS', 'enoclass' );
/**
Expand Down
218 changes: 218 additions & 0 deletions hopper/grinder/beans/espresso-widget-twitter-timeline.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
<?php
/**
* Bean Name: Espresso Twitter Timeline Widget
* Bean Description: Display the latest updates from a Twitter user inside your theme's widgets.
* Sort Order: 1
*/
/*
* Based on Evolution Twitter Timeline (http://wordpress.org/extend/plugins/evolution-twitter-timeline/)
* See: https://twitter.com/settings/widgets and https://dev.twitter.com/docs/embedded-timelines for details on Twitter Timelines
*/

/**
* Register the widget for use in Appearance -> Widgets
*/
add_action( 'widgets_init', 'espresso_twitter_timeline_widget_init' );

function espresso_twitter_timeline_widget_init() {
register_widget( 'espresso_Twitter_Timeline_Widget' );
}

class espresso_Twitter_Timeline_Widget extends WP_Widget {
/**
* Register widget with WordPress.
*/
public function __construct() {
parent::__construct(
'twitter_timeline',
apply_filters( 'espresso_widget_name', esc_html__( apply_filters('espresso-widget-title', 'Espresso Twitter Timeline'), 'espresso' ) ),
array(
'classname' => 'widget_twitter_timeline',
'description' => __( 'Display an official Twitter Embedded Timeline widget.', 'espresso' )
)
);

if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) ) {
wp_enqueue_script( 'twitter-widgets', '//platform.twitter.com/widgets.js', '', '', true );
}
}

/**
* Front-end display of widget.
*
* @see WP_Widget::widget()
*
* @param array $args Widget arguments.
* @param array $instance Saved values from database.
*/
public function widget( $args, $instance ) {
$instance['lang'] = substr( strtoupper( get_locale() ), 0, 2 );

echo $args['before_widget'];

if ( $instance['title'] )
echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];

$data_attribs = array( 'widget-id', 'theme', 'link-color', 'border-color', 'chrome' );
$attribs = array( 'width', 'height', 'lang' );

// Start tag output
echo '<a class="twitter-timeline"';

foreach ( $data_attribs as $att ) {
if ( !empty( $instance[$att] ) ) {
if ( is_array( $instance[$att] ) )
echo ' data-' . esc_attr( $att ) . '="' . esc_attr( join( ' ', $instance['chrome'] ) ) . '"';
else
echo ' data-' . esc_attr( $att ) . '="' . esc_attr( $instance[$att] ) . '"';
}
}

foreach ( $attribs as $att ) {
if ( !empty( $instance[$att] ) )
echo ' ' . esc_attr( $att ) . '="' . esc_attr( $instance[$att] ) . '"';
}

echo '>' . esc_html__( 'My Tweets', 'espresso' ) . '</a>';
// End tag output

echo $args['after_widget'];

do_action( 'espresso_bump_stats_extras', 'widget', 'twitter_timeline' );
}


/**
* Sanitize widget form values as they are saved.
*
* @see WP_Widget::update()
*
* @param array $new_instance Values just sent to be saved.
* @param array $old_instance Previously saved values from database.
*
* @return array Updated safe values to be saved.
*/
public function update( $new_instance, $old_instance ) {
$non_hex_regex = '/[^a-f0-9]/';
$instance = array();
$instance['title'] = sanitize_text_field( $new_instance['title'] );
$instance['width'] = (int) $new_instance['width'];
$instance['height'] = (int) $new_instance['height'];
$instance['width'] = ( 0 !== (int) $instance['width'] ) ? (int) $instance['width'] : 225;
$instance['height'] = ( 0 !== (int) $instance['height'] ) ? (int) $instance['height'] : 400;

// If they entered something that might be a full URL, try to parse it out
if ( is_string( $new_instance['widget-id'] ) ) {
if ( preg_match( '#https?://twitter\.com/settings/widgets/(\d+)#s', $new_instance['widget-id'], $matches ) ) {
$new_instance['widget-id'] = $matches[1];
}
}

$instance['widget-id'] = sanitize_text_field( $new_instance['widget-id'] );
$instance['widget-id'] = is_numeric( $instance['widget-id'] ) ? $instance['widget-id'] : '';

foreach ( array( 'link-color', 'border-color' ) as $color ) {
$clean = preg_replace( $non_hex_regex, '', sanitize_text_field( $new_instance[$color] ) );
if ( $clean )
$instance[$color] = '#' . $clean;
}

$instance['theme'] = 'light';
if ( in_array( $new_instance['theme'], array( 'light', 'dark' ) ) )
$instance['theme'] = $new_instance['theme'];

$instance['chrome'] = array();
if ( isset( $new_instance['chrome'] ) ) {
foreach ( $new_instance['chrome'] as $chrome ) {
if ( in_array( $chrome, array( 'noheader', 'nofooter', 'noborders', 'noscrollbar', 'transparent' ) ) ) {
$instance['chrome'][] = $chrome;
}
}
}

return $instance;
}


/**
* Back-end widget form.
*
* @see WP_Widget::form()
*
* @param array $instance Previously saved values from database.
*/
public function form( $instance ) {
$defaults = array(
'title' => esc_html__( 'Follow me on Twitter', 'espresso' ),
'width' => '',
'height' => '400',
'widget-id' => '',
'link-color' => '#f96e5b',
'border-color' => '#e8e8e8',
'theme' => 'light',
'chrome' => array(),
);

$instance = wp_parse_args( (array) $instance, $defaults );
?>

<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php esc_html_e( 'Title:', 'espresso' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
</p>

<p>
<label for="<?php echo $this->get_field_id( 'width' ); ?>"><?php esc_html_e( 'Width (px):', 'espresso' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'width' ); ?>" name="<?php echo $this->get_field_name( 'width' ); ?>" type="text" value="<?php echo esc_attr( $instance['width'] ); ?>" />
</p>

<p>
<label for="<?php echo $this->get_field_id( 'height' ); ?>"><?php esc_html_e( 'Height (px):', 'espresso' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'height' ); ?>" name="<?php echo $this->get_field_name( 'height' ); ?>" type="text" value="<?php echo esc_attr( $instance['height'] ); ?>" />
</p>

<p><small>
<?php
echo wp_kses_post(
sprintf(
__( 'You need to <a href="%1$s" target="_blank">create a widget at Twitter.com</a>, and then enter your widget id (the long number found in the URL of your widget\'s config page) in the field below. <a href="%2$s" target="_blank">Read more</a>.', 'espresso' ),
'https://twitter.com/settings/widgets/new/user',
'http://support.wordpress.com/widgets/twitter-timeline-widget/'
)
);
?>
</small></p>
<p>
<label for="<?php echo $this->get_field_id( 'widget-id' ); ?>"><?php esc_html_e( 'Widget ID:', 'espresso' ); ?> <a href="http://support.wordpress.com/widgets/twitter-timeline-widget/#widget-id" target="_blank">( ? )</a></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'widget-id' ); ?>" name="<?php echo $this->get_field_name( 'widget-id' ); ?>" type="text" value="<?php echo esc_attr( $instance['widget-id'] ); ?>" />
</p>

<p>
<label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>"><?php esc_html_e( 'Layout Options:', 'espresso' ); ?></label><br />
<input type="checkbox"<?php checked( in_array( 'noheader', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="noheader" /> <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>"><?php esc_html_e( 'No Header', 'espresso' ); ?></label><br />
<input type="checkbox"<?php checked( in_array( 'nofooter', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-nofooter' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="nofooter" /> <label for="<?php echo $this->get_field_id( 'chrome-nofooter' ); ?>"><?php esc_html_e( 'No Footer', 'espresso' ); ?></label><br />
<input type="checkbox"<?php checked( in_array( 'noborders', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-noborders' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="noborders" /> <label for="<?php echo $this->get_field_id( 'chrome-noborders' ); ?>"><?php esc_html_e( 'No Borders', 'espresso' ); ?></label><br />
<input type="checkbox"<?php checked( in_array( 'noscrollbar', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-noscrollbar' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="noscrollbar" /> <label for="<?php echo $this->get_field_id( 'chrome-noscrollbar' ); ?>"><?php esc_html_e( 'No Scrollbar', 'espresso' ); ?></label><br />
<input type="checkbox"<?php checked( in_array( 'transparent', $instance['chrome'] ) ); ?> id="<?php echo $this->get_field_id( 'chrome-transparent' ); ?>" name="<?php echo $this->get_field_name( 'chrome' ); ?>[]" value="transparent" /> <label for="<?php echo $this->get_field_id( 'chrome-transparent' ); ?>"><?php esc_html_e( 'Transparent Background', 'espresso' ); ?></label>
</p>

<p>
<label for="<?php echo $this->get_field_id( 'link-color' ); ?>"><?php _e( 'Link Color (hex):', 'espresso' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'link-color' ); ?>" name="<?php echo $this->get_field_name( 'link-color' ); ?>" type="text" value="<?php echo esc_attr( $instance['link-color'] ); ?>" />
</p>

<p>
<label for="<?php echo $this->get_field_id( 'border-color' ); ?>"><?php _e( 'Border Color (hex):', 'espresso' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'border-color' ); ?>" name="<?php echo $this->get_field_name( 'border-color' ); ?>" type="text" value="<?php echo esc_attr( $instance['border-color'] ); ?>" />
</p>

<p>
<label for="<?php echo $this->get_field_id( 'theme' ); ?>"><?php _e( 'Timeline Theme:', 'espresso' ); ?></label>
<select name="<?php echo $this->get_field_name( 'theme' ); ?>" id="<?php echo $this->get_field_id( 'theme' ); ?>" class="widefat">
<option value="light"<?php selected( $instance['theme'], 'light' ); ?>><?php esc_html_e( 'Light', 'espresso' ); ?></option>
<option value="dark"<?php selected( $instance['theme'], 'dark' ); ?>><?php esc_html_e( 'Dark', 'espresso' ); ?></option>
</select>
</p>
<?php
}
}
12 changes: 5 additions & 7 deletions hopper/grinder/beans/espresso-widget-twitter.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,17 +85,17 @@ function widget( $args, $instance ) {
$show = absint( $instance['show'] ); // # of Updates to show
if ( $show > 200 ) // Twitter paginates at 200 max tweets. update() should not have accepted greater than 20
$show = 200;

$hidereplies = (bool) $instance['hidereplies'];
$include_retweets = (bool) $instance['includeretweets'];
$link_title = (bool) $instance['linktitle'];

if(false !== $link_title){
echo "{$before_widget}{$before_title}<a href='" . esc_url( "http://twitter.com/{$account}" ) . "'>" . esc_html($title) . "</a>{$after_title}";
} else{
echo "{$before_widget}{$before_title}". esc_html($title) . "{$after_title}";
}

if ( false === ( $tweets = get_transient( 'widget-twitter-' . $this->number ) ) ) {
$params = array(
'screen_name'=>$account, // Twitter account name
Expand All @@ -113,7 +113,7 @@ function widget( $args, $instance ) {
$params['count'] = $show;
if ( $include_retweets )
$params['include_rts'] = true;
$twitter_json_url = esc_url_raw( 'http://api.twitter.com/1/statuses/user_timeline.json?' . http_build_query( $params ), array( 'http', 'https' ) );
$twitter_json_url = esc_url_raw( 'http://api.twitter.com/1.1/statuses/user_timeline.json?' . http_build_query( $params ), array( 'http', 'https' ) );
unset( $params );
$response = wp_remote_get( $twitter_json_url, array( 'User-Agent' => 'Espresso Twitter Widget' ) );
$response_code = wp_remote_retrieve_response_code( $response );
Expand Down Expand Up @@ -227,9 +227,7 @@ function form( $instance ) {
if ( $link_title )
echo ' checked="checked"';
echo ' /> ' . esc_html__( 'Link Title to Twitter Page', 'espresso' ) . '</label></p>';




echo'<p><label for="' . $this->get_field_id( 'show' ) . '">' . esc_html__( 'Maximum number of tweets to show:', 'espresso' ) . '
<select id="' . $this->get_field_id( 'show' ) . '" name="' . $this->get_field_name( 'show' ) . '">';

Expand Down
2 changes: 1 addition & 1 deletion style.css
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Theme URI: http://themebrewers.com/
Description: Espresso is a light weight, high powered Framework for WordPress. It is recommended that you not modify the stylesheets for this theme.
Author: ThemeBrewers.com
Author URI: http://themebrewers.com
Version: 1.0.8
Version: 1.0.9
Tags: one-column, two-columns, three-columns, left-sidebar, right-sidebar,custom-background,custom-colors,custom-header,custom-menu
Expand Down

0 comments on commit 3809073

Please sign in to comment.