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];
+ ?>
+
+
+