get new bookmark widget working

This commit is contained in:
John Bintz 2009-11-21 10:46:13 -05:00
parent f2129728ad
commit f4018bcfb3
4 changed files with 178 additions and 17 deletions

View File

@ -11,6 +11,7 @@ function __comicpress_widgets_init() {
if (strpos($file, '.inc') !== false) { if (strpos($file, '.inc') !== false) {
$class_name = preg_replace('#\..*$#', '', $file); $class_name = preg_replace('#\..*$#', '', $file);
require_once(dirname(__FILE__) . '/widgets/' . $file); require_once(dirname(__FILE__) . '/widgets/' . $file);
register_widget($class_name);
$widget = new $class_name(); $widget = new $class_name();
if (method_exists($widget, 'init')) { $widget->init(); } if (method_exists($widget, 'init')) { $widget->init(); }
} }

157
js/cookiejar.js Normal file
View 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;
}
};

View File

@ -1,9 +1,12 @@
<?php <?php
class BookmarkWidget { class BookmarkWidget extends WP_Widget {
function init() { function BookmarkWidget() {
wp_register_sidebar_widget('comic-bookmark', __('Comic Bookmark', 'comicpress'), array(&$this, 'render_widget'), array('description' => __('Let your readers save their place via a cookie.', 'comicpress'))); $widget_ops = array('classname' => __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);
}
function init() {
add_action('wp_head', array(&$this, 'wp_head')); add_action('wp_head', array(&$this, 'wp_head'));
wp_enqueue_script('prototype'); wp_enqueue_script('prototype');
@ -13,15 +16,15 @@ class BookmarkWidget {
function wp_head() { ?> function wp_head() { ?>
<script type="text/javascript"> <script type="text/javascript">
var image_root = '<?php bloginfo('template_directory'); ?>/images/'; var image_root = '<?php echo get_template_directory_uri() ?>/images/';
var permalink = '<?php the_permalink() ?>'; var permalink = '<?php the_permalink() ?>';
</script> </script>
<?php } <?php }
function render_widget() { function widget() {
?> ?>
<div id="comic-bookmark-holder"> <div id="comic-bookmark-holder">
<a href="#" class="tag-page"><img src="<?php bloginfo('template_directory'); ?>/images/1.gif" /></a> <a href="#" class="tag-page"><img src="<?php echo get_template_directory_uri() ?>/images/1.gif" /></a>
<a href="#" class="goto-tag"><img /></a> <a href="#" class="goto-tag"><img /></a>
<a href="#" class="clear-tag"><img /></a> <a href="#" class="clear-tag"><img /></a>
</div> </div>