summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app.php4
-rw-r--r--wp-admin/admin-functions.php27
-rw-r--r--wp-admin/admin-header.php2
-rw-r--r--wp-admin/cat.js10
-rw-r--r--wp-admin/custom-header.php6
-rw-r--r--wp-admin/dbx-admin-key.js47
-rw-r--r--wp-admin/edit-comments.php14
-rw-r--r--wp-admin/edit-form-advanced.php2
-rw-r--r--wp-admin/edit-link-form.php6
-rw-r--r--wp-admin/edit.php8
-rw-r--r--wp-admin/import/blogger.php4
-rw-r--r--wp-admin/link-add.php2
-rw-r--r--wp-admin/menu.php4
-rw-r--r--wp-admin/moderation.php2
-rw-r--r--wp-admin/options-general.php16
-rw-r--r--wp-admin/options-misc.php2
-rw-r--r--wp-admin/options-writing.php2
-rw-r--r--wp-admin/options.php2
-rw-r--r--wp-admin/page.php4
-rw-r--r--wp-admin/plugins.php2
-rw-r--r--wp-admin/post.php4
-rw-r--r--wp-admin/setup-config.php6
-rw-r--r--wp-admin/templates.php2
-rw-r--r--wp-admin/themes.php10
-rw-r--r--wp-admin/upgrade-functions.php16
-rw-r--r--wp-admin/upload-functions.php2
-rw-r--r--wp-admin/upload.js273
-rw-r--r--wp-blog-header.php2
-rw-r--r--wp-config-sample.php5
-rw-r--r--wp-content/themes/default/functions.php4
-rw-r--r--wp-content/themes/default/searchform.php2
-rw-r--r--wp-content/themes/default/sidebar.php10
-rw-r--r--wp-includes/bookmark-template.php8
-rw-r--r--wp-includes/classes.php8
-rw-r--r--wp-includes/comment-template.php26
-rw-r--r--wp-includes/cron.php14
-rw-r--r--wp-includes/feed.php2
-rw-r--r--wp-includes/formatting.php9
-rw-r--r--wp-includes/functions.php34
-rw-r--r--wp-includes/general-template.php65
-rw-r--r--wp-includes/js/autosave.js158
-rw-r--r--wp-includes/js/jquery/jquery.form.js644
-rw-r--r--wp-includes/js/jquery/jquery.js3
-rw-r--r--wp-includes/js/list-manipulation.js295
-rwxr-xr-xwp-includes/js/tinymce/plugins/spellchecker/classes/TinyGoogleSpell.class.php91
-rwxr-xr-xwp-includes/js/tinymce/plugins/spellchecker/classes/TinyPspellShell.class.php29
-rwxr-xr-xwp-includes/js/tinymce/plugins/spellchecker/config.php21
-rwxr-xr-xwp-includes/js/tinymce/plugins/spellchecker/css/content.css1
-rwxr-xr-xwp-includes/js/tinymce/plugins/spellchecker/css/spellchecker.css1
-rwxr-xr-xwp-includes/js/tinymce/plugins/spellchecker/editor_plugin.js574
-rwxr-xr-xwp-includes/js/tinymce/plugins/spellchecker/langs/en.js3
-rwxr-xr-xwp-includes/js/tinymce/plugins/spellchecker/tinyspell.php41
-rw-r--r--wp-includes/js/tinymce/plugins/wordpress/wordpress.css1
-rw-r--r--wp-includes/js/tinymce/wp-mce-help.php2
-rw-r--r--wp-includes/js/wp-ajax.js100
-rw-r--r--wp-includes/link-template.php6
-rw-r--r--wp-includes/pluggable.php2
-rw-r--r--wp-includes/post.php4
-rw-r--r--wp-includes/query.php170
-rw-r--r--wp-includes/rewrite.php10
-rw-r--r--wp-includes/rss.php4
-rw-r--r--wp-includes/script-loader.php144
-rw-r--r--wp-includes/theme.php3
-rw-r--r--wp-includes/vars.php4
-rw-r--r--wp-includes/wp-db.php2
-rw-r--r--wp-login.php14
-rw-r--r--wp-settings.php57
-rw-r--r--xmlrpc.php51
68 files changed, 2153 insertions, 950 deletions
diff --git a/app.php b/app.php
index b22bbd2..08fd3d1 100644
--- a/app.php
+++ b/app.php
@@ -192,7 +192,7 @@ class AtomParser {
$this->in_content = array();
} else {
$endtag = $this->ns_to_prefix($name);
- if(strstr($this->in_content[count($this->in_content)-1], "<$endtag")) {
+ if (strpos($this->in_content[count($this->in_content)-1], '<' . $endtag) !== false) {
array_push($this->in_content, "/>");
} else {
array_push($this->in_content, "</$endtag>");
@@ -220,7 +220,7 @@ class AtomParser {
#print str_repeat(" ", $this->depth * $this->indent) . "data: #" . $data . "#\n";
if(!empty($this->in_content)) {
// handle self-closing tags (case: text node found, need to close element started)
- if(strstr($this->in_content[count($this->in_content)-1], "<")) {
+ if (strpos($this->in_content[count($this->in_content)-1], '<') !== false) {
array_push($this->in_content, ">");
}
array_push($this->in_content, $this->xml_escape($data));
diff --git a/wp-admin/admin-functions.php b/wp-admin/admin-functions.php
index 7e89d3b..79fe7e4 100644
--- a/wp-admin/admin-functions.php
+++ b/wp-admin/admin-functions.php
@@ -1156,7 +1156,7 @@ function insert_with_markers( $filename, $marker, $insertion ) {
if ( $markerdata ) {
$state = true;
foreach ( $markerdata as $n => $markerline ) {
- if ( strstr( $markerline, "# BEGIN {$marker}" ))
+ if (strpos($markerline, '# BEGIN ' . $marker) !== false)
$state = false;
if ( $state ) {
if ( $n + 1 < count( $markerdata ) )
@@ -1164,7 +1164,7 @@ function insert_with_markers( $filename, $marker, $insertion ) {
else
fwrite( $f, "{$markerline}" );
}
- if ( strstr( $markerline, "# END {$marker}" ) ) {
+ if (strpos($markerline, '# END ' . $marker) !== false) {
fwrite( $f, "# BEGIN {$marker}\n" );
if ( is_array( $insertion ))
foreach ( $insertion as $insertline )
@@ -1202,11 +1202,11 @@ function extract_from_markers( $filename, $marker ) {
{
$state = false;
foreach ( $markerdata as $markerline ) {
- if ( strstr( $markerline, "# END {$marker}" ))
+ if (strpos($markerline, '# END ' . $marker) !== false)
$state = false;
if ( $state )
$result[] = $markerline;
- if ( strstr( $markerline, "# BEGIN {$marker}" ))
+ if (strpos($markerline, '# BEGIN ' . $marker) !== false)
$state = true;
}
}
@@ -1558,6 +1558,14 @@ function add_theme_page( $page_title, $menu_title, $access_level, $file, $functi
return add_submenu_page( 'themes.php', $page_title, $menu_title, $access_level, $file, $function );
}
+function add_users_page( $page_title, $menu_title, $access_level, $file, $function = '' ) {
+ if ( current_user_can('edit_users') )
+ $parent = 'users.php';
+ else
+ $parent = 'profile.php';
+ return add_submenu_page( $parent, $page_title, $menu_title, $access_level, $file, $function );
+}
+
function validate_file( $file, $allowed_files = '' ) {
if ( false !== strpos( $file, './' ))
return 1;
@@ -1771,7 +1779,8 @@ function browse_happy() {
<p id="bh" style="text-align: center;"><a href="http://browsehappy.com/" title="'.$getit.'"><img src="images/browse-happy.gif" alt="Browse Happy" /></a></p>
';
}
-if ( strstr( $_SERVER['HTTP_USER_AGENT'], 'MSIE' ))
+
+if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)
add_action( 'admin_footer', 'browse_happy' );
function documentation_link( $for ) {
@@ -1932,14 +1941,14 @@ function wp_import_cleanup( $id ) {
function wp_import_upload_form( $action ) {
$size = strtolower( ini_get( 'upload_max_filesize' ) );
$bytes = 0;
- if ( strstr( $size, 'k' ) )
+ if (strpos($size, 'k') !== false)
$bytes = $size * 1024;
- if ( strstr( $size, 'm' ) )
+ if (strpos($size, 'm') !== false)
$bytes = $size * 1024 * 1024;
- if ( strstr( $size, 'g' ) )
+ if (strpos($size, 'g') !== false)
$bytes = $size * 1024 * 1024 * 1024;
?>
-<form enctype="multipart/form-data" id="import-upload-form" method="post" action="<?php echo $action ?>">
+<form enctype="multipart/form-data" id="import-upload-form" method="post" action="<?php echo attribute_escape($action) ?>">
<p>
<label for="upload"><?php _e( 'Choose a file from your computer:' ); ?></label> (<?php printf( __('Maximum size: %s' ), $size ); ?> )
<input type="file" id="upload" name="import" size="25" />
diff --git a/wp-admin/admin-header.php b/wp-admin/admin-header.php
index 30afb3a..34f6d7d 100644
--- a/wp-admin/admin-header.php
+++ b/wp-admin/admin-header.php
@@ -44,7 +44,7 @@ do_action('admin_head');
</head>
<body>
<div id="wphead">
-<h1><?php echo wptexturize(get_option(('blogname'))); ?> <span>(<a href="<?php echo get_option('home') . '/'; ?>"><?php _e('View site &raquo;') ?></a>)</span></h1>
+<h1><?php echo wptexturize(get_bloginfo(('name'))); ?> <span>(<a href="<?php echo get_option('home') . '/'; ?>"><?php _e('View site &raquo;') ?></a>)</span></h1>
</div>
<div id="user_info"><p><?php printf(__('Howdy, <strong>%s</strong>.'), $user_identity) ?> [<a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="<?php _e('Log out of this account') ?>"><?php _e('Sign Out'); ?></a>, <a href="profile.php"><?php _e('My Profile'); ?></a>] </p></div>
diff --git a/wp-admin/cat.js b/wp-admin/cat.js
new file mode 100644
index 0000000..ab94d4c
--- /dev/null
+++ b/wp-admin/cat.js
@@ -0,0 +1,10 @@
+addLoadEvent(function(){catList=new listMan('categorychecklist');catList.ajaxRespEl='jaxcat';catList.topAdder=1;catList.alt=0;catList.showLink=0;});
+addLoadEvent(newCatAddIn);
+function newCatAddIn() {
+ var jaxcat = $('jaxcat');
+ if ( !jaxcat )
+ return false;
+ Element.update(jaxcat,'<span id="ajaxcat"><input type="text" name="newcat" id="newcat" size="16" autocomplete="off"/><input type="button" name="Button" id="catadd" value="' + catL10n.add + '"/><span id="howto">' + catL10n.how + '</span></span>');
+ $('newcat').onkeypress = function(e) { return killSubmit("catList.ajaxAdder('category','jaxcat');", e); };
+ $('catadd').onclick = function() { catList.ajaxAdder('category', 'jaxcat'); };
+}
diff --git a/wp-admin/custom-header.php b/wp-admin/custom-header.php
index 1b913c2..5daad1e 100644
--- a/wp-admin/custom-header.php
+++ b/wp-admin/custom-header.php
@@ -174,7 +174,7 @@ Event.observe( window, 'load', hide_text );
<h2><?php _e('Upload New Header Image'); ?></h2><p><?php _e('Here you can upload a custom header image to be shown at the top of your blog instead of the default one. On the next screen you will be able to crop the image.'); ?></p>
<p><?php printf(__('Images of exactly <strong>%1$d x %2$d pixels</strong> will be used as-is.'), HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT); ?></p>
-<form enctype="multipart/form-data" id="uploadForm" method="POST" action="<?php echo add_query_arg('step', 2) ?>" style="margin: auto; width: 50%;">
+<form enctype="multipart/form-data" id="uploadForm" method="POST" action="<?php echo attribute_escape(add_query_arg('step', 2)) ?>" style="margin: auto; width: 50%;">
<label for="upload"><?php _e('Choose an image from your computer:'); ?></label><br /><input type="file" id="upload" name="import" />
<input type="hidden" name="action" value="save" />
<p class="submit">
@@ -188,7 +188,7 @@ Event.observe( window, 'load', hide_text );
<div class="wrap">
<h2><?php _e('Reset Header Image and Color'); ?></h2>
<p><?php _e('This will restore the original header image and color. You will not be able to retrieve any customizations.') ?></p>
-<form method="post" action="<?php echo add_query_arg('step', 1) ?>">
+<form method="post" action="<?php echo attribute_escape(add_query_arg('step', 1)) ?>">
<input type="submit" name="resetheader" value="<?php _e('Restore Original Header'); ?>" />
</form>
</div>
@@ -240,7 +240,7 @@ Event.observe( window, 'load', hide_text );
<div class="wrap">
-<form method="POST" action="<?php echo add_query_arg('step', 3) ?>">
+<form method="POST" action="<?php echo attribute_escape(add_query_arg('step', 3)) ?>">
<p><?php _e('Choose the part of the image you want to use as your header.'); ?></p>
<div id="testWrap">
diff --git a/wp-admin/dbx-admin-key.js b/wp-admin/dbx-admin-key.js
new file mode 100644
index 0000000..9ea666c
--- /dev/null
+++ b/wp-admin/dbx-admin-key.js
@@ -0,0 +1,47 @@
+addLoadEvent( function() {var manager = new dbxManager( dbxL10n.mananger );} );
+
+addLoadEvent( function()
+{
+ //create new docking boxes group
+ var meta = new dbxGroup(
+ 'grabit', // container ID [/-_a-zA-Z0-9/]
+ 'vertical', // orientation ['vertical'|'horizontal']
+ '10', // drag threshold ['n' pixels]
+ 'no', // restrict drag movement to container axis ['yes'|'no']
+ '10', // animate re-ordering [frames per transition, or '0' for no effect]
+ 'yes', // include open/close toggle buttons ['yes'|'no']
+ 'closed', // default state ['open'|'closed']
+ dbxL10n.open, // word for "open", as in "open this box"
+ dbxL10n.close, // word for "close", as in "close this box"
+ dbxL10n.moveMouse, // sentence for "move this box" by mouse
+ dbxL10n.toggleMouse, // pattern-match sentence for "(open|close) this box" by mouse
+ dbxL10n.moveKey, // sentence for "move this box" by keyboard
+ dbxL10n.toggleKey, // pattern-match sentence-fragment for "(open|close) this box" by keyboard
+ '%mytitle% [%dbxtitle%]' // pattern-match syntax for title-attribute conflicts
+ );
+
+ // Boxes are closed by default. Open the Category box if the cookie isn't already set.
+ var catdiv = document.getElementById('categorydiv');
+ if ( catdiv ) {
+ var button = catdiv.getElementsByTagName('A')[0];
+ if ( dbx.cookiestate == null && /dbx\-toggle\-closed/.test(button.className) )
+ meta.toggleBoxState(button, true);
+ }
+
+ var advanced = new dbxGroup(
+ 'advancedstuff',
+ 'vertical',
+ '10',
+ 'yes', // restrict drag movement to container axis ['yes'|'no']
+ '10',
+ 'yes',
+ 'closed',
+ dbxL10n.open,
+ dbxL10n.close,
+ dbxL10n.moveMouse,
+ dbxL10n.toggleMouse,
+ dbxL10n.moveKey,
+ dbxL10n.toggleKey,
+ '%mytitle% [%dbxtitle%]' // pattern-match syntax for title-attribute conflicts
+ );
+});
diff --git a/wp-admin/edit-comments.php b/wp-admin/edit-comments.php
index 5d1d8f5..4ba2479 100644
--- a/wp-admin/edit-comments.php
+++ b/wp-admin/edit-comments.php
@@ -101,7 +101,7 @@ $total_pages = ceil( $total / 20 );
$r = '';
if ( 1 < $page ) {
$args['apage'] = ( 1 == $page - 1 ) ? FALSE : $page - 1;
- $r .= '<a class="prev" href="' . add_query_arg( $args ) . '">&laquo; '. __('Previous Page') .'</a>' . "\n";
+ $r .= '<a class="prev" href="' . attribute_escape(add_query_arg( $args )) . '">&laquo; '. __('Previous Page') .'</a>' . "\n";
}
if ( ( $total_pages = ceil( $total / 20 ) ) > 1 ) {
for ( $page_num = 1; $page_num <= $total_pages; $page_num++ ) :
@@ -111,7 +111,7 @@ if ( ( $total_pages = ceil( $total / 20 ) ) > 1 ) {
$p = false;
if ( $page_num < 3 || ( $page_num >= $page - 3 && $page_num <= $page + 3 ) || $page_num > $total_pages - 3 ) :
$args['apage'] = ( 1 == $page_num ) ? FALSE : $page_num;
- $r .= '<a class="page-numbers" href="' . add_query_arg($args) . '">' . ( $page_num ) . "</a>\n";
+ $r .= '<a class="page-numbers" href="' . attribute_escape(add_query_arg($args)) . '">' . ( $page_num ) . "</a>\n";
$in = true;
elseif ( $in == true ) :
$r .= "...\n";
@@ -122,7 +122,7 @@ if ( ( $total_pages = ceil( $total / 20 ) ) > 1 ) {
}
if ( ( $page ) * 20 < $total || -1 == $total ) {
$args['apage'] = $page + 1;
- $r .= '<a class="next" href="' . add_query_arg($args) . '">'. __('Next Page') .' &raquo;</a>' . "\n";
+ $r .= '<a class="next" href="' . attribute_escape(add_query_arg($args)) . '">'. __('Next Page') .' &raquo;</a>' . "\n";
}
echo "<p class='pagenav'>$r</p>";
?>
@@ -153,7 +153,7 @@ $start = " start='$offset'";
<?php comment_text() ?>
-<p><?php comment_date('M j, g:i A'); ?> &#8212; [
+<p><?php comment_date(__('M j, g:i A')); ?> &#8212; [
<?php
if ( current_user_can('edit_post', $comment->comment_post_ID) ) {
echo " <a href='comment.php?action=editcomment&amp;c=".$comment->comment_ID."'>" . __('Edit') . '</a>';
@@ -248,7 +248,7 @@ $total_pages = ceil( $total / 20 );
$r = '';
if ( 1 < $page ) {
$args['apage'] = ( 1 == $page - 1 ) ? FALSE : $page - 1;
- $r .= '<a class="prev" href="' . add_query_arg( $args ) . '">&laquo; '. __('Previous Page') .'</a>' . "\n";
+ $r .= '<a class="prev" href="' . attribute_escape(add_query_arg( $args )) . '">&laquo; '. __('Previous Page') .'</a>' . "\n";
}
if ( ( $total_pages = ceil( $total / 20 ) ) > 1 ) {
for ( $page_num = 1; $page_num <= $total_pages; $page_num++ ) :
@@ -258,7 +258,7 @@ if ( ( $total_pages = ceil( $total / 20 ) ) > 1 ) {
$p = false;
if ( $page_num < 3 || ( $page_num >= $page - 3 && $page_num <= $page + 3 ) || $page_num > $total_pages - 3 ) :
$args['apage'] = ( 1 == $page_num ) ? FALSE : $page_num;
- $r .= '<a class="page-numbers" href="' . add_query_arg($args) . '">' . ( $page_num ) . "</a>\n";
+ $r .= '<a class="page-numbers" href="' . attribute_escape(add_query_arg($args)) . '">' . ( $page_num ) . "</a>\n";
$in = true;
elseif ( $in == true ) :
$r .= "...\n";
@@ -269,7 +269,7 @@ if ( ( $total_pages = ceil( $total / 20 ) ) > 1 ) {
}
if ( ( $page ) * 20 < $total || -1 == $total ) {
$args['apage'] = $page + 1;
- $r .= '<a class="next" href="' . add_query_arg($args) . '">'. __('Next Page') .' &raquo;</a>' . "\n";
+ $r .= '<a class="next" href="' . attribute_escape(add_query_arg($args)) . '">'. __('Next Page') .' &raquo;</a>' . "\n";
}
echo "<p class='pagenav'>$r</p>";
?>
diff --git a/wp-admin/edit-form-advanced.php b/wp-admin/edit-form-advanced.php
index 1426ece..520bfbd 100644
--- a/wp-admin/edit-form-advanced.php
+++ b/wp-admin/edit-form-advanced.php
@@ -244,7 +244,7 @@ list_meta($metadata);
</div>
<?php if ('edit' == $action) : $delete_nonce = wp_create_nonce( 'delete-post_' . $post_ID ); ?>
-<input name="deletepost" class="button delete" type="submit" id="deletepost" tabindex="10" value="<?php _e('Delete this post') ?>" <?php echo "onclick=\"if ( confirm('" . js_escape(sprintf(__("You are about to delete this post '%s'\n 'Cancel' to stop, 'OK' to delete."), $post->post_title )) . "') ) { document.forms.post._wpnonce.value = '$delete_nonce'; return true;}return false;\""; ?> />
+<input name="deletepost" class="button delete" type="submit" id="deletepost" tabindex="10" value="<?php echo ( 'draft' == $post->post_status ) ? __('Delete this draft') : __('Delete this post'); ?>" <?php echo "onclick=\"if ( confirm('" . js_escape(sprintf( ('draft' == $post->post_status) ? __("You are about to delete this draft '%s'\n 'Cancel' to stop, 'OK' to delete.") : __("You are about to delete this post '%s'\n 'Cancel' to stop, 'OK' to delete."), $post->post_title )) . "') ) { document.forms.post._wpnonce.value = '$delete_nonce'; return true;}return false;\""; ?> />
<?php endif; ?>
</div>
diff --git a/wp-admin/edit-link-form.php b/wp-admin/edit-link-form.php
index 3935584..41381d9 100644
--- a/wp-admin/edit-link-form.php
+++ b/wp-admin/edit-link-form.php
@@ -22,9 +22,9 @@ function xfn_check($class, $value = '', $type = 'check') {
}
if ('' == $value) {
- if ('family' == $class && !strstr($link_rel, 'child') && !strstr($link_rel, 'parent') && !strstr($link_rel, 'sibling') && !strstr($link_rel, 'spouse') && !strstr($link_rel, 'kin')) echo ' checked="checked"';
- if ('friendship' == $class && !strstr($link_rel, 'friend') && !strstr($link_rel, 'acquaintance') && !strstr($link_rel, 'contact') ) echo ' checked="checked"';
- if ('geographical' == $class && !strstr($link_rel, 'co-resident') && !strstr($link_rel, 'neighbor') ) echo ' checked="checked"';
+ if ('family' == $class && strpos($link_rel, 'child') === false && strpos($link_rel, 'parent') === false && strpos($link_rel, 'sibling') === false && strpos($link_rel, 'spouse') === false && strpos($link_rel, 'kin') === false) echo ' checked="checked"';
+ if ('friendship' == $class && strpos($link_rel, 'friend') === false && strpos($link_rel, 'acquaintance') === false && strpos($link_rel, 'contact') === false) echo ' checked="checked"';
+ if ('geographical' == $class && strpos($link_rel, 'co-resident') === false && strpos($link_rel, 'neighbor') === false) echo ' checked="checked"';
if ('identity' == $class && in_array('me', $rels) ) echo ' checked="checked"';
}
}
diff --git a/wp-admin/edit.php b/wp-admin/edit.php
index 6b47fe4..44a3ddb 100644
--- a/wp-admin/edit.php
+++ b/wp-admin/edit.php
@@ -21,14 +21,14 @@ if ($drafts || $other_drafts) {
foreach ($drafts as $draft) {
if (0 != $i)
echo ', ';
- $draft->post_title = stripslashes($draft->post_title);
+ $draft->post_title = apply_filters('the_title', stripslashes($draft->post_title));
if ($draft->post_title == '')
$draft->post_title = sprintf(__('Post #%s'), $draft->ID);
echo "<a href='post.php?action=edit&amp;post=$draft->ID' title='" . __('Edit this draft') . "'>$draft->post_title</a>";
++$i;
}
?>
- .</p>
+.</p>
<?php } ?>
<?php if ($other_drafts) { ?>
@@ -38,7 +38,7 @@ if ($drafts || $other_drafts) {
foreach ($other_drafts as $draft) {
if (0 != $i)
echo ', ';
- $draft->post_title = stripslashes($draft->post_title);
+ $draft->post_title = apply_filters('the_title', stripslashes($draft->post_title));
if ($draft->post_title == '')
$draft->post_title = sprintf(__('Post #%s'), $draft->ID);
echo "<a href='post.php?action=edit&amp;post=$draft->ID' title='" . __('Edit this draft') . "'>$draft->post_title</a>";
@@ -177,7 +177,7 @@ foreach($posts_columns as $column_name=>$column_display_name) {
case 'date':
?>
- <td><?php if ( '0000-00-00 00:00:00' ==$post->post_modified ) _e('Unpublished'); else the_time(_('Y-m-d \<\b\r \/\> g:i:s a')); ?></td>
+ <td><?php if ( '0000-00-00 00:00:00' ==$post->post_modified ) _e('Unpublished'); else the_time(__('Y-m-d \<\b\r \/\> g:i:s a')); ?></td>
<?php
break;
case 'title':
diff --git a/wp-admin/import/blogger.php b/wp-admin/import/blogger.php
index 2908bbc..1890c16 100644
--- a/wp-admin/import/blogger.php
+++ b/wp-admin/import/blogger.php
@@ -941,7 +941,7 @@ class AtomParser {
$this->in_content = array();
} else {
$endtag = $this->ns_to_prefix($name);
- if(strstr($this->in_content[count($this->in_content)-1], "<$endtag")) {
+ if (strpos($this->in_content[count($this->in_content)-1], '<' . $endtag) !== false) {
array_push($this->in_content, "/>");
} else {
array_push($this->in_content, "</$endtag>");
@@ -969,7 +969,7 @@ class AtomParser {
#print str_repeat(" ", $this->depth * $this->indent) . "data: #" . $data . "#\n";
if(!empty($this->in_content)) {
// handle self-closing tags (case: text node found, need to close element started)
- if(strstr($this->in_content[count($this->in_content)-1], "<")) {
+ if (strpos($this->in_content[count($this->in_content)-1], '<') !== false) {
array_push($this->in_content, ">");
}
array_push($this->in_content, $this->xml_escape($data));
diff --git a/wp-admin/link-add.php b/wp-admin/link-add.php
index fca6c3e..1e48fe8 100644
--- a/wp-admin/link-add.php
+++ b/wp-admin/link-add.php
@@ -28,7 +28,7 @@ require('admin-header.php');
<div id="wp-link-bookmarklet" class="wrap">
<h3><?php _e('Add Link Bookmarklet'); ?></h3>
-<p><?php _e('Right click on the following link and choose "Bookmark This Link..." to create an add link shortcut. Right now this only works on Mozilla or Netscape, but we&#8217;re working on it.'); ?></p>
+<p><?php _e('Right click on the following link and choose &#0147;Bookmark This Link...&#0148; or &#0147;Add to Favorites...&#0148; to create a Link This shortcut.'); ?></p>
<?php printf('<p><a href="%s" title="'.__('Link add bookmarklet').'">'.__('Link This').'</a></p>', "javascript:void(linkmanpopup=window.open('" . get_option('siteurl') . "/wp-admin/link-add.php?action=popup&amp;linkurl='+escape(location.href)+'&amp;name='+escape(document.title),'LinkManager','scrollbars=yes,width=750,height=550,left=15,top=15,status=yes,resizable=yes'));linkmanpopup.focus();window.focus();linkmanpopup.focus();") ?>
</div>
diff --git a/wp-admin/menu.php b/wp-admin/menu.php
index 8c67b4a..37e9714 100644
--- a/wp-admin/menu.php
+++ b/wp-admin/menu.php
@@ -6,11 +6,11 @@
// The URL of the item's file
$menu[0] = array(__('Dashboard'), 'read', 'index.php');
-if ( strstr($_SERVER['REQUEST_URI'], 'edit-pages.php') )
+if (strpos($_SERVER['REQUEST_URI'], 'edit-pages.php') !== false)
$menu[5] = array(__('Write'), 'edit_pages', 'page-new.php');
else
$menu[5] = array(__('Write'), 'edit_posts', 'post-new.php');
-if ( strstr($_SERVER['REQUEST_URI'], 'page-new.php') )
+if (strpos($_SERVER['REQUEST_URI'], 'page-new.php') !== false)
$menu[10] = array(__('Manage'), 'edit_pages', 'edit-pages.php');
else
$menu[10] = array(__('Manage'), 'edit_posts', 'edit.php');
diff --git a/wp-admin/moderation.php b/wp-admin/moderation.php
index e6d735b..e24a9a1 100644
--- a/wp-admin/moderation.php
+++ b/wp-admin/moderation.php
@@ -121,7 +121,7 @@ $i = 0;
?>
<p><strong><?php comment_author() ?></strong> <?php if ($comment->comment_author_email) { ?>| <?php comment_author_email_link() ?> <?php } if ($comment->comment_author_url && 'http://' != $comment->comment_author_url) { ?> | <?php comment_author_url_link() ?> <?php } ?>| <?php _e('IP:') ?> <a href="http://ws.arin.net/cgi-bin/whois.pl?queryinput=<?php comment_author_IP() ?>"><?php comment_author_IP() ?></a></p>
<?php comment_text() ?>
-<p><?php comment_date('M j, g:i A'); ?> &#8212; [ <?php
+<p><?php comment_date(__('M j, g:i A')); ?> &#8212; [ <?php
echo '<a href="comment.php?action=editcomment&amp;c='.$comment->comment_ID.'">' . __('Edit') . '</a> | ';
echo " <a href=\"post.php?action=deletecomment&amp;p=".$comment->comment_post_ID."&amp;comment=".$comment->comment_ID."\" onclick=\"return deleteSomething( 'comment', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to delete this comment by '%s'.\n'Cancel' to stop, 'OK' to delete."), $comment->comment_author )) . "', theCommentList );\">" . __('Delete') . "</a> | "; ?>
<?php
diff --git a/wp-admin/options-general.php b/wp-admin/options-general.php
index 8a8fe3b..2142f73 100644
--- a/wp-admin/options-general.php
+++ b/wp-admin/options-general.php
@@ -42,18 +42,14 @@ include('./admin-header.php');
<?php
$lang_files = glob( ABSPATH . WPINC . "/languages/*" );
$lang = get_option( "WPLANG" );
-if( $lang == false ) {
- $lang = get_site_option( "WPLANG" );
- add_option( "WPLANG", $lang );
-}
-if( is_array( $lang_files ) && count($lang_files) => 1 ) {
+if( is_array( $lang_files ) && count($lang_files) >= 1 ) {
?>
- <tr valign="top">
- <th width="33%" scope="row"><?php _e('Language:') ?></th>
- <td><select name="WPLANG" id="WPLANG">
- <?php
- echo "<option value=''>Default</option>";
+ <tr valign="top">
+ <th width="33%" scope="row"><?php _e('Language:') ?></th>
+ <td><select name="WPLANG" id="WPLANG">
+ <?php
+ echo "<option value=''>Default</option>";
while( list( $key, $val ) = each( $lang_files ) ) {
$l = basename( $val, ".mo" );
echo "<option value='$l'";
diff --git a/wp-admin/options-misc.php b/wp-admin/options-misc.php
index 4b6a875..f12d91f 100644
--- a/wp-admin/options-misc.php
+++ b/wp-admin/options-misc.php
@@ -37,7 +37,7 @@ include('admin-header.php');
</fieldset>
<p><input name="use_linksupdate" type="checkbox" id="use_linksupdate" value="1" <?php checked('1', get_option('use_linksupdate')); ?> />
-<label for="use_linksupdate"><?php _e('Track Bookmarks&#8217; Update Times') ?></label></p>
+<label for="use_linksupdate"><?php _e('Track Links&#8217; Update Times') ?></label></p>
<p>
<label><input type="checkbox" name="hack_file" value="1" <?php checked('1', get_option('hack_file')); ?> /> <?php _e('Use legacy <code>my-hacks.php</code> file support') ?></label>
</p>
diff --git a/wp-admin/options-writing.php b/wp-admin/options-writing.php
index 59e1c49..1f70b74 100644
--- a/wp-admin/options-writing.php
+++ b/wp-admin/options-writing.php
@@ -41,7 +41,7 @@ endforeach;
</select></td>
</tr>
<tr valign="top">
-<th scope="row"><?php _e('Default bookmark category:') ?></th>
+<th scope="row"><?php _e('Default link category:') ?></th>
<td><select name="default_link_category" id="default_link_category">
<?php
foreach ($categories as $category) :
diff --git a/wp-admin/options.php b/wp-admin/options.php
index 8dbd161..db3c88e 100644
--- a/wp-admin/options.php
+++ b/wp-admin/options.php
@@ -167,7 +167,7 @@ foreach ( (array) $options as $option) :
<th scope='row'><label for='$option->option_name'>$option->option_name</label></th>
<td>";
- if (stristr($value, "\n")) echo "<textarea class='$class' name='$option->option_name' id='$option->option_name' cols='30' rows='5'>$value</textarea>";
+ if (strpos($value, "\n") !== false) echo "<textarea class='$class' name='$option->option_name' id='$option->option_name' cols='30' rows='5'>$value</textarea>";
else echo "<input class='$class' type='text' name='$option->option_name' id='$option->option_name' size='30' value='" . $value . "'$disabled />";
echo "</td>
diff --git a/wp-admin/page.php b/wp-admin/page.php
index d5bb932..4a29c37 100644
--- a/wp-admin/page.php
+++ b/wp-admin/page.php
@@ -149,8 +149,8 @@ case 'delete':
}
$sendback = wp_get_referer();
- if (strstr($sendback, 'page.php')) $sendback = get_option('siteurl') .'/wp-admin/page.php';
- elseif (strstr($sendback, 'attachments.php')) $sendback = get_option('siteurl') .'/wp-admin/attachments.php';
+ if (strpos($sendback, 'page.php') !== false) $sendback = get_option('siteurl') .'/wp-admin/page.php';
+ elseif (strpos($sendback, 'attachments.php') !== false) $sendback = get_option('siteurl') .'/wp-admin/attachments.php';
$sendback = preg_replace('|[^a-z0-9-~+_.?#=&;,/:]|i', '', $sendback);
wp_redirect($sendback);
exit();
diff --git a/wp-admin/plugins.php b/wp-admin/plugins.php
index bd80c2e..b2d9be3 100644
--- a/wp-admin/plugins.php
+++ b/wp-admin/plugins.php
@@ -123,7 +123,7 @@ if (empty($plugins)) {
if ( $style != '' )
$style = 'class="' . $style . '"';
- if ( is_writable(ABSPATH . 'wp-content/plugins/' . $plugin_file) )
+ if ( is_writable(ABSPATH . PLUGINDIR . '/' . $plugin_file) )
$edit = "<a href='plugin-editor.php?file=$plugin_file' title='".__('Open this file in the Plugin Editor')."' class='edit'>".__('Edit')."</a>";
else
$edit = '';
diff --git a/wp-admin/post.php b/wp-admin/post.php
index 163e220..b191661 100644
--- a/wp-admin/post.php
+++ b/wp-admin/post.php
@@ -160,8 +160,8 @@ case 'delete':
}
$sendback = wp_get_referer();
- if (strstr($sendback, 'post.php')) $sendback = get_option('siteurl') .'/wp-admin/post-new.php';
- elseif (strstr($sendback, 'attachments.php')) $sendback = get_option('siteurl') .'/wp-admin/attachments.php';
+ if (strpos($sendback, 'post.php') !== false) $sendback = get_option('siteurl') .'/wp-admin/post-new.php';
+ elseif (strpos($sendback, 'attachments.php') !== false) $sendback = get_option('siteurl') .'/wp-admin/attachments.php';
$sendback = preg_replace('|[^a-z0-9-~+_.?#=&;,/:]|i', '', $sendback);
wp_redirect($sendback);
exit();
diff --git a/wp-admin/setup-config.php b/wp-admin/setup-config.php
index 17846d6..41e9787 100644
--- a/wp-admin/setup-config.php
+++ b/wp-admin/setup-config.php
@@ -158,13 +158,13 @@ switch($step) {
foreach ($configFile as $line_num => $line) {
switch (substr($line,0,16)) {
case "define('DB_NAME'":
- fwrite($handle, str_replace("wordpress", $dbname, $line));
+ fwrite($handle, str_replace("putyourdbnamehere", $dbname, $line));
break;
case "define('DB_USER'":
- fwrite($handle, str_replace("'username'", "'$uname'", $line));
+ fwrite($handle, str_replace("'usernamehere'", "'$uname'", $line));
break;
case "define('DB_PASSW":
- fwrite($handle, str_replace("'password'", "'$passwrd'", $line));
+ fwrite($handle, str_replace("'yourpasswordhere'", "'$passwrd'", $line));
break;
case "define('DB_HOST'":
fwrite($handle, str_replace("localhost", $dbhost, $line));
diff --git a/wp-admin/templates.php b/wp-admin/templates.php
index 7453992..7f9063f 100644
--- a/wp-admin/templates.php
+++ b/wp-admin/templates.php
@@ -53,7 +53,7 @@ default:
if ( ! current_user_can('edit_files') )
wp_die('<p>'.__('You do not have sufficient permissions to edit templates for this blog.').'</p>');
- if ( strstr( $file, 'wp-config.php' ) )
+ if (strpos($file, 'wp-config.php') !== false)
wp_die('<p>'.__('The config file cannot be edited or viewed through the web interface. Sorry!').'</p>');
update_recently_edited($file);
diff --git a/wp-admin/themes.php b/wp-admin/themes.php
index ee244db..af7791f 100644
--- a/wp-admin/themes.php
+++ b/wp-admin/themes.php
@@ -61,7 +61,7 @@ require_once('admin-header.php');
<?php if ( ! validate_current_theme() ) : ?>
<div id="message1" class="updated fade"><p><?php _e('The active theme is broken. Reverting to the default theme.'); ?></p></div>
<?php elseif ( isset($_GET['activated']) ) : ?>
-<div id="message2" class="updated fade"><p><?php printf(__('New theme activated. <a href="%s">View site &raquo;</a>'), get_bloginfo('home') . '/'); ?></p></div>
+<div id="message2" class="updated fade"><p><?php printf(__('New theme activated. <a href="%s">View site &raquo;</a>'), get_bloginfo('url') . '/'); ?></p></div>
<?php endif; ?>
@@ -69,9 +69,9 @@ require_once('admin-header.php');
<h2><?php _e('Current Theme'); ?></h2>
<div id="currenttheme">
<?php if ( $ct->screenshot ) : ?>
-<img src="../<?php echo $ct->stylesheet_dir . '/' . $ct->screenshot; ?>" alt="<?php _e('Current theme preview'); ?>" />
+<img src="<?php echo get_option('siteurl') . '/' . $ct->stylesheet_dir . '/' . $ct->screenshot; ?>" alt="<?php _e('Current theme preview'); ?>" />
<?php endif; ?>
-<h3><?php printf(__('%1$s %2$s by %3$s'), $ct->title, '', $ct->author) ; ?></h3>
+<h3><?php printf(__('%1$s %2$s by %3$s'), $ct->title, $ct->version, $ct->author) ; ?></h3>
<p><?php echo $ct->description; ?></p>
</div>
@@ -98,11 +98,11 @@ foreach ($theme_names as $theme_name) {
$activate_link = wp_nonce_url("themes.php?action=activate&amp;template=$template&amp;stylesheet=$stylesheet", 'switch-theme_' . $template);
?>
<div class="available-theme">
-<h3><a href="<?php echo $activate_link; ?>"><?php echo "$title"; ?></a></h3>
+<h3><a href="<?php echo $activate_link; ?>"><?php echo "$title $version"; ?></a></h3>
<a href="<?php echo $activate_link; ?>" class="screenshot">
<?php if ( $screenshot ) : ?>
-<img src="../<?php echo $stylesheet_dir . '/' . $screenshot; ?>" alt="" />
+<img src="<?php echo get_option('siteurl') . '/' . $stylesheet_dir . '/' . $screenshot; ?>" alt="" />
<?php endif; ?>
</a>
diff --git a/wp-admin/upgrade-functions.php b/wp-admin/upgrade-functions.php
index e0c347c..b7a1f93 100644
--- a/wp-admin/upgrade-functions.php
+++ b/wp-admin/upgrade-functions.php
@@ -451,7 +451,7 @@ function upgrade_160() {
if ( 0 == $wpdb->get_var("SELECT SUM(category_count) FROM $wpdb->categories") ) { // Create counts
$categories = $wpdb->get_col("SELECT cat_ID FROM $wpdb->categories");
foreach ( $categories as $cat_id ) {
- $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->post2cat, $wpdb->posts WHERE $wpdb->posts.ID=$wpdb->post2cat.post_id AND post_type='post' AND post_status='publish' AND category_id = '$cat_id'");
+ $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->post2cat, $wpdb->posts WHERE $wpdb->posts.ID=$wpdb->post2cat.post_id AND post_status='publish' AND category_id = '$cat_id'");
$wpdb->query("UPDATE $wpdb->categories SET category_count = '$count' WHERE cat_ID = '$cat_id'");
}
}
@@ -931,7 +931,7 @@ function make_site_theme_from_oldschool($theme_name, $template) {
if ($oldfile == 'index.php') { // Check to make sure it's not a new index
$index = implode('', file("$oldpath/$oldfile"));
- if ( strstr( $index, 'WP_USE_THEMES' ) ) {
+ if (strpos($index, 'WP_USE_THEMES') !== false) {
if (! @copy(ABSPATH . 'wp-content/themes/default/index.php', "$site_dir/$newfile"))
return false;
continue; // Don't copy anything
@@ -1003,12 +1003,12 @@ function make_site_theme_from_default($theme_name, $template) {
$f = fopen("$site_dir/style.css", 'w');
foreach ($stylelines as $line) {
- if (strstr($line, "Theme Name:")) $line = "Theme Name: $theme_name";
- elseif (strstr($line, "Theme URI:")) $line = "Theme URI: " . __get_option('siteurl');
- elseif (strstr($line, "Description:")) $line = "Description: Your theme";
- elseif (strstr($line, "Version:")) $line = "Version: 1";
- elseif (strstr($line, "Author:")) $line = "Author: You";
- fwrite($f, "{$line}\n");
+ if (strpos($line, 'Theme Name:') !== false) $line = 'Theme Name: ' . $theme_name;
+ elseif (strpos($line, 'Theme URI:') !== false) $line = 'Theme URI: ' . __get_option('url');
+ elseif (strpos($line, 'Description:') !== false) $line = 'Description: Your theme.';
+ elseif (strpos($line, 'Version:') !== false) $line = 'Version: 1';
+ elseif (strpos($line, 'Author:') !== false) $line = 'Author: You';
+ fwrite($f, $line . "\n");
}
fclose($f);
}
diff --git a/wp-admin/upload-functions.php b/wp-admin/upload-functions.php
index c2b5519..1f79fb7 100644
--- a/wp-admin/upload-functions.php
+++ b/wp-admin/upload-functions.php
@@ -18,7 +18,7 @@ function wp_upload_display( $dims = false, $href = '' ) {
the_title();
$post_title = attribute_escape(ob_get_contents());
ob_end_clean();
- $post_content = apply_filters( 'content_edit_pre', $post->post_content );
+ $post_content = attribute_escape(apply_filters( 'content_edit_pre', $post->post_content ));
$class = 'text';
$innerHTML = get_attachment_innerHTML( $id, false, $dims );
diff --git a/wp-admin/upload.js b/wp-admin/upload.js
new file mode 100644
index 0000000..a77e9d1
--- /dev/null
+++ b/wp-admin/upload.js
@@ -0,0 +1,273 @@
+addLoadEvent( function() {
+ theFileList = {
+ currentImage: {ID: 0},
+ nonce: '',
+ tab: '',
+ postID: 0,
+
+ initializeVars: function() {
+ this.urlData = document.location.href.split('?');
+ this.params = this.urlData[1].toQueryParams();
+ this.postID = this.params['post_id'];
+ this.tab = this.params['tab'];
+ this.style = this.params['style'];
+ this.ID = this.params['ID'];
+ if ( !this.style )
+ this.style = 'default';
+ var nonceEl = $('nonce-value');
+ if ( nonceEl )
+ this.nonce = nonceEl.value;
+ if ( this.ID ) {
+ this.grabImageData( this.ID );
+ this.imageView( this.ID );
+ }
+ },
+
+ initializeLinks: function() {
+ if ( this.ID )
+ return;
+ $$('a.file-link').each( function(i) {
+ var id = i.id.split('-').pop();
+ i.onclick = function(e) { theFileList[ 'inline' == theFileList.style ? 'imageView' : 'editView' ](id, e); }
+ } );
+ },
+
+ grabImageData: function(id) {
+ if ( id == this.currentImage.ID )
+ return;
+ var thumbEl = $('attachment-thumb-url-' + id);
+ if ( thumbEl ) {
+ this.currentImage.thumb = ( 0 == id ? '' : thumbEl.value );
+ this.currentImage.thumbBase = ( 0 == id ? '' : $('attachment-thumb-url-base-' + id).value );
+ } else {
+ this.currentImage.thumb = false;
+ }
+ this.currentImage.src = ( 0 == id ? '' : $('attachment-url-' + id).value );
+ this.currentImage.srcBase = ( 0 == id ? '' : $('attachment-url-base-' + id).value );
+ this.currentImage.page = ( 0 == id ? '' : $('attachment-page-url-' + id).value );
+ this.currentImage.title = ( 0 == id ? '' : $('attachment-title-' + id).value );
+ this.currentImage.description = ( 0 == id ? '' : $('attachment-description-' + id).value );
+ var widthEl = $('attachment-width-' + id);
+ if ( widthEl ) {
+ this.currentImage.width = ( 0 == id ? '' : widthEl.value );
+ this.currentImage.height = ( 0 == id ? '' : $('attachment-height-' + id).value );
+ } else {
+ this.currentImage.width = false;
+ this.currentImage.height = false;
+ }
+ this.currentImage.isImage = ( 0 == id ? 0 : $('attachment-is-image-' + id).value );
+ this.currentImage.ID = id;
+ },
+
+ imageView: function(id, e) {
+ this.prepView(id);
+ var h = '';
+
+ h += "<div id='upload-file'>"
+ if ( this.ID ) {
+ var params = $H(this.params);
+ params.ID = '';
+ params.action = '';
+ h += "<a href='" + this.urlData[0] + '?' + params.toQueryString() + "'";
+ } else {
+ h += "<a href='#' onclick='return theFileList.cancelView();'";
+ }
+ h += " title='" + this.browseTitle + "' class='back'>" + this.back + "</a>";
+ h += "<div id='file-title'>"
+ if ( 0 == this.currentImage.isImage )
+ h += "<h2><a href='" + this.currentImage.srcBase + this.currentImage.src + "' onclick='return false;' title='" + this.directTitle + "'>" + this.currentImage.title + "</a></h2>";
+ else
+ h += "<h2>" + this.currentImage.title + "</h2>";
+ h += " &#8212; <span>";
+ h += "<a href='#' onclick='return theFileList.editView(" + id + ");'>" + this.edit + "</a>"
+ h += "</span>";
+ h += '</div>'
+ h += "<div id='upload-file-view' class='alignleft'>";
+ if ( 1 == this.currentImage.isImage ) {
+ h += "<a href='" + this.currentImage.srcBase + this.currentImage.src + "' onclick='return false;' title='" + this.directTitle + "'>";
+ h += "<img src='" + ( this.currentImage.thumb ? this.currentImage.thumb : this.currentImage.src ) + "' alt='" + this.currentImage.title + "' width='" + this.currentImage.width + "' height='" + this.currentImage.height + "' />";
+ h += "</a>";
+ } else
+ h += '&nbsp;';
+ h += "</div>";
+
+ h += "<form name='uploadoptions' id='uploadoptions' class='alignleft'>";
+ h += "<table>";
+ var display = [];
+ var checked = 'display-title';
+ if ( 1 == this.currentImage.isImage ) {
+ checked = 'display-full';
+ if ( this.currentImage.thumb ) {
+ display.push("<label for='display-thumb'><input type='radio' name='display' id='display-thumb' value='thumb' /> " + this.thumb + "</label><br />");
+ checked = 'display-thumb';
+ }
+ display.push("<label for='display-full'><input type='radio' name='display' id='display-full' value='full' /> " + this.full + "</label>");
+ } else if ( this.currentImage.thumb ) {
+ display.push("<label for='display-thumb'><input type='radio' name='display' id='display-thumb' value='thumb' /> " + this.icon + "</label>");
+ }
+ if ( display.length ) {
+ display.push("<br /><label for='display-title'><input type='radio' name='display' id='display-title' value='title' /> " + this.title + "</label>");
+ h += "<tr><th style='padding-bottom:.5em'>" + this.show + "</th><td style='padding-bottom:.5em'>";
+ $A(display).each( function(i) { h += i; } );
+ h += "</td></tr>";
+ }
+
+ h += "<tr><th>" + this.link + "</th><td>";
+ h += "<label for='link-file'><input type='radio' name='link' id='link-file' value='file' checked='checked'/> " + this.file + "</label><br />";
+ h += "<label for='link-page'><input type='radio' name='link' id='link-page' value='page' /> " + this.page + "</label><br />";
+ h += "<label for='link-none'><input type='radio' name='link' id='link-none' value='none' /> " + this.none + "</label>";
+ h += "</td></tr>";
+
+ h += "<tr><td colspan='2'><p class='submit'>";
+ h += "<input type='button' class='button' name='send' onclick='theFileList.sendToEditor(" + id + ")' value='" + this.editorText + "' />";
+ h += "</p></td></tr></table>";
+ h += "</form>";
+
+ h += "</div>";
+
+ new Insertion.Top('upload-content', h);
+ var displayEl = $(checked);
+ if ( displayEl )
+ displayEl.checked = true;
+
+ if (e) Event.stop(e);
+ return false;
+ },
+
+ editView: function(id, e) {
+ this.prepView(id);
+ var h = '';
+
+ var action = 'upload.php?style=' + this.style + '&amp;tab=upload';
+ if ( this.postID )
+ action += '&amp;post_id=' + this.postID;
+
+ h += "<form id='upload-file' method='post' action='" + action + "'>";
+ if ( this.ID ) {
+ var params = $H(this.params);
+ params.ID = '';
+ params.action = '';
+ h += "<a href='" + this.urlData[0] + '?' + params.toQueryString() + "'";
+ } else {
+ h += "<a href='#' onclick='return theFileList.cancelView();'";
+ }
+ h += " title='" + this.browseTitle + "' class='back'>" + this.back + "</a>";
+ h += "<div id='file-title'>"
+ if ( 0 == this.currentImage.isImage )
+ h += "<h2><a href='" + this.currentImage.srcBase + this.currentImage.src + "' onclick='return false;' title='" + this.directTitle + "'>" + this.currentImage.title + "</a></h2>";
+ else
+ h += "<h2>" + this.currentImage.title + "</h2>";
+ h += " &#8212; <span>";
+ h += "<a href='#' onclick='return theFileList.imageView(" + id + ");'>" + this.insert + "</a>";
+ h += "</span>";
+ h += '</div>'
+ h += "<div id='upload-file-view' class='alignleft'>";
+ if ( 1 == this.currentImage.isImage ) {
+ h += "<a href='" + this.currentImage.srcBase + this.currentImage.src + "' onclick='return false;' title='" + this.directTitle + "'>";
+ h += "<img src='" + ( this.currentImage.thumb ? this.currentImage.thumb : this.currentImage.src ) + "' alt='" + this.currentImage.title + "' width='" + this.currentImage.width + "' height='" + this.currentImage.height + "' />";
+ h += "</a>";
+ } else
+ h += '&nbsp;';
+ h += "</div>";
+
+
+ h += "<table><col /><col class='widefat' /><tr>";
+ h += "<th scope='row'><label for='url'>" + this.urlText + "</label></th>";
+ h += "<td><input type='text' id='url' class='readonly' value='" + this.currentImage.srcBase + this.currentImage.src + "' readonly='readonly' /></td>";
+ h += "</tr><tr>";
+ h += "<th scope='row'><label for='post_title'>" + this.title + "</label></th>";
+ h += "<td><input type='text' id='post_title' name='post_title' value='" + this.currentImage.title + "' /></td>";
+ h += "</tr><tr>";
+ h += "<th scope='row'><label for='post_content'>" + this.desc + "</label></th>";
+ h += "<td><textarea name='post_content' id='post_content'>" + this.currentImage.description + "</textarea></td>";
+ h += "</tr><tr id='buttons' class='submit'><td colspan='2'><input type='button' id='delete' name='delete' class='delete alignleft' value='" + this.deleteText + "' onclick='theFileList.deleteFile(" + id + ");' />";
+ h += "<input type='hidden' name='from_tab' value='" + this.tab + "' />";
+ h += "<input type='hidden' name='action' id='action-value' value='save' />";
+ h += "<input type='hidden' name='ID' value='" + id + "' />";
+ h += "<input type='hidden' name='_wpnonce' value='" + this.nonce + "' />";
+ h += "<div class='submit'><input type='submit' value='" + this.saveText + "' /></div>";
+ h += "</td></tr></table></form>";
+
+ new Insertion.Top('upload-content', h);
+ if (e) Event.stop(e);
+ return false;
+ },
+
+ prepView: function(id) {
+ this.cancelView( true );
+ var filesEl = $('upload-files');
+ if ( filesEl )
+ filesEl.hide();
+ var navEl = $('current-tab-nav');
+ if ( navEl )
+ navEl.hide();
+ this.grabImageData(id);
+ },
+
+ cancelView: function( prep ) {
+ if ( !prep ) {
+ var filesEl = $('upload-files');
+ if ( filesEl )
+ Element.show(filesEl);
+ var navEl = $('current-tab-nav');
+ if ( navEl )
+ Element.show(navEl);
+ }
+ if ( !this.ID )
+ this.grabImageData(0);
+ var div = $('upload-file');
+ if ( div )
+ Element.remove(div);
+ return false;
+ },
+
+ sendToEditor: function(id) {
+ this.grabImageData(id);
+ var link = '';
+ var display = '';
+ var h = '';
+
+ link = $A(document.forms.uploadoptions.elements.link).detect( function(i) { return i.checked; } ).value;
+ displayEl = $A(document.forms.uploadoptions.elements.display).detect( function(i) { return i.checked; } )
+ if ( displayEl )
+ display = displayEl.value;
+ else if ( 1 == this.currentImage.isImage )
+ display = 'full';
+
+ if ( 'none' != link )
+ h += "<a href='" + ( 'file' == link ? ( this.currentImage.srcBase + this.currentImage.src ) : ( this.currentImage.page + "' rel='attachment wp-att-" + this.currentImage.ID ) ) + "' title='" + this.currentImage.title + "'>";
+ if ( display && 'title' != display )
+ h += "<img src='" + ( 'thumb' == display ? ( this.currentImage.thumbBase + this.currentImage.thumb ) : ( this.currentImage.srcBase + this.currentImage.src ) ) + "' alt='" + this.currentImage.title + "' />";
+ else
+ h += this.currentImage.title;
+ if ( 'none' != link )
+ h += "</a>";
+
+ var win = window.opener ? window.opener : window.dialogArguments;
+ if ( !win )
+ win = top;
+ tinyMCE = win.tinyMCE;
+ if ( typeof tinyMCE != 'undefined' && tinyMCE.getInstanceById('content') ) {
+ tinyMCE.selectedInstance.getWin().focus();
+ tinyMCE.execCommand('mceInsertContent', false, h);
+ } else
+ win.edInsertContent(win.edCanvas, h);
+ if ( !this.ID )
+ this.cancelView();
+ return false;
+ },
+
+ deleteFile: function(id) {
+ if ( confirm( this.confirmText.replace(/%title%/g, this.currentImage.title) ) ) {
+ $('action-value').value = 'delete';
+ $('upload-file').submit();
+ return true;
+ }
+ return false;
+ }
+
+ };
+ Object.extend( theFileList, uploadL10n );
+ theFileList.initializeVars();
+ theFileList.initializeLinks();
+} );
diff --git a/wp-blog-header.php b/wp-blog-header.php
index 18863b6..b7ab2ef 100644
--- a/wp-blog-header.php
+++ b/wp-blog-header.php
@@ -2,7 +2,7 @@
if (! isset($wp_did_header)):
if ( !file_exists( dirname(__FILE__) . '/wp-config.php') ) {
- if ( strstr( $_SERVER['PHP_SELF'], 'wp-admin') ) $path = '';
+ if (strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false) $path = '';
else $path = 'wp-admin/';
include( "index-install.php" ); // install WPMU!
die();
diff --git a/wp-config-sample.php b/wp-config-sample.php
index 8e93ea1..b968f59 100644
--- a/wp-config-sample.php
+++ b/wp-config-sample.php
@@ -12,9 +12,8 @@ $base = 'BASE';
// double check $base
if( $base == 'BASE' )
die( 'Problem in wp-config.php - $base is set to BASE when it should be the path like "/" or "/blogs/"! Please fix it!' );
-
-// Change the prefix if you want to have multiple blogs in a single database.
-$table_prefix = 'wp_'; // example: 'wp_' or 'b2' or 'mylogin_'
+// You can have multiple installations in one database if you give each a unique prefix
+$table_prefix = 'wp_'; // Only numbers, letters, and underscores please!
// Change this to localize WordPress. A corresponding MO file for the
// chosen language must be installed to wp-includes/languages.
diff --git a/wp-content/themes/default/functions.php b/wp-content/themes/default/functions.php
index 5a6400e..5079fce 100644
--- a/wp-content/themes/default/functions.php
+++ b/wp-content/themes/default/functions.php
@@ -25,7 +25,7 @@ function kubrick_header_image() {
}
function kubrick_upper_color() {
- if ( strstr( $url = kubrick_header_image_url(), 'header-img.php?' ) ) {
+ if (strpos($url = kubrick_header_image_url(), 'header-img.php?') !== false) {
parse_str(substr($url, strpos($url, '?') + 1), $q);
return $q['upper'];
} else
@@ -33,7 +33,7 @@ function kubrick_upper_color() {
}
function kubrick_lower_color() {
- if ( strstr( $url = kubrick_header_image_url(), 'header-img.php?' ) ) {
+ if (strpos($url = kubrick_header_image_url(), 'header-img.php?') !== false) {
parse_str(substr($url, strpos($url, '?') + 1), $q);
return $q['lower'];
} else
diff --git a/wp-content/themes/default/searchform.php b/wp-content/themes/default/searchform.php
index c6f7140..2282083 100644
--- a/wp-content/themes/default/searchform.php
+++ b/wp-content/themes/default/searchform.php
@@ -1,4 +1,4 @@
-<form method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
+<form method="get" id="searchform" action="<?php bloginfo('url'); ?>/">
<div><input type="text" value="<?php the_search_query(); ?>" name="s" id="s" />
<input type="submit" id="searchsubmit" value="Search" />
</div>
diff --git a/wp-content/themes/default/sidebar.php b/wp-content/themes/default/sidebar.php
index 5e6745b..6834dbc 100644
--- a/wp-content/themes/default/sidebar.php
+++ b/wp-content/themes/default/sidebar.php
@@ -25,23 +25,23 @@
<p>You are currently browsing the archives for the <?php single_cat_title(''); ?> category.</p>
<?php /* If this is a yearly archive */ } elseif (is_day()) { ?>
- <p>You are currently browsing the <a href="<?php bloginfo('home'); ?>/"><?php echo bloginfo('name'); ?></a> weblog archives
+ <p>You are currently browsing the <a href="<?php bloginfo('url'); ?>/"><?php echo bloginfo('name'); ?></a> weblog archives
for the day <?php the_time('l, F jS, Y'); ?>.</p>
<?php /* If this is a monthly archive */ } elseif (is_month()) { ?>
- <p>You are currently browsing the <a href="<?php bloginfo('home'); ?>/"><?php echo bloginfo('name'); ?></a> weblog archives
+ <p>You are currently browsing the <a href="<?php bloginfo('url'); ?>/"><?php echo bloginfo('name'); ?></a> weblog archives
for <?php the_time('F, Y'); ?>.</p>
<?php /* If this is a yearly archive */ } elseif (is_year()) { ?>
- <p>You are currently browsing the <a href="<?php bloginfo('home'); ?>/"><?php echo bloginfo('name'); ?></a> weblog archives
+ <p>You are currently browsing the <a href="<?php bloginfo('url'); ?>/"><?php echo bloginfo('name'); ?></a> weblog archives
for the year <?php the_time('Y'); ?>.</p>
<?php /* If this is a monthly archive */ } elseif (is_search()) { ?>
- <p>You have searched the <a href="<?php echo bloginfo('home'); ?>/"><?php echo bloginfo('name'); ?></a> weblog archives
+ <p>You have searched the <a href="<?php echo bloginfo('url'); ?>/"><?php echo bloginfo('name'); ?></a> weblog archives
for <strong>'<?php the_search_query(); ?>'</strong>. If you are unable to find anything in these search results, you can try one of these links.</p>
<?php /* If this is a monthly archive */ } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?>
- <p>You are currently browsing the <a href="<?php echo bloginfo('home'); ?>/"><?php echo bloginfo('name'); ?></a> weblog archives.</p>
+ <p>You are currently browsing the <a href="<?php echo bloginfo('url'); ?>/"><?php echo bloginfo('name'); ?></a> weblog archives.</p>
<?php } ?>
</li>
diff --git a/wp-includes/bookmark-template.php b/wp-includes/bookmark-template.php
index e73edd7..54b6d15 100644
--- a/wp-includes/bookmark-template.php
+++ b/wp-includes/bookmark-template.php
@@ -326,15 +326,13 @@ function wp_list_bookmarks($args = '') {
$output = '';
- if ( is_array($class) )
- $class = trim(join(' ', $class));
-
if ( $categorize ) {
//Split the bookmarks into ul's for each category
$cats = get_categories("type=link&category_name=$category_name&include=$category&orderby=$category_orderby&order=$category_order&hierarchical=0");
foreach ( (array) $cats as $cat ) {
- $bookmarks = get_bookmarks("limit=$limit&category={$cat->cat_ID}&show_updated=$show_updated&orderby=$orderby&order=$order&hide_invisible=$hide_invisible&show_updated=$show_updated");
+ $params = array_merge($r, array('category'=>$cat->cat_ID));
+ $bookmarks = get_bookmarks($params);
if ( empty($bookmarks) )
continue;
$output .= str_replace(array('%id', '%class'), array("linkcat-$cat->cat_ID", $class), $category_before);
@@ -344,7 +342,7 @@ function wp_list_bookmarks($args = '') {
}
} else {
//output one single list using title_li for the title
- $bookmarks = get_bookmarks("limit=$limit&category=$category&show_updated=$show_updated&orderby=$orderby&order=$order&hide_invisible=$hide_invisible&show_updated=$show_updated");
+ $bookmarks = get_bookmarks($r);
if ( !empty($bookmarks) ) {
if ( !empty( $title_li ) ){
diff --git a/wp-includes/classes.php b/wp-includes/classes.php
index e8563ec..8c8dcd0 100644
--- a/wp-includes/classes.php
+++ b/wp-includes/classes.php
@@ -58,7 +58,7 @@ class WP {
// front. For path info requests, this leaves us with the requesting
// filename, if any. For 404 requests, this leaves us with the
// requested permalink.
- $req_uri = str_replace($pathinfo, '', urldecode($req_uri));
+ $req_uri = str_replace($pathinfo, '', rawurldecode($req_uri));
$req_uri = trim($req_uri, '/');
$req_uri = preg_replace("|^$home_path|", '', $req_uri);
$req_uri = trim($req_uri, '/');
@@ -120,14 +120,14 @@ class WP {
}
// If req_uri is empty or if it is a request for ourself, unset error.
- if ( empty($request) || $req_uri == $self || strstr($_SERVER['PHP_SELF'], 'wp-admin/') ) {
+ if (empty($request) || $req_uri == $self || strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false) {
if (isset($_GET['error']))
unset($_GET['error']);
if (isset($error))
unset($error);
- if ( isset($perma_query_vars) && strstr($_SERVER['PHP_SELF'], 'wp-admin/') )
+ if (isset($perma_query_vars) && strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false)
unset($perma_query_vars);
$this->did_permalink = false;
@@ -148,6 +148,8 @@ class WP {
$this->query_vars[$wpvar] = $_GET[$wpvar];
elseif (!empty($perma_query_vars[$wpvar]))
$this->query_vars[$wpvar] = $perma_query_vars[$wpvar];
+
+ $this->query_vars[$wpvar] = (string) $this->query_vars[$wpvar];
}
foreach ($this->private_query_vars as $var) {
diff --git a/wp-includes/comment-template.php b/wp-includes/comment-template.php
index 0782f33..ea3ce15 100644
--- a/wp-includes/comment-template.php
+++ b/wp-includes/comment-template.php
@@ -239,19 +239,19 @@ function trackback_url( $display = true ) {
function trackback_rdf($timezone = 0) {
global $id;
- if (!stristr($_SERVER['HTTP_USER_AGENT'], 'W3C_Validator')) {
- echo '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
- <rdf:Description rdf:about="';
- the_permalink();
- echo '"'."\n";
- echo ' dc:identifier="';
- the_permalink();
- echo '"'."\n";
- echo ' dc:title="'.str_replace('--', '&#x2d;&#x2d;', wptexturize(strip_tags(get_the_title()))).'"'."\n";
- echo ' trackback:ping="'.trackback_url(0).'"'." />\n";
- echo '</rdf:RDF>';
+ if (strpos($_SERVER['HTTP_USER_AGENT'], 'W3C_Validator') !== false) {
+ echo '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
+ <rdf:Description rdf:about="';
+ the_permalink();
+ echo '"'."\n";
+ echo ' dc:identifier="';
+ the_permalink();
+ echo '"'."\n";
+ echo ' dc:title="'.str_replace('--', '&#x2d;&#x2d;', wptexturize(strip_tags(get_the_title()))).'"'."\n";
+ echo ' trackback:ping="'.trackback_url(0).'"'." />\n";
+ echo '</rdf:RDF>';
}
}
diff --git a/wp-includes/cron.php b/wp-includes/cron.php
index 40004ca..e9a6462 100644
--- a/wp-includes/cron.php
+++ b/wp-includes/cron.php
@@ -83,8 +83,18 @@ function spawn_cron() {
$cron_url = get_option( 'siteurl' ) . '/wp-cron.php';
$parts = parse_url( $cron_url );
-
- $argyle = @ fsockopen( $parts['host'], $_SERVER['SERVER_PORT'], $errno, $errstr, 0.01 );
+
+ if ($parts['scheme'] == 'https') {
+ // support for SSL was added in 4.3.0
+ if (version_compare(phpversion(), '4.3.0', '>=') && function_exists('openssl_open')) {
+ $argyle = @fsockopen('ssl://' . $parts['host'], $_SERVER['SERVER_PORT'], $errno, $errstr, 0.01);
+ } else {
+ return false;
+ }
+ } else {
+ $argyle = @ fsockopen( $parts['host'], $_SERVER['SERVER_PORT'], $errno, $errstr, 0.01 );
+ }
+
if ( $argyle )
fputs( $argyle,
"GET {$parts['path']}?check=" . md5(DB_PASS . '187425') . " HTTP/1.0\r\n"
diff --git a/wp-includes/feed.php b/wp-includes/feed.php
index f7db8bf..687a304 100644
--- a/wp-includes/feed.php
+++ b/wp-includes/feed.php
@@ -165,7 +165,7 @@ function the_category_rss($type = 'rss') {
function html_type_rss() {
$type = get_bloginfo('html_type');
- if ( strstr( $type, 'xhtml' ) )
+ if (strpos($type, 'xhtml') !== false)
$type = 'xhtml';
else
$type = 'html';
diff --git a/wp-includes/formatting.php b/wp-includes/formatting.php
index daafba3..718a217 100644
--- a/wp-includes/formatting.php
+++ b/wp-includes/formatting.php
@@ -29,10 +29,9 @@ function wptexturize($text) {
if (isset($curl{0}) && '<' != $curl{0} && $next) { // If it's not a tag
// static strings
$curl = str_replace($static_characters, $static_replacements, $curl);
-
// regular expressions
$curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);
- } elseif ( strstr($curl, '<code') || strstr($curl, '<pre') || strstr($curl, '<kbd') || strstr($curl, '<style') || strstr($curl, '<script') ) {
+ } elseif (strpos($curl, '<code') !== false || strpos($curl, '<pre') !== false || strpos($curl, '<kbd') !== false || strpos($curl, '<style') !== false || strpos($curl, '<script') !== false) {
$next = false;
} else {
$next = true;
@@ -78,7 +77,7 @@ function wpautop($pee, $br = 1) {
}
$pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
$pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
- if ( strstr( $pee, '<pre' ) )
+ if (strpos($pee, '<pre') !== false)
$pee = preg_replace('!(<pre.*?>)(.*?)</pre>!ise', " stripslashes('$1') . stripslashes(clean_pre('$2')) . '</pre>' ", $pee);
$pee = preg_replace( "|\n</p>$|", '</p>', $pee );
@@ -658,7 +657,7 @@ function convert_smilies($text) {
function is_email($user_email) {
$chars = "/^([a-z0-9+_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,6}\$/i";
- if(strstr($user_email, '@') && strstr($user_email, '.')) {
+ if (strpos($user_email, '@') !== false && strpos($user_email, '.') !== false) {
if (preg_match($chars, $user_email)) {
return true;
} else {
@@ -1072,7 +1071,7 @@ function clean_url( $url, $protocols = null ) {
$strip = array('%0d', '%0a');
$url = str_replace($strip, '', $url);
$url = str_replace(';//', '://', $url);
- $url = (!strstr($url, '://')) ? 'http://'.$url : $url;
+ $url = (strpos($url, '://') === false) ? 'http://'.$url : $url;
$url = preg_replace('/&([^#])(?![a-z]{2,8};)/', '&#038;$1', $url);
if ( !is_array($protocols) )
$protocols = array('http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet');
diff --git a/wp-includes/functions.php b/wp-includes/functions.php
index 19eaa81..d843b39 100644
--- a/wp-includes/functions.php
+++ b/wp-includes/functions.php
@@ -797,7 +797,7 @@ function add_query_arg() {
$protocol = '';
}
- if ( strstr($uri, '?') ) {
+ if (strpos($uri, '?') !== false) {
$parts = explode('?', $uri, 2);
if ( 1 == count($parts) ) {
$base = '?';
@@ -806,7 +806,7 @@ function add_query_arg() {
$base = $parts[0] . '?';
$query = $parts[1];
}
- } else if ( !empty($protocol) || strstr($uri, '/') ) {
+ } elseif (!empty($protocol) || strpos($uri, '/') !== false) {
$base = $uri . '?';
$query = '';
} else {
@@ -1134,17 +1134,28 @@ function wp_upload_bits($name, $type, $bits, $overwrite = false) {
$ext = '';
else
$ext = ".$ext";
- while ( file_exists($upload['path'] . "/$filename") && !$overwrite ) {
+ while ( file_exists($upload['path'] . "/$filename") ) {
if ( '' == "$number$ext" )
$filename = $filename . ++$number . $ext;
else
$filename = str_replace("$number$ext", ++$number . $ext, $filename);
}
- $new_file = $upload['path'] . "/$filename";
- if ( ! wp_mkdir_p( dirname($new_file) ) ) {
- $message = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), dirname($new_file));
- return array('error' => $message);
+ // If we are asked to over write the file then make sure
+ // the $name has the complete path and is writable.
+ if($overwrite) {
+ if(!is_writable($name)) {
+ return(array("error" => __("Can not over write file.")));
+ }
+ $new_file = $name;
+ $filename = basename($name);
+ }
+ else {
+ $new_file = $upload['path'] . "/$filename";
+ if ( ! wp_mkdir_p( dirname($new_file) ) ) {
+ $message = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), dirname($new_file));
+ return array('error' => $message);
+ }
}
$ifp = @ fopen($new_file, 'wb');
@@ -1159,8 +1170,11 @@ function wp_upload_bits($name, $type, $bits, $overwrite = false) {
$perms = $perms & 0000666;
@ chmod($new_file, $perms);
- // Compute the URL
+ // Compute the URL if this is a new file.
$url = $upload['url'] . "/$filename";
+ if($overwrite) {
+ $url = $name;
+ }
return array('file' => $new_file, 'url' => $url, 'error' => false);
}
@@ -1289,7 +1303,7 @@ function wp_nonce_ays($action) {
$adminurl = get_option('siteurl') . '/wp-admin';
if ( wp_get_referer() )
- $adminurl = wp_specialchars(wp_get_referer(), 1);
+ $adminurl = attribute_escape(wp_get_referer());
$title = __('WordPress Confirmation');
// Remove extra layer of slashes.
@@ -1342,7 +1356,7 @@ function wp_die( $message, $title = '' ) {
if ( empty($title) )
$title = __('WordPress &rsaquo; Error');
- if ( strstr($_SERVER['PHP_SELF'], 'wp-admin') )
+ if (strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false)
$admin_dir = '';
else
$admin_dir = 'wp-admin/';
diff --git a/wp-includes/general-template.php b/wp-includes/general-template.php
index b0fd238..81d696c 100644
--- a/wp-includes/general-template.php
+++ b/wp-includes/general-template.php
@@ -60,9 +60,11 @@ function wp_meta() {
function bloginfo($show='') {
$info = get_bloginfo($show);
- if (!strstr($show, 'url') && //don't filter URLs
- !strstr($show, 'directory') &&
- !strstr($show, 'home')) {
+
+ // Don't filter URL's.
+ if (strpos($show, 'url') === false ||
+ strpos($show, 'directory') === false ||
+ strpos($show, 'home') === false) {
$info = apply_filters('bloginfo', $info, $show);
$info = convert_chars($info);
} else {
@@ -72,13 +74,18 @@ function bloginfo($show='') {
echo $info;
}
-
+/**
+ * Note: some of these values are DEPRECATED. Meaning they could be
+ * taken out at any time and shouldn't be relied upon. Options
+ * without "// DEPRECATED" are the preferred and recommended ways
+ * to get the information.
+ */
function get_bloginfo($show='') {
switch($show) {
case 'url' :
- case 'home' :
- case 'siteurl' :
+ case 'home' : // DEPRECATED
+ case 'siteurl' : // DEPRECATED
$output = get_option('home');
break;
case 'wpurl' :
@@ -149,8 +156,7 @@ function get_bloginfo($show='') {
function wp_title($sep = '&raquo;', $display = true) {
- global $wpdb;
- global $m, $year, $monthnum, $day, $category_name, $wp_locale, $posts;
+ global $wpdb, $wp_locale, $wp_query;
$cat = get_query_var('cat');
$p = get_query_var('p');
@@ -158,6 +164,10 @@ function wp_title($sep = '&raquo;', $display = true) {
$category_name = get_query_var('category_name');
$author = get_query_var('author');
$author_name = get_query_var('author_name');
+ $m = get_query_var('m');
+ $year = get_query_var('year');
+ $monthnum = get_query_var('monthnum');
+ $day = get_query_var('day');
$title = '';
// If there's a category
@@ -165,8 +175,7 @@ function wp_title($sep = '&raquo;', $display = true) {
// category exclusion
if ( !stristr($cat,'-') )
$title = apply_filters('single_cat_title', get_the_category_by_ID($cat));
- }
- if ( !empty($category_name) ) {
+ } elseif ( !empty($category_name) ) {
if ( stristr($category_name,'/') ) {
$category_name = explode('/',$category_name);
if ( $category_name[count($category_name)-1] )
@@ -198,14 +207,15 @@ function wp_title($sep = '&raquo;', $display = true) {
if ( !empty($year) ) {
$title = $year;
if ( !empty($monthnum) )
- $title .= " $sep ".$wp_locale->get_month($monthnum);
+ $title .= " $sep " . $wp_locale->get_month($monthnum);
if ( !empty($day) )
- $title .= " $sep ".zeroise($day, 2);
+ $title .= " $sep " . zeroise($day, 2);
}
// If there is a post
if ( is_single() || is_page() ) {
- $title = strip_tags($posts[0]->post_title);
+ $post = $wp_query->get_queried_object();
+ $title = strip_tags($post->post_title);
$title = apply_filters('single_post_title', $title);
}
@@ -258,7 +268,12 @@ function single_cat_title($prefix = '', $display = true ) {
function single_month_title($prefix = '', $display = true ) {
- global $m, $monthnum, $wp_locale, $year;
+ global $wp_locale;
+
+ $m = get_query_var('m');
+ $year = get_query_var('year');
+ $monthnum = get_query_var('monthnum');
+
if ( !empty($monthnum) && !empty($year) ) {
$my_year = $year;
$my_month = $wp_locale->get_month($monthnum);
@@ -336,12 +351,12 @@ function wp_get_archives($args = '') {
$add_hours = intval(get_option('gmt_offset'));
$add_minutes = intval(60 * (get_option('gmt_offset') - $add_hours));
+ //filters
+ $where = apply_filters('getarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'", $r );
+ $join = apply_filters('getarchives_join', "", $r);
+
if ( 'monthly' == $type ) {
- $arcresults = wp_cache_get( md5('archives' . $type . $limit), 'general');
- if ( !$arcresults ) {
- $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC" . $limit);
- wp_cache_set( md5('archives' . $type . $limit), $arcresults, 'general', 86400 );
- }
+ $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC" . $limit);
if ( $arcresults ) {
$afterafter = $after;
foreach ( $arcresults as $arcresult ) {
@@ -353,7 +368,7 @@ function wp_get_archives($args = '') {
}
}
} elseif ('yearly' == $type) {
- $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS `year`, count(ID) as posts FROM $wpdb->posts WHERE post_type ='post' AND post_status = 'publish' GROUP BY YEAR(post_date) ORDER BY post_date DESC" . $limit);
+ $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS `year`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date) ORDER BY post_date DESC" . $limit);
if ($arcresults) {
$afterafter = $after;
foreach ($arcresults as $arcresult) {
@@ -365,7 +380,7 @@ function wp_get_archives($args = '') {
}
}
} elseif ( 'daily' == $type ) {
- $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, DAYOFMONTH(post_date) AS `dayofmonth`, count(ID) as posts FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY YEAR(post_date), MONTH(post_date), DAYOFMONTH(post_date) ORDER BY post_date DESC" . $limit);
+ $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, DAYOFMONTH(post_date) AS `dayofmonth`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date), DAYOFMONTH(post_date) ORDER BY post_date DESC" . $limit);
if ( $arcresults ) {
$afterafter = $after;
foreach ( $arcresults as $arcresult ) {
@@ -379,7 +394,7 @@ function wp_get_archives($args = '') {
}
} elseif ( 'weekly' == $type ) {
$start_of_week = get_option('start_of_week');
- $arcresults = $wpdb->get_results("SELECT DISTINCT WEEK(post_date, $start_of_week) AS `week`, YEAR(post_date) AS yr, DATE_FORMAT(post_date, '%Y-%m-%d') AS yyyymmdd, count(ID) as posts FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY WEEK(post_date, $start_of_week), YEAR(post_date) ORDER BY post_date DESC" . $limit);
+ $arcresults = $wpdb->get_results("SELECT DISTINCT WEEK(post_date, $start_of_week) AS `week`, YEAR(post_date) AS yr, DATE_FORMAT(post_date, '%Y-%m-%d') AS yyyymmdd, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY WEEK(post_date, $start_of_week), YEAR(post_date) ORDER BY post_date DESC" . $limit);
$arc_w_last = '';
$afterafter = $after;
if ( $arcresults ) {
@@ -400,7 +415,7 @@ function wp_get_archives($args = '') {
}
} elseif ( ( 'postbypost' == $type ) || ('alpha' == $type) ) {
('alpha' == $type) ? $orderby = "post_title ASC " : $orderby = "post_date DESC ";
- $arcresults = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY $orderby $limit");
+ $arcresults = $wpdb->get_results("SELECT * FROM $wpdb->posts $join $where $orderby $limit");
if ( $arcresults ) {
foreach ( $arcresults as $arcresult ) {
if ( $arcresult->post_date != '0000-00-00 00:00:00' ) {
@@ -552,9 +567,7 @@ function get_calendar($initial = true) {
$daywithpost = array();
}
-
-
- if ( strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE') || strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'camino') || strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'safari') )
+ if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false || strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'camino') !== false || strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'safari') !== false)
$ak_title_separator = "\n";
else
$ak_title_separator = ', ';
diff --git a/wp-includes/js/autosave.js b/wp-includes/js/autosave.js
new file mode 100644
index 0000000..ae2c105
--- /dev/null
+++ b/wp-includes/js/autosave.js
@@ -0,0 +1,158 @@
+var autosaveLast = '';
+var autosavePeriodical;
+
+function autosave_start_timer() {
+ var form = $('post');
+ autosaveLast = form.post_title.value+form.content.value;
+ // Keep autosave_interval in sync with edit_post().
+ autosavePeriodical = new PeriodicalExecuter(autosave, autosaveL10n.autosaveInterval);
+ //Disable autosave after the form has been submitted
+ if(form.addEventListener) {
+ form.addEventListener("submit", function () { autosavePeriodical.currentlyExecuting = true; }, false);
+ }
+ if(form.attachEvent) {
+ form.save ? form.save.attachEvent("onclick", function () { autosavePeriodical.currentlyExecuting = true; }) : null;
+ form.submit ? form.submit.attachEvent("onclick", function () { autosavePeriodical.currentlyExecuting = true; }) : null;
+ form.publish ? form.publish.attachEvent("onclick", function () { autosavePeriodical.currentlyExecuting = true; }) : null;
+ form.deletepost ? form.deletepost.attachEvent("onclick", function () { autosavePeriodical.currentlyExecuting = true; }) : null;
+ }
+}
+addLoadEvent(autosave_start_timer)
+
+function autosave_cur_time() {
+ var now = new Date();
+ return "" + ((now.getHours() >12) ? now.getHours() -12 : now.getHours()) +
+ ((now.getMinutes() < 10) ? ":0" : ":") + now.getMinutes() +
+ ((now.getSeconds() < 10) ? ":0" : ":") + now.getSeconds();
+}
+
+function autosave_update_nonce() {
+ var response = nonceAjax.response;
+ document.getElementsByName('_wpnonce')[0].value = response;
+}
+
+function autosave_update_post_ID() {
+ var response = autosaveAjax.response;
+ var res = parseInt(response);
+ var message;
+
+ if(isNaN(res)) {
+ message = autosaveL10n.errorText.replace(/%response%/g, response);
+ } else {
+ message = autosaveL10n.saveText.replace(/%time%/g, autosave_cur_time());
+ $('post_ID').name = "post_ID";
+ $('post_ID').value = res;
+ // We need new nonces
+ nonceAjax = new sack();
+ nonceAjax.element = null;
+ nonceAjax.setVar("action", "autosave-generate-nonces");
+ nonceAjax.setVar("post_ID", res);
+ nonceAjax.setVar("cookie", document.cookie);
+ nonceAjax.setVar("post_type", $('post_type').value);
+ nonceAjax.requestFile = autosaveL10n.requestFile;
+ nonceAjax.onCompletion = autosave_update_nonce;
+ nonceAjax.method = "POST";
+ nonceAjax.runAJAX();
+ $('hiddenaction').value = 'editpost';
+ }
+ $('autosave').innerHTML = message;
+ autosave_enable_buttons();
+}
+
+function autosave_loading() {
+ $('autosave').innerHTML = autosaveL10n.savingText;
+}
+
+function autosave_saved() {
+ var response = autosaveAjax.response;
+ var res = parseInt(response);
+ var message;
+
+ if(isNaN(res)) {
+ message = autosaveL10n.errorText.replace(/%response%/g, response);
+ } else {
+ message = autosaveL10n.saveText.replace(/%time%/g, autosave_cur_time());
+ }
+ $('autosave').innerHTML = message;
+ autosave_enable_buttons();
+}
+
+function autosave_disable_buttons() {
+ var form = $('post');
+ form.save ? form.save.disabled = 'disabled' : null;
+ form.submit ? form.submit.disabled = 'disabled' : null;
+ form.publish ? form.publish.disabled = 'disabled' : null;
+ form.deletepost ? form.deletepost.disabled = 'disabled' : null;
+ setTimeout('autosave_enable_buttons();', 1000); // Re-enable 1 sec later. Just gives autosave a head start to avoid collisions.
+}
+
+function autosave_enable_buttons() {
+ var form = $('post');
+ form.save ? form.save.disabled = '' : null;
+ form.submit ? form.submit.disabled = '' : null;
+ form.publish ? form.publish.disabled = '' : null;
+ form.deletepost ? form.deletepost.disabled = '' : null;
+}
+
+function autosave() {
+ var form = $('post');
+ var rich = ((typeof tinyMCE != "undefined") && tinyMCE.getInstanceById('content')) ? true : false;
+
+ autosaveAjax = new sack();
+
+ /* Gotta do this up here so we can check the length when tinyMCE is in use */
+ if ( typeof tinyMCE == "undefined" || tinyMCE.configs.length < 1 || rich == false ) {
+ autosaveAjax.setVar("content", form.content.value);
+ } else {
+ // Don't run while the TinyMCE spellcheck is on.
+ if(tinyMCE.selectedInstance.spellcheckerOn) return;
+ tinyMCE.wpTriggerSave();
+ autosaveAjax.setVar("content", form.content.value);
+ }
+
+ if(form.post_title.value.length==0 || form.content.value.length==0 || form.post_title.value+form.content.value == autosaveLast)
+ return;
+
+ autosave_disable_buttons();
+
+ autosaveLast = form.post_title.value+form.content.value;
+
+ cats = document.getElementsByName("post_category[]");
+ goodcats = ([]);
+ for(i=0;i<cats.length;i++) {
+ if(cats[i].checked)
+ goodcats.push(cats[i].value);
+ }
+ catslist = goodcats.join(",");
+
+ autosaveAjax.setVar("action", "autosave");
+ autosaveAjax.setVar("cookie", document.cookie);
+ autosaveAjax.setVar("catslist", catslist);
+ autosaveAjax.setVar("post_ID", $("post_ID").value);
+ autosaveAjax.setVar("post_title", form.post_title.value);
+ autosaveAjax.setVar("post_type", form.post_type.value);
+ if ( form.comment_status.checked )
+ autosaveAjax.setVar("comment_status", 'open');
+ if ( form.ping_status.checked )
+ autosaveAjax.setVar("ping_status", 'open');
+ if(form.excerpt)
+ autosaveAjax.setVar("excerpt", form.excerpt.value);
+
+ if ( typeof tinyMCE == "undefined" || tinyMCE.configs.length < 1 || rich == false ) {
+ autosaveAjax.setVar("content", form.content.value);
+ } else {
+ tinyMCE.wpTriggerSave();
+ autosaveAjax.setVar("content", form.content.value);
+ }
+
+ autosaveAjax.requestFile = autosaveL10n.requestFile;
+ autosaveAjax.method = "POST";
+ autosaveAjax.element = null;
+ autosaveAjax.onLoading = autosave_loading;
+ autosaveAjax.onInteractive = autosave_loading;
+ if(parseInt($("post_ID").value) < 1)
+ autosaveAjax.onCompletion = autosave_update_post_ID;
+ else
+ autosaveAjax.onCompletion = autosave_saved;
+ autosaveAjax.runAJAX();
+}
diff --git a/wp-includes/js/jquery/jquery.form.js b/wp-includes/js/jquery/jquery.form.js
new file mode 100644
index 0000000..7a29393
--- /dev/null
+++ b/wp-includes/js/jquery/jquery.form.js
@@ -0,0 +1,644 @@
+/*
+ * jQuery form plugin
+ * @requires jQuery v1.0.3
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Revision: $Id$
+ * Version: 0.9
+ */
+
+/**
+ * ajaxSubmit() provides a mechanism for submitting an HTML form using AJAX.
+ *
+ * ajaxSubmit accepts a single argument which can be either a success callback function
+ * or an options Object. If a function is provided it will be invoked upon successful
+ * completion of the submit and will be passed the response from the server.
+ * If an options Object is provided, the following attributes are supported:
+ *
+ * target: Identifies the element(s) in the page to be updated with the server response.
+ * This value may be specified as a jQuery selection string, a jQuery object,
+ * or a DOM element.
+ * default value: null
+ *
+ * url: URL to which the form data will be submitted.
+ * default value: value of form's 'action' attribute
+ *
+ * method: @deprecated use 'type'
+ * type: The method in which the form data should be submitted, 'GET' or 'POST'.
+ * default value: value of form's 'method' attribute (or 'GET' if none found)
+ *
+ * before: @deprecated use 'beforeSubmit'
+ * beforeSubmit: Callback method to be invoked before the form is submitted.
+ * default value: null
+ *
+ * after: @deprecated use 'success'
+ * success: Callback method to be invoked after the form has been successfully submitted
+ * and the response has been returned from the server
+ * default value: null
+ *
+ * dataType: Expected dataType of the response. One of: null, 'xml', 'script', or 'json'
+ * default value: null
+ *
+ * semantic: Boolean flag indicating whether data must be submitted in semantic order (slower).
+ * default value: false
+ *
+ * resetForm: Boolean flag indicating whether the form should be reset if the submit is successful
+ *
+ * clearForm: Boolean flag indicating whether the form should be cleared if the submit is successful
+ *
+ *
+ * The 'beforeSubmit' callback can be provided as a hook for running pre-submit logic or for
+ * validating the form data. If the 'beforeSubmit' callback returns false then the form will
+ * not be submitted. The 'beforeSubmit' callback is invoked with three arguments: the form data
+ * in array format, the jQuery object, and the options object passed into ajaxSubmit.
+ * The form data array takes the following form:
+ *
+ * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
+ *
+ * If a 'success' callback method is provided it is invoked after the response has been returned
+ * from the server. It is passed the responseText or responseXML value (depending on dataType).
+ * See jQuery.ajax for further details.
+ *
+ *
+ * The dataType option provides a means for specifying how the server response should be handled.
+ * This maps directly to the jQuery.httpData method. The following values are supported:
+ *
+ * 'xml': if dataType == 'xml' the server response is treated as XML and the 'after'
+ * callback method, if specified, will be passed the responseXML value
+ * 'json': if dataType == 'json' the server response will be evaluted and passed to
+ * the 'after' callback, if specified
+ * 'script': if dataType == 'script' the server response is evaluated in the global context
+ *
+ *
+ * Note that it does not make sense to use both the 'target' and 'dataType' options. If both
+ * are provided the target will be ignored.
+ *
+ * The semantic argument can be used to force form serialization in semantic order.
+ * This is normally true anyway, unless the form contains input elements of type='image'.
+ * If your form must be submitted with name/value pairs in semantic order and your form
+ * contains an input of type='image" then pass true for this arg, otherwise pass false
+ * (or nothing) to avoid the overhead for this logic.
+ *
+ *
+ * When used on its own, ajaxSubmit() is typically bound to a form's submit event like this:
+ *
+ * $("#form-id").submit(function() {
+ * $(this).ajaxSubmit(options);
+ * return false; // cancel conventional submit
+ * });
+ *
+ * When using ajaxForm(), however, this is done for you.
+ *
+ * @example
+ * $('#myForm').ajaxSubmit(function(data) {
+ * alert('Form submit succeeded! Server returned: ' + data);
+ * });
+ * @desc Submit form and alert server response
+ *
+ *
+ * @example
+ * var options = {
+ * target: '#myTargetDiv'
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc Submit form and update page element with server response
+ *
+ *
+ * @example
+ * var options = {
+ * success: function(responseText) {
+ * alert(responseText);
+ * }
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc Submit form and alert the server response
+ *
+ *
+ * @example
+ * var options = {
+ * beforeSubmit: function(formArray, jqForm) {
+ * if (formArray.length == 0) {
+ * alert('Please enter data.');
+ * return false;
+ * }
+ * }
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc Pre-submit validation which aborts the submit operation if form data is empty
+ *
+ *
+ * @example
+ * var options = {
+ * url: myJsonUrl.php,
+ * dataType: 'json',
+ * success: function(data) {
+ * // 'data' is an object representing the the evaluated json data
+ * }
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc json data returned and evaluated
+ *
+ *
+ * @example
+ * var options = {
+ * url: myXmlUrl.php,
+ * dataType: 'xml',
+ * success: function(responseXML) {
+ * // responseXML is XML document object
+ * var data = $('myElement', responseXML).text();
+ * }
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc XML data returned from server
+ *
+ *
+ * @example
+ * var options = {
+ * resetForm: true
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc submit form and reset it if successful
+ *
+ * @example
+ * $('#myForm).submit(function() {
+ * $(this).ajaxSubmit();
+ * return false;
+ * });
+ * @desc Bind form's submit event to use ajaxSubmit
+ *
+ *
+ * @name ajaxSubmit
+ * @type jQuery
+ * @param options object literal containing options which control the form submission process
+ * @cat Plugins/Form
+ * @return jQuery
+ * @see formToArray
+ * @see ajaxForm
+ * @see $.ajax
+ * @author jQuery Community
+ */
+jQuery.fn.ajaxSubmit = function(options) {
+ if (typeof options == 'function')
+ options = { success: options };
+
+ options = jQuery.extend({
+ url: this.attr('action') || '',
+ method: this.attr('method') || 'GET'
+ }, options || {});
+
+ // remap deprecated options (temporarily)
+ options.success = options.success || options.after;
+ options.beforeSubmit = options.beforeSubmit || options.before;
+ options.type = options.type || options.method;
+
+ var a = this.formToArray(options.semantic);
+
+ // give pre-submit callback an opportunity to abort the submit
+ if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) return this;
+
+ var q = jQuery.param(a);
+
+ if (options.type.toUpperCase() == 'GET') {
+ // if url already has a '?' then append args after '&'
+ options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
+ options.data = null; // data is null for 'get'
+ }
+ else
+ options.data = q; // data is the query string for 'post'
+
+ var $form = this, callbacks = [];
+ if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
+ if (options.clearForm) callbacks.push(function() { $form.clearForm(); });
+
+ // perform a load on the target only if dataType is not provided
+ if (!options.dataType && options.target) {
+ var oldSuccess = options.success || function(){};
+ callbacks.push(function(data, status) {
+ jQuery(options.target).attr("innerHTML", data).evalScripts().each(oldSuccess, [data, status]);
+ });
+ }
+ else if (options.success)
+ callbacks.push(options.success);
+
+ options.success = function(data, status) {
+ for (var i=0, max=callbacks.length; i < max; i++)
+ callbacks[i](data, status);
+ };
+
+ jQuery.ajax(options);
+ return this;
+};
+
+/**
+ * ajaxForm() provides a mechanism for fully automating form submission.
+ *
+ * The advantages of using this method instead of ajaxSubmit() are:
+ *
+ * 1: This method will include coordinates for <input type="image" /> elements (if the element
+ * is used to submit the form).
+ * 2. This method will include the submit element's name/value data (for the element that was
+ * used to submit the form).
+ * 3. This method binds the submit() method to the form for you.
+ *
+ * Note that for accurate x/y coordinates of image submit elements in all browsers
+ * you need to also use the "dimensions" plugin (this method will auto-detect its presence).
+ *
+ * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
+ * passes the options argument along after properly binding events for submit elements and
+ * the form itself. See ajaxSubmit for a full description of the options argument.
+ *
+ *
+ * @example
+ * var options = {
+ * target: '#myTargetDiv'
+ * };
+ * $('#myForm').ajaxSForm(options);
+ * @desc Bind form's submit event so that 'myTargetDiv' is updated with the server response
+ * when the form is submitted.
+ *
+ *
+ * @example
+ * var options = {
+ * success: function(responseText) {
+ * alert(responseText);
+ * }
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc Bind form's submit event so that server response is alerted after the form is submitted.
+ *
+ *
+ * @example
+ * var options = {
+ * beforeSubmit: function(formArray, jqForm) {
+ * if (formArray.length == 0) {
+ * alert('Please enter data.');
+ * return false;
+ * }
+ * }
+ * };
+ * $('#myForm').ajaxSubmit(options);
+ * @desc Bind form's submit event so that pre-submit callback is invoked before the form
+ * is submitted.
+ *
+ *
+ * @name ajaxForm
+ * @param options object literal containing options which control the form submission process
+ * @return jQuery
+ * @cat Plugins/Form
+ * @type jQuery
+ * @see ajaxSubmit
+ * @author jQuery Community
+ */
+jQuery.fn.ajaxForm = function(options) {
+ return this.each(function() {
+ jQuery("input:submit,input:image,button:submit", this).click(function(ev) {
+ var $form = this.form;
+ $form.clk = this;
+ if (this.type == 'image') {
+ if (ev.offsetX != undefined) {
+ $form.clk_x = ev.offsetX;
+ $form.clk_y = ev.offsetY;
+ } else if (typeof jQuery.fn.offset == 'function') { // try to use dimensions plugin
+ var offset = jQuery(this).offset();
+ $form.clk_x = ev.pageX - offset.left;
+ $form.clk_y = ev.pageY - offset.top;
+ } else {
+ $form.clk_x = ev.pageX - this.offsetLeft;
+ $form.clk_y = ev.pageY - this.offsetTop;
+ }
+ }
+ // clear form vars
+ setTimeout(function() {
+ $form.clk = $form.clk_x = $form.clk_y = null;
+ }, 10);
+ })
+ }).submit(function(e) {
+ jQuery(this).ajaxSubmit(options);
+ return false;
+ });
+};
+
+
+/**
+ * formToArray() gathers form element data into an array of objects that can
+ * be passed to any of the following ajax functions: $.get, $.post, or load.
+ * Each object in the array has both a 'name' and 'value' property. An example of
+ * an array for a simple login form might be:
+ *
+ * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
+ *
+ * It is this array that is passed to pre-submit callback functions provided to the
+ * ajaxSubmit() and ajaxForm() methods.
+ *
+ * The semantic argument can be used to force form serialization in semantic order.
+ * This is normally true anyway, unless the form contains input elements of type='image'.
+ * If your form must be submitted with name/value pairs in semantic order and your form
+ * contains an input of type='image" then pass true for this arg, otherwise pass false
+ * (or nothing) to avoid the overhead for this logic.
+ *
+ * @example var data = $("#myForm").formToArray();
+ * $.post( "myscript.cgi", data );
+ * @desc Collect all the data from a form and submit it to the server.
+ *
+ * @name formToArray
+ * @param semantic true if serialization must maintain strict semantic ordering of elements (slower)
+ * @type Array<Object>
+ * @cat Plugins/Form
+ * @see ajaxForm
+ * @see ajaxSubmit
+ * @author jQuery Community
+ */
+jQuery.fn.formToArray = function(semantic) {
+ var a = [];
+ if (this.length == 0) return a;
+
+ var form = this[0];
+ var els = semantic ? form.getElementsByTagName('*') : form.elements;
+ if (!els) return a;
+ for(var i=0, max=els.length; i < max; i++) {
+ var el = els[i];
+ var n = el.name;
+ if (!n) continue;
+
+ if (semantic && form.clk && el.type == "image") {
+ // handle image inputs on the fly when semantic == true
+ if(!el.disabled && form.clk == el)
+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+ continue;
+ }
+ var v = jQuery.fieldValue(el, true);
+ if (v === null) continue;
+ if (v.constructor == Array) {
+ for(var j=0, jmax=v.length; j < jmax; j++)
+ a.push({name: n, value: v[j]});
+ }
+ else
+ a.push({name: n, value: v});
+ }
+
+ if (!semantic && form.clk) {
+ // input type=='image' are not found in elements array! handle them here
+ var inputs = form.getElementsByTagName("input");
+ for(var i=0, max=inputs.length; i < max; i++) {
+ var input = inputs[i];
+ var n = input.name;
+ if(n && !input.disabled && input.type == "image" && form.clk == input)
+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+ }
+ }
+ return a;
+};
+
+
+/**
+ * Serializes form data into a 'submittable' string. This method will return a string
+ * in the format: name1=value1&amp;name2=value2
+ *
+ * The semantic argument can be used to force form serialization in semantic order.
+ * If your form must be submitted with name/value pairs in semantic order then pass
+ * true for this arg, otherwise pass false (or nothing) to avoid the overhead for
+ * this logic (which can be significant for very large forms).
+ *
+ * @example var data = $("#myForm").formSerialize();
+ * $.ajax('POST', "myscript.cgi", data);
+ * @desc Collect all the data from a form into a single string
+ *
+ * @name formSerialize
+ * @param semantic true if serialization must maintain strict semantic ordering of elements (slower)
+ * @type String
+ * @cat Plugins/Form
+ * @see formToArray
+ * @author jQuery Community
+ */
+jQuery.fn.formSerialize = function(semantic) {
+ //hand off to jQuery.param for proper encoding
+ return jQuery.param(this.formToArray(semantic));
+};
+
+
+/**
+ * Serializes all field elements in the jQuery object into a query string.
+ * This method will return a string in the format: name1=value1&amp;name2=value2
+ *
+ * The successful argument controls whether or not serialization is limited to
+ * 'successful' controls (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true.
+ *
+ * @example var data = $("input").formSerialize();
+ * @desc Collect the data from all successful input elements into a query string
+ *
+ * @example var data = $(":radio").formSerialize();
+ * @desc Collect the data from all successful radio input elements into a query string
+ *
+ * @example var data = $("#myForm :checkbox").formSerialize();
+ * @desc Collect the data from all successful checkbox input elements in myForm into a query string
+ *
+ * @example var data = $("#myForm :checkbox").formSerialize(false);
+ * @desc Collect the data from all checkbox elements in myForm (even the unchecked ones) into a query string
+ *
+ * @example var data = $(":input").formSerialize();
+ * @desc Collect the data from all successful input, select, textarea and button elements into a query string
+ *
+ * @name fieldSerialize
+ * @param successful true if only successful controls should be serialized (default is true)
+ * @type String
+ * @cat Plugins/Form
+ */
+jQuery.fn.fieldSerialize = function(successful) {
+ var a = [];
+ this.each(function() {
+ var n = this.name;
+ if (!n) return;
+ var v = jQuery.fieldValue(this, successful);
+ if (v && v.constructor == Array) {
+ for (var i=0,max=v.length; i < max; i++)
+ a.push({name: n, value: v[i]});
+ }
+ else if (v !== null && typeof v != 'undefined')
+ a.push({name: this.name, value: v});
+ });
+ //hand off to jQuery.param for proper encoding
+ return jQuery.param(a);
+};
+
+
+/**
+ * Returns the value of the field element in the jQuery object. If there is more than one field element
+ * in the jQuery object the value of the first successful one is returned.
+ *
+ * The successful argument controls whether or not the field element must be 'successful'
+ * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true. If this value is false then
+ * the value of the first field element in the jQuery object is returned.
+ *
+ * Note: If no valid value can be determined the return value will be undifined.
+ *
+ * Note: The fieldValue returned for a select-multiple element or for a checkbox input will
+ * always be an array if it is not undefined.
+ *
+ *
+ * @example var data = $("#myPasswordElement").formValue();
+ * @desc Gets the current value of the myPasswordElement element
+ *
+ * @example var data = $("#myForm :input").formValue();
+ * @desc Get the value of the first successful control in the jQuery object.
+ *
+ * @example var data = $("#myForm :checkbox").formValue();
+ * @desc Get the array of values for the first set of successful checkbox controls in the jQuery object.
+ *
+ * @example var data = $("#mySingleSelect").formValue();
+ * @desc Get the value of the select control
+ *
+ * @example var data = $("#myMultiSelect").formValue();
+ * @desc Get the array of selected values for the select-multiple control
+ *
+ * @name fieldValue
+ * @param Boolean successful true if value returned must be for a successful controls (default is true)
+ * @type String or Array<String>
+ * @cat Plugins/Form
+ */
+jQuery.fn.fieldValue = function(successful) {
+ var cbVal, cbName;
+
+ // loop until we find a value
+ for (var i=0, max=this.length; i < max; i++) {
+ var el = this[i];
+ var v = jQuery.fieldValue(el, successful);
+ if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
+ continue;
+
+ // for checkboxes, consider multiple elements, for everything else just return first valid value
+ if (el.type != 'checkbox') return v;
+
+ cbName = cbName || el.name;
+ if (cbName != el.name) // return if we hit a checkbox with a different name
+ return cbVal;
+ cbVal = cbVal || [];
+ cbVal.push(v);
+ }
+ return cbVal;
+};
+
+/**
+ * Returns the value of the field element.
+ *
+ * The successful argument controls whether or not the field element must be 'successful'
+ * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true. If the given element is not
+ * successful and the successful arg is not false then the returned value will be null.
+ *
+ * Note: The fieldValue returned for a select-multiple element will always be an array.
+ *
+ * @example var data = jQuery.fieldValue($("#myPasswordElement")[0]);
+ * @desc Gets the current value of the myPasswordElement element
+ *
+ * @name fieldValue
+ * @param Element el The DOM element for which the value will be returned
+ * @param Boolean successful true if value returned must be for a successful controls (default is true)
+ * @type String or Array<String>
+ * @cat Plugins/Form
+ */
+jQuery.fieldValue = function(el, successful) {
+ var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
+ if (typeof successful == 'undefined') successful = true;
+
+ if (successful && ( !n || el.disabled || t == 'reset' ||
+ (t == 'checkbox' || t == 'radio') && !el.checked ||
+ (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
+ tag == 'select' && el.selectedIndex == -1))
+ return null;
+
+ if (tag == 'select') {
+ var index = el.selectedIndex;
+ if (index < 0) return null;
+ var a = [], ops = el.options;
+ var one = (t == 'select-one');
+ var max = (one ? index+1 : ops.length);
+ for(var i=(one ? index : 0); i < max; i++) {
+ var op = ops[i];
+ if (op.selected) {
+ // extra pain for IE...
+ var v = jQuery.browser.msie && !(op.attributes['value'].specified) ? op.text : op.value;
+ if (one) return v;
+ a.push(v);
+ }
+ }
+ return a;
+ }
+ return el.value;
+};
+
+
+/**
+ * Clears the form data. Takes the following actions on the form's input fields:
+ * - input text fields will have their 'value' property set to the empty string
+ * - select elements will have their 'selectedIndex' property set to -1
+ * - checkbox and radio inputs will have their 'checked' property set to false
+ * - inputs of type submit, button, reset, and hidden will *not* be effected
+ * - button elements will *not* be effected
+ *
+ * @example $('form').clearForm();
+ * @desc Clears all forms on the page.
+ *
+ * @name clearForm
+ * @type jQuery
+ * @cat Plugins/Form
+ * @see resetForm
+ */
+jQuery.fn.clearForm = function() {
+ return this.each(function() {
+ jQuery('input,select,textarea', this).clearFields();
+ });
+};
+
+/**
+ * Clears the selected form elements. Takes the following actions on the matched elements:
+ * - input text fields will have their 'value' property set to the empty string
+ * - select elements will have their 'selectedIndex' property set to -1
+ * - checkbox and radio inputs will have their 'checked' property set to false
+ * - inputs of type submit, button, reset, and hidden will *not* be effected
+ * - button elements will *not* be effected
+ *
+ * @example $('.myInputs').clearFields();
+ * @desc Clears all inputs with class myInputs
+ *
+ * @name clearFields
+ * @type jQuery
+ * @cat Plugins/Form
+ * @see clearForm
+ */
+jQuery.fn.clearFields = jQuery.fn.clearInputs = function() {
+ return this.each(function() {
+ var t = this.type, tag = this.tagName.toLowerCase();
+ if (t == 'text' || t == 'password' || tag == 'textarea')
+ this.value = '';
+ else if (t == 'checkbox' || t == 'radio')
+ this.checked = false;
+ else if (tag == 'select')
+ this.selectedIndex = -1;
+ });
+};
+
+
+/**
+ * Resets the form data. Causes all form elements to be reset to their original value.
+ *
+ * @example $('form').resetForm();
+ * @desc Resets all forms on the page.
+ *
+ * @name resetForm
+ * @type jQuery
+ * @cat Plugins/Form
+ * @see clearForm
+ */
+jQuery.fn.resetForm = function() {
+ return this.each(function() {
+ // guard against an input with the name of 'reset'
+ // note that IE reports the reset function as an 'object'
+ if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
+ this.reset();
+ });
+};
diff --git a/wp-includes/js/jquery/jquery.js b/wp-includes/js/jquery/jquery.js
index 31650a1..c684bda 100644
--- a/wp-includes/js/jquery/jquery.js
+++ b/wp-includes/js/jquery/jquery.js
@@ -1,2 +1 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('k(1v 1t.6=="Q"){1t.Q=1t.Q;u 6=l(a,c){k(1t==7)q 1p 6(a,c);a=a||12;k(6.1k(a))q 1p 6(12)[6.C.28?"28":"2E"](a);k(1v a=="22"){u m=/^[^<]*(<(.|\\n)+>)[^>]*$/.2B(a);k(m)a=6.3W([m[1]]);H q 1p 6(c).2o(a)}q 7.4M(a.1g==2A&&a||(a.3e||a.G&&a!=1t&&!a.1V&&a[0]!=Q&&a[0].1V)&&6.3H(a)||[a])};k(1v $!="Q")6.2O$=$;u $=6;6.C=6.8o={3e:"1.1.1",8p:l(){q 7.G},G:0,2a:l(1R){q 1R==Q?6.3H(7):7[1R]},2q:l(a){u J=6(7);J.6j=7;q J.4M(a)},4M:l(a){7.G=0;[].1h.14(7,a);q 7},I:l(C,1y){q 6.I(7,C,1y)},2b:l(19){u 4I=-1;7.I(l(i){k(7==19)4I=i});q 4I},1E:l(20,N,v){u 19=20;k(20.1g==3p)k(N==Q)q 7.G&&6[v||"1E"](7[0],20)||Q;H{19={};19[20]=N}q 7.I(l(2b){O(u F 1B 19)6.1E(v?7.1q:7,F,6.F(7,19[F],v,2b,F))})},1f:l(20,N){q 7.1E(20,N,"2V")},2L:l(e){k(1v e=="22")q 7.3n().3t(12.8r(e));u t="";6.I(e||7,l(){6.I(7.38,l(){k(7.1V!=8)t+=7.1V!=1?7.60:6.C.2L([7])})});q t},2D:l(){u a=6.3W(1x);q 7.I(l(){u b=a[0].3V(T);7.V.2T(b,7);1Z(b.17)b=b.17;b.4i(7)})},3t:l(){q 7.35(1x,T,1,l(a){7.4i(a)})},5n:l(){q 7.35(1x,T,-1,l(a){7.2T(a,7.17)})},5h:l(){q 7.35(1x,Y,1,l(a){7.V.2T(a,7)})},5i:l(){q 7.35(1x,Y,-1,l(a){7.V.2T(a,7.2f)})},4E:l(){q 7.6j||6([])},2o:l(t){q 7.2q(6.2X(7,l(a){q 6.2o(t,a)}))},4w:l(4C){q 7.2q(6.2X(7,l(a){q a.3V(4C!=Q?4C:T)}))},1w:l(t){q 7.2q(6.1k(t)&&6.2k(7,l(2G,2b){q t.14(2G,[2b])})||6.3v(t,7))},2c:l(t){q 7.2q(t.1g==3p&&6.3v(t,7,T)||6.2k(7,l(a){k(t.1g==2A||t.3e)q 6.3g(t,a)<0;H q a!=t}))},1J:l(t){q 7.2q(6.2i(7.2a(),t.1g==3p?6(t).2a():t.G!=Q&&!t.1u?t:[t]))},46:l(1n){q 1n?6.1w(1n,7).r.G>0:Y},18:l(18){q 18==Q?(7.G?7[0].N:1c):7.1E("N",18)},4Q:l(18){q 18==Q?(7.G?7[0].2H:1c):7.3n().3t(18)},35:l(1y,1N,3F,C){u 4w=7.G>1;u a=6.3W(1y);k(3F<0)a.8s();q 7.I(l(){u 19=7;k(1N&&6.1u(7,"1N")&&6.1u(a[0],"3U"))19=7.5E("1T")[0]||7.4i(12.6e("1T"));6.I(a,l(){C.14(19,[4w?7.3V(T):7])})})}};6.1A=6.C.1A=l(){u 1P=1x[0],a=1;k(1x.G==1){1P=7;a=0}u F;1Z(F=1x[a++])O(u i 1B F)1P[i]=F[i];q 1P};6.1A({8v:l(){k(6.2O$)$=6.2O$;q 6},1k:l(C){q!!C&&1v C!="22"&&1v C[0]=="Q"&&/l/i.1s(C+"")},1u:l(B,W){q B.1u&&B.1u.3u()==W.3u()},I:l(19,C,1y){k(19.G==Q)O(u i 1B 19)C.14(19[i],1y||[i,19[i]]);H O(u i=0,6l=19.G;i<6l;i++)k(C.14(19[i],1y||[i,19[i]])===Y)4q;q 19},F:l(B,N,v,2b,F){k(6.1k(N))q N.3s(B,[2b]);u 6m=/z-?2b|7C-?7D|1b|64|8x-?26/i;k(N.1g==3N&&v=="2V"&&!6m.1s(F))q N+"49";q N},16:{1J:l(B,c){6.I(c.3o(/\\s+/),l(i,M){k(!6.16.2P(B.16,M))B.16+=(B.16?" ":"")+M})},2g:l(B,c){B.16=c?6.2k(B.16.3o(/\\s+/),l(M){q!6.16.2P(c,M)}).55(" "):""},2P:l(t,c){t=t.16||t;q t&&1p 4V("(^|\\\\s)"+c+"(\\\\s|$)").1s(t)}},44:l(e,o,f){O(u i 1B o){e.1q["1H"+i]=e.1q[i];e.1q[i]=o[i]}f.14(e,[]);O(u i 1B o)e.1q[i]=e.1q["1H"+i]},1f:l(e,p){k(p=="26"||p=="40"){u 1H={},41,3f,d=["7x","8z","8A","8B"];6.I(d,l(){1H["8C"+7]=0;1H["8E"+7+"8F"]=0});6.44(e,1H,l(){k(6.1f(e,"1e")!="1Y"){41=e.6E;3f=e.6v}H{e=6(e.3V(T)).2o(":4h").5j("2S").4E().1f({4g:"1C",3Z:"6q",1e:"2t",7v:"0",6r:"0"}).5f(e.V)[0];u 3c=6.1f(e.V,"3Z");k(3c==""||3c=="43")e.V.1q.3Z="6s";41=e.6t;3f=e.6u;k(3c==""||3c=="43")e.V.1q.3Z="43";e.V.39(e)}});q p=="26"?41:3f}q 6.2V(e,p)},2V:l(B,F,6k){u J;k(F=="1b"&&6.U.1m)q 6.1E(B.1q,"1b");k(F=="4L"||F=="2u")F=6.U.1m?"3l":"2u";k(!6k&&B.1q[F])J=B.1q[F];H k(12.3X&&12.3X.45){k(F=="2u"||F=="3l")F="4L";F=F.1U(/([A-Z])/g,"-$1").4P();u M=12.3X.45(B,1c);k(M)J=M.53(F);H k(F=="1e")J="1Y";H 6.44(B,{1e:"2t"},l(){u c=12.3X.45(7,"");J=c&&c.53(F)||""})}H k(B.4Z){u 54=F.1U(/\\-(\\w)/g,l(m,c){q c.3u()});J=B.4Z[F]||B.4Z[54]}q J},3W:l(a){u r=[];6.I(a,l(i,1L){k(!1L)q;k(1L.1g==3N)1L=1L.8m();k(1v 1L=="22"){u s=6.2Z(1L),1W=12.6e("1W"),2e=[];u 2D=!s.15("<1l")&&[1,"<3T>","</3T>"]||(!s.15("<6y")||!s.15("<1T")||!s.15("<6A"))&&[1,"<1N>","</1N>"]||!s.15("<3U")&&[2,"<1N><1T>","</1T></1N>"]||(!s.15("<6B")||!s.15("<6D"))&&[3,"<1N><1T><3U>","</3U></1T></1N>"]||[0,"",""];1W.2H=2D[1]+s+2D[2];1Z(2D[0]--)1W=1W.17;k(6.U.1m){k(!s.15("<1N")&&s.15("<1T")<0)2e=1W.17&&1W.17.38;H k(2D[1]=="<1N>"&&s.15("<1T")<0)2e=1W.38;O(u n=2e.G-1;n>=0;--n)k(6.1u(2e[n],"1T")&&!2e[n].38.G)2e[n].V.39(2e[n])}1L=1W.38}k(1L.G===0)q;k(1L[0]==Q)r.1h(1L);H r=6.2i(r,1L)});q r},1E:l(B,W,N){u 2m={"O":"6G","6H":"16","4L":6.U.1m?"3l":"2u",2u:6.U.1m?"3l":"2u",2H:"2H",16:"16",N:"N",2R:"2R",2S:"2S",6K:"6L",2Q:"2Q"};k(W=="1b"&&6.U.1m&&N!=Q){B.64=1;q B.1w=B.1w.1U(/4K\\([^\\)]*\\)/6M,"")+(N==1?"":"4K(1b="+N*57+")")}H k(W=="1b"&&6.U.1m)q B.1w?4f(B.1w.6N(/4K\\(1b=(.*)\\)/)[1])/57:1;k(W=="1b"&&6.U.36&&N==1)N=0.7X;k(2m[W]){k(N!=Q)B[2m[W]]=N;q B[2m[W]]}H k(N==Q&&6.U.1m&&6.1u(B,"5S")&&(W=="6Q"||W=="7V"))q B.6S(W).60;H k(B.6T){k(N!=Q)B.7R(W,N);q B.3D(W)}H{W=W.1U(/-([a-z])/6W,l(z,b){q b.3u()});k(N!=Q)B[W]=N;q B[W]}},2Z:l(t){q t.1U(/^\\s+|\\s+$/g,"")},3H:l(a){u r=[];k(a.1g!=2A)O(u i=0,2w=a.G;i<2w;i++)r.1h(a[i]);H r=a.3J(0);q r},3g:l(b,a){O(u i=0,2w=a.G;i<2w;i++)k(a[i]==b)q i;q-1},2i:l(2v,3P){u r=[].3J.3s(2v,0);O(u i=0,63=3P.G;i<63;i++)k(6.3g(3P[i],r)==-1)2v.1h(3P[i]);q 2v},2k:l(1Q,C,48){k(1v C=="22")C=1p 4D("a","i","q "+C);u 1d=[];O(u i=0,2G=1Q.G;i<2G;i++)k(!48&&C(1Q[i],i)||48&&!C(1Q[i],i))1d.1h(1Q[i]);q 1d},2X:l(1Q,C){k(1v C=="22")C=1p 4D("a","q "+C);u 1d=[],r=[];O(u i=0,2G=1Q.G;i<2G;i++){u 18=C(1Q[i],i);k(18!==1c&&18!=Q){k(18.1g!=2A)18=[18];1d=1d.70(18)}}u r=1d.G?[1d[0]]:[];5d:O(u i=1,5N=1d.G;i<5N;i++){O(u j=0;j<i;j++)k(1d[i]==r[j])5z 5d;r.1h(1d[i])}q r}});1p l(){u b=7H.72.4P();6.U={2C:/5I/.1s(b),37:/37/.1s(b),1m:/1m/.1s(b)&&!/37/.1s(b),36:/36/.1s(b)&&!/(74|5I)/.1s(b)};6.75=!6.U.1m||12.76=="7B"};6.I({5p:"a.V",4s:"6.4s(a)",78:"6.25(a,2,\'2f\')",7z:"6.25(a,2,\'5o\')",79:"6.2F(a.V.17,a)",7b:"6.2F(a.17)"},l(i,n){6.C[i]=l(a){u J=6.2X(7,n);k(a&&1v a=="22")J=6.3v(a,J);q 7.2q(J)}});6.I({5f:"3t",7d:"5n",2T:"5h",7f:"5i"},l(i,n){6.C[i]=l(){u a=1x;q 7.I(l(){O(u j=0,2w=a.G;j<2w;j++)6(a[j])[n](7)})}});6.I({5j:l(20){6.1E(7,20,"");7.7h(20)},7i:l(c){6.16.1J(7,c)},7j:l(c){6.16.2g(7,c)},7l:l(c){6.16[6.16.2P(7,c)?"2g":"1J"](7,c)},2g:l(a){k(!a||6.1w(a,[7]).r.G)7.V.39(7)},3n:l(){1Z(7.17)7.39(7.17)}},l(i,n){6.C[i]=l(){q 7.I(n,1x)}});6.I(["5m","5l","5e","5r"],l(i,n){6.C[n]=l(1R,C){q 7.1w(":"+n+"("+1R+")",C)}});6.I(["26","40"],l(i,n){6.C[n]=l(h){q h==Q?(7.G?6.1f(7[0],n):1c):7.1f(n,h.1g==3p?h:h+"49")}});6.1A({1n:{"":"m[2]==\'*\'||6.1u(a,m[2])","#":"a.3D(\'3Y\')==m[2]",":":{5l:"i<m[3]-0",5e:"i>m[3]-0",25:"m[3]-0==i",5m:"m[3]-0==i",2v:"i==0",2W:"i==r.G-1",5M:"i%2==0",5O:"i%2","25-3k":"6.25(a.V.17,m[3],\'2f\',a)==a","2v-3k":"6.25(a.V.17,1,\'2f\')==a","2W-3k":"6.25(a.V.7n,1,\'5o\')==a","7o-3k":"6.2F(a.V.17).G==1",5p:"a.17",3n:"!a.17",5r:"6.C.2L.14([a]).15(m[3])>=0",3a:\'a.v!="1C"&&6.1f(a,"1e")!="1Y"&&6.1f(a,"4g")!="1C"\',1C:\'a.v=="1C"||6.1f(a,"1e")=="1Y"||6.1f(a,"4g")=="1C"\',7q:"!a.2R",2R:"a.2R",2S:"a.2S",2Q:"a.2Q||6.1E(a,\'2Q\')",2L:"a.v==\'2L\'",4h:"a.v==\'4h\'",59:"a.v==\'59\'",42:"a.v==\'42\'",58:"a.v==\'58\'",4O:"a.v==\'4O\'",5v:"a.v==\'5v\'",5w:"a.v==\'5w\'",3h:\'a.v=="3h"||6.1u(a,"3h")\',5x:"/5x|3T|7s|3h/i.1s(a.1u)"},".":"6.16.2P(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.15(m[4])","$=":"z&&z.2Y(z.G - m[4].G,m[4].G)==m[4]","*=":"z&&z.15(m[4])>=0","":"z",4U:l(m){q["",m[1],m[3],m[2],m[5]]},5J:"z=a[m[3]]||6.1E(a,m[3]);"},"[":"6.2o(m[2],a).G"},5G:[/^\\[ *(@)([a-2l-3y-]*) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/i,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([a-2l-3y-]*)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/i,/^([:.#]*)([a-2l-3y*-]*)/i],1O:[/^(\\/?\\.\\.)/,"a.V",/^(>|\\/)/,"6.2F(a.17)",/^(\\+)/,"6.25(a,2,\'2f\')",/^(~)/,l(a){u s=6.2F(a.V.17);q s.3J(0,6.3g(a,s))}],3v:l(1n,1Q,2c){u 1H,M=[];1Z(1n&&1n!=1H){1H=1n;u f=6.1w(1n,1Q,2c);1n=f.t.1U(/^\\s*,\\s*/,"");M=2c?1Q=f.r:6.2i(M,f.r)}q M},2o:l(t,1r){k(1v t!="22")q[t];k(1r&&!1r.1V)1r=1c;1r=1r||12;k(!t.15("//")){1r=1r.4y;t=t.2Y(2,t.G)}H k(!t.15("/")){1r=1r.4y;t=t.2Y(1,t.G);k(t.15("/")>=1)t=t.2Y(t.15("/"),t.G)}u J=[1r],29=[],2W=1c;1Z(t&&2W!=t){u r=[];2W=t;t=6.2Z(t).1U(/^\\/\\//i,"");u 3x=Y;u 1G=/^[\\/>]\\s*([a-2l-9*-]+)/i;u m=1G.2B(t);k(m){6.I(J,l(){O(u c=7.17;c;c=c.2f)k(c.1V==1&&(6.1u(c,m[1])||m[1]=="*"))r.1h(c)});J=r;t=t.1U(1G,"");k(t.15(" ")==0)5z;3x=T}H{O(u i=0;i<6.1O.G;i+=2){u 1G=6.1O[i];u m=1G.2B(t);k(m){r=J=6.2X(J,6.1k(6.1O[i+1])?6.1O[i+1]:l(a){q 3B(6.1O[i+1])});t=6.2Z(t.1U(1G,""));3x=T;4q}}}k(t&&!3x){k(!t.15(",")){k(J[0]==1r)J.4m();6.2i(29,J);r=J=[1r];t=" "+t.2Y(1,t.G)}H{u 34=/^([a-2l-3y-]+)(#)([a-2l-9\\\\*2O-]*)/i;u m=34.2B(t);k(m){m=[0,m[2],m[3],m[1]]}H{34=/^([#.]?)([a-2l-9\\\\*2O-]*)/i;m=34.2B(t)}k(m[1]=="#"&&J[J.G-1].4R){u 3z=J[J.G-1].4R(m[2]);J=r=3z&&(!m[3]||6.1u(3z,m[3]))?[3z]:[]}H{k(m[1]==".")u 4k=1p 4V("(^|\\\\s)"+m[2]+"(\\\\s|$)");6.I(J,l(){u 3C=m[1]!=""||m[0]==""?"*":m[2];k(6.1u(7,"7w")&&3C=="*")3C="2U";6.2i(r,m[1]!=""&&J.G!=1?6.4r(7,[],m[1],m[2],4k):7.5E(3C))});k(m[1]=="."&&J.G==1)r=6.2k(r,l(e){q 4k.1s(e.16)});k(m[1]=="#"&&J.G==1){u 5F=r;r=[];6.I(5F,l(){k(7.3D("3Y")==m[2]){r=[7];q Y}})}J=r}t=t.1U(34,"")}}k(t){u 18=6.1w(t,r);J=r=18.r;t=6.2Z(18.t)}}k(J&&J[0]==1r)J.4m();6.2i(29,J);q 29},1w:l(t,r,2c){1Z(t&&/^[a-z[({<*:.#]/i.1s(t)){u p=6.5G,m;6.I(p,l(i,1G){m=1G.2B(t);k(m){t=t.7y(m[0].G);k(6.1n[m[1]].4U)m=6.1n[m[1]].4U(m);q Y}});k(m[1]==":"&&m[2]=="2c")r=6.1w(m[3],r,T).r;H k(m[1]=="."){u 1G=1p 4V("(^|\\\\s)"+m[2]+"(\\\\s|$)");r=6.2k(r,l(e){q 1G.1s(e.16||"")},2c)}H{u f=6.1n[m[1]];k(1v f!="22")f=6.1n[m[1]][m[2]];3B("f = l(a,i){"+(6.1n[m[1]].5J||"")+"q "+f+"}");r=6.2k(r,f,2c)}}q{r:r,t:t}},4r:l(o,r,1O,W,1G){O(u s=o.17;s;s=s.2f)k(s.1V==1){u 1J=T;k(1O==".")1J=s.16&&1G.1s(s.16);H k(1O=="#")1J=s.3D("3Y")==W;k(1J)r.1h(s);k(1O=="#"&&r.G)4q;k(s.17)6.4r(s,r,1O,W,1G)}q r},4s:l(B){u 4N=[];u M=B.V;1Z(M&&M!=12){4N.1h(M);M=M.V}q 4N},25:l(M,1d,3F,B){1d=1d||1;u 1R=0;O(;M;M=M[3F]){k(M.1V==1)1R++;k(1R==1d||1d=="5M"&&1R%2==0&&1R>1&&M==B||1d=="5O"&&1R%2==1&&M==B)q M}},2F:l(n,B){u r=[];O(;n;n=n.2f){k(n.1V==1&&(!B||n!=B))r.1h(n)}q r}});6.E={1J:l(S,v,1j,D){k(6.U.1m&&S.4c!=Q)S=1t;k(D)1j.D=D;k(!1j.2n)1j.2n=7.2n++;k(!S.1I)S.1I={};u 32=S.1I[v];k(!32){32=S.1I[v]={};k(S["3I"+v])32[0]=S["3I"+v]}32[1j.2n]=1j;S["3I"+v]=7.5T;k(!7.1i[v])7.1i[v]=[];7.1i[v].1h(S)},2n:1,1i:{},2g:l(S,v,1j){k(S.1I)k(v&&v.v)4u S.1I[v.v][v.1j.2n];H k(v&&S.1I[v])k(1j)4u S.1I[v][1j.2n];H O(u i 1B S.1I[v])4u S.1I[v][i];H O(u j 1B S.1I)7.2g(S,j)},1M:l(v,D,S){D=6.3H(D||[]);k(!S)6.I(7.1i[v]||[],l(){6.E.1M(v,D,7)});H{u 1j=S["3I"+v],18,C=6.1k(S[v]);k(1j){D.5U(7.2m({v:v,1P:S}));k((18=1j.14(S,D))!==Y)7.4v=T}k(C&&18!==Y)S[v]();7.4v=Y}},5T:l(E){k(1v 6=="Q"||6.E.4v)q;E=6.E.2m(E||1t.E||{});u 3M;u c=7.1I[E.v];u 1y=[].3J.3s(1x,1);1y.5U(E);O(u j 1B c){1y[0].1j=c[j];1y[0].D=c[j].D;k(c[j].14(7,1y)===Y){E.2h();E.2z();3M=Y}}k(6.U.1m)E.1P=E.2h=E.2z=E.1j=E.D=1c;q 3M},2m:l(E){k(!E.1P&&E.5V)E.1P=E.5V;k(E.5W==Q&&E.5Y!=Q){u e=12.4y,b=12.7K;E.5W=E.5Y+(e.5Z||b.5Z);E.7M=E.7N+(e.61||b.61)}k(6.U.2C&&E.1P.1V==3){u 33=E;E=6.1A({},33);E.1P=33.1P.V;E.2h=l(){q 33.2h()};E.2z=l(){q 33.2z()}}k(!E.2h)E.2h=l(){7.3M=Y};k(!E.2z)E.2z=l(){7.7Q=T};q E}};6.C.1A({3R:l(v,D,C){q 7.I(l(){6.E.1J(7,v,C||D,D)})},6n:l(v,D,C){q 7.I(l(){6.E.1J(7,v,l(E){6(7).62(E);q(C||D).14(7,1x)},D)})},62:l(v,C){q 7.I(l(){6.E.2g(7,v,C)})},1M:l(v,D){q 7.I(l(){6.E.1M(v,D,7)})},3r:l(){u a=1x;q 7.69(l(e){7.4F=7.4F==0?1:0;e.2h();q a[7.4F].14(7,[e])||Y})},7T:l(f,g){l 4e(e){u p=(e.v=="3S"?e.7U:e.7Y)||e.7Z;1Z(p&&p!=7)2s{p=p.V}2y(e){p=7};k(p==7)q Y;q(e.v=="3S"?f:g).14(7,[e])}q 7.3S(4e).6b(4e)},28:l(f){k(6.3O)f.14(12,[6]);H{6.3b.1h(l(){q f.14(7,[6])})}q 7}});6.1A({3O:Y,3b:[],28:l(){k(!6.3O){6.3O=T;k(6.3b){6.I(6.3b,l(){7.14(12)});6.3b=1c}k(6.U.36||6.U.37)12.81("6g",6.28,Y)}}});1p l(){6.I(("82,83,2E,84,85,4Y,69,86,"+"87,88,89,3S,6b,8b,3T,"+"4O,8d,8f,8g,2M").3o(","),l(i,o){6.C[o]=l(f){q f?7.3R(o,f):7.1M(o)}});k(6.U.36||6.U.37)12.8h("6g",6.28,Y);H k(6.U.1m){12.8i("<8j"+"8l 3Y=6a 8q=T "+"4B=//:><\\/2d>");u 2d=12.4R("6a");k(2d)2d.2p=l(){k(7.3A!="1X")q;7.V.39(7);6.28()};2d=1c}H k(6.U.2C)6.4W=4c(l(){k(12.3A=="8t"||12.3A=="1X"){5u(6.4W);6.4W=1c;6.28()}},10);6.E.1J(1t,"2E",6.28)};k(6.U.1m)6(1t).6n("4Y",l(){u 1i=6.E.1i;O(u v 1B 1i){u 4X=1i[v],i=4X.G;k(i&&v!=\'4Y\')6p 6.E.2g(4X[i-1],v);1Z(--i)}});6.C.1A({1K:l(P,K){u 1C=7.1w(":1C");P?1C.23({26:"1K",40:"1K",1b:"1K"},P,K):1C.I(l(){7.1q.1e=7.2N?7.2N:"";k(6.1f(7,"1e")=="1Y")7.1q.1e="2t"});q 7},1D:l(P,K){u 3a=7.1w(":3a");P?3a.23({26:"1D",40:"1D",1b:"1D"},P,K):3a.I(l(){7.2N=7.2N||6.1f(7,"1e");k(7.2N=="1Y")7.2N="2t";7.1q.1e="1Y"});q 7},52:6.C.3r,3r:l(C,4S){u 1y=1x;q 6.1k(C)&&6.1k(4S)?7.52(C,4S):7.I(l(){6(7)[6(7).46(":1C")?"1K":"1D"].14(6(7),1y)})},6x:l(P,K){q 7.23({26:"1K"},P,K)},6z:l(P,K){q 7.23({26:"1D"},P,K)},6C:l(P,K){q 7.I(l(){u 56=6(7).46(":1C")?"1K":"1D";6(7).23({26:56},P,K)})},6F:l(P,K){q 7.23({1b:"1K"},P,K)},6I:l(P,K){q 7.23({1b:"1D"},P,K)},6J:l(P,3q,K){q 7.23({1b:3q},P,K)},23:l(F,P,1o,K){q 7.1F(l(){7.2r=6.1A({},F);u 1l=6.P(P,1o,K);O(u p 1B F){u e=1p 6.30(7,1l,p);k(F[p].1g==3N)e.2x(e.M(),F[p]);H e[F[p]](F)}})},1F:l(v,C){k(!C){C=v;v="30"}q 7.I(l(){k(!7.1F)7.1F={};k(!7.1F[v])7.1F[v]=[];7.1F[v].1h(C);k(7.1F[v].G==1)C.14(7)})}});6.1A({P:l(P,1o,C){u 1l=P&&P.1g==6O?P:{1X:C||!C&&1o||6.1k(P)&&P,24:P,1o:C&&1o||1o&&1o.1g!=4D&&1o};1l.24=(1l.24&&1l.24.1g==3N?1l.24:{6U:6X,6Y:51}[1l.24])||6Z;1l.1H=1l.1X;1l.1X=l(){6.5X(7,"30");k(6.1k(1l.1H))1l.1H.14(7)};q 1l},1o:{},1F:{},5X:l(B,v){v=v||"30";k(B.1F&&B.1F[v]){B.1F[v].4m();u f=B.1F[v][0];k(f)f.14(B)}},30:l(B,1a,F){u z=7;u y=B.1q;u 4j=6.1f(B,"1e");y.1e="2t";y.5y="1C";z.a=l(){k(1a.3j)1a.3j.14(B,[z.2j]);k(F=="1b")6.1E(y,"1b",z.2j);H k(5g(z.2j))y[F]=5g(z.2j)+"49"};z.5k=l(){q 4f(6.1f(B,F))};z.M=l(){u r=4f(6.2V(B,F));q r&&r>-7g?r:z.5k()};z.2x=l(4d,3q){z.4o=(1p 5s()).5t();z.2j=4d;z.a();z.47=4c(l(){z.3j(4d,3q)},13)};z.1K=l(){k(!B.1z)B.1z={};B.1z[F]=7.M();1a.1K=T;z.2x(0,B.1z[F]);k(F!="1b")y[F]="5q"};z.1D=l(){k(!B.1z)B.1z={};B.1z[F]=7.M();1a.1D=T;z.2x(B.1z[F],0)};z.3r=l(){k(!B.1z)B.1z={};B.1z[F]=7.M();k(4j=="1Y"){1a.1K=T;k(F!="1b")y[F]="5q";z.2x(0,B.1z[F])}H{1a.1D=T;z.2x(B.1z[F],0)}};z.3j=l(31,3G){u t=(1p 5s()).5t();k(t>1a.24+z.4o){5u(z.47);z.47=1c;z.2j=3G;z.a();k(B.2r)B.2r[F]=T;u 29=T;O(u i 1B B.2r)k(B.2r[i]!==T)29=Y;k(29){y.5y="";y.1e=4j;k(6.1f(B,"1e")=="1Y")y.1e="2t";k(1a.1D)y.1e="1Y";k(1a.1D||1a.1K)O(u p 1B B.2r)k(p=="1b")6.1E(y,p,B.1z[p]);H y[p]=""}k(29&&6.1k(1a.1X))1a.1X.14(B)}H{u n=t-7.4o;u p=n/1a.24;z.2j=1a.1o&&6.1o[1a.1o]?6.1o[1a.1o](p,n,31,(3G-31),1a.24):((-5L.7E(p*5L.7F)/2)+0.5)*(3G-31)+31;z.a()}}}});6.C.1A({7G:l(R,21,K){7.2E(R,21,K,1)},2E:l(R,21,K,1S){k(6.1k(R))q 7.3R("2E",R);K=K||l(){};u v="65";k(21)k(6.1k(21)){K=21;21=1c}H{21=6.2U(21);v="6f"}u 4x=7;6.3d({R:R,v:v,D:21,1S:1S,1X:l(2J,11){k(11=="2K"||!1S&&11=="5H")4x.1E("2H",2J.3L).4T().I(K,[2J.3L,11,2J]);H K.14(4x,[2J.3L,11,2J])}});q 7},7L:l(){q 6.2U(7)},4T:l(){q 7.2o("2d").I(l(){k(7.4B)6.6c(7.4B);H 6.4H(7.2L||7.7P||7.2H||"")}).4E()}});k(!1t.3w)3w=l(){q 1p 7S("7W.80")};6.I("68,5R,5Q,6h,5P,5C".3o(","),l(i,o){6.C[o]=l(f){q 7.3R(o,f)}});6.1A({2a:l(R,D,K,v,1S){k(6.1k(D)){K=D;D=1c}q 6.3d({R:R,D:D,2K:K,4t:v,1S:1S})},8a:l(R,D,K,v){q 6.2a(R,D,K,v,1)},6c:l(R,K){q 6.2a(R,1c,K,"2d")},8c:l(R,D,K){q 6.2a(R,D,K,"67")},8e:l(R,D,K,v){k(6.1k(D)){K=D;D={}}q 6.3d({v:"6f",R:R,D:D,2K:K,4t:v})},8k:l(27){6.3K.27=27},8n:l(6o){6.1A(6.3K,6o)},3K:{1i:T,v:"65",27:0,5a:"8u/x-8w-5S-8D",50:T,4G:T,D:1c},3m:{},3d:l(s){s=6.1A({},6.3K,s);k(s.D){k(s.50&&1v s.D!="22")s.D=6.2U(s.D);k(s.v.4P()=="2a")s.R+=((s.R.15("?")>-1)?"&":"?")+s.D}k(s.1i&&!6.4a++)6.E.1M("68");u 4z=Y;u L=1p 3w();L.6P(s.v,s.R,s.4G);k(s.D)L.3i("6R-6V",s.5a);k(s.1S)L.3i("71-4A-73",6.3m[s.R]||"77, 7a 7c 7e 4b:4b:4b 7k");L.3i("X-7m-7p","3w");k(L.7r)L.3i("7t","7u");k(s.5A)s.5A(L);k(s.1i)6.E.1M("5C",[L,s]);u 2p=l(4n){k(L&&(L.3A==4||4n=="27")){4z=T;u 11;2s{11=6.6i(L)&&4n!="27"?s.1S&&6.6d(L,s.R)?"5H":"2K":"2M";k(11!="2M"){u 3E;2s{3E=L.4l("66-4A")}2y(e){}k(s.1S&&3E)6.3m[s.R]=3E;u D=6.5D(L,s.4t);k(s.2K)s.2K(D,11);k(s.1i)6.E.1M("5P",[L,s])}H 6.3Q(s,L,11)}2y(e){11="2M";6.3Q(s,L,11,e)}k(s.1i)6.E.1M("5Q",[L,s]);k(s.1i&&!--6.4a)6.E.1M("5R");k(s.1X)s.1X(L,11);L.2p=l(){};L=1c}};L.2p=2p;k(s.27>0)5c(l(){k(L){L.7J();k(!4z)2p("27")}},s.27);u 4J=L;2s{4J.7O(s.D)}2y(e){6.3Q(s,L,1c,e)}k(!s.4G)2p();q 4J},3Q:l(s,L,11,e){k(s.2M)s.2M(L,11,e);k(s.1i)6.E.1M("6h",[L,s,e])},4a:0,6i:l(r){2s{q!r.11&&8y.8G=="42:"||(r.11>=51&&r.11<6w)||r.11==5b||6.U.2C&&r.11==Q}2y(e){}q Y},6d:l(L,R){2s{u 5K=L.4l("66-4A");q L.11==5b||5K==6.3m[R]||6.U.2C&&L.11==Q}2y(e){}q Y},5D:l(r,v){u 4p=r.4l("7A-v");u D=!v&&4p&&4p.15("L")>=0;D=v=="L"||D?r.7I:r.3L;k(v=="2d")6.4H(D);k(v=="67")3B("D = "+D);k(v=="4Q")6("<1W>").4Q(D).4T();q D},2U:l(a){u s=[];k(a.1g==2A||a.3e)6.I(a,l(){s.1h(2I(7.W)+"="+2I(7.N))});H O(u j 1B a)k(a[j]&&a[j].1g==2A)6.I(a[j],l(){s.1h(2I(j)+"="+2I(7))});H s.1h(2I(j)+"="+2I(a[j]));q s.55("&")},4H:l(D){k(1t.5B)1t.5B(D);H k(6.U.2C)1t.5c(D,0);H 3B.3s(1t,D)}})}',62,539,'||||||jQuery|this|||||||||||||if|function|||||return||||var|type||||||elem|fn|data|event|prop|length|else|each|ret|callback|xml|cur|value|for|speed|undefined|url|element|true|browser|parentNode|name||false|||status|document||apply|indexOf|className|firstChild|val|obj|options|opacity|null|result|display|css|constructor|push|global|handler|isFunction|opt|msie|expr|easing|new|style|context|test|window|nodeName|typeof|filter|arguments|args|orig|extend|in|hidden|hide|attr|queue|re|old|events|add|show|arg|trigger|table|token|target|elems|num|ifModified|tbody|replace|nodeType|div|complete|none|while|key|params|string|animate|duration|nth|height|timeout|ready|done|get|index|not|script|tb|nextSibling|remove|preventDefault|merge|now|grep|z0|fix|guid|find|onreadystatechange|pushStack|curAnim|try|block|cssFloat|first|al|custom|catch|stopPropagation|Array|exec|safari|wrap|load|sibling|el|innerHTML|encodeURIComponent|res|success|text|error|oldblock|_|has|selected|disabled|checked|insertBefore|param|curCSS|last|map|substr|trim|fx|firstNum|handlers|originalEvent|re2|domManip|mozilla|opera|childNodes|removeChild|visible|readyList|parPos|ajax|jquery|oWidth|inArray|button|setRequestHeader|step|child|styleFloat|lastModified|empty|split|String|to|toggle|call|append|toUpperCase|multiFilter|XMLHttpRequest|foundToken|9_|oid|readyState|eval|tag|getAttribute|modRes|dir|lastNum|makeArray|on|slice|ajaxSettings|responseText|returnValue|Number|isReady|second|handleError|bind|mouseover|select|tr|cloneNode|clean|defaultView|id|position|width|oHeight|file|static|swap|getComputedStyle|is|timer|inv|px|active|00|setInterval|from|handleHover|parseFloat|visibility|radio|appendChild|oldDisplay|rec|getResponseHeader|shift|isTimeout|startTime|ct|break|getAll|parents|dataType|delete|triggered|clone|self|documentElement|requestDone|Modified|src|deep|Function|end|lastToggle|async|globalEval|pos|xml2|alpha|float|setArray|matched|submit|toLowerCase|html|getElementById|fn2|evalScripts|_resort|RegExp|safariTimer|els|unload|currentStyle|processData|200|_toggle|getPropertyValue|newProp|join|state|100|password|checkbox|contentType|304|setTimeout|check|gt|appendTo|parseInt|before|after|removeAttr|max|lt|eq|prepend|previousSibling|parent|1px|contains|Date|getTime|clearInterval|image|reset|input|overflow|continue|beforeSend|execScript|ajaxSend|httpData|getElementsByTagName|tmp|parse|notmodified|webkit|_prefix|xmlRes|Math|even|rl|odd|ajaxSuccess|ajaxComplete|ajaxStop|form|handle|unshift|srcElement|pageX|dequeue|clientX|scrollLeft|nodeValue|scrollTop|unbind|sl|zoom|GET|Last|json|ajaxStart|click|__ie_init|mouseout|getScript|httpNotModified|createElement|POST|DOMContentLoaded|ajaxError|httpSuccess|prevObject|force|ol|exclude|one|settings|do|absolute|left|relative|clientHeight|clientWidth|offsetWidth|300|slideDown|thead|slideUp|tfoot|td|slideToggle|th|offsetHeight|fadeIn|htmlFor|class|fadeOut|fadeTo|readonly|readOnly|gi|match|Object|open|action|Content|getAttributeNode|tagName|slow|Type|ig|600|fast|400|concat|If|userAgent|Since|compatible|boxModel|compatMode|Thu|next|siblings|01|children|Jan|prependTo|1970|insertAfter|10000|removeAttribute|addClass|removeClass|GMT|toggleClass|Requested|lastChild|only|With|enabled|overrideMimeType|textarea|Connection|close|right|object|Top|substring|prev|content|CSS1Compat|font|weight|cos|PI|loadIfModified|navigator|responseXML|abort|body|serialize|pageY|clientY|send|textContent|cancelBubble|setAttribute|ActiveXObject|hover|fromElement|method|Microsoft|9999|toElement|relatedTarget|XMLHTTP|removeEventListener|blur|focus|resize|scroll|dblclick|mousedown|mouseup|mousemove|getIfModified|change|getJSON|keydown|post|keypress|keyup|addEventListener|write|scr|ajaxTimeout|ipt|toString|ajaxSetup|prototype|size|defer|createTextNode|reverse|loaded|application|noConflict|www|line|location|Bottom|Right|Left|padding|urlencoded|border|Width|protocol'.split('|'),0,{})); jQuery.noConflict();
-
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7(1C 1w.6=="T"){1w.T=1w.T;B 6=u(a,c){7(1w==q)v 1p 6(a,c);a=a||17;7(6.1t(a))v 1p 6(17)[6.E.27?"27":"2O"](a);7(1C a=="23"){B m=/^[^<]*(<(.|\\s)+>)[^>]*$/.2Q(a);7(m)a=6.3k([m[1]]);J v 1p 6(c).2o(a)}v q.6r(a.1l==2y&&a||(a.3Y||a.I&&a!=1w&&!a.24&&a[0]!=T&&a[0].24)&&6.3M(a)||[a])};7(1C $!="T")6.2S$=$;B $=6;6.E=6.8p={3Y:"1.1.2",8q:u(){v q.I},I:0,2b:u(1T){v 1T==T?6.3M(q):q[1T]},2r:u(a){B L=6(a);L.6p=q;v L},6r:u(a){q.I=0;[].1g.14(q,a);v q},K:u(E,1E){v 6.K(q,E,1E)},2h:u(1c){B 4c=-1;q.K(u(i){7(q==1c)4c=i});v 4c},1I:u(1Y,O,C){B 1c=1Y;7(1Y.1l==3t)7(O==T)v q.I&&6[C||"1I"](q[0],1Y)||T;J{1c={};1c[1Y]=O}v q.K(u(2h){P(B H 1x 1c)6.1I(C?q.1q:q,H,6.H(q,1c[H],C,2h,H))})},1m:u(1Y,O){v q.1I(1Y,O,"30")},2L:u(e){7(1C e=="23")v q.3u().3r(17.8t(e));B t="";6.K(e||q,u(){6.K(q.2I,u(){7(q.24!=8)t+=q.24!=1?q.60:6.E.2L([q])})});v t},2K:u(){B a=6.3k(1A);v q.K(u(){B b=a[0].3l(U);q.11.2X(b,q);22(b.1b)b=b.1b;b.4C(q)})},3r:u(){v q.3j(1A,U,1,u(a){q.4C(a)})},5i:u(){v q.3j(1A,U,-1,u(a){q.2X(a,q.1b)})},5j:u(){v q.3j(1A,12,1,u(a){q.11.2X(a,q)})},5t:u(){v q.3j(1A,12,-1,u(a){q.11.2X(a,q.2e)})},4g:u(){v q.6p||6([])},2o:u(t){v q.2r(6.31(q,u(a){v 6.2o(t,a)}),t)},4Y:u(4N){v q.2r(6.31(q,u(a){B a=a.3l(4N!=T?4N:U);a.$1H=16;v a}))},1D:u(t){v q.2r(6.1t(t)&&6.2q(q,u(2z,2h){v t.14(2z,[2h])})||6.3z(t,q))},2g:u(t){v q.2r(t.1l==3t&&6.3z(t,q,U)||6.2q(q,u(a){v(t.1l==2y||t.3Y)?6.3y(a,t)<0:a!=t}))},1M:u(t){v q.2r(6.2k(q.2b(),t.1l==3t?6(t).2b():t.I!=T&&(!t.1f||t.1f=="8v")?t:[t]))},4l:u(1s){v 1s?6.1D(1s,q).r.I>0:12},1a:u(1a){v 1a==T?(q.I?q[0].O:16):q.1I("O",1a)},4U:u(1a){v 1a==T?(q.I?q[0].2t:16):q.3u().3r(1a)},3j:u(1E,1P,3Z,E){B 4Y=q.I>1;B a=6.3k(1E);7(3Z<0)a.8w();v q.K(u(){B 1c=q;7(1P&&6.1f(q,"1P")&&6.1f(a[0],"3m"))1c=q.5J("20")[0]||q.4C(17.6n("20"));6.K(a,u(){E.14(1c,[4Y?q.3l(U):q])})})}};6.1z=6.E.1z=u(){B 1O=1A[0],a=1;7(1A.I==1){1O=q;a=0}B H;22(H=1A[a++])P(B i 1x H)1O[i]=H[i];v 1O};6.1z({8x:u(){7(6.2S$)$=6.2S$;v 6},1t:u(E){v!!E&&1C E!="23"&&!E.1f&&1C E[0]=="T"&&/u/i.1n(E+"")},4B:u(D){v D.66&&D.5I&&!D.5I.64},1f:u(D,Y){v D.1f&&D.1f.3K()==Y.3K()},K:u(1c,E,1E){7(1c.I==T)P(B i 1x 1c)E.14(1c[i],1E||[i,1c[i]]);J P(B i=0,6q=1c.I;i<6q;i++)7(E.14(1c[i],1E||[i,1c[i]])===12)3O;v 1c},H:u(D,O,C,2h,H){7(6.1t(O))O=O.3n(D,[2h]);B 6s=/z-?2h|7P-?8A|1d|58|8B-?28/i;v O&&O.1l==3Q&&C=="30"&&!6s.1n(H)?O+"4S":O},19:{1M:u(D,c){6.K(c.3o(/\\s+/),u(i,Q){7(!6.19.2V(D.19,Q))D.19+=(D.19?" ":"")+Q})},2f:u(D,c){D.19=c?6.2q(D.19.3o(/\\s+/),u(Q){v!6.19.2V(c,Q)}).6t(" "):""},2V:u(t,c){t=t.19||t;c=c.1R(/([\\.\\\\\\+\\*\\?\\[\\^\\]\\$\\(\\)\\{\\}\\=\\!\\<\\>\\|\\:])/g,"\\\\$1");v t&&1p 4v("(^|\\\\s)"+c+"(\\\\s|$)").1n(t)}},4d:u(e,o,f){P(B i 1x o){e.1q["1N"+i]=e.1q[i];e.1q[i]=o[i]}f.14(e,[]);P(B i 1x o)e.1q[i]=e.1q["1N"+i]},1m:u(e,p){7(p=="28"||p=="3V"){B 1N={},46,3P,d=["7d","8C","8D","8E"];6.K(d,u(){1N["8F"+q]=0;1N["8G"+q+"8H"]=0});6.4d(e,1N,u(){7(6.1m(e,"1h")!="1Z"){46=e.8I;3P=e.8J}J{e=6(e.3l(U)).2o(":4j").5l("2Z").4g().1m({4n:"1G",45:"8K",1h:"2D",7I:"0",8M:"0"}).5z(e.11)[0];B 3d=6.1m(e.11,"45");7(3d==""||3d=="4b")e.11.1q.45="6x";46=e.6y;3P=e.6z;7(3d==""||3d=="4b")e.11.1q.45="4b";e.11.33(e)}});v p=="28"?46:3P}v 6.30(e,p)},30:u(D,H,53){B L;7(H=="1d"&&6.W.1j)v 6.1I(D.1q,"1d");7(H=="4h"||H=="2v")H=6.W.1j?"3T":"2v";7(!53&&D.1q[H])L=D.1q[H];J 7(17.44&&17.44.4W){7(H=="2v"||H=="3T")H="4h";H=H.1R(/([A-Z])/g,"-$1").4m();B Q=17.44.4W(D,16);7(Q)L=Q.55(H);J 7(H=="1h")L="1Z";J 6.4d(D,{1h:"2D"},u(){B c=17.44.4W(q,"");L=c&&c.55(H)||""})}J 7(D.51){B 56=H.1R(/\\-(\\w)/g,u(m,c){v c.3K()});L=D.51[H]||D.51[56]}v L},3k:u(a){B r=[];6.K(a,u(i,1r){7(!1r)v;7(1r.1l==3Q)1r=1r.6C();7(1C 1r=="23"){B s=6.35(1r),1V=17.6n("1V"),2i=[];B 2K=!s.18("<1u")&&[1,"<42>","</42>"]||(!s.18("<6D")||!s.18("<20")||!s.18("<6E"))&&[1,"<1P>","</1P>"]||!s.18("<3m")&&[2,"<1P><20>","</20></1P>"]||(!s.18("<6F")||!s.18("<6G"))&&[3,"<1P><20><3m>","</3m></20></1P>"]||[0,"",""];1V.2t=2K[1]+s+2K[2];22(2K[0]--)1V=1V.1b;7(6.W.1j){7(!s.18("<1P")&&s.18("<20")<0)2i=1V.1b&&1V.1b.2I;J 7(2K[1]=="<1P>"&&s.18("<20")<0)2i=1V.2I;P(B n=2i.I-1;n>=0;--n)7(6.1f(2i[n],"20")&&!2i[n].2I.I)2i[n].11.33(2i[n])}1r=[];P(B i=0,l=1V.2I.I;i<l;i++)1r.1g(1V.2I[i])}7(1r.I===0&&!6.1f(1r,"3w"))v;7(1r[0]==T||6.1f(1r,"3w"))r.1g(1r);J r=6.2k(r,1r)});v r},1I:u(D,Y,O){B 2j=6.4B(D)?{}:{"P":"6J","6L":"19","4h":6.W.1j?"3T":"2v",2v:6.W.1j?"3T":"2v",2t:"2t",19:"19",O:"O",2W:"2W",2Z:"2Z",89:"6N",2Y:"2Y"};7(Y=="1d"&&6.W.1j&&O!=T){D.58=1;v D.1D=D.1D.1R(/4i\\([^\\)]*\\)/6O,"")+(O==1?"":"4i(1d="+O*6g+")")}J 7(Y=="1d"&&6.W.1j)v D.1D?4T(D.1D.6P(/4i\\(1d=(.*)\\)/)[1])/6g:1;7(Y=="1d"&&6.W.3h&&O==1)O=0.6R;7(2j[Y]){7(O!=T)D[2j[Y]]=O;v D[2j[Y]]}J 7(O==T&&6.W.1j&&6.1f(D,"3w")&&(Y=="81"||Y=="80"))v D.6T(Y).60;J 7(D.66){7(O!=T)D.6V(Y,O);7(6.W.1j&&/5E|3e/.1n(Y)&&!6.4B(D))v D.36(Y,2);v D.36(Y)}J{Y=Y.1R(/-([a-z])/6W,u(z,b){v b.3K()});7(O!=T)D[Y]=O;v D[Y]}},35:u(t){v t.1R(/^\\s+|\\s+$/g,"")},3M:u(a){B r=[];7(a.1l!=2y)P(B i=0,2R=a.I;i<2R;i++)r.1g(a[i]);J r=a.3N(0);v r},3y:u(b,a){P(B i=0,2R=a.I;i<2R;i++)7(a[i]==b)v i;v-1},2k:u(2u,3H){B r=[].3N.3n(2u,0);P(B i=0,5b=3H.I;i<5b;i++)7(6.3y(3H[i],r)==-1)2u.1g(3H[i]);v 2u},2q:u(1U,E,4k){7(1C E=="23")E=1p 4w("a","i","v "+E);B 1i=[];P(B i=0,2z=1U.I;i<2z;i++)7(!4k&&E(1U[i],i)||4k&&!E(1U[i],i))1i.1g(1U[i]);v 1i},31:u(1U,E){7(1C E=="23")E=1p 4w("a","v "+E);B 1i=[],r=[];P(B i=0,2z=1U.I;i<2z;i++){B 1a=E(1U[i],i);7(1a!==16&&1a!=T){7(1a.1l!=2y)1a=[1a];1i=1i.6Z(1a)}}B r=1i.I?[1i[0]]:[];5f:P(B i=1,5e=1i.I;i<5e;i++){P(B j=0;j<i;j++)7(1i[i]==r[j])5F 5f;r.1g(1i[i])}v r}});1p u(){B b=7L.71.4m();6.W={2N:/5D/.1n(b),3f:/3f/.1n(b),1j:/1j/.1n(b)&&!/3f/.1n(b),3h:/3h/.1n(b)&&!/(72|5D)/.1n(b)};6.7H=!6.W.1j||17.74=="75"};6.K({5u:"a.11",4z:"6.4z(a)",76:"6.2a(a,2,\'2e\')",7D:"6.2a(a,2,\'5s\')",78:"6.2B(a.11.1b,a)",79:"6.2B(a.1b)"},u(i,n){6.E[i]=u(a){B L=6.31(q,n);7(a&&1C a=="23")L=6.3z(a,L);v q.2r(L)}});6.K({5z:"3r",7b:"5i",2X:"5j",7e:"5t"},u(i,n){6.E[i]=u(){B a=1A;v q.K(u(){P(B j=0,2R=a.I;j<2R;j++)6(a[j])[n](q)})}});6.K({5l:u(1Y){6.1I(q,1Y,"");q.7g(1Y)},7h:u(c){6.19.1M(q,c)},7i:u(c){6.19.2f(q,c)},7k:u(c){6.19[6.19.2V(q,c)?"2f":"1M"](q,c)},2f:u(a){7(!a||6.1D(a,[q]).r.I)q.11.33(q)},3u:u(){22(q.1b)q.33(q.1b)}},u(i,n){6.E[i]=u(){v q.K(n,1A)}});6.K(["5q","5n","5p","5v"],u(i,n){6.E[n]=u(1T,E){v q.1D(":"+n+"("+1T+")",E)}});6.K(["28","3V"],u(i,n){6.E[n]=u(h){v h==T?(q.I?6.1m(q[0],n):16):q.1m(n,h.1l==3t?h:h+"4S")}});6.1z({1s:{"":"m[2]==\'*\'||6.1f(a,m[2])","#":"a.36(\'2J\')==m[2]",":":{5n:"i<m[3]-0",5p:"i>m[3]-0",2a:"m[3]-0==i",5q:"m[3]-0==i",2u:"i==0",2T:"i==r.I-1",5R:"i%2==0",5S:"i%2","2a-3s":"6.2a(a.11.1b,m[3],\'2e\',a)==a","2u-3s":"6.2a(a.11.1b,1,\'2e\')==a","2T-3s":"6.2a(a.11.7n,1,\'5s\')==a","7p-3s":"6.2B(a.11.1b).I==1",5u:"a.1b",3u:"!a.1b",5v:"6.E.2L.14([a]).18(m[3])>=0",3i:\'a.C!="1G"&&6.1m(a,"1h")!="1Z"&&6.1m(a,"4n")!="1G"\',1G:\'a.C=="1G"||6.1m(a,"1h")=="1Z"||6.1m(a,"4n")=="1G"\',7v:"!a.2W",2W:"a.2W",2Z:"a.2Z",2Y:"a.2Y||6.1I(a,\'2Y\')",2L:"a.C==\'2L\'",4j:"a.C==\'4j\'",5x:"a.C==\'5x\'",4G:"a.C==\'4G\'",5y:"a.C==\'5y\'",4R:"a.C==\'4R\'",5A:"a.C==\'5A\'",5B:"a.C==\'5B\'",3x:\'a.C=="3x"||6.1f(a,"3x")\',5C:"/5C|42|7A|3x/i.1n(a.1f)"},".":"6.19.2V(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.18(m[4])","$=":"z&&z.2U(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.18(m[4])>=0","":"z",4u:u(m){v["",m[1],m[3],m[2],m[5]]},5P:"z=a[m[3]];7(!z||/5E|3e/.1n(m[3]))z=6.1I(a,m[3]);"},"[":"6.2o(m[2],a).I"},5M:[/^\\[ *(@)([a-2m-3C-]*) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/i,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([a-2m-3C-]*)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/i,/^([:.#]*)([a-2m-3C*-]*)/i],1Q:[/^(\\/?\\.\\.)/,"a.11",/^(>|\\/)/,"6.2B(a.1b)",/^(\\+)/,"6.2a(a,2,\'2e\')",/^(~)/,u(a){B s=6.2B(a.11.1b);v s.3N(6.3y(a,s)+1)}],3z:u(1s,1U,2g){B 1N,Q=[];22(1s&&1s!=1N){1N=1s;B f=6.1D(1s,1U,2g);1s=f.t.1R(/^\\s*,\\s*/,"");Q=2g?1U=f.r:6.2k(Q,f.r)}v Q},2o:u(t,1B){7(1C t!="23")v[t];7(1B&&!1B.24)1B=16;1B=1B||17;7(!t.18("//")){1B=1B.4H;t=t.2U(2,t.I)}J 7(!t.18("/")){1B=1B.4H;t=t.2U(1,t.I);7(t.18("/")>=1)t=t.2U(t.18("/"),t.I)}B L=[1B],2c=[],2T=16;22(t&&2T!=t){B r=[];2T=t;t=6.35(t).1R(/^\\/\\//i,"");B 3B=12;B 1J=/^[\\/>]\\s*([a-2m-9*-]+)/i;B m=1J.2Q(t);7(m){6.K(L,u(){P(B c=q.1b;c;c=c.2e)7(c.24==1&&(6.1f(c,m[1])||m[1]=="*"))r.1g(c)});L=r;t=t.1R(1J,"");7(t.18(" ")==0)5F;3B=U}J{P(B i=0;i<6.1Q.I;i+=2){B 1J=6.1Q[i];B m=1J.2Q(t);7(m){r=L=6.31(L,6.1t(6.1Q[i+1])?6.1Q[i+1]:u(a){v 40(6.1Q[i+1])});t=6.35(t.1R(1J,""));3B=U;3O}}}7(t&&!3B){7(!t.18(",")){7(L[0]==1B)L.4L();6.2k(2c,L);r=L=[1B];t=" "+t.2U(1,t.I)}J{B 34=/^([a-2m-3C-]+)(#)([a-2m-9\\\\*2S-]*)/i;B m=34.2Q(t);7(m){m=[0,m[2],m[3],m[1]]}J{34=/^([#.]?)([a-2m-9\\\\*2S-]*)/i;m=34.2Q(t)}7(m[1]=="#"&&L[L.I-1].4X){B 2l=L[L.I-1].4X(m[2]);7(6.W.1j&&2l&&2l.2J!=m[2])2l=6(\'[@2J="\'+m[2]+\'"]\',L[L.I-1])[0];L=r=2l&&(!m[3]||6.1f(2l,m[3]))?[2l]:[]}J{7(m[1]==".")B 4r=1p 4v("(^|\\\\s)"+m[2]+"(\\\\s|$)");6.K(L,u(){B 3E=m[1]!=""||m[0]==""?"*":m[2];7(6.1f(q,"7J")&&3E=="*")3E="3g";6.2k(r,m[1]!=""&&L.I!=1?6.4x(q,[],m[1],m[2],4r):q.5J(3E))});7(m[1]=="."&&L.I==1)r=6.2q(r,u(e){v 4r.1n(e.19)});7(m[1]=="#"&&L.I==1){B 5K=r;r=[];6.K(5K,u(){7(q.36("2J")==m[2]){r=[q];v 12}})}L=r}t=t.1R(34,"")}}7(t){B 1a=6.1D(t,r);L=r=1a.r;t=6.35(1a.t)}}7(L&&L[0]==1B)L.4L();6.2k(2c,L);v 2c},1D:u(t,r,2g){22(t&&/^[a-z[({<*:.#]/i.1n(t)){B p=6.5M,m;6.K(p,u(i,1J){m=1J.2Q(t);7(m){t=t.7M(m[0].I);7(6.1s[m[1]].4u)m=6.1s[m[1]].4u(m);v 12}});7(m[1]==":"&&m[2]=="2g")r=6.1D(m[3],r,U).r;J 7(m[1]=="."){B 1J=1p 4v("(^|\\\\s)"+m[2]+"(\\\\s|$)");r=6.2q(r,u(e){v 1J.1n(e.19||"")},2g)}J{B f=6.1s[m[1]];7(1C f!="23")f=6.1s[m[1]][m[2]];40("f = u(a,i){"+(6.1s[m[1]].5P||"")+"v "+f+"}");r=6.2q(r,f,2g)}}v{r:r,t:t}},4x:u(o,r,1Q,Y,1J){P(B s=o.1b;s;s=s.2e)7(s.24==1){B 1M=U;7(1Q==".")1M=s.19&&1J.1n(s.19);J 7(1Q=="#")1M=s.36("2J")==Y;7(1M)r.1g(s);7(1Q=="#"&&r.I)3O;7(s.1b)6.4x(s,r,1Q,Y,1J)}v r},4z:u(D){B 4A=[];B Q=D.11;22(Q&&Q!=17){4A.1g(Q);Q=Q.11}v 4A},2a:u(Q,1i,3Z,D){1i=1i||1;B 1T=0;P(;Q;Q=Q[3Z]){7(Q.24==1)1T++;7(1T==1i||1i=="5R"&&1T%2==0&&1T>1&&Q==D||1i=="5S"&&1T%2==1&&Q==D)v Q}},2B:u(n,D){B r=[];P(;n;n=n.2e){7(n.24==1&&(!D||n!=D))r.1g(n)}v r}});6.G={1M:u(S,C,1o,F){7(6.W.1j&&S.3L!=T)S=1w;7(F)1o.F=F;7(!1o.2A)1o.2A=q.2A++;7(!S.$1H)S.$1H={};B 38=S.$1H[C];7(!38){38=S.$1H[C]={};7(S["39"+C])38[0]=S["39"+C]}38[1o.2A]=1o;S["39"+C]=q.5Y;7(!q.1k[C])q.1k[C]=[];q.1k[C].1g(S)},2A:1,1k:{},2f:u(S,C,1o){7(S.$1H){B i,j,k;7(C&&C.C){1o=C.1o;C=C.C}7(C&&S.$1H[C])7(1o)5U S.$1H[C][1o.2A];J P(i 1x S.$1H[C])5U S.$1H[C][i];J P(j 1x S.$1H)q.2f(S,j);P(k 1x S.$1H[C])7(k){k=U;3O}7(!k)S["39"+C]=16}},1S:u(C,F,S){F=6.3M(F||[]);7(!S)6.K(q.1k[C]||[],u(){6.G.1S(C,F,q)});J{B 1o=S["39"+C],1a,E=6.1t(S[C]);7(1o){F.61(q.2j({C:C,1O:S}));7((1a=1o.14(S,F))!==12)q.4F=U}7(E&&1a!==12)S[C]();q.4F=12}},5Y:u(G){7(1C 6=="T"||6.G.4F)v;G=6.G.2j(G||1w.G||{});B 3R;B c=q.$1H[G.C];B 1E=[].3N.3n(1A,1);1E.61(G);P(B j 1x c){1E[0].1o=c[j];1E[0].F=c[j].F;7(c[j].14(q,1E)===12){G.2n();G.2H();3R=12}}7(6.W.1j)G.1O=G.2n=G.2H=G.1o=G.F=16;v 3R},2j:u(G){7(!G.1O&&G.63)G.1O=G.63;7(G.65==T&&G.67!=T){B e=17.4H,b=17.64;G.65=G.67+(e.68||b.68);G.7Y=G.7Z+(e.6c||b.6c)}7(6.W.2N&&G.1O.24==3){B 3a=G;G=6.1z({},3a);G.1O=3a.1O.11;G.2n=u(){v 3a.2n()};G.2H=u(){v 3a.2H()}}7(!G.2n)G.2n=u(){q.3R=12};7(!G.2H)G.2H=u(){q.82=U};v G}};6.E.1z({3U:u(C,F,E){v q.K(u(){6.G.1M(q,C,E||F,F)})},6u:u(C,F,E){v q.K(u(){6.G.1M(q,C,u(G){6(q).6f(G);v(E||F).14(q,1A)},F)})},6f:u(C,E){v q.K(u(){6.G.2f(q,C,E)})},1S:u(C,F){v q.K(u(){6.G.1S(C,F,q)})},3X:u(){B a=1A;v q.6j(u(e){q.4M=q.4M==0?1:0;e.2n();v a[q.4M].14(q,[e])||12})},83:u(f,g){u 4O(e){B p=(e.C=="41"?e.84:e.85)||e.86;22(p&&p!=q)2G{p=p.11}2w(e){p=q};7(p==q)v 12;v(e.C=="41"?f:g).14(q,[e])}v q.41(4O).6k(4O)},27:u(f){7(6.3W)f.14(17,[6]);J{6.3c.1g(u(){v f.14(q,[6])})}v q}});6.1z({3W:12,3c:[],27:u(){7(!6.3W){6.3W=U;7(6.3c){6.K(6.3c,u(){q.14(17)});6.3c=16}7(6.W.3h||6.W.3f)17.87("6o",6.27,12)}}});1p u(){6.K(("88,8a,2O,8b,8d,52,6j,8e,"+"8f,8g,8h,41,6k,8j,42,"+"4R,8k,8l,8m,2C").3o(","),u(i,o){6.E[o]=u(f){v f?q.3U(o,f):q.1S(o)}});7(6.W.3h||6.W.3f)17.8n("6o",6.27,12);J 7(6.W.1j){17.8o("<8r"+"8s 2J=62 8u=U "+"3e=//:><\\/2d>");B 2d=17.4X("62");7(2d)2d.37=u(){7(q.3D!="1X")v;q.11.33(q);6.27()};2d=16}J 7(6.W.2N)6.50=3L(u(){7(17.3D=="8y"||17.3D=="1X"){4p(6.50);6.50=16;6.27()}},10);6.G.1M(1w,"2O",6.27)};7(6.W.1j)6(1w).6u("52",u(){B 1k=6.G.1k;P(B C 1x 1k){B 4Z=1k[C],i=4Z.I;7(i&&C!=\'52\')6w 6.G.2f(4Z[i-1],C);22(--i)}});6.E.1z({6A:u(V,21,M){q.2O(V,21,M,1)},2O:u(V,21,M,1W){7(6.1t(V))v q.3U("2O",V);M=M||u(){};B C="5d";7(21)7(6.1t(21)){M=21;21=16}J{21=6.3g(21);C="5V"}B 4e=q;6.3v({V:V,C:C,F:21,1W:1W,1X:u(2P,15){7(15=="2M"||!1W&&15=="5L")4e.1I("2t",2P.3G).4V().K(M,[2P.3G,15,2P]);J M.14(4e,[2P.3G,15,2P])}});v q},6B:u(){v 6.3g(q)},4V:u(){v q.2o("2d").K(u(){7(q.3e)6.59(q.3e);J 6.4a(q.2L||q.6H||q.2t||"")}).4g()}});7(!1w.3p)3p=u(){v 1p 6I("6K.6M")};6.K("5m,5Q,5O,5W,5N,5H".3o(","),u(i,o){6.E[o]=u(f){v q.3U(o,f)}});6.1z({2b:u(V,F,M,C,1W){7(6.1t(F)){M=F;F=16}v 6.3v({V:V,F:F,2M:M,4t:C,1W:1W})},6Q:u(V,F,M,C){v 6.2b(V,F,M,C,1)},59:u(V,M){v 6.2b(V,16,M,"2d")},6S:u(V,F,M){v 6.2b(V,F,M,"6m")},6U:u(V,F,M,C){7(6.1t(F)){M=F;F={}}v 6.3v({C:"5V",V:V,F:F,2M:M,4t:C})},6X:u(29){6.3q.29=29},6Y:u(5c){6.1z(6.3q,5c)},3q:{1k:U,C:"5d",29:0,5r:"70/x-73-3w-77",5h:U,48:U,F:16},3S:{},3v:u(s){s=6.1z({},6.3q,s);7(s.F){7(s.5h&&1C s.F!="23")s.F=6.3g(s.F);7(s.C.4m()=="2b"){s.V+=((s.V.18("?")>-1)?"&":"?")+s.F;s.F=16}}7(s.1k&&!6.4E++)6.G.1S("5m");B 4y=12;B N=1p 3p();N.7j(s.C,s.V,s.48);7(s.F)N.3A("7l-7m",s.5r);7(s.1W)N.3A("7o-4K-7q",6.3S[s.V]||"7s, 7t 7w 7x 4o:4o:4o 7z");N.3A("X-7B-7C","3p");7(N.7E)N.3A("7F","7G");7(s.5G)s.5G(N);7(s.1k)6.G.1S("5H",[N,s]);B 37=u(4s){7(N&&(N.3D==4||4s=="29")){4y=U;7(3I){4p(3I);3I=16}B 15;2G{15=6.5Z(N)&&4s!="29"?s.1W&&6.69(N,s.V)?"5L":"2M":"2C";7(15!="2C"){B 3F;2G{3F=N.4P("6b-4K")}2w(e){}7(s.1W&&3F)6.3S[s.V]=3F;B F=6.6i(N,s.4t);7(s.2M)s.2M(F,15);7(s.1k)6.G.1S("5N",[N,s])}J 6.3J(s,N,15)}2w(e){15="2C";6.3J(s,N,15,e)}7(s.1k)6.G.1S("5O",[N,s]);7(s.1k&&!--6.4E)6.G.1S("5Q");7(s.1X)s.1X(N,15);7(s.48)N=16}};B 3I=3L(37,13);7(s.29>0)57(u(){7(N){N.7N();7(!4y)37("29")}},s.29);2G{N.7Q(s.F)}2w(e){6.3J(s,N,16,e)}7(!s.48)37();v N},3J:u(s,N,15,e){7(s.2C)s.2C(N,15,e);7(s.1k)6.G.1S("5W",[N,s,e])},4E:0,5Z:u(r){2G{v!r.15&&7V.7W=="4G:"||(r.15>=5X&&r.15<7X)||r.15==6d||6.W.2N&&r.15==T}2w(e){}v 12},69:u(N,V){2G{B 6e=N.4P("6b-4K");v N.15==6d||6e==6.3S[V]||6.W.2N&&N.15==T}2w(e){}v 12},6i:u(r,C){B 4Q=r.4P("8c-C");B F=!C&&4Q&&4Q.18("N")>=0;F=C=="N"||F?r.8i:r.3G;7(C=="2d")6.4a(F);7(C=="6m")40("F = "+F);7(C=="4U")6("<1V>").4U(F).4V();v F},3g:u(a){B s=[];7(a.1l==2y||a.3Y)6.K(a,u(){s.1g(2x(q.Y)+"="+2x(q.O))});J P(B j 1x a)7(a[j]&&a[j].1l==2y)6.K(a[j],u(){s.1g(2x(j)+"="+2x(q))});J s.1g(2x(j)+"="+2x(a[j]));v s.6t("&")},4a:u(F){7(1w.54)1w.54(F);J 7(6.W.2N)1w.57(F,0);J 40.3n(1w,F)}});6.E.1z({1L:u(R,M){B 1G=q.1D(":1G");R?1G.26({28:"1L",3V:"1L",1d:"1L"},R,M):1G.K(u(){q.1q.1h=q.2E?q.2E:"";7(6.1m(q,"1h")=="1Z")q.1q.1h="2D"});v q},1K:u(R,M){B 3i=q.1D(":3i");R?3i.26({28:"1K",3V:"1K",1d:"1K"},R,M):3i.K(u(){q.2E=q.2E||6.1m(q,"1h");7(q.2E=="1Z")q.2E="2D";q.1q.1h="1Z"});v q},5g:6.E.3X,3X:u(E,4I){B 1E=1A;v 6.1t(E)&&6.1t(4I)?q.5g(E,4I):q.K(u(){6(q)[6(q).4l(":1G")?"1L":"1K"].14(6(q),1E)})},7a:u(R,M){v q.26({28:"1L"},R,M)},7c:u(R,M){v q.26({28:"1K"},R,M)},7f:u(R,M){v q.K(u(){B 5k=6(q).4l(":1G")?"1L":"1K";6(q).26({28:5k},R,M)})},7r:u(R,M){v q.26({1d:"1L"},R,M)},7u:u(R,M){v q.26({1d:"1K"},R,M)},7y:u(R,43,M){v q.26({1d:43},R,M)},26:u(H,R,1v,M){v q.1F(u(){q.2F=6.1z({},H);B 1u=6.R(R,1v,M);P(B p 1x H){B e=1p 6.3b(q,1u,p);7(H[p].1l==3Q)e.2s(e.Q(),H[p]);J e[H[p]](H)}})},1F:u(C,E){7(!E){E=C;C="3b"}v q.K(u(){7(!q.1F)q.1F={};7(!q.1F[C])q.1F[C]=[];q.1F[C].1g(E);7(q.1F[C].I==1)E.14(q)})}});6.1z({R:u(R,1v,E){B 1u=R&&R.1l==7K?R:{1X:E||!E&&1v||6.1t(R)&&R,25:R,1v:E&&1v||1v&&1v.1l!=4w&&1v};1u.25=(1u.25&&1u.25.1l==3Q?1u.25:{7R:7S,7T:5X}[1u.25])||7U;1u.1N=1u.1X;1u.1X=u(){6.6a(q,"3b");7(6.1t(1u.1N))1u.1N.14(q)};v 1u},1v:{},1F:{},6a:u(D,C){C=C||"3b";7(D.1F&&D.1F[C]){D.1F[C].4L();B f=D.1F[C][0];7(f)f.14(D)}},3b:u(D,1e,H){B z=q;B y=D.1q;B 4D=6.1m(D,"1h");y.5T="1G";z.a=u(){7(1e.49)1e.49.14(D,[z.2p]);7(H=="1d")6.1I(y,"1d",z.2p);J 7(6l(z.2p))y[H]=6l(z.2p)+"4S";y.1h="2D"};z.6v=u(){v 4T(6.1m(D,H))};z.Q=u(){B r=4T(6.30(D,H));v r&&r>-8z?r:z.6v()};z.2s=u(4f,43){z.4J=(1p 5o()).5w();z.2p=4f;z.a();z.4q=3L(u(){z.49(4f,43)},13)};z.1L=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();1e.1L=U;z.2s(0,D.1y[H]);7(H!="1d")y[H]="5a"};z.1K=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();1e.1K=U;z.2s(D.1y[H],0)};z.3X=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();7(4D=="1Z"){1e.1L=U;7(H!="1d")y[H]="5a";z.2s(0,D.1y[H])}J{1e.1K=U;z.2s(D.1y[H],0)}};z.49=u(32,47){B t=(1p 5o()).5w();7(t>1e.25+z.4J){4p(z.4q);z.4q=16;z.2p=47;z.a();7(D.2F)D.2F[H]=U;B 2c=U;P(B i 1x D.2F)7(D.2F[i]!==U)2c=12;7(2c){y.5T="";y.1h=4D;7(6.1m(D,"1h")=="1Z")y.1h="2D";7(1e.1K)y.1h="1Z";7(1e.1K||1e.1L)P(B p 1x D.2F)7(p=="1d")6.1I(y,p,D.1y[p]);J y[p]=""}7(2c&&6.1t(1e.1X))1e.1X.14(D)}J{B n=t-q.4J;B p=n/1e.25;z.2p=1e.1v&&6.1v[1e.1v]?6.1v[1e.1v](p,n,32,(47-32),1e.25):((-6h.7O(p*6h.8L)/2)+0.5)*(47-32)+32;z.a()}}}})}',62,545,'||||||jQuery|if|||||||||||||||||||this||||function|return||||||var|type|elem|fn|data|event|prop|length|else|each|ret|callback|xml|value|for|cur|speed|element|undefined|true|url|browser||name|||parentNode|false||apply|status|null|document|indexOf|className|val|firstChild|obj|opacity|options|nodeName|push|display|result|msie|global|constructor|css|test|handler|new|style|arg|expr|isFunction|opt|easing|window|in|orig|extend|arguments|context|typeof|filter|args|queue|hidden|events|attr|re|hide|show|add|old|target|table|token|replace|trigger|num|elems|div|ifModified|complete|key|none|tbody|params|while|string|nodeType|duration|animate|ready|height|timeout|nth|get|done|script|nextSibling|remove|not|index|tb|fix|merge|oid|z0|preventDefault|find|now|grep|pushStack|custom|innerHTML|first|cssFloat|catch|encodeURIComponent|Array|el|guid|sibling|error|block|oldblock|curAnim|try|stopPropagation|childNodes|id|wrap|text|success|safari|load|res|exec|al|_|last|substr|has|disabled|insertBefore|selected|checked|curCSS|map|firstNum|removeChild|re2|trim|getAttribute|onreadystatechange|handlers|on|originalEvent|fx|readyList|parPos|src|opera|param|mozilla|visible|domManip|clean|cloneNode|tr|call|split|XMLHttpRequest|ajaxSettings|append|child|String|empty|ajax|form|button|inArray|multiFilter|setRequestHeader|foundToken|9_|readyState|tag|modRes|responseText|second|ival|handleError|toUpperCase|setInterval|makeArray|slice|break|oWidth|Number|returnValue|lastModified|styleFloat|bind|width|isReady|toggle|jquery|dir|eval|mouseover|select|to|defaultView|position|oHeight|lastNum|async|step|globalEval|static|pos|swap|self|from|end|float|alpha|radio|inv|is|toLowerCase|visibility|00|clearInterval|timer|rec|isTimeout|dataType|_resort|RegExp|Function|getAll|requestDone|parents|matched|isXMLDoc|appendChild|oldDisplay|active|triggered|file|documentElement|fn2|startTime|Modified|shift|lastToggle|deep|handleHover|getResponseHeader|ct|submit|px|parseFloat|html|evalScripts|getComputedStyle|getElementById|clone|els|safariTimer|currentStyle|unload|force|execScript|getPropertyValue|newProp|setTimeout|zoom|getScript|1px|sl|settings|GET|rl|check|_toggle|processData|prepend|before|state|removeAttr|ajaxStart|lt|Date|gt|eq|contentType|previousSibling|after|parent|contains|getTime|checkbox|password|appendTo|image|reset|input|webkit|href|continue|beforeSend|ajaxSend|ownerDocument|getElementsByTagName|tmp|notmodified|parse|ajaxSuccess|ajaxComplete|_prefix|ajaxStop|even|odd|overflow|delete|POST|ajaxError|200|handle|httpSuccess|nodeValue|unshift|__ie_init|srcElement|body|pageX|tagName|clientX|scrollLeft|httpNotModified|dequeue|Last|scrollTop|304|xmlRes|unbind|100|Math|httpData|click|mouseout|parseInt|json|createElement|DOMContentLoaded|prevObject|ol|setArray|exclude|join|one|max|do|relative|clientHeight|clientWidth|loadIfModified|serialize|toString|thead|tfoot|td|th|textContent|ActiveXObject|htmlFor|Microsoft|class|XMLHTTP|readOnly|gi|match|getIfModified|9999|getJSON|getAttributeNode|post|setAttribute|ig|ajaxTimeout|ajaxSetup|concat|application|userAgent|compatible|www|compatMode|CSS1Compat|next|urlencoded|siblings|children|slideDown|prependTo|slideUp|Top|insertAfter|slideToggle|removeAttribute|addClass|removeClass|open|toggleClass|Content|Type|lastChild|If|only|Since|fadeIn|Thu|01|fadeOut|enabled|Jan|1970|fadeTo|GMT|textarea|Requested|With|prev|overrideMimeType|Connection|close|boxModel|right|object|Object|navigator|substring|abort|cos|font|send|slow|600|fast|400|location|protocol|300|pageY|clientY|method|action|cancelBubble|hover|fromElement|toElement|relatedTarget|removeEventListener|blur|readonly|focus|resize|content|scroll|dblclick|mousedown|mouseup|mousemove|responseXML|change|keydown|keypress|keyup|addEventListener|write|prototype|size|scr|ipt|createTextNode|defer|FORM|reverse|noConflict|loaded|10000|weight|line|Bottom|Right|Left|padding|border|Width|offsetHeight|offsetWidth|absolute|PI|left'.split('|'),0,{}));jQuery.noConflict();
diff --git a/wp-includes/js/list-manipulation.js b/wp-includes/js/list-manipulation.js
new file mode 100644
index 0000000..e522709
--- /dev/null
+++ b/wp-includes/js/list-manipulation.js
@@ -0,0 +1,295 @@
+addLoadEvent( function() {
+ if ( 'undefined' != typeof listManL10n )
+ Object.extend(listMan.prototype, listManL10n);
+ theList = new listMan();
+} );
+
+function deleteSomething( what, id, message, obj ) {
+ if ( !obj )
+ obj=theList;
+ if ( !message )
+ message = obj.delText.replace(/%thing%/g, what);
+ if( confirm(message) )
+ return obj.ajaxDelete( what, id );
+ else return false;
+}
+
+function dimSomething( what, id, dimClass, obj ) {
+ if ( !obj )
+ obj = theList;
+ return obj.ajaxDimmer(what,id,dimClass);
+}
+
+var listMan = Class.create();
+Object.extend(listMan.prototype, {
+ ajaxRespEl: 'ajax-response',
+ ajaxHandler: false,
+ inputData: '',
+ clearInputs: [],
+ showLink: true,
+ topAdder: false,
+ alt: 'alternate',
+ altOffset: 0,
+ addComplete: null,
+ delComplete: null,
+ dimComplete: null,
+ dataStore: null,
+ formStore: null,
+
+ jumpText: '', // We get these from listManL10n
+ delText: '',
+
+ initialize: function(theListId) {
+ this.theList = $(theListId ? theListId : 'the-list');
+ if ( !this.theList )
+ return false;
+ Element.cleanWhitespace(this.theList);
+ },
+
+ // sends add-what and fields contained in where
+ // recieves html with top element having an id like what-#
+ ajaxAdder: function( what, where, update ) { // Do NOT wrap TR in TABLE TBODY
+ var ajaxAdd = new WPAjax( this.ajaxHandler, this.ajaxRespEl );
+ if ( ajaxAdd.notInitialized() )
+ return true;
+ var action = ( update ? 'update-' : 'add-' ) + what;
+ ajaxAdd.options.parameters = $H(ajaxAdd.options.parameters).merge({action: action}).merge(this.inputData.toQueryParams()).merge(this.grabInputs( where, ajaxAdd ).toQueryParams());
+
+ var tempObj=this;
+ ajaxAdd.addOnComplete( function(transport) {
+ var newItems = $A(transport.responseXML.getElementsByTagName(what));
+ if ( newItems ) {
+ var showLinkMessage = '';
+ var m = '';
+ newItems.each( function(i) {
+ var id = i.getAttribute('id');
+ var exists = $(what+'-'+id);
+ if ( exists )
+ tempObj.replaceListItem( exists, getNodeValue(i,'response_data'), update );
+ else
+ tempObj.addListItem( getNodeValue(i, 'response_data') );
+ m = getNodeValue(i, 'show-link');
+ showLinkMessage += showLinkMessage ? "<br />\n" : '';
+ if ( m )
+ showLinkMessage += m;
+ else
+ showLinkMessage += "<a href='#" + what + '-' + id + "'>" + tempObj.jumpText + "</a>";
+ });
+ if ( tempObj.showLink && showLinkMessage )
+ Element.update(ajaxAdd.myResponseElement,"<div id='jumplink' class='updated fade'><p>" + showLinkMessage + "</p></div>");
+ }
+ if ( tempObj.addComplete && typeof tempObj.addComplete == 'function' )
+ tempObj.addComplete( what, where, update, transport );
+ tempObj.recolorList();
+ ajaxAdd.restoreInputs = null;
+ });
+ if ( !update )
+ ajaxAdd.addOnWPError( function(transport) { tempObj.restoreForm(ajaxAdd.restoreInputs); });
+ ajaxAdd.request(ajaxAdd.url);
+ if ( !update )
+ this.clear();
+ return false;
+ },
+
+ // sends update-what and fields contained in where
+ // recieves html with top element having an id like what-#
+ ajaxUpdater: function( what, where ) { return this.ajaxAdder( what, where, true ); },
+
+ // sends delete-what and id#
+ ajaxDelete: function( what, id ) {
+ var ajaxDel = new WPAjax( this.ajaxHandler, this.ajaxRespEl );
+ if( ajaxDel.notInitialized() )
+ return true;
+ var tempObj = this;
+ var action = 'delete-' + what;
+ var actionId = action + '&id=' + id;
+ var idName = what.replace('-as-spam','') + '-' + id;
+ ajaxDel.addOnComplete( function(transport) {
+ Element.update(ajaxDel.myResponseElement,'');
+ tempObj.destore(actionId);
+ if( tempObj.delComplete && typeof tempObj.delComplete == 'function' )
+ tempObj.delComplete( what, id, transport );
+ });
+ ajaxDel.addOnWPError( function(transport) { tempObj.restore(actionId, true); });
+ ajaxDel.options.parameters = $H(ajaxDel.options.parameters).merge({action: action, id: id}).merge(this.inputData.toQueryParams());
+ ajaxDel.request(ajaxDel.url);
+ this.store(actionId, idName);
+ tempObj.removeListItem( idName );
+ return false;
+ },
+
+ // Toggles class nomes
+ // sends dim-what and id#
+ ajaxDimmer: function( what, id, dimClass ) {
+ ajaxDim = new WPAjax( this.ajaxHandler, this.ajaxRespEl );
+ if ( ajaxDim.notInitialized() )
+ return true;
+ var tempObj = this;
+ var action = 'dim-' + what;
+ var actionId = action + '&id=' + id;
+ var idName = what + '-' + id;
+ ajaxDim.addOnComplete( function(transport) {
+ Element.update(ajaxDim.myResponseElement,'');
+ tempObj.destore(actionId);
+ if ( tempObj.dimComplete && typeof tempObj.dimComplete == 'function' )
+ tempObj.dimComplete( what, id, dimClass, transport );
+ });
+ ajaxDim.addOnWPError( function(transport) { tempObj.restore(actionId, true); });
+ ajaxDim.options.parameters = $H(ajaxDim.options.parameters).merge({action: action, id: id}).merge(this.inputData.toQueryParams());
+ ajaxDim.request(ajaxDim.url);
+ this.store(actionId, idName);
+ this.dimItem( idName, dimClass );
+ return false;
+ },
+
+ addListItem: function( h ) {
+ new Insertion[this.topAdder ? 'Top' : 'Bottom'](this.theList,h);
+ Element.cleanWhitespace(this.theList);
+ var id = this.topAdder ? this.theList.firstChild.id : this.theList.lastChild.id;
+ if ( this.alt )
+ if ( ( this.theList.childNodes.length + this.altOffset ) % 2 )
+ Element.addClassName($(id),this.alt);
+ Fat.fade_element(id);
+ },
+
+ // only hides the element sa it can be put back again if necessary
+ removeListItem: function( id, noFade ) {
+ id = $(id);
+ if ( !noFade ) {
+ Fat.fade_element(id.id,null,700,'#FF3333');
+ var tempObj = this;
+ var func = function() { id.hide(); tempObj.recolorList(); }
+ setTimeout(func, 705);
+ } else {
+ id.hide();
+ this.recolorList();
+ }
+ },
+
+ replaceListItem: function( id, h, update ) {
+ id = $(id);
+ if ( !update ) {
+ Element.remove(id);
+ this.addListItem( h );
+ return;
+ }
+ id.replace(h);
+ Fat.fade_element(id.id);
+ },
+
+ // toggles class
+ dimItem: function( id, dimClass, noFade ) {
+ id = $(id);
+ if ( Element.hasClassName(id,dimClass) ) {
+ if ( !noFade )
+ Fat.fade_element(id.id,null,700,null);
+ Element.removeClassName(id,dimClass);
+ } else {
+ if ( !noFade )
+ Fat.fade_element(id.id,null,700,'#FF3333');
+ Element.addClassName(id,dimClass);
+ }
+ },
+
+ // store an element in case we need it later
+ store: function(action, id) {
+ if ( !this.dataStore )
+ this.dataStore = $H();
+ this.dataStore[action] = $(id).cloneNode(true);
+ },
+
+ // delete from store
+ destore: function(action) { delete(this.dataStore[action]); },
+
+ // restore element from store into existing (possibly hidden) element of same id
+ restore: function(action, error) {
+ var id = this.dataStore[action].id;
+ this.theList.replaceChild(this.dataStore[action], $(id));
+ delete(this.dataStore[action]);
+ if ( error ) {
+ func = function() { Element.setStyle($(id),{backgroundColor:'#FF3333'}); }
+ func(); setTimeout(func, 705); // Hit it twice in case it's still fading.
+ }
+ },
+
+ // Like Form.serialize, but excludes action and sets up clearInputs
+ grabInputs: function( where, ajaxObj ) {
+ if ( ajaxObj )
+ ajaxObj.restoreInputs = [];
+ var elements = Form.getElements($(where));
+ var queryComponents = new Array();
+ for (var i = 0; i < elements.length; i++) {
+ if ( 'action' == elements[i].name )
+ continue;
+ if ( 'hidden' != elements[i].type && 'submit' != elements[i].type && 'button' != elements[i].type ) {
+ this.clearInputs.push(elements[i]);
+ if ( ajaxObj )
+ ajaxObj.restoreInputs.push([elements[i], elements[i].value]);
+ }
+ var queryComponent = Form.Element.serialize(elements[i]);
+ if (queryComponent) {
+ queryComponents.push(queryComponent);
+ }
+ }
+ return queryComponents.join('&');
+ },
+
+ // form.reset() can only do whole forms. This can do subsections.
+ clear: function() {
+ this.clearInputs.each( function(i) {
+ i = $(i);
+ if ( 'textarea' == i.tagName.toLowerCase() )
+ i.value = '';
+ else
+ switch ( i.type.toLowerCase() ) {
+ case 'password': case 'text':
+ i.value = '';
+ break;
+ case 'checkbox': case 'radio':
+ i.checked = false;
+ break;
+ case 'select': case 'select-one':
+ i.selectedIndex = null;
+ break;
+ case 'select-multiple':
+ for (var o = 0; o < i.length; o++) i.options[o].selected = false;
+ break;
+ }
+ });
+ this.clearInputs = [];
+ },
+
+ restoreForm: function(elements) {
+ elements.each( function(i) {
+ i[0].value = i[1];
+ });
+ },
+
+ recolorList: function() {
+ if ( !this.alt )
+ return;
+ var alt = this.alt;
+ var offset = this.altOffset;
+ var listItems = $A(this.theList.childNodes).findAll( function(i) { return Element.visible(i) } );
+ listItems.each( function(i,n) {
+ if ( ( n + offset ) % 2 )
+ Element.removeClassName(i,alt);
+ else
+ Element.addClassName(i,alt);
+ });
+ }
+});
+
+//No submit unless code returns true.
+function killSubmit ( code, e ) {
+ e = e ? e : window.event;
+ if ( !e ) return;
+ var t = e.target ? e.target : e.srcElement;
+ if ( ( 'text' == t.type && e.keyCode == 13 ) || ( 'submit' == t.type && 'click' == e.type ) ) {
+ if ( ( 'string' == typeof code && !eval(code) ) || ( 'function' == typeof code && !code() ) ) {
+ e.returnValue = false; e.cancelBubble = true; return false;
+ }
+ }
+}
+//Generic but lame JS closure
+function encloseFunc(f){var a=arguments[1];return function(){return f(a);}}
diff --git a/wp-includes/js/tinymce/plugins/spellchecker/classes/TinyGoogleSpell.class.php b/wp-includes/js/tinymce/plugins/spellchecker/classes/TinyGoogleSpell.class.php
index 971da10..cf3d800 100755
--- a/wp-includes/js/tinymce/plugins/spellchecker/classes/TinyGoogleSpell.class.php
+++ b/wp-includes/js/tinymce/plugins/spellchecker/classes/TinyGoogleSpell.class.php
@@ -1,12 +1,10 @@
<?php
-/* *
+/* *
* Tiny Spelling Interface for TinyMCE Spell Checking.
*
* Copyright © 2006 Moxiecode Systems AB
*/
-require_once("HttpClient.class.php");
-
class TinyGoogleSpell {
var $lang;
@@ -22,11 +20,21 @@ class TinyGoogleSpell {
$matches = $this->_getMatches($wordstr);
for ($i=0; $i<count($matches); $i++)
- $words[] = substr($wordstr, $matches[$i][1], $matches[$i][2]);
+ $words[] = $this->unhtmlentities(mb_substr($wordstr, $matches[$i][1], $matches[$i][2], "UTF-8"));
return $words;
}
+ function unhtmlentities($string) {
+ $string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);
+ $string = preg_replace('~&#([0-9]+);~e', 'chr(\\1)', $string);
+
+ $trans_tbl = get_html_translation_table(HTML_ENTITIES);
+ $trans_tbl = array_flip($trans_tbl);
+
+ return strtr($string, $trans_tbl);
+ }
+
// Returns array with suggestions or false if failed.
function getSuggestion($word) {
$sug = array();
@@ -34,37 +42,78 @@ class TinyGoogleSpell {
$matches = $this->_getMatches($word);
if (count($matches) > 0)
- $sug = explode("\t", $matches[0][4]);
+ $sug = explode("\t", utf8_encode($this->unhtmlentities($matches[0][4])));
return $sug;
}
- function _getMatches($word_list) {
- $xml = "";
+ function _xmlChars($string) {
+ $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
+
+ foreach ($trans as $k => $v)
+ $trans[$k] = "&#".ord($k).";";
- // Setup HTTP Client
- $client = new HttpClient('www.google.com');
- $client->setUserAgent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR');
- $client->setHandleRedirects(false);
- $client->setDebug(false);
+ return strtr($string, $trans);
+ }
+
+ function _getMatches($word_list) {
+ $server = "www.google.com";
+ $port = 443;
+ $path = "/tbproxy/spell?lang=" . $this->lang . "&hl=en";
+ $host = "www.google.com";
+ $url = "https://" . $server;
// Setup XML request
- $xml .= '<?xml version="1.0" encoding="utf-8" ?>';
- $xml .= '<spellrequest textalreadyclipped="0" ignoredups="0" ignoredigits="1" ignoreallcaps="1">';
- $xml .= '<text>' . htmlentities($word_list) . '</text></spellrequest>';
-
- // Execute HTTP Post to Google
- if (!$client->post('/tbproxy/spell?lang=' . $this->lang, $xml)) {
- $this->errorMsg[] = 'An error occurred: ' . $client->getError();
- return array();
+ $xml = '<?xml version="1.0" encoding="utf-8" ?><spellrequest textalreadyclipped="0" ignoredups="0" ignoredigits="1" ignoreallcaps="1"><text>' . $word_list . '</text></spellrequest>';
+
+ $header = "POST ".$path." HTTP/1.0 \r\n";
+ $header .= "MIME-Version: 1.0 \r\n";
+ $header .= "Content-type: application/PTI26 \r\n";
+ $header .= "Content-length: ".strlen($xml)." \r\n";
+ $header .= "Content-transfer-encoding: text \r\n";
+ $header .= "Request-number: 1 \r\n";
+ $header .= "Document-type: Request \r\n";
+ $header .= "Interface-Version: Test 1.4 \r\n";
+ $header .= "Connection: close \r\n\r\n";
+ $header .= $xml;
+ //$this->_debugData($xml);
+
+ // Use raw sockets
+ $fp = fsockopen("ssl://" . $server, $port, $errno, $errstr, 30);
+ if ($fp) {
+ // Send request
+ fwrite($fp, $header);
+
+ // Read response
+ $xml = "";
+ while (!feof($fp))
+ $xml .= fgets($fp, 128);
+
+ fclose($fp);
+ } else {
+ // Use curl
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL,$url);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
+ $xml = curl_exec($ch);
+ curl_close($ch);
}
+ //$this->_debugData($xml);
+
// Grab and parse content
- $xml = $client->getContent();
preg_match_all('/<c o="([^"]*)" l="([^"]*)" s="([^"]*)">([^<]*)<\/c>/', $xml, $matches, PREG_SET_ORDER);
return $matches;
}
+
+ function _debugData($data) {
+ $fh = @fopen("debug.log", 'a+');
+ @fwrite($fh, $data);
+ @fclose($fh);
+ }
}
// Setup classname, should be the same as the name of the spellchecker class
diff --git a/wp-includes/js/tinymce/plugins/spellchecker/classes/TinyPspellShell.class.php b/wp-includes/js/tinymce/plugins/spellchecker/classes/TinyPspellShell.class.php
index 81e3f15..5723d2f 100755
--- a/wp-includes/js/tinymce/plugins/spellchecker/classes/TinyPspellShell.class.php
+++ b/wp-includes/js/tinymce/plugins/spellchecker/classes/TinyPspellShell.class.php
@@ -6,6 +6,7 @@
*
*/
+
class TinyPspellShell {
var $lang;
var $mode;
@@ -27,7 +28,11 @@ class TinyPspellShell {
$this->errorMsg = array();
$this->tmpfile = tempnam($config['tinypspellshell.tmp'], "tinyspell");
- $this->cmd = "cat ". $this->tmpfile ." | " . $config['tinypspellshell.aspell'] . " -a --lang=". $this->lang;
+
+ if(preg_match("#win#i",php_uname()))
+ $this->cmd = $config['tinypspellshell.aspell'] . " -a --lang=". $this->lang." --encoding=utf-8 -H < $this->tmpfile 2>&1";
+ else
+ $this->cmd = "cat ". $this->tmpfile ." | " . $config['tinypspellshell.aspell'] . " -a --encoding=utf-8 -H --lang=". $this->lang;
}
// Returns array with bad words or false if failed.
@@ -36,7 +41,6 @@ class TinyPspellShell {
fwrite($fh, "!\n");
foreach($wordArray as $key => $value)
fwrite($fh, "^" . $value . "\n");
-
fclose($fh);
} else {
$this->errorMsg[] = "PSpell not found.";
@@ -44,7 +48,8 @@ class TinyPspellShell {
}
$data = shell_exec($this->cmd);
- @unlink($this->tmpfile);
+ @unlink($this->tmpfile);
+
$returnData = array();
$dataArr = preg_split("/\n/", $data, -1, PREG_SPLIT_NO_EMPTY);
@@ -66,15 +71,22 @@ class TinyPspellShell {
// Returns array with suggestions or false if failed.
function getSuggestion($word) {
+ if (function_exists("mb_convert_encoding"))
+ $word = mb_convert_encoding($word, "ISO-8859-1", mb_detect_encoding($word, "UTF-8"));
+ else
+ $word = utf8_encode($word);
+
if ($fh = fopen($this->tmpfile, "w")) {
fwrite($fh, "!\n");
fwrite($fh, "^$word\n");
fclose($fh);
} else
- wp_die("Error opening tmp file.");
+ die("Error opening tmp file.");
$data = shell_exec($this->cmd);
- @unlink($this->tmpfile);
+
+ @unlink($this->tmpfile);
+
$returnData = array();
$dataArr = preg_split("/\n/", $data, -1, PREG_SPLIT_NO_EMPTY);
@@ -94,6 +106,13 @@ class TinyPspellShell {
}
return $returnData;
}
+
+ function _debugData($data) {
+ $fh = @fopen("debug.log", 'a+');
+ @fwrite($fh, $data);
+ @fclose($fh);
+ }
+
}
// Setup classname, should be the same as the name of the spellchecker class
diff --git a/wp-includes/js/tinymce/plugins/spellchecker/config.php b/wp-includes/js/tinymce/plugins/spellchecker/config.php
index 2bfc9ec..f008d11 100755
--- a/wp-includes/js/tinymce/plugins/spellchecker/config.php
+++ b/wp-includes/js/tinymce/plugins/spellchecker/config.php
@@ -1,13 +1,14 @@
<?php
$spellCheckerConfig = array();
+ // Spellchecker class use
+ // require_once("classes/TinyPspellShell.class.php"); // Command line pspell
+ require_once("classes/TinyGoogleSpell.class.php"); // Google web service
+ // require_once("classes/TinyPspell.class.php"); // Internal PHP version
+
// General settings
$spellCheckerConfig['enabled'] = true;
- // Pspell shell specific settings
- $spellCheckerConfig['tinypspellshell.aspell'] = '/usr/bin/aspell';
- $spellCheckerConfig['tinypspellshell.tmp'] = '/tmp/tinyspell/0';
-
// Default settings
$spellCheckerConfig['default.language'] = 'en';
$spellCheckerConfig['default.mode'] = PSPELL_FAST;
@@ -17,13 +18,7 @@
$spellCheckerConfig['default.jargon'] = "";
$spellCheckerConfig['default.encoding'] = "";
- // Spellchecker class use
- if ( function_exists('pspell_new') )
- require_once("classes/TinyPspell.class.php"); // Internal PHP version
-
- elseif ( file_exists($spellCheckerConfig['tinypspellshell.aspell']) )
- require_once("classes/TinyPspellShell.class.php"); // Command line pspell
-
- else
- require_once("classes/TinyGoogleSpell.class.php"); // Google web service
+ // Pspell shell specific settings
+ $spellCheckerConfig['tinypspellshell.aspell'] = '/usr/bin/aspell';
+ $spellCheckerConfig['tinypspellshell.tmp'] = '/tmp';
?>
diff --git a/wp-includes/js/tinymce/plugins/spellchecker/css/content.css b/wp-includes/js/tinymce/plugins/spellchecker/css/content.css
index fb82733..c56a453 100755
--- a/wp-includes/js/tinymce/plugins/spellchecker/css/content.css
+++ b/wp-includes/js/tinymce/plugins/spellchecker/css/content.css
@@ -1,5 +1,4 @@
.mceItemHiddenSpellWord {
background: url('../images/wline.gif') repeat-x bottom left;
- bo2rder-bottom: 1px dashed red;
cursor: default;
}
diff --git a/wp-includes/js/tinymce/plugins/spellchecker/css/spellchecker.css b/wp-includes/js/tinymce/plugins/spellchecker/css/spellchecker.css
index aa4a8ea..f2c6ac7 100755
--- a/wp-includes/js/tinymce/plugins/spellchecker/css/spellchecker.css
+++ b/wp-includes/js/tinymce/plugins/spellchecker/css/spellchecker.css
@@ -31,4 +31,5 @@
font-family: Arial, Verdana, Tahoma, Helvetica;
font-weight: bold;
font-size: 11px;
+ background-color: #FFF;
}
diff --git a/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin.js b/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin.js
index ab3fc6b..7760175 100755
--- a/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin.js
+++ b/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin.js
@@ -1,573 +1 @@
-/**
- * $RCSfile: editor_plugin_src.js,v $
- * $Revision: 1.4 $
- * $Date: 2006/03/24 17:24:50 $
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
- */
-
-tinyMCE.importPluginLanguagePack('spellchecker', 'en,sv,nn,nb');
-
-// Plucin static class
-var TinyMCE_SpellCheckerPlugin = {
- _contextMenu : new TinyMCE_Menu(),
- _menu : new TinyMCE_Menu(),
- _counter : 0,
-
- getInfo : function() {
- return {
- longname : 'Spellchecker',
- author : 'Moxiecode Systems AB',
- authorurl : 'http://tinymce.moxiecode.com',
- infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_spellchecker.html',
- version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
- };
- },
-
- handleEvent : function(e) {
- var elm = tinyMCE.isMSIE ? e.srcElement : e.target;
- var inst = tinyMCE.selectedInstance, args = '';
- var self = TinyMCE_SpellCheckerPlugin;
- var cm = self._contextMenu;
- var p, p2, x, y, sx, sy, h, elm;
-
- // Handle click on word
- if ((e.type == "click" || e.type == "contextmenu") && elm) {
- do {
- if (tinyMCE.getAttrib(elm, 'class') == "mceItemHiddenSpellWord") {
- inst.spellCheckerElm = elm;
-
- // Setup arguments
- args += 'id=' + inst.editorId + "|" + (++self._counter);
- args += '&cmd=suggest&check=' + escape(elm.innerHTML);
- args += '&lang=' + escape(inst.spellCheckerLang);
-
- elm = inst.spellCheckerElm;
- p = tinyMCE.getAbsPosition(inst.iframeElement);
- p2 = tinyMCE.getAbsPosition(elm);
- h = parseInt(elm.offsetHeight);
- sx = inst.getBody().scrollLeft;
- sy = inst.getBody().scrollTop;
- x = p.absLeft + p2.absLeft - sx;
- y = p.absTop + p2.absTop - sy + h;
-
- cm.clear();
- cm.addTitle(tinyMCE.getLang('lang_spellchecker_wait', '', true));
- cm.show();
- cm.moveTo(x, y);
-
- inst.selection.selectNode(elm, false, false);
-
- self._sendAjax(self.baseURL + "/tinyspell.php", self._ajaxResponse, 'post', args);
-
- tinyMCE.cancelEvent(e);
- return false;
- }
- } while ((elm = elm.parentNode));
- }
-
- return true;
- },
-
- initInstance : function(inst) {
- var self = TinyMCE_SpellCheckerPlugin, m = self._menu, cm = self._contextMenu, e;
-
- tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/spellchecker/css/content.css");
-
- if (!tinyMCE.hasMenu('spellcheckercontextmenu')) {
- tinyMCE.importCSS(document, tinyMCE.baseURL + "/plugins/spellchecker/css/spellchecker.css");
-
- cm.init({drop_menu : false});
- tinyMCE.addMenu('spellcheckercontextmenu', cm);
- }
-
- if (!tinyMCE.hasMenu('spellcheckermenu')) {
- m.init({});
- tinyMCE.addMenu('spellcheckermenu', m);
- }
-
- inst.spellCheckerLang = 'en';
- self._buildSettingsMenu(inst, null);
-
- e = self._getBlockBoxLayer(inst).create('div', 'mceBlockBox', document.getElementById(inst.editorId + '_parent'));
- self._getMsgBoxLayer(inst).create('div', 'mceMsgBox', document.getElementById(inst.editorId + '_parent'));
- },
-
- _getMsgBoxLayer : function(inst) {
- if (!inst.spellCheckerMsgBoxL)
- inst.spellCheckerMsgBoxL = new TinyMCE_Layer(inst.editorId + '_spellcheckerMsgBox', false);
-
- return inst.spellCheckerMsgBoxL;
- },
-
- _getBlockBoxLayer : function(inst) {
- if (!inst.spellCheckerBoxL)
- inst.spellCheckerBoxL = new TinyMCE_Layer(inst.editorId + '_spellcheckerBlockBox', false);
-
- return inst.spellCheckerBoxL;
- },
-
- _buildSettingsMenu : function(inst, lang) {
- var i, ar = tinyMCE.getParam('spellchecker_languages', '+English=en').split(','), p;
- var self = TinyMCE_SpellCheckerPlugin, m = self._menu, c;
-
- m.clear();
- m.addTitle(tinyMCE.getLang('lang_spellchecker_langs', '', true));
-
- for (i=0; i<ar.length; i++) {
- if (ar[i] != '') {
- p = ar[i].split('=');
- c = 'mceMenuCheckItem';
-
- if (p[0].charAt(0) == '+') {
- p[0] = p[0].substring(1);
-
- if (lang == null) {
- c = 'mceMenuSelectedItem';
- inst.spellCheckerLang = p[1];
- }
- }
-
- if (lang == p[1])
- c = 'mceMenuSelectedItem';
-
- m.add({text : p[0], js : "tinyMCE.execInstanceCommand('" + inst.editorId + "','mceSpellCheckerSetLang',false,'" + p[1] + "');", class_name : c});
- }
- }
- },
-
- setupContent : function(editor_id, body, doc) {
- TinyMCE_SpellCheckerPlugin._removeWords(doc);
- },
-
- getControlHTML : function(cn) {
- switch (cn) {
- case "spellchecker":
- return TinyMCE_SpellCheckerPlugin._getMenuButtonHTML(cn, 'lang_spellchecker_desc', '{$pluginurl}/images/spellchecker.gif', 'lang_spellchecker_desc', 'mceSpellCheckerMenu', 'mceSpellCheck');
- }
-
- return "";
- },
-
- /**
- * Returns the HTML code for a normal button control.
- *
- * @param {string} id Button control id, this will be the suffix for the element id, the prefix is the editor id.
- * @param {string} lang Language variable key name to insert as the title/alt of the button image.
- * @param {string} img Image URL to insert, {$themeurl} and {$pluginurl} will be replaced.
- * @param {string} mlang Language variable key name to insert as the title/alt of the menu button image.
- * @param {string} mid Menu by id to display when the menu button is pressed.
- * @param {string} cmd Command to execute when the user clicks the button.
- * @param {string} ui Optional user interface boolean for command.
- * @param {string} val Optional value for command.
- * @return HTML code for a normal button based in input information.
- * @type string
- */
- _getMenuButtonHTML : function(id, lang, img, mlang, mid, cmd, ui, val) {
- var h = '', m, x;
-
- cmd = 'tinyMCE.hideMenus();tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';
-
- if (typeof(ui) != "undefined" && ui != null)
- cmd += ',' + ui;
-
- if (typeof(val) != "undefined" && val != null)
- cmd += ",'" + val + "'";
-
- cmd += ');';
-
- // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled
- if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isMSIE || tinyMCE.isOpera) && (m = tinyMCE.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {
- // Tiled button
- x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);
- h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceTiledButton mceButtonNormal" target="_self">';
- h += '<img src="{$themeurl}/images/spacer.gif" style="background-position: ' + x + 'px 0" title="{$' + lang + '}" />';
- h += '<img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" onclick="' + mcmd + 'return false;" />';
- h += '</a>';
- } else {
- if (tinyMCE.isMSIE && !tinyMCE.isOpera)
- h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton" onmouseover="tinyMCE.plugins.spellchecker._menuButtonEvent(\'over\',this);" onmouseout="tinyMCE.plugins.spellchecker._menuButtonEvent(\'out\',this);">';
- else
- h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton">';
-
- h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';
- h += '<img src="' + img + '" title="{$' + lang + '}" /></a>';
- h += '<a href="#" onclick="tinyMCE.plugins.spellchecker._toggleMenu(\'{$editor_id}\',\'' + mid + '\');return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" />';
- h += '</a></span>';
- }
-
- return h;
- },
-
- _menuButtonEvent : function(e, o) {
- if (o.className == 'mceMenuButtonFocus')
- return;
-
- if (e == 'over')
- o.className = o.className + ' mceMenuHover';
- else
- o.className = o.className.replace(/\s.*$/, '');
- },
-
- _toggleMenu : function(editor_id, id) {
- var self = TinyMCE_SpellCheckerPlugin;
- var e = document.getElementById(editor_id + '_spellchecker');
- var inst = tinyMCE.getInstanceById(editor_id);
-
- if (self._menu.isVisible()) {
- tinyMCE.hideMenus();
- return;
- }
-
- tinyMCE.lastMenuBtnClass = e.className.replace(/\s.*$/, '');
- tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButtonFocus');
-
- self._menu.moveRelativeTo(e, 'bl');
- self._menu.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? 0 : 1, -1);
-
- if (tinyMCE.isOpera)
- self._menu.moveBy(0, -2);
-
- self._onMenuEvent(inst, self._menu, 'show');
-
- self._menu.show();
-
- tinyMCE.lastSelectedMenuBtn = editor_id + '_spellchecker';
- },
-
- _onMenuEvent : function(inst, m, n) {
- TinyMCE_SpellCheckerPlugin._buildSettingsMenu(inst, inst.spellCheckerLang);
- },
-
- execCommand : function(editor_id, element, command, user_interface, value) {
- var inst = tinyMCE.getInstanceById(editor_id), self = TinyMCE_SpellCheckerPlugin, args = '', co, bb, mb, nl, i, e;
-
- // Handle commands
- switch (command) {
- case "mceSpellCheck":
- if (!inst.spellcheckerOn) {
- inst.spellCheckerBookmark = inst.selection.getBookmark();
-
- // Setup arguments
- args += 'id=' + inst.editorId + "|" + (++self._counter);
- args += '&cmd=spell&check=' + escape(self._getWordList(inst.getBody())).replace(/%20/g, '+');
- args += '&lang=' + escape(inst.spellCheckerLang);
-
- co = document.getElementById(inst.editorId + '_parent').firstChild;
- bb = self._getBlockBoxLayer(inst);
- bb.moveRelativeTo(co, 'tl');
- bb.resizeTo(co.offsetWidth, co.offsetHeight);
- bb.show();
-
- // Setup message box
- mb = self._getMsgBoxLayer(inst);
- e = mb.getElement();
- e.innerHTML = '<span>' + tinyMCE.getLang('lang_spellchecker_swait', '', true) + '</span>';
- mb.show();
- mb.moveRelativeTo(co, 'cc');
-
- if (tinyMCE.isMSIE && !tinyMCE.isOpera) {
- nl = co.getElementsByTagName('select');
- for (i=0; i<nl.length; i++)
- nl[i].disabled = true;
- }
-
- inst.spellcheckerOn = true;
- tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButtonSelected');
-
- self._sendAjax(self.baseURL + "/tinyspell.php", self._ajaxResponse, 'post', args);
- } else {
- self._removeWords(inst.getDoc());
- inst.spellcheckerOn = false;
- tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButton');
- }
-
- return true;
-
- case "mceSpellCheckReplace":
- if (inst.spellCheckerElm)
- tinyMCE.setOuterHTML(inst.spellCheckerElm, value);
-
- self._checkDone(inst);
- self._contextMenu.hide();
- self._menu.hide();
-
- return true;
-
- case "mceSpellCheckIgnore":
- if (inst.spellCheckerElm)
- self._removeWord(inst.spellCheckerElm);
-
- self._checkDone(inst);
- self._contextMenu.hide();
- self._menu.hide();
- return true;
-
- case "mceSpellCheckIgnoreAll":
- if (inst.spellCheckerElm)
- self._removeWords(inst.getDoc(), inst.spellCheckerElm.innerHTML);
-
- self._checkDone(inst);
- self._contextMenu.hide();
- self._menu.hide();
- return true;
-
- case "mceSpellCheckerSetLang":
- tinyMCE.hideMenus();
- inst.spellCheckerLang = value;
- self._removeWords(inst.getDoc());
- inst.spellcheckerOn = false;
- tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButton');
- return true;
- }
-
- // Pass to next handler in chain
- return false;
- },
-
- cleanup : function(type, content, inst) {
- switch (type) {
- case "get_from_editor_dom":
- TinyMCE_SpellCheckerPlugin._removeWords(content);
- inst.spellcheckerOn = false;
- break;
- }
-
- return content;
- },
-
- // Private plugin specific methods
-
- _displayUI : function(inst) {
- var self = TinyMCE_SpellCheckerPlugin;
- var bb = self._getBlockBoxLayer(inst);
- var mb = self._getMsgBoxLayer(inst);
- var nl, i;
- var co = document.getElementById(inst.editorId + '_parent').firstChild;
-
- if (tinyMCE.isMSIE && !tinyMCE.isOpera) {
- nl = co.getElementsByTagName('select');
- for (i=0; i<nl.length; i++)
- nl[i].disabled = false;
- }
-
- bb.hide();
- mb.hide();
- },
-
- _ajaxResponse : function(xml) {
- var el = xml ? xml.documentElement : null;
- var inst = tinyMCE.selectedInstance, self = TinyMCE_SpellCheckerPlugin;
- var cmd = el ? el.getAttribute("cmd") : null, err, id = el ? el.getAttribute("id") : null;
-
- if (id)
- inst = tinyMCE.getInstanceById(id.substring(0, id.indexOf('|')));
-
- self._displayUI(inst);
-
- // Ignore suggestions for other ajax responses
- if (cmd == "suggest" && id != inst.editorId + "|" + self._counter)
- return;
-
- if (!el) {
- inst.spellcheckerOn = false;
- tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');
- alert("Could not execute AJAX call, server didn't return valid a XML.");
- return;
- }
-
- err = el.getAttribute("error");
-
- if (err == "true") {
- inst.spellcheckerOn = false;
- tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');
- alert(el.getAttribute("msg"));
- return;
- }
-
- switch (cmd) {
- case "spell":
- if (xml.documentElement.firstChild) {
- self._markWords(inst.getDoc(), inst.getBody(), el.firstChild.nodeValue.split(' '));
- inst.selection.moveToBookmark(inst.spellCheckerBookmark);
- } else
- alert(tinyMCE.getLang('lang_spellchecker_no_mpell', '', true));
-
- self._checkDone(inst);
-
- break;
-
- case "suggest":
- self._buildMenu(el.firstChild ? el.firstChild.nodeValue.split(' ') : null, 10);
- self._contextMenu.show();
- break;
- }
- },
-
- _getWordSeparators : function() {
- var i, re = '', ch = tinyMCE.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');
-
- for (i=0; i<ch.length; i++)
- re += '\\' + ch.charAt(i);
-
- return re;
- },
-
- _getWordList : function(n) {
- var i, x, s, nv = '', nl = tinyMCE.getNodeTree(n, new Array(), 3), wl = new Array();
- var re = TinyMCE_SpellCheckerPlugin._getWordSeparators();
-
- for (i=0; i<nl.length; i++)
- nv += nl[i].nodeValue + " ";
-
- nv = nv.replace(new RegExp('([0-9]|[' + re + '])', 'g'), ' ');
- nv = tinyMCE.trim(nv.replace(/(\s+)/g, ' '));
-
- nl = nv.split(/\s+/);
- for (i=0; i<nl.length; i++) {
- s = false;
- for (x=0; x<wl.length; x++) {
- if (wl[x] == nl[i]) {
- s = true;
- break;
- }
- }
-
- if (!s)
- wl[wl.length] = nl[i];
- }
-
- return wl.join(' ');
- },
-
- _removeWords : function(doc, word) {
- var i, c, nl = doc.getElementsByTagName("span");
- var self = TinyMCE_SpellCheckerPlugin;
- var inst = tinyMCE.selectedInstance, b = inst ? inst.selection.getBookmark() : null;
-
- word = typeof(word) == 'undefined' ? null : word;
-
- for (i=nl.length-1; i>=0; i--) {
- c = tinyMCE.getAttrib(nl[i], 'class');
-
- if ((c == 'mceItemHiddenSpellWord' || c == 'mceItemHidden') && (word == null || nl[i].innerHTML == word))
- self._removeWord(nl[i]);
- }
-
- if (b)
- inst.selection.moveToBookmark(b);
- },
-
- _checkDone : function(inst) {
- var i, w = 0, nl = inst.getDoc().getElementsByTagName("span")
- var self = TinyMCE_SpellCheckerPlugin;
-
- for (i=nl.length-1; i>=0; i--) {
- c = tinyMCE.getAttrib(nl[i], 'class');
-
- if (c == 'mceItemHiddenSpellWord')
- w++;
- }
-
- if (w == 0) {
- self._removeWords(inst.getDoc());
- inst.spellcheckerOn = false;
- tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');
- }
- },
-
- _removeWord : function(e) {
- tinyMCE.setOuterHTML(e, e.innerHTML);
- },
-
- _markWords : function(doc, n, wl) {
- var i, nv, nn, nl = tinyMCE.getNodeTree(n, new Array(), 3);
- var r1, r2, r3, r4, r5, w = '';
- var re = TinyMCE_SpellCheckerPlugin._getWordSeparators();
-
- for (i=0; i<wl.length; i++)
- w += wl[i] + ((i == wl.length-1) ? '' : '|');
-
- r1 = new RegExp('([' + re + '])(' + w + ')([' + re + '])', 'g');
- r2 = new RegExp('^(' + w + ')', 'g');
- r3 = new RegExp('(' + w + ')([' + re + ']?)$', 'g');
- r4 = new RegExp('^(' + w + ')([' + re + ']?)$', 'g');
- r5 = new RegExp('(' + w + ')([' + re + '])', 'g');
-
- for (i=0; i<nl.length; i++) {
- nv = nl[i].nodeValue;
- if (r1.test(nv) || r2.test(nv) || r3.test(nv) || r4.test(nv)) {
- nv = tinyMCE.xmlEncode(nv);
- nv = nv.replace(r5, '<span class="mceItemHiddenSpellWord">$1</span>$2');
- nv = nv.replace(r3, '<span class="mceItemHiddenSpellWord">$1</span>$2');
-
- nn = doc.createElement('span');
- nn.className = "mceItemHidden";
- nn.innerHTML = nv;
-
- // Remove old text node
- nl[i].parentNode.replaceChild(nn, nl[i]);
- }
- }
- },
-
- _buildMenu : function(sg, max) {
- var i, self = TinyMCE_SpellCheckerPlugin, cm = self._contextMenu;
-
- cm.clear();
-
- if (sg != null) {
- cm.addTitle(tinyMCE.getLang('lang_spellchecker_sug', '', true));
-
- for (i=0; i<sg.length && i<max; i++)
- cm.addItem(sg[i], 'tinyMCE.execCommand("mceSpellCheckReplace",false,"' + sg[i] + '");');
-
- cm.addSeparator();
- cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_word', '', true), 'tinyMCE.execCommand(\'mceSpellCheckIgnore\');');
- cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_words', '', true), 'tinyMCE.execCommand(\'mceSpellCheckIgnoreAll\');');
- } else
- cm.addTitle(tinyMCE.getLang('lang_spellchecker_no_sug', '', true));
-
- cm.update();
- },
-
- _getAjaxHTTP : function() {
- try {
- return new ActiveXObject('Msxml2.XMLHTTP')
- } catch (e) {
- try {
- return new ActiveXObject('Microsoft.XMLHTTP')
- } catch (e) {
- return new XMLHttpRequest();
- }
- }
- },
-
- /**
- * Perform AJAX call.
- *
- * @param {string} u URL of AJAX service.
- * @param {function} f Function to call when response arrives.
- * @param {string} m Request method post or get.
- * @param {Array} a Array with arguments to send.
- */
- _sendAjax : function(u, f, m, a) {
- var x = TinyMCE_SpellCheckerPlugin._getAjaxHTTP();
-
- x.open(m, u, true);
-
- x.onreadystatechange = function() {
- if (x.readyState == 4)
- f(x.responseXML);
- };
-
- if (m == 'post')
- x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
-
- x.send(a);
- }
-};
-
-// Register plugin
-tinyMCE.addPlugin('spellchecker', TinyMCE_SpellCheckerPlugin);
+tinyMCE.importPluginLanguagePack('spellchecker','en,fr,sv,nn,nb');var TinyMCE_SpellCheckerPlugin={_contextMenu:new TinyMCE_Menu(),_menu:new TinyMCE_Menu(),_counter:0,_ajaxPage:'/tinyspell.php',getInfo:function(){return{longname:'Spellchecker PHP',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_spellchecker.html',version:"1.0.3"};},handleEvent:function(e){var elm=tinyMCE.isMSIE?e.srcElement:e.target;var inst=tinyMCE.selectedInstance,args='';var self=TinyMCE_SpellCheckerPlugin;var cm=self._contextMenu;var p,p2,x,y,sx,sy,h,elm;if((e.type=="click"||e.type=="contextmenu")&&elm){do{if(tinyMCE.getAttrib(elm,'class')=="mceItemHiddenSpellWord"){inst.spellCheckerElm=elm;args+='id='+inst.editorId+"|"+(++self._counter);args+='&cmd=suggest&check='+encodeURIComponent(elm.innerHTML);args+='&lang='+escape(inst.spellCheckerLang);elm=inst.spellCheckerElm;p=tinyMCE.getAbsPosition(inst.iframeElement);p2=tinyMCE.getAbsPosition(elm);h=parseInt(elm.offsetHeight);sx=inst.getBody().scrollLeft;sy=inst.getBody().scrollTop;x=p.absLeft+p2.absLeft-sx;y=p.absTop+p2.absTop-sy+h;cm.clear();cm.addTitle(tinyMCE.getLang('lang_spellchecker_wait','',true));cm.show();cm.moveTo(x,y);inst.selection.selectNode(elm,false,false);self._sendAjax(self.baseURL+self._ajaxPage,self._ajaxResponse,'post',args);tinyMCE.cancelEvent(e);return false;}}while((elm=elm.parentNode));}return true;},initInstance:function(inst){var self=TinyMCE_SpellCheckerPlugin,m=self._menu,cm=self._contextMenu,e;tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/spellchecker/css/content.css");if(!tinyMCE.hasMenu('spellcheckercontextmenu')){tinyMCE.importCSS(document,tinyMCE.baseURL+"/plugins/spellchecker/css/spellchecker.css");cm.init({drop_menu:false});tinyMCE.addMenu('spellcheckercontextmenu',cm);}if(!tinyMCE.hasMenu('spellcheckermenu')){m.init({});tinyMCE.addMenu('spellcheckermenu',m);}inst.spellCheckerLang='en';self._buildSettingsMenu(inst,null);e=self._getBlockBoxLayer(inst).create('div','mceBlockBox',document.getElementById(inst.editorId+'_parent'));self._getMsgBoxLayer(inst).create('div','mceMsgBox',document.getElementById(inst.editorId+'_parent'));},_getMsgBoxLayer:function(inst){if(!inst.spellCheckerMsgBoxL)inst.spellCheckerMsgBoxL=new TinyMCE_Layer(inst.editorId+'_spellcheckerMsgBox',false);return inst.spellCheckerMsgBoxL;},_getBlockBoxLayer:function(inst){if(!inst.spellCheckerBoxL)inst.spellCheckerBoxL=new TinyMCE_Layer(inst.editorId+'_spellcheckerBlockBox',false);return inst.spellCheckerBoxL;},_buildSettingsMenu:function(inst,lang){var i,ar=tinyMCE.getParam('spellchecker_languages','+English=en').split(','),p;var self=TinyMCE_SpellCheckerPlugin,m=self._menu,c;m.clear();m.addTitle(tinyMCE.getLang('lang_spellchecker_langs','',true));for(i=0;i<ar.length;i++){if(ar[i]!=''){p=ar[i].split('=');c='mceMenuCheckItem';if(p[0].charAt(0)=='+'){p[0]=p[0].substring(1);if(lang==null){c='mceMenuSelectedItem';inst.spellCheckerLang=p[1];}}if(lang==p[1])c='mceMenuSelectedItem';m.add({text:p[0],js:"tinyMCE.execInstanceCommand('"+inst.editorId+"','mceSpellCheckerSetLang',false,'"+p[1]+"');",class_name:c});}}},setupContent:function(editor_id,body,doc){TinyMCE_SpellCheckerPlugin._removeWords(doc,null,true);},getControlHTML:function(cn){switch(cn){case"spellchecker":return TinyMCE_SpellCheckerPlugin._getMenuButtonHTML(cn,'lang_spellchecker_desc','{$pluginurl}/images/spellchecker.gif','lang_spellchecker_desc','mceSpellCheckerMenu','mceSpellCheck');}return"";},_getMenuButtonHTML:function(id,lang,img,mlang,mid,cmd,ui,val){var h='',m,x;cmd='tinyMCE.hideMenus();tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isMSIE||tinyMCE.isOpera)&&(m=tinyMCE.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceTiledButton mceButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="background-position: '+x+'px 0" title="{$'+lang+'}" />';h+='<img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" onclick="'+mcmd+'return false;" />';h+='</a>';}else{if(tinyMCE.isMSIE&&!tinyMCE.isOpera)h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton" onmouseover="tinyMCE.plugins.spellchecker._menuButtonEvent(\'over\',this);" onmouseout="tinyMCE.plugins.spellchecker._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';h+='<img src="'+img+'" title="{$'+lang+'}" /></a>';h+='<a href="#" onclick="tinyMCE.plugins.spellchecker._toggleMenu(\'{$editor_id}\',\''+mid+'\');return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>';}return h;},_menuButtonEvent:function(e,o){var t=this;window.setTimeout(function(){t._menuButtonEvent2(e,o);},1);},_menuButtonEvent2:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'');},_toggleMenu:function(editor_id,id){var self=TinyMCE_SpellCheckerPlugin;var e=document.getElementById(editor_id+'_spellchecker');var inst=tinyMCE.getInstanceById(editor_id);if(self._menu.isVisible()){tinyMCE.hideMenus();return;}tinyMCE.lastMenuBtnClass=e.className.replace(/\s.*$/,'');tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButtonFocus');self._menu.moveRelativeTo(e,'bl');self._menu.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?0:1,-1);if(tinyMCE.isOpera)self._menu.moveBy(0,-2);self._onMenuEvent(inst,self._menu,'show');self._menu.show();tinyMCE.lastSelectedMenuBtn=editor_id+'_spellchecker';},_onMenuEvent:function(inst,m,n){TinyMCE_SpellCheckerPlugin._buildSettingsMenu(inst,inst.spellCheckerLang);},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id),self=TinyMCE_SpellCheckerPlugin,args='',co,bb,mb,nl,i,e,mbs;switch(command){case"mceSpellCheck":if(!inst.spellcheckerOn){inst.spellCheckerBookmark=inst.selection.getBookmark();if(tinyMCE.isRealIE)tinyMCE.setInnerHTML(inst.getBody(),inst.getBody().innerHTML);args+='id='+inst.editorId+"|"+(++self._counter);args+='&cmd=spell&check='+encodeURIComponent(self._getWordList(inst.getBody())).replace(/\'/g,'%27');args+='&lang='+escape(inst.spellCheckerLang);co=document.getElementById(inst.editorId+'_parent').firstChild;bb=self._getBlockBoxLayer(inst);bb.moveRelativeTo(co,'tl');bb.resizeTo(co.offsetWidth,co.offsetHeight);bb.show();mb=self._getMsgBoxLayer(inst);e=mb.getElement();if(e.childNodes[0])e.removeChild(e.childNodes[0]);mbs=document.createElement("span");mbs.innerHTML='<span>'+tinyMCE.getLang('lang_spellchecker_swait','',true)+'</span>';e.appendChild(mbs);mb.show();mb.moveRelativeTo(co,'cc');if(tinyMCE.isMSIE&&!tinyMCE.isOpera){nl=co.getElementsByTagName('select');for(i=0;i<nl.length;i++)nl[i].disabled=true;}inst.spellcheckerOn=true;tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButtonSelected');self._sendAjax(self.baseURL+self._ajaxPage,self._ajaxResponse,'post',args);}else{self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButton');}return true;case"mceSpellCheckReplace":if(inst.spellCheckerElm)tinyMCE.setOuterHTML(inst.spellCheckerElm,value);self._checkDone(inst);self._contextMenu.hide();self._menu.hide();return true;case"mceSpellCheckIgnore":if(inst.spellCheckerElm)self._removeWord(inst.spellCheckerElm);self._checkDone(inst);self._contextMenu.hide();self._menu.hide();return true;case"mceSpellCheckIgnoreAll":if(inst.spellCheckerElm)self._removeWords(inst.getDoc(),inst.spellCheckerElm.innerHTML);self._checkDone(inst);self._contextMenu.hide();self._menu.hide();return true;case"mceSpellCheckerSetLang":tinyMCE.hideMenus();inst.spellCheckerLang=value;self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButton');return true;}return false;},cleanup:function(type,content,inst){switch(type){case"get_from_editor_dom":TinyMCE_SpellCheckerPlugin._removeWords(content,null,true);inst.spellcheckerOn=false;break;}return content;},_displayUI:function(inst){var self=TinyMCE_SpellCheckerPlugin;var bb=self._getBlockBoxLayer(inst);var mb=self._getMsgBoxLayer(inst);var nl,i;var co=document.getElementById(inst.editorId+'_parent').firstChild;if(tinyMCE.isMSIE&&!tinyMCE.isOpera){nl=co.getElementsByTagName('select');for(i=0;i<nl.length;i++)nl[i].disabled=false;}bb.hide();mb.hide();},_ajaxResponse:function(xml){var el=xml?xml.documentElement:null;var inst=tinyMCE.selectedInstance,self=TinyMCE_SpellCheckerPlugin;var cmd=el?el.getAttribute("cmd"):null,err,id=el?el.getAttribute("id"):null;if(id)inst=tinyMCE.getInstanceById(id.substring(0,id.indexOf('|')));self._displayUI(inst);if(cmd=="suggest"&&id!=inst.editorId+"|"+self._counter)return;if(!el){inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');alert("Could not execute AJAX call, server didn't return valid a XML.");return;}err=el.getAttribute("error");if(err=="true"){inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');alert(el.getAttribute("msg"));return;}switch(cmd){case"spell":if(xml.documentElement.firstChild){self._markWords(inst.getDoc(),inst.getBody(),decodeURIComponent(el.firstChild.nodeValue).split('+'));inst.selection.moveToBookmark(inst.spellCheckerBookmark);if(tinyMCE.getParam('spellchecker_report_misspellings',false))alert(tinyMCE.getLang('lang_spellchecker_mpell_found','',true,{words:self._countWords(inst)}));}else alert(tinyMCE.getLang('lang_spellchecker_no_mpell','',true));self._checkDone(inst);inst.useCSS=false;break;case"suggest":self._buildMenu(el.firstChild?decodeURIComponent(el.firstChild.nodeValue).split('+'):null,10);self._contextMenu.show();break;}},_getWordSeparators:function(){var i,re='',ch=tinyMCE.getParam('spellchecker_word_separator_chars','\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}\u201d\u201c');for(i=0;i<ch.length;i++)re+='\\'+ch.charAt(i);return re;},_getWordList:function(n){var i,x,s,nv='',nl=tinyMCE.getNodeTree(n,new Array(),3),wl=new Array();var re=TinyMCE_SpellCheckerPlugin._getWordSeparators();for(i=0;i<nl.length;i++){if(!new RegExp('/SCRIPT|STYLE/').test(nl[i].parentNode.nodeName))nv+=nl[i].nodeValue+" ";}nv=nv.replace(new RegExp('([0-9]|['+re+'])','g'),' ');nv=tinyMCE.trim(nv.replace(/(\s+)/g,' '));nl=nv.split(/\s+/);for(i=0;i<nl.length;i++){s=false;for(x=0;x<wl.length;x++){if(wl[x]==nl[i]){s=true;break;}}if(!s&&nl[i].length>0)wl[wl.length]=nl[i];}return wl.join(' ');},_removeWords:function(doc,word,cleanup){var i,c,nl=doc.getElementsByTagName("span");var self=TinyMCE_SpellCheckerPlugin;var inst=tinyMCE.selectedInstance,b=inst?inst.selection.getBookmark():null;word=typeof(word)=='undefined'?null:word;for(i=nl.length-1;i>=0;i--){c=tinyMCE.getAttrib(nl[i],'class');if((c=='mceItemHiddenSpellWord'||c=='mceItemHidden')&&(word==null||nl[i].innerHTML==word))self._removeWord(nl[i]);}if(b&&!cleanup)inst.selection.moveToBookmark(b);},_checkDone:function(inst){var self=TinyMCE_SpellCheckerPlugin;var w=self._countWords(inst);if(w==0){self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');}},_countWords:function(inst){var i,w=0,nl=inst.getDoc().getElementsByTagName("span"),c;var self=TinyMCE_SpellCheckerPlugin;for(i=nl.length-1;i>=0;i--){c=tinyMCE.getAttrib(nl[i],'class');if(c=='mceItemHiddenSpellWord')w++;}return w;},_removeWord:function(e){if(e!=null)tinyMCE.setOuterHTML(e,e.innerHTML);},_markWords:function(doc,n,wl){var i,nv,nn,nl=tinyMCE.getNodeTree(n,new Array(),3);var r1,r2,r3,r4,r5,w='';var re=TinyMCE_SpellCheckerPlugin._getWordSeparators();for(i=0;i<wl.length;i++){if(wl[i].length>0)w+=wl[i]+((i==wl.length-1)?'':'|');}for(i=0;i<nl.length;i++){nv=nl[i].nodeValue;r1=new RegExp('(['+re+'])('+w+')(['+re+'])','g');r2=new RegExp('^('+w+')','g');r3=new RegExp('('+w+')(['+re+']?)$','g');r4=new RegExp('^('+w+')(['+re+']?)$','g');r5=new RegExp('('+w+')(['+re+'])','g');if(r1.test(nv)||r2.test(nv)||r3.test(nv)||r4.test(nv)){nv=tinyMCE.xmlEncode(nv);nv=nv.replace(r5,'<span class="mceItemHiddenSpellWord">$1</span>$2');nv=nv.replace(r3,'<span class="mceItemHiddenSpellWord">$1</span>$2');nn=doc.createElement('span');nn.className="mceItemHidden";nn.innerHTML=nv;nl[i].parentNode.replaceChild(nn,nl[i]);}}},_buildMenu:function(sg,max){var i,self=TinyMCE_SpellCheckerPlugin,cm=self._contextMenu;cm.clear();if(sg!=null){cm.addTitle(tinyMCE.getLang('lang_spellchecker_sug','',true));for(i=0;i<sg.length&&i<max;i++)cm.addItem(sg[i],'tinyMCE.execCommand("mceSpellCheckReplace",false,"'+sg[i]+'");');cm.addSeparator();}else cm.addTitle(tinyMCE.getLang('lang_spellchecker_no_sug','',true));cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_word','',true),'tinyMCE.execCommand(\'mceSpellCheckIgnore\');');cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_words','',true),'tinyMCE.execCommand(\'mceSpellCheckIgnoreAll\');');cm.update();},_getAjaxHTTP:function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest();}}},_sendAjax:function(u,f,m,a){var x=TinyMCE_SpellCheckerPlugin._getAjaxHTTP();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseXML);};if(m=='post')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a);}};tinyMCE.addPlugin('spellchecker',TinyMCE_SpellCheckerPlugin);
diff --git a/wp-includes/js/tinymce/plugins/spellchecker/langs/en.js b/wp-includes/js/tinymce/plugins/spellchecker/langs/en.js
index f40b202..02fdac5 100755
--- a/wp-includes/js/tinymce/plugins/spellchecker/langs/en.js
+++ b/wp-includes/js/tinymce/plugins/spellchecker/langs/en.js
@@ -10,5 +10,6 @@ tinyMCE.addToLang('spellchecker',{
swait : 'Spellchecking, please wait...',
sug : 'Suggestions',
no_sug : 'No suggestions',
- no_mpell : 'No misspellings found.'
+ no_mpell : 'No misspellings found.',
+ mpell_found : 'Found {$words} misspellings.'
});
diff --git a/wp-includes/js/tinymce/plugins/spellchecker/tinyspell.php b/wp-includes/js/tinymce/plugins/spellchecker/tinyspell.php
index 88da57d..18345e6 100755
--- a/wp-includes/js/tinymce/plugins/spellchecker/tinyspell.php
+++ b/wp-includes/js/tinymce/plugins/spellchecker/tinyspell.php
@@ -8,6 +8,9 @@
* @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
*/
+ // Ignore the Notice errors for now.
+ error_reporting(E_ALL ^ E_NOTICE);
+
require_once("config.php");
$id = sanitize($_POST['id'], "loose");
@@ -30,14 +33,14 @@
// Get input parameters.
- $check = $_POST['check'];
- $cmd = sanitize($_POST['cmd']);
- $lang = sanitize($_POST['lang'], "strict");
- $mode = sanitize($_POST['mode'], "strict");
- $spelling = sanitize($_POST['spelling'], "strict");
- $jargon = sanitize($_POST['jargon'], "strict");
- $encoding = sanitize($_POST['encoding'], "strict");
- $sg = sanitize($_POST['sg'], "bool");
+ $check = urldecode($_REQUEST['check']);
+ $cmd = sanitize($_REQUEST['cmd']);
+ $lang = sanitize($_REQUEST['lang'], "strict");
+ $mode = sanitize($_REQUEST['mode'], "strict");
+ $spelling = sanitize($_REQUEST['spelling'], "strict");
+ $jargon = sanitize($_REQUEST['jargon'], "strict");
+ $encoding = sanitize($_REQUEST['encoding'], "strict");
+ $sg = sanitize($_REQUEST['sg'], "bool");
$words = array();
$validRequest = true;
@@ -90,9 +93,11 @@
$words = preg_split("/ |\n/", $check, -1, PREG_SPLIT_NO_EMPTY);
$result = $tinyspell->checkWords($words);
break;
+
case "suggest":
$result = $tinyspell->getSuggestion($check);
break;
+
default:
// Just use this for now.
$tinyspell->errorMsg[] = "No command.";
@@ -109,19 +114,22 @@
switch($outputType) {
case "xml":
header('Content-type: text/xml; charset=utf-8');
- echo '<?xml version="1.0" encoding="utf-8" ?>';
- echo "\n";
+ $body = '<?xml version="1.0" encoding="utf-8" ?>';
+ $body .= "\n";
+
if (count($result) == 0)
- echo '<res id="' . $id . '" cmd="'. $cmd .'" />';
+ $body .= '<res id="' . $id . '" cmd="'. $cmd .'" />';
else
- echo '<res id="' . $id . '" cmd="'. $cmd .'">'. utf8_encode(implode(" ", $result)) .'</res>';
+ $body .= '<res id="' . $id . '" cmd="'. $cmd .'">'. urlencode(implode(" ", $result)) .'</res>';
+ echo $body;
break;
case "xmlerror";
header('Content-type: text/xml; charset=utf-8');
- echo '<?xml version="1.0" encoding="utf-8" ?>';
- echo "\n";
- echo '<res id="' . $id . '" cmd="'. $cmd .'" error="true" msg="'. implode(" ", $tinyspell->errorMsg) .'" />';
+ $body = '<?xml version="1.0" encoding="utf-8" ?>';
+ $body .= "\n";
+ $body .= '<res id="' . $id . '" cmd="'. $cmd .'" error="true" msg="'. implode(" ", $tinyspell->errorMsg) .'" />';
+ echo $body;
break;
case "html":
var_dump($result);
@@ -130,4 +138,5 @@
echo "Error";
break;
}
-?>
+
+?>
diff --git a/wp-includes/js/tinymce/plugins/wordpress/wordpress.css b/wp-includes/js/tinymce/plugins/wordpress/wordpress.css
index cbc9bac..00b454f 100644
--- a/wp-includes/js/tinymce/plugins/wordpress/wordpress.css
+++ b/wp-includes/js/tinymce/plugins/wordpress/wordpress.css
@@ -48,7 +48,6 @@ pre {
line-height: 6px;
overflow: hidden;
padding-left: 12px;
- background-image: url('../images/anchor_symbol.gif');
background-position: bottom;
background-repeat: no-repeat;
}
diff --git a/wp-includes/js/tinymce/wp-mce-help.php b/wp-includes/js/tinymce/wp-mce-help.php
index fe90b0d..6d5f1e4 100644
--- a/wp-includes/js/tinymce/wp-mce-help.php
+++ b/wp-includes/js/tinymce/wp-mce-help.php
@@ -167,7 +167,7 @@ header('Content-Type: text/html; charset=' . get_bloginfo('charset'));
<div id="content4" class="hidden">
<h2><?php _e('About TinyMCE'); ?></h2>
<p><?php printf(__('Version: %s'), '2.0.9') ?></p>
- <p><?php printf(__('TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under %sLGPL</a> by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.'), '<a href="'.get_bloginfo('home').'/wp-includes/js/tinymce/license.txt" target="_blank" title="'.__('GNU Library General Public Licence').'">') ?></p>
+ <p><?php printf(__('TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under %sLGPL</a> by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.'), '<a href="'.get_bloginfo('url').'/wp-includes/js/tinymce/license.txt" target="_blank" title="'.__('GNU Library General Public Licence').'">') ?></p>
<p><?php _e('Copyright &copy; 2005, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.') ?></p>
<p><?php _e('For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.') ?></p>
diff --git a/wp-includes/js/wp-ajax.js b/wp-includes/js/wp-ajax.js
new file mode 100644
index 0000000..cc3bb5a
--- /dev/null
+++ b/wp-includes/js/wp-ajax.js
@@ -0,0 +1,100 @@
+var WPAjax = Class.create();
+Object.extend(WPAjax.prototype, Ajax.Request.prototype);
+Object.extend(WPAjax.prototype, {
+ WPComplete: false, // onComplete function
+ WPError: false, // onWPError function
+ defaultUrl: '', // We get these from WPAjaxL10n
+ permText: '',
+ strangeText: '',
+ whoaText: '',
+
+ initialize: function(url, responseEl) {
+ var tempObj = this;
+ this.transport = Ajax.getTransport();
+ if ( !this.transport )
+ return false;
+ this.setOptions( {
+ parameters: 'cookie=' + encodeURIComponent(document.cookie),
+ onComplete: function(transport) { // transport = XMLHttpRequest object
+ if ( tempObj.parseAjaxResponse() ) {
+ if ( 'function' == typeof tempObj.WPComplete )
+ tempObj.WPComplete(transport);
+ } else if ( 'function' == typeof tempObj.WPError ) // if response corresponds to an error (bad data, say, not 404)
+ tempObj.WPError(transport);
+ }
+ });
+ this.url = url ? url : this.defaultUrl;
+ this.getResponseElement(responseEl);
+ },
+ addArg: function(key, value) {
+ var a = [];
+ a[encodeURIComponent(key)] = encodeURIComponent(value);
+ this.options.parameters = $H(this.options.parameters).merge($H(a));
+ },
+ getResponseElement: function(r) {
+ var p = $(r + '-p');
+ if ( !p ) {
+ new Insertion.Bottom(r, "<span id='" + r + "-p'></span>");
+ var p = $(r + '-p');
+ }
+ this.myResponseElement = p;
+ },
+ parseAjaxResponse: function() { // 1 = good, 0 = strange (bad data?), -1 = you lack permission
+ if ( this.transport.responseXML && typeof this.transport.responseXML == 'object' && ( this.transport.responseXML.xml || 'undefined' == typeof this.transport.responseXML.xml ) ) {
+ var err = this.transport.responseXML.getElementsByTagName('wp_error');
+ if ( err[0] ) {
+ var msg = $A(err).inject( '', function(a, b) { return a + '<p>' + b.firstChild.nodeValue + '</p>'; } );
+ Element.update(this.myResponseElement,'<div class="error">' + msg + '</div>');
+ return false;
+ }
+ return true;
+ }
+ var r = this.transport.responseText;
+ if ( isNaN(r) ) {
+ Element.update(this.myResponseElement,'<div class="error"><p>' + r + '</p></div>');
+ return false;
+ }
+ var r = parseInt(r,10);
+ if ( -1 == r ) {
+ Element.update(this.myResponseElement,"<div class='error'><p>" + this.permText + "</p></div>");
+ return false;
+ } else if ( 0 == r ) {
+ Element.update(this.myResponseElement,"<div class='error'><p>" + this.strangeText + "</p></div>");
+ return false;
+ }
+ return true;
+ },
+ addOnComplete: function(f) {
+ if ( 'function' == typeof f ) { var of = this.WPComplete; this.WPComplete = function(t) { if ( of ) of(t); f(t); } }
+ },
+ addOnWPError: function(f) {
+ if ( 'function' == typeof f ) { var of = this.WPError; this.WPError = function(t) { if ( of ) of(t); f(t); } }
+ },
+ notInitialized: function() {
+ return this.transport ? false : true;
+ }
+});
+
+Event.observe( window, 'load', function() { Object.extend(WPAjax.prototype, WPAjaxL10n); }, false )
+
+Ajax.activeSendCount = 0;
+Ajax.Responders.register( {
+ onCreate: function() {
+ Ajax.activeSendCount++;
+ if ( 1 != Ajax.activeSendCount )
+ return;
+ wpBeforeUnload = window.onbeforeunload;
+ window.onbeforeunload = function() {
+ return WPAjax.whoaText;
+ }
+ },
+ onLoading: function() { // Can switch to onLoaded if we lose data
+ Ajax.activeSendCount--;
+ if ( 0 != Ajax.activeSendCount )
+ return;
+ window.onbeforeunload = wpBeforeUnload;
+ }
+});
+
+//Pretty func adapted from ALA http://www.alistapart.com/articles/gettingstartedwithajax
+function getNodeValue(tree,el){try { var r = tree.getElementsByTagName(el)[0].firstChild.nodeValue; } catch(err) { var r = null; } return r; }
diff --git a/wp-includes/link-template.php b/wp-includes/link-template.php
index 16f6b58..65a502a 100644
--- a/wp-includes/link-template.php
+++ b/wp-includes/link-template.php
@@ -70,7 +70,7 @@ function get_permalink($id = 0) {
$unixtime = strtotime($post->post_date);
$category = '';
- if ( strstr($permalink, '%category%') ) {
+ if (strpos($permalink, '%category%') !== false) {
$cats = get_the_category($post->ID);
$category = $cats[0]->category_nicename;
if ( $parent=$cats[0]->category_parent )
@@ -158,12 +158,12 @@ function get_attachment_link($id = false) {
$parentlink = _get_page_link( $object->post_parent ); // Ignores page_on_front
else
$parentlink = get_permalink( $object->post_parent );
- if (! strstr($parentlink, '?') )
+ if (strpos($parentlink, '?') === false)
$link = trim($parentlink, '/') . '/' . $object->post_name . '/';
}
if (! $link ) {
- $link = get_bloginfo('home') . "/?attachment_id=$id";
+ $link = get_bloginfo('url') . "/?attachment_id=$id";
}
return apply_filters('attachment_link', $link, $id);
diff --git a/wp-includes/pluggable.php b/wp-includes/pluggable.php
index 1c9c111..b15b3fa 100644
--- a/wp-includes/pluggable.php
+++ b/wp-includes/pluggable.php
@@ -287,7 +287,7 @@ function check_admin_referer($action = -1) {
$adminurl = strtolower(get_option('siteurl')).'/wp-admin';
$referer = strtolower(wp_get_referer());
if ( !wp_verify_nonce($_REQUEST['_wpnonce'], $action) &&
- !(-1 == $action && strstr($referer, $adminurl)) ) {
+ !(-1 == $action && strpos($referer, $adminurl) !== false)) {
wp_nonce_ays($action);
die();
}
diff --git a/wp-includes/post.php b/wp-includes/post.php
index 4a9d69c..33a0a3c 100644
--- a/wp-includes/post.php
+++ b/wp-includes/post.php
@@ -1200,9 +1200,9 @@ function generate_page_uri_index() {
//
function is_local_attachment($url) {
- if ( !strstr($url, get_bloginfo('home') ) )
+ if (strpos($url, get_bloginfo('url')) === false)
return false;
- if ( strstr($url, get_bloginfo('home') . '/?attachment_id=') )
+ if (strpos($url, get_bloginfo('url') . '/?attachment_id=') !== false)
return true;
if ( $id = url_to_postid($url) ) {
$post = & get_post($id);
diff --git a/wp-includes/query.php b/wp-includes/query.php
index 79b6ba1..3432f74 100644
--- a/wp-includes/query.php
+++ b/wp-includes/query.php
@@ -29,7 +29,7 @@ function &query_posts($query) {
function is_admin () {
global $wp_query;
- return ( $wp_query->is_admin || strstr($_SERVER['REQUEST_URI'], 'wp-admin/') );
+ return ($wp_query->is_admin || (strpos($_SERVER['REQUEST_URI'], 'wp-admin/') !== false));
}
function is_archive () {
@@ -404,14 +404,14 @@ class WP_Query {
if ( !empty($query) || !isset($this->query) ) {
$this->init();
if ( is_array($query) )
- $qv = & $query;
+ $this->query_vars = $query;
else
- parse_str($query, $qv);
+ parse_str($query, $this->query_vars);
$this->query = $query;
- $this->query_vars = $qv;
}
- $qv = $this->fill_query_vars($qv);
+ $this->query_vars = $this->fill_query_vars($this->query_vars);
+ $qv = &$this->query_vars;
if ( ! empty($qv['robots']) ) {
$this->is_robots = true;
@@ -426,8 +426,16 @@ class WP_Query {
return;
}
- $qv['m'] = (int) $qv['m'];
$qv['p'] = (int) $qv['p'];
+ $qv['page_id'] = (int) $qv['page_id'];
+ $qv['year'] = (int) $qv['year'];
+ $qv['monthnum'] = (int) $qv['monthnum'];
+ $qv['day'] = (int) $qv['day'];
+ $qv['w'] = (int) $qv['w'];
+ $qv['m'] = (int) $qv['m'];
+ if ( '' != $qv['hour'] ) $qv['hour'] = (int) $qv['hour'];
+ if ( '' != $qv['minute'] ) $qv['minute'] = (int) $qv['minute'];
+ if ( '' != $qv['second'] ) $qv['second'] = (int) $qv['second'];
// Compat. Map subpost to attachment.
if ( '' != $qv['subpost'] )
@@ -435,62 +443,64 @@ class WP_Query {
if ( '' != $qv['subpost_id'] )
$qv['attachment_id'] = $qv['subpost_id'];
- if ( ('' != $qv['attachment']) || (int) $qv['attachment_id'] ) {
+ $qv['attachment_id'] = (int) $qv['attachment_id'];
+
+ if ( ('' != $qv['attachment']) || !empty($qv['attachment_id']) ) {
$this->is_single = true;
$this->is_attachment = true;
- } elseif ('' != $qv['name']) {
+ } elseif ( '' != $qv['name'] ) {
$this->is_single = true;
} elseif ( $qv['p'] ) {
$this->is_single = true;
- } elseif (('' != $qv['hour']) && ('' != $qv['minute']) &&('' != $qv['second']) && ('' != $qv['year']) && ('' != $qv['monthnum']) && ('' != $qv['day'])) {
+ } elseif ( ('' != $qv['hour']) && ('' != $qv['minute']) &&('' != $qv['second']) && ('' != $qv['year']) && ('' != $qv['monthnum']) && ('' != $qv['day']) ) {
// If year, month, day, hour, minute, and second are set, a single
// post is being queried.
$this->is_single = true;
- } elseif ('' != $qv['static'] || '' != $qv['pagename'] || (int) $qv['page_id']) {
+ } elseif ( '' != $qv['static'] || '' != $qv['pagename'] || !empty($qv['page_id']) ) {
$this->is_page = true;
$this->is_single = false;
- } elseif (!empty($qv['s'])) {
+ } elseif ( !empty($qv['s']) ) {
$this->is_search = true;
} else {
// Look for archive queries. Dates, categories, authors.
- if ( (int) $qv['second']) {
+ if ( '' != $qv['second'] ) {
$this->is_time = true;
$this->is_date = true;
}
- if ( (int) $qv['minute']) {
+ if ( '' != $qv['minute'] ) {
$this->is_time = true;
$this->is_date = true;
}
- if ( (int) $qv['hour']) {
+ if ( '' != $qv['hour'] ) {
$this->is_time = true;
$this->is_date = true;
}
- if ( (int) $qv['day']) {
+ if ( $qv['day'] ) {
if (! $this->is_date) {
$this->is_day = true;
$this->is_date = true;
}
}
- if ( (int) $qv['monthnum']) {
+ if ( $qv['monthnum'] ) {
if (! $this->is_date) {
$this->is_month = true;
$this->is_date = true;
}
}
- if ( (int) $qv['year']) {
+ if ( $qv['year'] ) {
if (! $this->is_date) {
$this->is_year = true;
$this->is_date = true;
}
}
- if ( (int) $qv['m']) {
+ if ( $qv['m'] ) {
$this->is_date = true;
if (strlen($qv['m']) > 9) {
$this->is_time = true;
@@ -507,62 +517,55 @@ class WP_Query {
$this->is_date = true;
}
- if (empty($qv['cat']) || ($qv['cat'] == '0')) {
+ if ( empty($qv['cat']) || ($qv['cat'] == '0') ) {
$this->is_category = false;
} else {
- if (stristr($qv['cat'],'-')) {
+ if (strpos($qv['cat'], '-') !== false) {
$this->is_category = false;
} else {
$this->is_category = true;
}
}
- if ('' != $qv['category_name']) {
+ if ( '' != $qv['category_name'] ) {
$this->is_category = true;
}
- if ((empty($qv['author'])) || ($qv['author'] == '0')) {
+ if ( empty($qv['author']) || ($qv['author'] == '0') ) {
$this->is_author = false;
} else {
$this->is_author = true;
}
- if ('' != $qv['author_name']) {
+ if ( '' != $qv['author_name'] ) {
$this->is_author = true;
}
- if ( ($this->is_date || $this->is_author || $this->is_category)) {
+ if ( ($this->is_date || $this->is_author || $this->is_category) )
$this->is_archive = true;
- }
}
- if ('' != $qv['feed']) {
+ if ( '' != $qv['feed'] )
$this->is_feed = true;
- }
- if ('' != $qv['tb']) {
+ if ( '' != $qv['tb'] )
$this->is_trackback = true;
- }
- if ('' != $qv['paged']) {
+ if ( '' != $qv['paged'] )
$this->is_paged = true;
- }
- if ('' != $qv['comments_popup']) {
+ if ( '' != $qv['comments_popup'] )
$this->is_comments_popup = true;
- }
- //if we're previewing inside the write screen
- if ('' != $qv['preview']) {
+ // if we're previewing inside the write screen
+ if ('' != $qv['preview'])
$this->is_preview = true;
- }
- if (strstr($_SERVER['PHP_SELF'], 'wp-admin/')) {
+ if ( strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false )
$this->is_admin = true;
- }
if ( false !== strpos($qv['feed'], 'comments-') ) {
- $this->query_vars['feed'] = $qv['feed'] = str_replace('comments-', '', $qv['feed']);
+ $qv['feed'] = str_replace('comments-', '', $qv['feed']);
$qv['withcomments'] = 1;
}
@@ -571,15 +574,14 @@ class WP_Query {
if ( $this->is_feed && ( !empty($qv['withcomments']) || ( empty($qv['withoutcomments']) && $this->is_singular ) ) )
$this->is_comment_feed = true;
- if ( !( $this->is_singular || $this->is_archive || $this->is_search || $this->is_feed || $this->is_trackback || $this->is_404 || $this->is_admin || $this->is_comments_popup ) ) {
+ if ( !( $this->is_singular || $this->is_archive || $this->is_search || $this->is_feed || $this->is_trackback || $this->is_404 || $this->is_admin || $this->is_comments_popup ) )
$this->is_home = true;
- }
// Correct is_* for page_on_front and page_for_posts
if ( $this->is_home && ( empty($this->query) || $qv['preview'] == 'true' ) && 'page' == get_option('show_on_front') && get_option('page_on_front') ) {
$this->is_page = true;
$this->is_home = false;
- $this->query_vars['page_id'] = get_option('page_on_front');
+ $qv['page_id'] = get_option('page_on_front');
}
if ( '' != $qv['pagename'] ) {
@@ -596,8 +598,7 @@ class WP_Query {
}
}
- if ( '' != $qv['page_id'] && 0 != intval($qv['page_id']) ) {
- $this->query_vars['page_id'] = intval($qv['page_id']);
+ if ( $qv['page_id'] ) {
if ( 'page' == get_option('show_on_front') && $qv['page_id'] == get_option('page_for_posts') ) {
$this->is_page = false;
$this->is_home = true;
@@ -611,9 +612,8 @@ class WP_Query {
$this->is_singular = $this->is_single || $this->is_page || $this->is_attachment;
// Done correcting is_* for page_on_front and page_for_posts
- if ( !empty($query) ) {
+ if ( !empty($query) )
do_action_ref_array('parse_query', array(&$this));
- }
}
function set_404() {
@@ -704,7 +704,7 @@ class WP_Query {
$wp_posts_post_date_field = "post_date"; // "DATE_ADD(post_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)";
// If a month is specified in the querystring, load that month
- if ( (int) $q['m'] ) {
+ if ( $q['m'] ) {
$q['m'] = '' . preg_replace('|[^0-9]|', '', $q['m']);
$where .= ' AND YEAR(post_date)=' . substr($q['m'], 0, 4);
if (strlen($q['m'])>5)
@@ -719,41 +719,23 @@ class WP_Query {
$where .= ' AND SECOND(post_date)=' . substr($q['m'], 12, 2);
}
- if ( (int) $q['hour'] ) {
- $q['hour'] = '' . intval($q['hour']);
+ if ( '' != $q['hour'] )
$where .= " AND HOUR(post_date)='" . $q['hour'] . "'";
- }
- if ( (int) $q['minute'] ) {
- $q['minute'] = '' . intval($q['minute']);
+ if ( '' != $q['minute'] )
$where .= " AND MINUTE(post_date)='" . $q['minute'] . "'";
- }
- if ( (int) $q['second'] ) {
- $q['second'] = '' . intval($q['second']);
+ if ( '' != $q['second'] )
$where .= " AND SECOND(post_date)='" . $q['second'] . "'";
- }
- if ( (int) $q['year'] ) {
- $q['year'] = '' . intval($q['year']);
+ if ( $q['year'] )
$where .= " AND YEAR(post_date)='" . $q['year'] . "'";
- }
- if ( (int) $q['monthnum'] ) {
- $q['monthnum'] = '' . intval($q['monthnum']);
+ if ( $q['monthnum'] )
$where .= " AND MONTH(post_date)='" . $q['monthnum'] . "'";
- }
- if ( (int) $q['day'] ) {
- $q['day'] = '' . intval($q['day']);
+ if ( $q['day'] )
$where .= " AND DAYOFMONTH(post_date)='" . $q['day'] . "'";
- }
-
- // Compat. Map subpost to attachment.
- if ( '' != $q['subpost'] )
- $q['attachment'] = $q['subpost'];
- if ( '' != $q['subpost_id'] )
- $q['attachment_id'] = $q['subpost_id'];
if ('' != $q['name']) {
$q['name'] = sanitize_title($q['name']);
@@ -784,34 +766,29 @@ class WP_Query {
$where .= " AND post_name = '" . $q['attachment'] . "'";
}
- if ( (int) $q['w'] ) {
- $q['w'] = ''.intval($q['w']);
+ if ( $q['w'] )
$where .= " AND WEEK(post_date, 1)='" . $q['w'] . "'";
- }
if ( intval($q['comments_popup']) )
$q['p'] = intval($q['comments_popup']);
- // If a attachment is requested by number, let it supercede any post number.
- if ( ($q['attachment_id'] != '') && (intval($q['attachment_id']) != 0) )
- $q['p'] = (int) $q['attachment_id'];
+ // If an attachment is requested by number, let it supercede any post number.
+ if ( $q['attachment_id'] )
+ $q['p'] = $q['attachment_id'];
// If a post number is specified, load that post
- if (($q['p'] != '') && intval($q['p']) != 0) {
- $q['p'] = (int) $q['p'];
+ if ( $q['p'] )
$where = ' AND ID = ' . $q['p'];
- }
- if (($q['page_id'] != '') && (intval($q['page_id']) != 0)) {
- $q['page_id'] = intval($q['page_id']);
+ if ( $q['page_id'] ) {
if ( ('page' != get_option('show_on_front') ) || ( $q['page_id'] != get_option('page_for_posts') ) ) {
$q['p'] = $q['page_id'];
- $where = ' AND ID = '.$q['page_id'];
+ $where = ' AND ID = ' . $q['page_id'];
}
}
// If a search pattern is specified, load the posts that match
- if (!empty($q['s'])) {
+ if ( !empty($q['s']) ) {
// added slashes screw with quote grouping when done early, so done later
$q['s'] = stripslashes($q['s']);
if ($q['sentence']) {
@@ -838,10 +815,10 @@ class WP_Query {
// Category stuff
- if ((empty($q['cat'])) || ($q['cat'] == '0') ||
+ if ( empty($q['cat']) || ($q['cat'] == '0') ||
// Bypass cat checks if fetching specific posts
- ( $this->is_single || $this->is_page )) {
- $whichcat='';
+ $this->is_singular ) {
+ $whichcat = '';
} else {
$q['cat'] = ''.urldecode($q['cat']).'';
$q['cat'] = addslashes_gpc($q['cat']);
@@ -850,7 +827,7 @@ class WP_Query {
$in_cats = $out_cats = $out_posts = '';
foreach ( $cat_array as $cat ) {
$cat = intval($cat);
- $in = strstr($cat, '-') ? false : true;
+ $in = (strpos($cat, '-') !== false) ? false : true;
$cat = trim($cat, '-');
if ( $in )
$in_cats .= "$cat, " . get_category_children($cat, '', ', ');
@@ -878,7 +855,7 @@ class WP_Query {
}
// Category stuff for nice URLs
- if ('' != $q['category_name']) {
+ if ( '' != $q['category_name'] ) {
$reqcat = get_category_by_path($q['category_name']);
$q['category_name'] = str_replace('%2F', '/', urlencode(urldecode($q['category_name'])));
$cat_paths = '/' . trim($q['category_name'], '/');
@@ -913,12 +890,12 @@ class WP_Query {
// Author/user stuff
- if ((empty($q['author'])) || ($q['author'] == '0')) {
+ if ( empty($q['author']) || ($q['author'] == '0') ) {
$whichauthor='';
} else {
$q['author'] = ''.urldecode($q['author']).'';
$q['author'] = addslashes_gpc($q['author']);
- if (stristr($q['author'], '-')) {
+ if (strpos($q['author'], '-') !== false) {
$eq = '!=';
$andor = 'AND';
$q['author'] = explode('-', $q['author']);
@@ -938,7 +915,7 @@ class WP_Query {
// Author stuff for nice URLs
if ('' != $q['author_name']) {
- if (stristr($q['author_name'],'/')) {
+ if (strpos($q['author_name'], '/') !== false) {
$q['author_name'] = explode('/',$q['author_name']);
if ($q['author_name'][count($q['author_name'])-1]) {
$q['author_name'] = $q['author_name'][count($q['author_name'])-1];#no trailing slash
@@ -953,12 +930,11 @@ class WP_Query {
$where .= $search.$whichcat.$whichauthor;
- if ((empty($q['order'])) || ((strtoupper($q['order']) != 'ASC') && (strtoupper($q['order']) != 'DESC'))) {
- $q['order']='DESC';
- }
+ if ( empty($q['order']) || ((strtoupper($q['order']) != 'ASC') && (strtoupper($q['order']) != 'DESC')) )
+ $q['order'] = 'DESC';
// Order by
- if (empty($q['orderby'])) {
+ if ( empty($q['orderby']) ) {
$q['orderby'] = 'post_date '.$q['order'];
} else {
// Used to filter values
@@ -1014,7 +990,7 @@ class WP_Query {
$join = apply_filters('posts_join', $join);
// Paging
- if (empty($q['nopaging']) && !$this->is_singular) {
+ if ( empty($q['nopaging']) && !$this->is_singular ) {
$page = abs(intval($q['paged']));
if (empty($page)) {
$page = 1;
diff --git a/wp-includes/rewrite.php b/wp-includes/rewrite.php
index a8af33a..d22d3fc 100644
--- a/wp-includes/rewrite.php
+++ b/wp-includes/rewrite.php
@@ -591,11 +591,11 @@ class WP_Rewrite {
//individual post. Do this by checking it contains at least one of 1) post name,
//2) post ID, 3) page name, 4) timestamp (year, month, day, hour, second and
//minute all present). Set these flags now as we need them for the endpoints.
- if (strstr($struct, '%postname%') || strstr($struct, '%post_id%')
- || strstr($struct, '%pagename%')
- || (strstr($struct, '%year%') && strstr($struct, '%monthnum%') && strstr($struct, '%day%') && strstr($struct, '%hour%') && strstr($struct, '%minute') && strstr($struct, '%second%'))) {
+ if (strpos($struct, '%postname%') !== false || strpos($struct, '%post_id%') !== false
+ || strpos($struct, '%pagename%') !== false
+ || (strpos($struct, '%year%') !== false && strpos($struct, '%monthnum%') !== false && strpos($struct, '%day%') !== false && strpos($struct, '%hour%') !== false && strpos($struct, '%minute%') !== false && strpos($struct, '%second%') !== false)) {
$post = true;
- if ( strstr($struct, '%pagename%') )
+ if (strpos($struct, '%pagename%') !== false)
$page = true;
}
@@ -809,7 +809,7 @@ class WP_Rewrite {
//nada.
}
- if (strstr($query, $this->index)) {
+ if (strpos($query, $this->index) !== false) {
$rules .= 'RewriteRule ^' . $match . ' ' . $home_root . $query . " [QSA,L]\n";
} else {
$rules .= 'RewriteRule ^' . $match . ' ' . $site_root . $query . " [QSA,L]\n";
diff --git a/wp-includes/rss.php b/wp-includes/rss.php
index a42e7e0..44005a7 100644
--- a/wp-includes/rss.php
+++ b/wp-includes/rss.php
@@ -782,13 +782,13 @@ function parse_w3cdtf ( $date_str ) {
if ( preg_match( $pat, $date_str, $match ) ) {
list( $year, $month, $day, $hours, $minutes, $seconds) =
- array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[6]);
+ array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[7]);
# calc epoch for current date assuming GMT
$epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year);
$offset = 0;
- if ( $match[10] == 'Z' ) {
+ if ( $match[11] == 'Z' ) {
# zulu time, aka GMT
}
else {
diff --git a/wp-includes/script-loader.php b/wp-includes/script-loader.php
index 8026973..a763315 100644
--- a/wp-includes/script-loader.php
+++ b/wp-includes/script-loader.php
@@ -19,9 +19,26 @@ class WP_Scripts {
$mce_config = apply_filters('tiny_mce_config_url', '/wp-includes/js/tinymce/tiny_mce_config.php');
$this->add( 'wp_tiny_mce', $mce_config, array('tiny_mce'), '20070225' );
$this->add( 'prototype', '/wp-includes/js/prototype.js', false, '1.5.0-0');
- $this->add( 'autosave', '/wp-includes/js/autosave-js.php', array('prototype', 'sack'), '20070116');
- $this->add( 'wp-ajax', '/wp-includes/js/wp-ajax-js.php', array('prototype'), '20070118');
- $this->add( 'listman', '/wp-includes/js/list-manipulation-js.php', array('wp-ajax', 'fat'), '20070118');
+ $this->add( 'autosave', '/wp-includes/js/autosave.js', array('prototype', 'sack'), '20070306');
+ $this->localize( 'autosave', 'autosaveL10n', array(
+ 'autosaveInterval' => apply_filters('autosave_interval', '120'),
+ 'errorText' => __('Error: %response%'),
+ 'saveText' => __('Saved at %time%.'),
+ 'requestFile' => get_option( 'siteurl' ) . '/wp-admin/admin-ajax.php',
+ 'savingText' => __('Saving Draft...')
+ ) );
+ $this->add( 'wp-ajax', '/wp-includes/js/wp-ajax.js', array('prototype'), '20070306');
+ $this->localize( 'wp-ajax', 'WPAjaxL10n', array(
+ 'defaultUrl' => get_option( 'siteurl' ) . '/wp-admin/admin-ajax.php',
+ 'permText' => __("You don't have permission to do that."),
+ 'strangeText' => __("Something strange happened. Try refreshing the page."),
+ 'whoaText' => __("Slow down, I'm still sending your data!")
+ ) );
+ $this->add( 'listman', '/wp-includes/js/list-manipulation.js', array('wp-ajax', 'fat'), '20070306');
+ $this->localize( 'listman', 'listManL10n', array(
+ 'jumpText' => __('Jump to new item'),
+ 'delText' => __('Are you sure you want to delete this %thing%?')
+ ) );
$this->add( 'scriptaculous-root', '/wp-includes/js/scriptaculous/wp-scriptaculous.js', array('prototype'), '1.7.0');
$this->add( 'scriptaculous-builder', '/wp-includes/js/scriptaculous/builder.js', array('scriptaculous-root'), '1.7.0');
$this->add( 'scriptaculous-dragdrop', '/wp-includes/js/scriptaculous/dragdrop.js', array('scriptaculous-builder', 'scriptaculous-effects'), '1.7.0');
@@ -33,14 +50,66 @@ class WP_Scripts {
$this->add( 'jquery', '/wp-includes/js/jquery/jquery.js', false, '1.1.1');
$this->add( 'interface', '/wp-includes/js/jquery/interface.js', array('jquery'), '1.1.1');
if ( is_admin() ) {
- $this->add( 'dbx-admin-key', '/wp-admin/dbx-admin-key-js.php', array('dbx'), '3651' );
- $this->add( 'ajaxcat', '/wp-admin/cat-js.php', array('listman'), '20070118' );
+ global $pagenow;
+ $man = false;
+ switch ( $pagenow ) :
+ case 'post.php' :
+ case 'post-new.php' :
+ $man = 'postmeta';
+ break;
+ case 'page.php' :
+ case 'page-new.php' :
+ $man = 'pagemeta';
+ break;
+ case 'link.php' :
+ $man = 'linkmeta';
+ break;
+ endswitch;
+ if ( $man ) {
+ $this->add( 'dbx-admin-key', '/wp-admin/dbx-admin-key.js', array('dbx'), '20070306' );
+ $this->localize( 'dbx-admin-key', 'dbxL10n', array(
+ 'manager' => $man,
+ 'open' => __('open'),
+ 'close' => __('close'),
+ 'moveMouse' => __('click-down and drag to move this box'),
+ 'toggleMouse' => __('click to %toggle% this box'),
+ 'moveKey' => __('use the arrow keys to move this box'),
+ 'toggleKey' => __(', or press the enter key to %toggle% it'),
+ ) );
+ }
+ $this->add( 'ajaxcat', '/wp-admin/cat.js', array('listman'), '20070306' );
+ $this->localize( 'ajaxcat', 'catL10n', array(
+ 'add' => attribute_escape(__('Add')),
+ 'how' => __('Separate multiple categories with commas.')
+ ) );
$this->add( 'admin-categories', '/wp-admin/categories.js', array('listman'), '3684' );
$this->add( 'admin-custom-fields', '/wp-admin/custom-fields.js', array('listman'), '3733' );
$this->add( 'admin-comments', '/wp-admin/edit-comments.js', array('listman'), '3847' );
$this->add( 'admin-users', '/wp-admin/users.js', array('listman'), '4583' );
$this->add( 'xfn', '/wp-admin/xfn.js', false, '3517' );
- $this->add( 'upload', '/wp-admin/upload-js.php', array('prototype'), '20070118' );
+ $this->add( 'upload', '/wp-admin/upload.js', array('prototype'), '20070306' );
+ $this->localize( 'upload', 'uploadL10n', array(
+ 'browseTitle' => attribute_escape(__('Browse your files')),
+ 'back' => __('&laquo; Back'),
+ 'directTitle' => attribute_escape(__('Direct link to file')),
+ 'edit' => __('Edit'),
+ 'thumb' => __('Thumbnail'),
+ 'full' => __('Full size'),
+ 'icon' => __('Icon'),
+ 'title' => __('Title'),
+ 'show' => __('Show:'),
+ 'link' => __('Link to:'),
+ 'file' => __('File'),
+ 'page' => __('Page'),
+ 'none' => __('None'),
+ 'editorText' => attribute_escape(__('Send to editor &raquo;')),
+ 'insert' => __('Insert'),
+ 'urlText' => __('URL'),
+ 'desc' => __('Description'),
+ 'deleteText' => attribute_escape(__('Delete File')),
+ 'saveText' => attribute_escape(__('Save &raquo;')),
+ 'confirmText' => __("Are you sure you want to delete the file '%title%'?\nClick ok to delete or cancel to go back.")
+ ) );
}
}
@@ -81,14 +150,33 @@ class WP_Scripts {
$ver .= '&amp;' . $this->args[$handle];
$src = 0 === strpos($this->scripts[$handle]->src, 'http://') ? $this->scripts[$handle]->src : get_option( 'siteurl' ) . $this->scripts[$handle]->src;
$src = add_query_arg('ver', $ver, $src);
- $src = apply_filters( 'script_loader_src', $src );
+ $src = attribute_escape(apply_filters( 'script_loader_src', $src ));
echo "<script type='text/javascript' src='$src'></script>\n";
+ $this->print_scripts_l10n( $handle );
}
$this->printed[] = $handle;
}
}
}
+ function print_scripts_l10n( $handle ) {
+ if ( empty($this->scripts[$handle]->l10n_object) || empty($this->scripts[$handle]->l10n) || !is_array($this->scripts[$handle]->l10n) )
+ return;
+
+ $object_name = $this->scripts[$handle]->l10n_object;
+
+ echo "<script type='text/javascript'>\n";
+ echo "/* <![CDATA[ */\n";
+ echo "\t$object_name = {\n";
+ $eol = '';
+ foreach ( $this->scripts[$handle]->l10n as $var => $val ) {
+ echo "$eol\t\t$var: \"" . js_escape( $val ) . '"';
+ $eol = ",\n";
+ }
+ echo "\n\t}\n";
+ echo "/* ]]> */\n";
+ echo "</script>\n";
+ }
/**
* Determines dependencies of scripts
@@ -140,6 +228,22 @@ class WP_Scripts {
return true;
}
+ /**
+ * Localizes a script
+ *
+ * Localizes only if script has already been added
+ *
+ * @param string handle Script name
+ * @param string object_name Name of JS object to hold l10n info
+ * @param array l10n Array of JS var name => localized string
+ * @return bool Successful localization
+ */
+ function localize( $handle, $object_name, $l10n ) {
+ if ( !isset($this->scripts[$handle]) )
+ return false;
+ return $this->scripts[$handle]->localize( $object_name, $l10n );
+ }
+
function remove( $handles ) {
foreach ( (array) $handles as $handle )
unset($this->scripts[$handle]);
@@ -182,7 +286,8 @@ class _WP_Script {
var $src;
var $deps = array();
var $ver = false;
- var $args = false;
+ var $l10n_object = '';
+ var $l10n = array();
function _WP_Script() {
@list($this->handle, $this->src, $this->deps, $this->ver) = func_get_args();
@@ -191,6 +296,14 @@ class _WP_Script {
if ( !$this->ver )
$this->ver = false;
}
+
+ function localize( $object_name, $l10n ) {
+ if ( !$object_name || !is_array($l10n) )
+ return false;
+ $this->l10n_object = $object_name;
+ $this->l10n = $l10n;
+ return true;
+ }
}
/**
@@ -227,6 +340,21 @@ function wp_register_script( $handle, $src, $deps = array(), $ver = false ) {
$wp_scripts->add( $handle, $src, $deps, $ver );
}
+/**
+ * Localizes a script
+ *
+ * Localizes only if script has already been added
+ *
+ * @see WP_Script::localize()
+ */
+function wp_localize_script( $handle, $object_name, $l10n ) {
+ global $wp_scripts;
+ if ( !is_a($wp_scripts, 'WP_Scripts') )
+ return false;
+
+ return $wp_scripts->localize( $handle, $object_name, $l10n );
+}
+
function wp_deregister_script( $handle ) {
global $wp_scripts;
if ( !is_a($wp_scripts, 'WP_Scripts') )
diff --git a/wp-includes/theme.php b/wp-includes/theme.php
index 633412c..2f2c1fb 100644
--- a/wp-includes/theme.php
+++ b/wp-includes/theme.php
@@ -78,6 +78,7 @@ function get_theme_data( $theme_file ) {
$name = $theme_name[1];
$name = trim( $name );
$theme = $name;
+ $theme_uri = trim( $theme_uri[1] );
if ( '' == $author_uri[1] ) {
$author = trim( $author_name[1] );
@@ -85,7 +86,7 @@ function get_theme_data( $theme_file ) {
$author = '<a href="' . trim( $author_uri[1] ) . '" title="' . __('Visit author homepage') . '">' . trim( $author_name[1] ) . '</a>';
}
- return array( 'Name' => $name, 'Title' => $theme, 'Description' => $description, 'Author' => $author, 'Version' => $version, 'Template' => $template[1], 'Status' => $status );
+ return array( 'Name' => $name, 'Title' => $theme, 'URI' => $theme_uri, 'Description' => $description, 'Author' => $author, 'Version' => $version, 'Template' => $template[1], 'Status' => $status );
}
function get_themes() {
diff --git a/wp-includes/vars.php b/wp-includes/vars.php
index e5cf9ba..1675ca4 100644
--- a/wp-includes/vars.php
+++ b/wp-includes/vars.php
@@ -32,8 +32,8 @@ elseif ( preg_match('/Nav/', $_SERVER['HTTP_USER_AGENT']) || preg_match('/Mozill
$is_IE = ( $is_macIE || $is_winIE );
// Server detection
-$is_apache = ( strstr($_SERVER['SERVER_SOFTWARE'], 'Apache') || strstr($_SERVER['SERVER_SOFTWARE'], 'LiteSpeed') ) ? 1 : 0;
-$is_IIS = strstr($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') ? 1 : 0;
+$is_apache = ((strpos($_SERVER['SERVER_SOFTWARE'], 'Apache') !== false) || (strpos($_SERVER['SERVER_SOFTWARE'], 'LiteSpeed') !== false)) ? 1 : 0;
+$is_IIS = (strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== false) ? 1 : 0;
// if the config file does not provide the smilies array, let's define it here
if (!isset($wpsmiliestrans)) {
diff --git a/wp-includes/wp-db.php b/wp-includes/wp-db.php
index 98ae962..89b2a37 100644
--- a/wp-includes/wp-db.php
+++ b/wp-includes/wp-db.php
@@ -437,7 +437,7 @@ class wpdb {
header('Content-Type: text/html; charset=utf-8');
- if ( strstr($_SERVER['PHP_SELF'], 'wp-admin') )
+ if (strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false)
$admin_dir = '';
else
$admin_dir = 'wp-admin/';
diff --git a/wp-login.php b/wp-login.php
index 5429aff..59f9399 100644
--- a/wp-login.php
+++ b/wp-login.php
@@ -146,7 +146,7 @@ case 'retrievepassword' :
<input type="text" name="user_email" id="user_email" class="input" value="<?php echo attribute_escape(stripslashes($_POST['user_email'])); ?>" size="25" tabindex="20" /></label>
</p>
<?php do_action('lostpassword_form'); ?>
- <p class="submit"><input type="submit" name="submit" id="submit" value="<?php _e('Get New Password &raquo;'); ?>" tabindex="100" /></p>
+ <p class="submit"><input type="submit" name="wp-submit" id="wp-submit" value="<?php _e('Get New Password &raquo;'); ?>" tabindex="100" /></p>
</form>
</div>
@@ -154,9 +154,9 @@ case 'retrievepassword' :
<?php if (get_option('users_can_register')) : ?>
<li><a href="<?php bloginfo('wpurl'); ?>/wp-login.php"><?php _e('Login') ?></a></li>
<li><a href="<?php bloginfo('wpurl'); ?>/signup/"><?php _e('Register') ?></a></li>
- <li><a href="<?php bloginfo('home'); ?>/" title="<?php _e('Are you lost?') ?>" class="fullwidth">&laquo; <?php _e('Back to blog') ?></a></li>
+ <li><a href="<?php bloginfo('url'); ?>/" title="<?php _e('Are you lost?') ?>"><?php printf(__('Back to %s'), get_bloginfo('title')); ?></a></li>
<?php else : ?>
- <li><a href="<?php bloginfo('home'); ?>/" title="<?php _e('Are you lost?') ?>">&laquo; <?php _e('Back to blog') ?></a></li>
+ <li><a href="<?php bloginfo('url'); ?>/" title="<?php _e('Are you lost?') ?>"><?php printf(__('Back to %s'), get_bloginfo('title')); ?></a></li>
<li><a href="<?php bloginfo('wpurl'); ?>/wp-login.php"><?php _e('Login') ?></a></li>
<?php endif; ?>
</ul>
@@ -208,7 +208,7 @@ default:
$user_pass = '';
$using_cookie = FALSE;
- if ( !isset( $_REQUEST['redirect_to'] ) )
+ if ( !isset( $_REQUEST['redirect_to'] ) || is_user_logged_in() )
$redirect_to = 'wp-admin/';
else
$redirect_to = $_REQUEST['redirect_to'];
@@ -277,7 +277,7 @@ default:
<?php do_action('login_form'); ?>
<p><label><input name="rememberme" type="checkbox" id="rememberme" value="forever" tabindex="90" /> <?php _e('Remember me'); ?></label></p>
<p class="submit">
- <input type="submit" name="submit" id="submit" value="<?php _e('Login'); ?> &raquo;" tabindex="100" />
+ <input type="submit" name="wp-submit" id="wp-submit" value="<?php _e('Login'); ?> &raquo;" tabindex="100" />
<input type="hidden" name="redirect_to" value="<?php echo attribute_escape($redirect_to); ?>" />
</p>
</form>
@@ -287,9 +287,9 @@ default:
<?php if (get_option('users_can_register')) : ?>
<li><a href="<?php bloginfo('wpurl'); ?>/signup/"><?php _e('Register') ?></a></li>
<li><a href="<?php bloginfo('wpurl'); ?>/wp-login.php?action=lostpassword" title="<?php _e('Password Lost and Found') ?>"><?php _e('Lost your password?') ?></a></li>
- <li><a href="<?php bloginfo('home'); ?>/" title="<?php _e('Are you lost?') ?>" class="fullwidth">&laquo; <?php _e('Back to blog') ?></a></li>
+ <li><a href="<?php bloginfo('url'); ?>/" title="<?php _e('Are you lost?') ?>"><?php printf(__('Back to %s'), get_bloginfo('title')); ?></a></li>
<?php else : ?>
- <li><a href="<?php bloginfo('home'); ?>/" title="<?php _e('Are you lost?') ?>">&laquo; <?php _e('Back to blog') ?></a></li>
+ <li><a href="<?php bloginfo('url'); ?>/" title="<?php _e('Are you lost?') ?>"><?php printf(__('Back to %s'), get_bloginfo('title')); ?></a></li>
<li><a href="<?php bloginfo('wpurl'); ?>/wp-login.php?action=lostpassword" title="<?php _e('Password Lost and Found') ?>"><?php _e('Lost your password?') ?></a></li>
<?php endif; ?>
</ul>
diff --git a/wp-settings.php b/wp-settings.php
index c587e38..93ee03e 100644
--- a/wp-settings.php
+++ b/wp-settings.php
@@ -48,7 +48,7 @@ if ( isset($_SERVER['SCRIPT_FILENAME']) && ( strpos($_SERVER['SCRIPT_FILENAME'],
$_SERVER['SCRIPT_FILENAME'] = $_SERVER['PATH_TRANSLATED'];
// Fix for Dreamhost and other PHP as CGI hosts
-if ( strstr( $_SERVER['SCRIPT_NAME'], 'php.cgi' ) )
+if (strpos($_SERVER['SCRIPT_NAME'], 'php.cgi') !== false)
unset($_SERVER['PATH_INFO']);
// Fix empty PHP_SELF
@@ -107,29 +107,37 @@ if ( file_exists(ABSPATH . 'wp-content/db.php') )
else
require_once (ABSPATH . WPINC . '/wp-db.php');
-$wpdb->blogs = $table_prefix . 'blogs';
-$wpdb->users = $table_prefix . 'users';
-$wpdb->usermeta = $table_prefix . 'usermeta';
-$wpdb->site = $table_prefix . 'site';
-$wpdb->sitemeta = $table_prefix . 'sitemeta';
-$wpdb->sitecategories = $table_prefix . 'sitecategories';
-$wpdb->signups = $table_prefix . 'signups';
-$wpdb->registration_log = $table_prefix . 'registration_log';
-$wpdb->blog_versions = $table_prefix . 'blog_versions';
+// $table_prefix is deprecated as of 2.1
+$wpdb->prefix = $table_prefix;
+
+if ( preg_match('|[^a-z0-9_]|i', $wpdb->prefix) && !file_exists(ABSPATH . 'wp-content/db.php') )
+ die("<strong>ERROR</strong>: <code>$table_prefix</code> in <code>wp-config.php</code> can only contain numbers, letters, and underscores.");
+
+// Table names
+
+$wpdb->blogs = $wpdb->prefix . 'blogs';
+$wpdb->site = $wpdb->prefix . 'site';
+$wpdb->sitemeta = $wpdb->prefix . 'sitemeta';
+$wpdb->sitecategories = $wpdb->prefix . 'sitecategories';
+$wpdb->signups = $wpdb->prefix . 'signups';
+$wpdb->registration_log = $wpdb->prefix . 'registration_log';
+$wpdb->blog_versions = $wpdb->prefix . 'blog_versions';
+$wpdb->users = $wpdb->prefix . 'users';
+$wpdb->usermeta = $wpdb->prefix . 'usermeta';
require_once ( ABSPATH . 'wpmu-settings.php' );
+$wpdb->prefix = $table_prefix;
+$wpdb->posts = $wpdb->prefix . 'posts';
+$wpdb->categories = $wpdb->prefix . 'categories';
+$wpdb->post2cat = $wpdb->prefix . 'post2cat';
+$wpdb->comments = $wpdb->prefix . 'comments';
+$wpdb->link2cat = $wpdb->prefix . 'link2cat';
+$wpdb->links = $wpdb->prefix . 'links';
+$wpdb->linkcategories = $wpdb->prefix . 'linkcategories';
+$wpdb->options = $wpdb->prefix . 'options';
+$wpdb->postmeta = $wpdb->prefix . 'postmeta';
$wpdb->siteid = $site_id;
$wpdb->blogid = $blog_id;
-$wpdb->posts = $table_prefix . 'posts';
-$wpdb->categories = $table_prefix . 'categories';
-$wpdb->post2cat = $table_prefix . 'post2cat';
-$wpdb->comments = $table_prefix . 'comments';
-$wpdb->link2cat = $table_prefix . 'link2cat';
-$wpdb->links = $table_prefix . 'links';
-$wpdb->linkcategories = $table_prefix . 'linkcategories';
-$wpdb->options = $table_prefix . 'options';
-$wpdb->postmeta = $table_prefix . 'postmeta';
-$wpdb->prefix = $table_prefix;
if ( defined('CUSTOM_USER_TABLE') )
$wpdb->users = CUSTOM_USER_TABLE;
@@ -163,16 +171,13 @@ include_once(ABSPATH . WPINC . '/streams.php');
include_once(ABSPATH . WPINC . '/gettext.php');
require_once (ABSPATH . WPINC . '/l10n.php');
-$wpdb->hide_errors();
-$db_check = $wpdb->get_var("SELECT option_value FROM $wpdb->options WHERE option_name = 'siteurl'");
-if ( !$db_check && (!strstr($_SERVER['PHP_SELF'], 'install.php') && !defined('WP_INSTALLING')) ) {
- if ( strstr($_SERVER['PHP_SELF'], 'wp-admin') )
+if ( !is_blog_installed() && (strpos($_SERVER['PHP_SELF'], 'install.php') === false && !defined('WP_INSTALLING')) ) {
+ if (strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false)
$link = 'install.php';
else
$link = 'wp-admin/install.php';
- wp_die(sprintf(__("It doesn't look like you've installed WP yet. Try running <a href='%s'>install.php</a>."), $link));
+ wp_die(sprintf("It doesn't look like you've installed WP yet. Try running <a href='%s'>install.php</a>.", $link));
}
-$wpdb->show_errors();
require (ABSPATH . WPINC . '/formatting.php');
require (ABSPATH . WPINC . '/capabilities.php');
diff --git a/xmlrpc.php b/xmlrpc.php
index 274496e..69937e0 100644
--- a/xmlrpc.php
+++ b/xmlrpc.php
@@ -149,7 +149,7 @@ class wp_xmlrpc_server extends IXR_Server {
function escape(&$array) {
global $wpdb;
- if(is_string($array)) {
+ if(!is_array($array)) {
return($wpdb->escape($array));
}
else {
@@ -594,7 +594,7 @@ class wp_xmlrpc_server extends IXR_Server {
);
}
- return $struct;
+ return array($struct);
}
@@ -1110,7 +1110,7 @@ class wp_xmlrpc_server extends IXR_Server {
}
// Only set a post parent if one was given.
- if(!empty($content_struct["wp_page_parent_id"])) {
+ if(isset($content_struct["wp_page_parent_id"])) {
$post_parent = $content_struct["wp_page_parent_id"];
}
@@ -1176,11 +1176,11 @@ class wp_xmlrpc_server extends IXR_Server {
$to_ping = $content_struct['mt_tb_ping_urls'];
if ( is_array($to_ping) )
$to_ping = implode(' ', $to_ping);
-
- $comment_status = (!isset($content_struct['mt_allow_comments'])) ?
- get_option('default_comment_status')
- : $content_struct['mt_allow_comments'];
+ if(isset($content_struct["mt_allow_comments"])) {
+ $comment_status = $content_struct["mt_allow_comments"];
+ }
+
// Do some timestamp voodoo
$dateCreatedd = $content_struct['dateCreated'];
if (!empty($dateCreatedd)) {
@@ -1397,6 +1397,25 @@ class wp_xmlrpc_server extends IXR_Server {
$overwrite = false;
if(!empty($data["overwrite"]) && ($data["overwrite"] == true)) {
$overwrite = true;
+
+ // If the file isn't writable then error out now.
+ if(!is_writable($data["name"])) {
+ return(new IXR_Error(500, "File is not writable, over write failed."));
+ }
+
+ // We now know the file is good so don't use the sanitized name.
+ $name = $data["name"];
+
+ // Get postmeta info on the object.
+ $old_meta = $wpdb->get_row("
+ SELECT *
+ FROM {$wpdb->postmeta}
+ WHERE meta_key = '_wp_attached_file'
+ AND meta_value = '{$name}'
+ ");
+
+ // Get post info on the object.
+ $old_post = get_post($old_meta->post_id);
}
logIO('O', '(MW) Received '.strlen($bits).' bytes');
@@ -1431,13 +1450,21 @@ class wp_xmlrpc_server extends IXR_Server {
'guid' => $upload[ 'url' ]
);
- // Only make a database entry if this is a new file.
- if(!$overwrite) {
- // Save the data
- $id = wp_insert_attachment( $attachment, $upload[ 'file' ], $post_id );
- wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $upload['file'] ) );
+ // If we are over writing then set the correct post_id and URL
+ // instead of getting new ones.
+ if($overwrite) {
+ $post_id = $old_meta->post_id;
+ $attachment["post_parent"] = $old_meta->post_id;
+ $attachment["ID"] = $old_meta->post_id;
+
+ $upload["url"] = $old_post->guid;
+ $attachment["guid"] = $old_post->guid;
}
+ // Save the data
+ $id = wp_insert_attachment( $attachment, $upload[ 'file' ], $post_id );
+ wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $upload['file'] ) );
+
return apply_filters( 'wp_handle_upload', array( 'file' => $upload[ 'file' ], 'url' => $upload[ 'url' ], 'type' => $type ) );
}