-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c28dc47
commit 3809073
Showing
5 changed files
with
230 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
218 changes: 218 additions & 0 deletions
218
hopper/grinder/beans/espresso-widget-twitter-timeline.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters