diff --git a/functions.php b/functions.php index cf5dbd4..8becc55 100644 --- a/functions.php +++ b/functions.php @@ -6,18 +6,36 @@ if (function_exists('add_theme_support')) { } function __comicpress_widgets_init() { + $available_widgets = array(); + if (($dh = opendir(dirname(__FILE__) . '/widgets')) !== false) { while (($file = readdir($dh)) !== false) { if (strpos($file, '.inc') !== false) { $class_name = preg_replace('#\..*$#', '', $file); require_once(dirname(__FILE__) . '/widgets/' . $file); register_widget($class_name); - $widget = new $class_name(); - if (method_exists($widget, 'init')) { $widget->init(); } + $widget = new $class_name(true); + if (method_exists($widget, 'init')) { + $widget->init(); + } + + $available_widgets[strtolower($class_name)] = $widget; } } closedir($dh); } + + foreach (wp_get_sidebars_widgets() as $type => $widgets) { + if ($type != 'wp_inactive_widgets') { + foreach ($widgets as $widget_id) { + foreach ($available_widgets as $key => $widget) { + if (strpos(strtolower($widget_id), $key) === 0) { + $widget->is_active(); + } + } + } + } + } } function __comicpress_init() { diff --git a/js/bookmark.js b/js/bookmark.js index e6b444c..670ef25 100644 --- a/js/bookmark.js +++ b/js/bookmark.js @@ -1,72 +1,94 @@ -var button_images = { - 'clear-tag': { - 'off': '3a.gif', 'on': '3.gif' - }, - 'goto-tag': { - 'off': '2a.gif', 'on': '2.gif' - } -}; - var BookmarkInfo = Class.create({ 'def': { - 'permalink': false - }, - 'initialize': function() { - this.jar = new CookieJar({ - 'expires': 60 * 60 * 24 * 31, - 'path': '/' - }); - }, - 'read': function() { - var bookmark_info = this.jar.get('bookmark-info'); + 'permalink': false + }, + 'initialize': function() { + this.jar = new CookieJar({ + 'expires': 60 * 60 * 24 * 31, + 'path': '/' + }); + }, + 'read': function() { + var bookmark_info = this.jar.get('bookmark-info'); - if ((typeof(bookmark_info) != 'object') || (bookmark_info == null)) { - bookmark_info = this.def; - } + if ((typeof(bookmark_info) != 'object') || (bookmark_info == null)) { + bookmark_info = this.def; + } - return bookmark_info; - }, - 'write': function(bookmark_info) { - this.jar.put('bookmark-info', bookmark_info); - if (this.onWrite) { this.onWrite(bookmark_info); } - } + return bookmark_info; + }, + 'write': function(bookmark_info) { + this.jar.put('bookmark-info', bookmark_info); + if (this.onWrite) { this.onWrite(bookmark_info); } + } }); -Event.observe(window, 'load', function() { - var bookmark_info = new BookmarkInfo(); - var info = bookmark_info.read(); +var ComicBookmark = {}; +ComicBookmark.setup = function(id, mode, url, elements) { + var bookmark_info = new BookmarkInfo(); + var info = bookmark_info.read(); - if ($('comic-bookmark-holder')) { - var hrefs = {}; - $$('#comic-bookmark-holder a').each(function(a) { + if ($(id)) { + var hrefs = {}; + $$('#' + id + ' a').each(function(a) { var name = $w(a.className).shift(); hrefs[name] = a; }); - var set_goto_tag = function(i) { - hrefs['goto-tag'].href = (i.permalink ? i.permalink : "#"); - [ 'goto-tag','clear-tag' ].each(function(which) { - hrefs[which].select('img')[0].src = image_root + button_images[which][i.permalink ? "on" : "off"]; - }); - }; + switch (mode) { + case 'three-button': + var set_goto_tag = function(i) { + hrefs['goto-tag'].href = (i.permalink ? i.permalink : "#"); + ['goto-tag','clear-tag'].each(function(which) { + hrefs[which].innerHTML = elements[which + '-' + (i.permalink ? "on" : "off")]; + }); + }; - bookmark_info.onWrite = function(i) { set_goto_tag(i); } - set_goto_tag(info); + hrefs['tag-page'].innerHTML = elements['tag-page']; - Event.observe(hrefs['tag-page'], 'click', function(e) { - Event.stop(e); - info.permalink = permalink; - bookmark_info.write(info); - }); + bookmark_info.onWrite = function(i) { set_goto_tag(i); } + set_goto_tag(info); - Event.observe(hrefs['clear-tag'], 'click', function(e) { - Event.stop(e); - info.permalink = false; - bookmark_info.write(info); - }); + hrefs['tag-page'].observe('click', function(e) { + Event.stop(e); + info.permalink = url; + bookmark_info.write(info); + }); - Event.observe(hrefs['goto-tag'], 'click', function(e) { - if (hrefs['goto-tag'].href == "#") { Event.stop(e); } - }); - } -}); + hrefs['goto-tag'].observe('click', function(e) { + if (hrefs['goto-tag'].href == "#") { Event.stop(e); } + }); + + hrefs['clear-tag'].observe('click', function(e) { + Event.stop(e); + info.permalink = false; + bookmark_info.write(info); + }); + + break; + case 'one-button': + var set_goto_tag = function(i) { + hrefs['bookmark-clicker'].href = (i.permalink ? i.permalink : "#"); + hrefs['bookmark-clicker'].innerHTML = elements['bookmark-clicker-' + (i.permalink ? "on" : "off")]; + }; + bookmark_info.onWrite = function(i) { set_goto_tag(i); } + set_goto_tag(info); + + hrefs['bookmark-clicker'].observe('click', function(e) { + var current_link = info.permalink; + info.permalink = (hrefs['bookmark-clicker'].href.match(/#$/)) ? url : false; + bookmark_info.write(info); + + if (hrefs['bookmark-clicker'].href.match(/#$/) == null) { + hrefs['bookmark-clicker'].href = url; + Event.stop(e); + } else { + document.location.href = current_link; + Event.stop(e); + } + }); + + break; + } + } +}; diff --git a/test/widgets/BookmarkWidgetTest.php b/test/widgets/BookmarkWidgetTest.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/test/widgets/BookmarkWidgetTest.php @@ -0,0 +1 @@ + 'ArchiveDropdownWidget', 'description' => __('Display a dropdown list of your archives, styled.','comicpress') ); - $this->WP_Widget('comicpress_archive_dropdown', __('ComicPress Archive Dropdown','comicpress'), $widget_ops); + function ArchiveDropdownWidget($skip_widget_init = false) { + if (!$skip_widget_init) { + $widget_ops = array('classname' => __CLASS__, 'description' => __('Display a dropdown list of your archives, styled.','comicpress') ); + $this->WP_Widget(__CLASS__, __('ComicPress Archive Dropdown','comicpress'), $widget_ops); + } $this->modes = array( 'monthly_archive' => __('Monthly archive', 'comicpress'), diff --git a/widgets/BookmarkWidget.inc b/widgets/BookmarkWidget.inc index b2e4648..2ab0454 100644 --- a/widgets/BookmarkWidget.inc +++ b/widgets/BookmarkWidget.inc @@ -1,13 +1,55 @@ __CLASS__, 'description' => __('Allow the user to bookmark a page and then jump to it upon return.','comicpress') ); - $this->WP_Widget('comicpress-bookmark', __('ComicPress Bookmark','comicpress'), $widget_ops); + var $text_fields; + + function BookmarkWidget($skip_widget_init = false) { + if (!$skip_widget_init) { + $widget_ops = array('classname' => __CLASS__, 'description' => __('Allow the user to bookmark a page and then jump to it upon return.','comicpress') ); + $this->WP_Widget(__CLASS__, __('ComicPress Bookmark','comicpress'), $widget_ops); + } + + $this->text_fields = array( + 'three-button' => array( + 'tag-page' => array( + 'label' => __('Tag page', 'comicpress'), + 'default' => __('Bookmark', 'comicpress') + ), + 'clear-tag-off' => array( + 'label' => __('Clear tag off', 'comicpress'), + 'default' => '' + ), + 'clear-tag-on' => array( + 'label' => __('Clear tag on', 'comicpress'), + 'default' => __('Clear', 'comicpress') + ), + 'goto-tag-off' => array( + 'label' => __('Goto tag off', 'comicpress'), + 'default' => '' + ), + 'goto-tag-on' => array( + 'label' => __('Goto tag on', 'comicpress'), + 'default' => __('Goto', 'comicpress') + ) + ), + 'one-button' => array( + 'bookmark-clicker-off' => array( + 'label' => __('Set bookmark', 'comicpress'), + 'default' => __('+Bookmark', 'comicpress') + ), + 'bookmark-clicker-on' => array( + 'label' => __('Use bookmark', 'comicpress'), + 'default' => __('>>Bookmark', 'comicpress') + ) + ) + ); } function init() { add_action('wp_head', array(&$this, 'wp_head')); + } + + function is_active() { add_action('template_redirect', array(&$this, 'template_redirect')); } @@ -24,11 +66,122 @@ class BookmarkWidget extends WP_Widget { -
- -
- +
+

+ +

+ __('Three-button mode', 'comicpress'), + 'one-button' => __('One-button mode', 'comicpress') + ) as $mode => $label) { ?> +

+ +

+
">

+ text_fields[$mode] as $name => $info) { + extract($info); + $value = empty($instance[$name]) ? $default : $instance[$name]; + ?> + +
+

+ +
+ + text_fields as $type => $fields) { + $all_text_fields = array_merge($all_text_fields, array_keys($fields)); + } + + foreach ($all_text_fields as $key) { + $instance[$key] = strip_tags($new_instance[$key]); + } + + if (isset($this->text_fields[$new_instance['mode']])) { + $instance['mode'] = $new_instance['mode']; + } else { + $instance['mode'] = array_shift(array_keys($this->text_fields)); + } + + return $instance; + } + + function widget($args, $instance) { + global $post; + extract($args, EXTR_SKIP); + + echo $before_widget; + + $title = empty($instance['title']) ? '' : apply_filters('widget_title', $instance['title']); + if (!empty($title)) { echo $before_title . $title . $after_title; }; + + $id = 'comic-bookmark-' . md5(rand()); + switch ($instance['mode']) { + case 'three-button': ?> +
+ + + +
+ +
+ +
+ + 'ComicPressBuyThisPrint', 'description' => __('Adds a button that goes to the buy print template page.','comicpress') ); - $this->WP_Widget('comicpress_buyprint', __('ComicPress BuyPrint','comicpress'), $widget_ops); + function BuyThisPrintWidget($skip_widget_init = false) { + if (!$skip_widget_init) { + $widget_ops = array('classname' => __CLASS__, 'description' => __('Adds a button that goes to the buy print template page.','comicpress') ); + $this->WP_Widget(__CLASS__, __('Buy This Print','comicpress'), $widget_ops); + } } function init() { @@ -21,7 +23,7 @@ class BuyThisPrintWidget extends WP_Widget { function widget($args, $instance) { extract($args, EXTR_SKIP); - + echo $before_widget; $title = apply_filters('widget_title', $instance['title']); if ( !empty( $title ) ) { echo $before_title . $title . $after_title; }; diff --git a/widgets/CalendarWidget.inc b/widgets/CalendarWidget.inc index 4a5f87a..0f5a9c4 100644 --- a/widgets/CalendarWidget.inc +++ b/widgets/CalendarWidget.inc @@ -10,9 +10,11 @@ Author URI: http://frumph.net/ class CalendarWidget extends WP_Widget { - function CalendarWidget() { - $widget_ops = array('classname' => 'CalendarWidget', 'description' => __('Display a calendar showing this months posts. (this calendar does not drop lines if there is no title given.)','comicpress') ); - $this->WP_Widget('comicpress_calendar', __('ComicPress Calendar','comicpress'), $widget_ops); + function CalendarWidget($skip_widget_init = false) { + if (!$skip_widget_init) { + $widget_ops = array('classname' => __CLASS__, 'description' => __('Display a calendar showing this months posts. (this calendar does not drop lines if there is no title given.)','comicpress') ); + $this->WP_Widget(__CLASS__, __('ComicPress Calendar','comicpress'), $widget_ops); + } } function widget($args, $instance) { diff --git a/widgets/GraphicalNavigationWidget.inc b/widgets/GraphicalNavigationWidget.inc index 5c20585..a6cb3f6 100644 --- a/widgets/GraphicalNavigationWidget.inc +++ b/widgets/GraphicalNavigationWidget.inc @@ -11,16 +11,18 @@ Author URI: http://frumph.net/ require_once(dirname(__FILE__) . '/../classes/ComicPressNavigation.inc'); class GraphicalNavigationWidget extends WP_Widget { - function GraphicalNavigationWidget() { - $widget_ops = array('classname' => 'WidgetComicPressGraphicalStorylineNavigation', 'description' => __('Displays Graphical Navigation Buttons. (used in comic sidebars)','comicpress') ); - $this->WP_Widget('comicpress_graphicalstorylinenavigation', __('ComicPress Comic Navigation','comicpress'), $widget_ops); + function GraphicalNavigationWidget($skip_widget_init = false) { + if (!$skip_widget_init) { + $widget_ops = array('classname' => __CLASS__, 'description' => __('Displays Graphical Navigation Buttons. (used in comic sidebars)','comicpress') ); + $this->WP_Widget(__CLASS__, __('Comic Navigation','comicpress'), $widget_ops); + } } /** * Initialize the widget class. */ function init() { - add_filter('comicpress_display_navigation_order', array(&$this, 'comicpress_display_navigation_order')); + add_filter('comicpress_display_navigation_order', array($this, 'comicpress_display_navigation_order')); add_filter('comicpress_display_navigation_link', array(&$this, 'comicpress_display_navigation_link'), 10, 5); add_filter('comicpress_wrap_navigation_buttons', array(&$this, 'comicpress_wrap_navigation_buttons'), 10, 2); add_filter('comicpress_navigation_grouping_details', array(&$this, 'comicpress_navigation_grouping_details'));