final bits to make widget work
This commit is contained in:
parent
2fda32acab
commit
0ffac972f6
@ -60,23 +60,15 @@ class ComicPressBookmarkWidget extends WP_Widget {
|
|||||||
function init() {}
|
function init() {}
|
||||||
|
|
||||||
function is_active() {
|
function is_active() {
|
||||||
add_action('wp_head', array(&$this, 'wp_head'));
|
|
||||||
add_action('template_redirect', array(&$this, 'template_redirect'));
|
add_action('template_redirect', array(&$this, 'template_redirect'));
|
||||||
}
|
}
|
||||||
|
|
||||||
function template_redirect() {
|
function template_redirect() {
|
||||||
wp_enqueue_script('prototype');
|
wp_enqueue_script('prototype');
|
||||||
wp_enqueue_script('cookiejar', get_template_directory_uri() . '/js/cookiejar.js', array('prototype'));
|
wp_enqueue_script('cookiejar', plugin_dir_url(dirname(__FILE__)) . 'js/cookiejar.js', array('prototype'));
|
||||||
wp_enqueue_script('bookmark', get_template_directory_uri() . '/js/bookmark.js', array('prototype', 'cookiejar'));
|
wp_enqueue_script('bookmark', plugin_dir_url(dirname(__FILE__)) . 'js/bookmark.js', array('prototype', 'cookiejar'));
|
||||||
}
|
}
|
||||||
|
|
||||||
function wp_head() { ?>
|
|
||||||
<script type="text/javascript">
|
|
||||||
var image_root = '<?php echo get_template_directory_uri() ?>/images/';
|
|
||||||
var permalink = '<?php the_permalink() ?>';
|
|
||||||
</script>
|
|
||||||
<?php }
|
|
||||||
|
|
||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
|
|
||||||
function form($instance) {
|
function form($instance) {
|
||||||
|
65
comicpress-widgets.php
Normal file
65
comicpress-widgets.php
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
Plugin Name: ComicPress Widgets
|
||||||
|
Plugin URI: http://comicpress.org/
|
||||||
|
Description: Helpful widgets for ComicPress and other WordPress systems.
|
||||||
|
Version: 0.1
|
||||||
|
Author: John Bintz
|
||||||
|
Author URI: http://comicpress.org/
|
||||||
|
|
||||||
|
Copyright 2010 John Bintz (email : john@coswellproductions.com)
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ComicPressWidgets {
|
||||||
|
function init() {
|
||||||
|
$available_widgets = array();
|
||||||
|
|
||||||
|
if (($dh = opendir(dirname(__FILE__) . '/classes')) !== false) {
|
||||||
|
while (($file = readdir($dh)) !== false) {
|
||||||
|
if (strpos($file, '.inc') !== false) {
|
||||||
|
$class_name = "ComicPress" . preg_replace('#\..*$#', '', $file);
|
||||||
|
require_once(dirname(__FILE__) . '/classes/' . $file);
|
||||||
|
register_widget($class_name);
|
||||||
|
$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 (method_exists($widget, 'is_active')) {
|
||||||
|
if (strpos(strtolower($widget_id), $key) === 0) {
|
||||||
|
$widget->is_active();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
add_action('widgets_init', array('ComicPressWidgets', 'init'));
|
99
js/bookmark.js
Normal file
99
js/bookmark.js
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
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');
|
||||||
|
|
||||||
|
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); }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var ComicBookmark = {};
|
||||||
|
ComicBookmark.setup = function(id, mode, url, elements) {
|
||||||
|
var bookmark_info = new BookmarkInfo();
|
||||||
|
var info = bookmark_info.read();
|
||||||
|
|
||||||
|
if ($(id)) {
|
||||||
|
var hrefs = {};
|
||||||
|
$$('#' + id + ' a').each(function(a) {
|
||||||
|
var name = $w(a.className).shift();
|
||||||
|
hrefs[name] = a;
|
||||||
|
});
|
||||||
|
|
||||||
|
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")];
|
||||||
|
});
|
||||||
|
|
||||||
|
$H(hrefs).each(function(info) {
|
||||||
|
info.value[i.permalink ? 'addClassName' : 'removeClassName']('active');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
hrefs['tag-page'].innerHTML = elements['tag-page'];
|
||||||
|
|
||||||
|
bookmark_info.onWrite = function(i) { set_goto_tag(i); }
|
||||||
|
set_goto_tag(info);
|
||||||
|
|
||||||
|
hrefs['tag-page'].observe('click', function(e) {
|
||||||
|
Event.stop(e);
|
||||||
|
info.permalink = url;
|
||||||
|
bookmark_info.write(info);
|
||||||
|
});
|
||||||
|
|
||||||
|
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")];
|
||||||
|
hrefs['bookmark-clicker'][i.permalink ? 'addClassName' : 'removeClassName']('active');
|
||||||
|
};
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
157
js/cookiejar.js
Normal file
157
js/cookiejar.js
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
/**
|
||||||
|
* Javascript code to store data as JSON strings in cookies.
|
||||||
|
* It uses prototype.js 1.5.1 (http://www.prototypejs.org)
|
||||||
|
*
|
||||||
|
* Author : Lalit Patel
|
||||||
|
* Website: http://www.lalit.org/lab/jsoncookies
|
||||||
|
* License: Apache Software License 2
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* Version: 0.5
|
||||||
|
* Updated: Jan 26, 2009
|
||||||
|
*
|
||||||
|
* Chnage Log:
|
||||||
|
* v 0.5
|
||||||
|
* - Changed License from CC to Apache 2
|
||||||
|
* v 0.4
|
||||||
|
* - Removed a extra comma in options (was breaking in IE and Opera). (Thanks Jason)
|
||||||
|
* - Removed the parameter name from the initialize function
|
||||||
|
* - Changed the way expires date was being calculated. (Thanks David)
|
||||||
|
* v 0.3
|
||||||
|
* - Removed dependancy on json.js (http://www.json.org/json.js)
|
||||||
|
* - empty() function only deletes the cookies set by CookieJar
|
||||||
|
*/
|
||||||
|
|
||||||
|
var CookieJar = Class.create();
|
||||||
|
|
||||||
|
CookieJar.prototype = {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Append before all cookie names to differntiate them.
|
||||||
|
*/
|
||||||
|
appendString: "__CJ_",
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the cookie jar with the options.
|
||||||
|
*/
|
||||||
|
initialize: function(options) {
|
||||||
|
this.options = {
|
||||||
|
expires: 3600, // seconds (1 hr)
|
||||||
|
path: '', // cookie path
|
||||||
|
domain: '', // cookie domain
|
||||||
|
secure: '' // secure ?
|
||||||
|
};
|
||||||
|
Object.extend(this.options, options || {});
|
||||||
|
|
||||||
|
if (this.options.expires != '') {
|
||||||
|
var date = new Date();
|
||||||
|
date = new Date(date.getTime() + (this.options.expires * 1000));
|
||||||
|
this.options.expires = '; expires=' + date.toGMTString();
|
||||||
|
}
|
||||||
|
if (this.options.path != '') {
|
||||||
|
this.options.path = '; path=' + escape(this.options.path);
|
||||||
|
}
|
||||||
|
if (this.options.domain != '') {
|
||||||
|
this.options.domain = '; domain=' + escape(this.options.domain);
|
||||||
|
}
|
||||||
|
if (this.options.secure == 'secure') {
|
||||||
|
this.options.secure = '; secure';
|
||||||
|
} else {
|
||||||
|
this.options.secure = '';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a name values pair.
|
||||||
|
*/
|
||||||
|
put: function(name, value) {
|
||||||
|
name = this.appendString + name;
|
||||||
|
cookie = this.options;
|
||||||
|
var type = typeof value;
|
||||||
|
switch(type) {
|
||||||
|
case 'undefined':
|
||||||
|
case 'function' :
|
||||||
|
case 'unknown' : return false;
|
||||||
|
case 'boolean' :
|
||||||
|
case 'string' :
|
||||||
|
case 'number' : value = String(value.toString());
|
||||||
|
}
|
||||||
|
var cookie_str = name + "=" + escape(Object.toJSON(value));
|
||||||
|
try {
|
||||||
|
document.cookie = cookie_str + cookie.expires + cookie.path + cookie.domain + cookie.secure;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a particular cookie (name value pair) form the Cookie Jar.
|
||||||
|
*/
|
||||||
|
remove: function(name) {
|
||||||
|
name = this.appendString + name;
|
||||||
|
cookie = this.options;
|
||||||
|
try {
|
||||||
|
var date = new Date();
|
||||||
|
date.setTime(date.getTime() - (3600 * 1000));
|
||||||
|
var expires = '; expires=' + date.toGMTString();
|
||||||
|
document.cookie = name + "=" + expires + cookie.path + cookie.domain + cookie.secure;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a particular cookie by name;
|
||||||
|
*/
|
||||||
|
get: function(name) {
|
||||||
|
name = this.appendString + name;
|
||||||
|
var cookies = document.cookie.match(name + '=(.*?)(;|$)');
|
||||||
|
if (cookies) {
|
||||||
|
return (unescape(cookies[1])).evalJSON();
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Empties the Cookie Jar. Deletes all the cookies.
|
||||||
|
*/
|
||||||
|
empty: function() {
|
||||||
|
keys = this.getKeys();
|
||||||
|
size = keys.size();
|
||||||
|
for(i=0; i<size; i++) {
|
||||||
|
this.remove(keys[i]);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all cookies as a single object
|
||||||
|
*/
|
||||||
|
getPack: function() {
|
||||||
|
pack = {};
|
||||||
|
keys = this.getKeys();
|
||||||
|
|
||||||
|
size = keys.size();
|
||||||
|
for(i=0; i<size; i++) {
|
||||||
|
pack[keys[i]] = this.get(keys[i]);
|
||||||
|
}
|
||||||
|
return pack;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all keys.
|
||||||
|
*/
|
||||||
|
getKeys: function() {
|
||||||
|
keys = $A();
|
||||||
|
keyRe= /[^=; ]+(?=\=)/g;
|
||||||
|
str = document.cookie;
|
||||||
|
CJRe = new RegExp("^" + this.appendString);
|
||||||
|
while((match = keyRe.exec(str)) != undefined) {
|
||||||
|
if (CJRe.test(match[0].strip())) {
|
||||||
|
keys.push(match[0].strip().gsub("^" + this.appendString,""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user