Changeset 4187
- Timestamp:
- 09/13/2006 09:39:53 PM (18 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 7 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/admin-ajax.php
r4163 r4187 6 6 define('DOING_AJAX', true); 7 7 8 9 8 check_ajax_referer(); 10 9 if ( !is_user_logged_in() ) … … 14 13 add_action( 'shutdown', 'get_out_now', -1 ); 15 14 16 function wp_ajax_ echo_meta( $pid, $mid, $key, $value ) {15 function wp_ajax_meta_row( $pid, $mid, $key, $value ) { 17 16 $value = wp_specialchars($value, true); 18 17 $key_js = addslashes(wp_specialchars($key, 'double')); 19 18 $key = wp_specialchars($key, true); 20 $r = "<meta><id>$mid</id><postid>$pid</postid><newitem><![CDATA[<table><tbody>";21 19 $r .= "<tr id='meta-$mid'><td valign='top'>"; 22 20 $r .= "<input name='meta[$mid][key]' tabindex='6' onkeypress='return killSubmit(\"theList.ajaxUpdater('meta','meta-$mid');\",event);' type='text' size='20' value='$key' />"; … … 25 23 $r .= "<input name='deletemeta[$mid]' type='submit' onclick=\"return deleteSomething( 'meta', $mid, '"; 26 24 $r .= sprintf(__("You are about to delete the "%s" custom field on this post.\\n"OK" to delete, "Cancel" to stop."), $key_js); 27 $r .= "' );\" class='deletemeta' tabindex='6' value='Delete' />"; 28 $r .= "</td></tr></tbody></table>]]></newitem></meta>"; 25 $r .= "' );\" class='deletemeta' tabindex='6' value='Delete' /></td></tr>"; 29 26 return $r; 30 27 } … … 114 111 die('-1'); 115 112 $names = explode(',', $_POST['newcat']); 116 $ r = "<?xml version='1.0' standalone='yes'?><ajaxresponse>";113 $x = new WP_Ajax_Response(); 117 114 foreach ( $names as $cat_name ) { 118 115 $cat_name = trim($cat_name); … … 122 119 $cat_id = wp_create_category( $cat_name ); 123 120 $cat_name = wp_specialchars(stripslashes($cat_name)); 124 $r .= "<category><id>$cat_id</id><newitem><![CDATA["; 125 $r .= "<li id='category-$cat_id'><label for='in-category-$cat_id' class='selectit'>"; 126 $r .= "<input value='$cat_id' type='checkbox' checked='checked' name='post_category[]' id='in-category-$cat_id'/> $cat_name</label></li>"; 127 $r .= "]]></newitem></category>"; 128 } 129 $r .= '</ajaxresponse>'; 130 header('Content-type: text/xml'); 131 die($r); 121 $x->add( array( 122 'what' => 'category', 123 'id' => $cat_id, 124 'data' => "<li id='category-$cat_id'><label for='in-category-$cat_id' class='selectit'><input value='$cat_id' type='checkbox' checked='checked' name='post_category[]' id='in-category-$cat_id'/> $cat_name</label></li>" 125 ) ); 126 } 127 $x->send(); 132 128 break; 133 129 case 'add-cat' : // From Manage->Categories … … 148 144 $cat_full_name = wp_specialchars( $cat_full_name, 1 ); 149 145 150 $r = "<?xml version='1.0' standalone='yes'?><ajaxresponse>"; 151 $r .= "<cat><id>$cat->cat_ID</id><name>$cat_full_name</name><newitem><![CDATA[<table><tbody>"; 152 $r .= _cat_row( $cat, $level, $cat_full_name ); 153 $r .= "</tbody></table>]]></newitem></cat></ajaxresponse>"; 154 header('Content-type: text/xml'); 155 die($r); 146 $x = new WP_Ajax_Response( array( 147 'what' => 'cat', 148 'id' => $cat->cat_ID, 149 'data' => _cat_row( $cat, $level, $cat_full_name ), 150 'supplemental' => array('name' => $cat_full_name) 151 ) ); 152 $x->send(); 156 153 break; 157 154 case 'add-meta' : … … 172 169 $pid = (int) $meta->post_id; 173 170 174 $r = "<?xml version='1.0' standalone='yes'?><ajaxresponse>"; 175 $r .= wp_ajax_echo_meta( $pid, $mid, $key, $value ); 176 $r .= '</ajaxresponse>'; 177 header('Content-type: text/xml'); 178 die($r); 171 $x = new WP_Ajax_Response( array( 172 'what' => 'meta', 173 'id' => $mid, 174 'data' => wp_ajax_meta_row( $pid, $mid, $key, $value ), 175 'supplemental' => array('postid' => $pid) 176 ) ); 177 $x->send(); 179 178 break; 180 179 case 'update-meta' : … … 186 185 if ( !current_user_can( 'edit_post', $meta->post_id ) ) 187 186 die('-1'); 188 $r = "<?xml version='1.0' standalone='yes'?><ajaxresponse>";189 187 if ( $u = update_meta( $mid, $key, $value ) ) { 190 188 $key = stripslashes($key); 191 189 $value = stripslashes($value); 192 $r .= wp_ajax_echo_meta( $meta->post_id, $mid, $key, $value ); 193 } 194 $r .= '</ajaxresponse>'; 195 header('Content-type: text/xml'); 196 die($r); 190 $x = new WP_Ajax_Response( array( 191 'what' => 'meta', 192 'id' => $mid, 193 'data' => wp_ajax_meta_row( $meta->post_id, $mid, $key, $value ), 194 'supplemental' => array('postid' => $meta->post_id) 195 ) ); 196 $x->send(); 197 } 198 die('0'); 197 199 break; 198 200 case 'add-user' : … … 200 202 die('-1'); 201 203 require_once(ABSPATH . WPINC . '/registration.php'); 202 $user_id = add_user(); 203 if ( is_wp_error( $user_id ) ) { 204 if ( !$user_id = add_user() ) 205 die('0'); 206 elseif ( is_wp_error( $user_id ) ) { 204 207 foreach( $user_id->get_error_messages() as $message ) 205 echo "$message<br />"; 206 exit; 207 } elseif ( !$user_id ) { 208 die('0'); 209 } 210 $r = "<?xml version='1.0' standalone='yes'?><ajaxresponse><user><id>$user_id</id><newitem><![CDATA[<table><tbody>"; 211 $r .= user_row( $user_id ); 212 $r .= "</tbody></table>]]></newitem></user></ajaxresponse>"; 213 header('Content-type: text/xml'); 214 die($r); 208 echo "<p>$message<p>"; 209 exit; 210 } 211 $x = new WP_Ajax_Response( array( 212 'what' => 'user', 213 'id' => $user_id, 214 'data' => user_row( $user_id ) 215 ) ); 216 $x->send(); 215 217 break; 216 218 case 'autosave' : -
trunk/wp-admin/cat-js.php
r4170 r4187 6 6 addLoadEvent(newCatAddIn); 7 7 function newCatAddIn() { 8 if ( !document.getElementById('jaxcat') ) return false; 9 var ajaxcat = document.createElement('span'); 10 ajaxcat.id = 'ajaxcat'; 11 12 newcat = document.createElement('input'); 13 newcat.type = 'text'; 14 newcat.name = 'newcat'; 15 newcat.id = 'newcat'; 16 newcat.size = '16'; 17 newcat.setAttribute('autocomplete', 'off'); 18 newcat.onkeypress = function(e) { return killSubmit("catList.ajaxAdder('category','categorydiv');", e); }; 19 20 var newcatSub = document.createElement('input'); 21 newcatSub.type = 'button'; 22 newcatSub.name = 'Button'; 23 newcatSub.id = 'catadd'; 24 newcatSub.value = '<?php _e('Add'); ?>'; 25 newcatSub.onclick = function() { catList.ajaxAdder('category', 'categorydiv'); }; 26 27 ajaxcat.appendChild(newcat); 28 ajaxcat.appendChild(newcatSub); 29 document.getElementById('jaxcat').appendChild(ajaxcat); 30 31 howto = document.createElement('span'); 32 howto.innerHTML = "<?php _e('Separate multiple categories with commas.'); ?>"; 33 howto.id = 'howto'; 34 ajaxcat.appendChild(howto); 8 var jaxcat = $('jaxcat'); 9 if ( !jaxcat ) 10 return false; 11 jaxcat.update('<span id="ajaxcat"><input type="text" name="newcat" id="newcat" size="16" autocomplete="off"/><input type="button" name="Button" id="catadd" value="<?php _e('Add'); ?>"/><span id="howto"><?php _e('Separate multiple categories with commas.'); ?></span></span>'); 12 $('newcat').onkeypress = function(e) { return killSubmit("catList.ajaxAdder('category','jaxcat');", e); }; 13 $('catadd').onclick = function() { catList.ajaxAdder('category', 'jaxcat'); }; 35 14 } -
trunk/wp-admin/categories.js
r4041 r4187 2 2 if (!theList.theList) return false; 3 3 document.forms.addcat.submit.onclick = function(e) {return killSubmit('theList.ajaxAdder("cat", "addcat");', e); }; 4 theList.addComplete = function(what, where, update ) {5 var name = getNodeValue(t heList.ajaxAdd.responseXML, 'name');6 var id = getNodeValue(theList.ajaxAdd.responseXML,'id');4 theList.addComplete = function(what, where, update, transport) { 5 var name = getNodeValue(transport.responseXML, 'name'); 6 var id = transport.responseXML.getElementsByTagName(what)[0].getAttribute('id'); 7 7 var options = document.forms['addcat'].category_parent.options; 8 8 options[options.length] = new Option(name, id); -
trunk/wp-admin/custom-fields.js
r4163 r4187 1 function customFieldsOnComplete( ) {2 var pidEl = document.getElementById('post_ID');1 function customFieldsOnComplete( what, where, update, transport ) { 2 var pidEl = $('post_ID'); 3 3 pidEl.name = 'post_ID'; 4 pidEl.value = getNodeValue(t heList.ajaxAdd.responseXML, 'postid');5 var aEl = document.getElementById('hiddenaction')4 pidEl.value = getNodeValue(transport.responseXML, 'postid'); 5 var aEl = $('hiddenaction') 6 6 if ( aEl.value == 'post' ) aEl.value = 'postajaxpost'; 7 7 } … … 22 22 } 23 23 24 document.getElementById('metakeyinput').onkeypress = function(e) {return killSubmit('theList.inputData+="&id="+document.getElementById("post_ID").value;theList.ajaxAdder("meta", "newmeta");', e); };25 document.getElementById('updatemetasub').onclick = function(e) {return killSubmit('theList.inputData+="&id="+document.getElementById("post_ID").value;theList.ajaxAdder("meta", "newmeta");', e); };24 $('metakeyinput').onkeypress = function(e) {return killSubmit('theList.inputData+="&id="+$("post_ID").value;theList.ajaxAdder("meta", "newmeta");', e); }; 25 $('updatemetasub').onclick = function(e) {return killSubmit('theList.inputData+="&id="+$("post_ID").value;theList.ajaxAdder("meta", "newmeta");', e); }; 26 26 } -
trunk/wp-admin/users.php
r4144 r4187 491 491 <?php if ( is_wp_error( $add_user_errors ) ) : ?> 492 492 <div class="error"> 493 <ul>494 493 <?php 495 494 foreach ( $add_user_errors->get_error_messages() as $message ) 496 echo "$message<br />"; 497 ?> 498 </ul> 495 echo "<p>$message<p>"; 496 ?> 499 497 </div> 500 498 <?php endif; ?> -
trunk/wp-includes/classes.php
r4186 r4187 710 710 } 711 711 712 class WP_Ajax_Response { 713 var $responses = array(); 714 715 function WP_Ajax_Response( $args = '' ) { 716 if ( !empty($args) ) 717 $this->add($args); 718 } 719 720 // a WP_Error object can be passed in 'id' or 'data' 721 function add( $args = '' ) { 722 if ( is_array($args) ) 723 $r = &$args; 724 else 725 parse_str($args, $r); 726 727 $defaults = array('what' => 'object', 'action' => false, 'id' => '0', 'old_id' => false, 728 'data' => '', 'supplemental' => array()); 729 730 $r = array_merge($defaults, $r); 731 extract($r); 732 733 if ( is_wp_error($id) ) { 734 $data = $id; 735 $id = 0; 736 } 737 738 $response = ''; 739 if ( is_wp_error($data) ) 740 foreach ( $data->get_error_codes() as $code ) 741 $response .= "<wp_error code='$code'><![CDATA[" . $data->get_error_message($code) . "]]></wp_error>"; 742 else 743 $response = "<response_data><![CDATA[$data]]></response_data>"; 744 745 $s = ''; 746 if ( (array) $supplemental ) 747 foreach ( $supplemental as $k => $v ) 748 $s .= "<$k><![CDATA[$v]]></$k>"; 749 750 if ( false === $action ) 751 $action = $_POST['action']; 752 753 $x = ''; 754 $x .= "<response action='$action_$id'>"; // The action attribute in the xml output is formatted like a nonce action 755 $x .= "<$what id='$id'" . ( false !== $old_id ? "old_id='$old_id'>" : '>' ); 756 $x .= $response; 757 $x .= $s; 758 $x .= "</$what>"; 759 $x .= "</response>"; 760 761 $this->responses[] = $x; 762 return $x; 763 } 764 765 function send() { 766 header('Content-type: text/xml'); 767 echo "<?xml version='1.0' standalone='yes'?><wp_ajax>"; 768 foreach ( $this->responses as $response ) 769 echo $response; 770 echo '</wp_ajax>'; 771 die(); 772 } 773 } 774 712 775 ?> -
trunk/wp-includes/js/list-manipulation-js.php
r4186 r4187 1 1 <?php 2 require_once('admin.php');2 @require_once('../../wp-config.php'); 3 3 cache_javascript_headers(); 4 4 $handler = get_option( 'siteurl' ) . '/wp-admin/admin-ajax.php'; … … 8 8 function dimSomething(what,id,dimClass,obj){if(!obj)obj=theList;return obj.ajaxDimmer(what,id,dimClass);} 9 9 10 function WPAjax(file, responseEl){//class WPAjax extends sack 11 this.getResponseElement=function(r){var p=document.getElementById(r+'-p');if(!p){p=document.createElement('span');p.id=r+'-p';document.getElementById(r).appendChild(p);}this.myResponseElement=p; } 12 this.parseAjaxResponse=function(){ 13 if(isNaN(this.response)){this.myResponseElement.innerHTML='<div class="error"><p>'+this.response+'</p></div>';return false;} 14 this.response=parseInt(this.response,10); 15 if(-1==this.response){this.myResponseElement.innerHTML="<div class='error'><p><?php _e("You don't have permission to do that."); ?></p></div>";return false;} 16 else if(0==this.response){this.myResponseElement.innerHTML="<div class='error'><p><?php _e("Something odd happened. Try refreshing the page? Either that or what you tried to change never existed in the first place."); ?></p></div>";return false;} 17 return true; 10 var listMan = Class.create(); 11 Object.extend(listMan.prototype, { 12 ajaxRespEl: 'ajax-response', 13 ajaxHandler: '<?php echo $handler; ?>', 14 inputData: '', 15 clearInputs: [], 16 showLink: true, 17 topAdder: false, 18 alt: 'alternate', 19 altOffset: 0, 20 addComplete: null, 21 delComplete: null, 22 dimComplete: null, 23 dataStore: null, 24 formStore: null, 25 26 initialize: function(theListId) { 27 this.theList = $(theListId ? theListId : 'the-list'); 28 if ( !this.theList ) 29 return false; 30 this.theList.cleanWhitespace(); 31 }, 32 33 // sends add-what and fields contained in where 34 // recieves html with top element having an id like what-# 35 ajaxAdder: function( what, where, update ) { // Do NOT wrap TR in TABLE TBODY 36 var ajaxAdd = new WPAjax( this.ajaxHandler, this.ajaxRespEl ); 37 if ( ajaxAdd.notInitialized() ) 38 return true; 39 ajaxAdd.options.parameters += '&action=' + ( update ? 'update-' : 'add-' ) + what + '&' + this.grabInputs( where, ajaxAdd ) + this.inputData; 40 var tempObj=this; 41 ajaxAdd.addOnComplete( function(transport) { 42 var newItems = $A(transport.responseXML.getElementsByTagName(what)); 43 if ( newItems ) { 44 newItems.each( function(i) { 45 var id = i.getAttribute('id'); 46 var exists = $(what+'-'+id); 47 if ( exists ) 48 tempObj.replaceListItem( exists, getNodeValue(i,'response_data'), update ); 49 else 50 tempObj.addListItem( getNodeValue(i, 'response_data') ); 51 if ( tempObj.showLink ) 52 tempObj.showLink = id; 53 }); 54 } 55 ajaxAdd.myResponseElement.update(tempObj.showLink ? ( "<div id='jumplink' class='updated fade'><p><a href='#" + what + '-' + tempObj.showLink + "'><?php _e('Jump to new item'); ?></a></p></div>" ) : ''); 56 if ( tempObj.addComplete && typeof tempObj.addComplete == 'function' ) 57 tempObj.addComplete( what, where, update, transport ); 58 tempObj.recolorList(); 59 ajaxAdd.restoreInputs = null; 60 }); 61 ajaxAdd.addOnWPError( function(transport) { tempObj.restoreForm(ajaxAdd.restoreInputs); }); 62 ajaxAdd.request(ajaxAdd.url); 63 this.clear(); 64 return false; 65 }, 66 67 // sends update-what and fields contained in where 68 // recieves html with top element having an id like what-# 69 ajaxUpdater: function( what, where ) { return this.ajaxAdder( what, where, true ); }, 70 71 // sends delete-what and id# 72 ajaxDelete: function( what, id ) { 73 var ajaxDel = new WPAjax( this.ajaxHandler, this.ajaxRespEl ); 74 if( ajaxDel.notInitialized() ) 75 return true; 76 var tempObj = this; 77 var action = 'delete-' + what + '&id=' + id; 78 var idName = what.replace('-as-spam','') + '-' + id; 79 ajaxDel.addOnComplete( function(transport) { 80 ajaxDel.myResponseElement.update(''); 81 tempObj.destore(action); 82 if( tempObj.delComplete && typeof tempObj.delComplete == 'function' ) 83 tempObj.delComplete( what, id, transport ); 84 }); 85 ajaxDel.addOnWPError( function(transport) { tempObj.restore(action, true); }); 86 ajaxDel.options.parameters += '&action=' + action + this.inputData; 87 ajaxDel.request(ajaxDel.url); 88 this.store(action, idName); 89 tempObj.removeListItem( idName ); 90 return false; 91 }, 92 93 // Toggles class nomes 94 // sends dim-what and id# 95 ajaxDimmer: function( what, id, dimClass ) { 96 ajaxDim = new WPAjax( this.ajaxHandler, this.ajaxRespEl ); 97 if ( ajaxDim.notInitialized() ) 98 return true; 99 var tempObj = this; 100 var action = 'dim-' + what + '&id=' + id; 101 var idName = what + '-' + id; 102 ajaxDim.addOnComplete( function(transport) { 103 ajaxDim.myResponseElement.update(''); 104 tempObj.destore(action); 105 if ( tempObj.dimComplete && typeof tempObj.dimComplete == 'function' ) 106 tempObj.dimComplete( what, id, dimClass, transport ); 107 }); 108 ajaxDim.addOnWPError( function(transport) { tempObj.restore(action, true); }); 109 ajaxDim.options.parameters += '&action=' + action + this.inputData; 110 ajaxDim.request(ajaxDim.url); 111 this.store(action, idName); 112 this.dimItem( idName, dimClass ); 113 return false; 114 }, 115 116 addListItem: function( h ) { 117 new Insertion[this.topAdder ? 'Top' : 'Bottom'](this.theList,h); 118 this.theList.cleanWhitespace(); 119 var id = this.topAdder ? this.theList.firstChild.id : this.theList.lastChild.id; 120 if ( this.alt ) 121 if ( this.theList.childNodes.length % 2 ) 122 $(id).addClassName(this.alt); 123 Fat.fade_element(id); 124 }, 125 126 // only hides the element sa it can be put back again if necessary 127 removeListItem: function( id, noFade ) { 128 id = $(id); 129 if ( !noFade ) { 130 Fat.fade_element(id.id,null,700,'#FF3333'); 131 var tempObj = this; 132 var func = function() { id.hide(); tempObj.recolorList(); } 133 setTimeout(func, 705); 134 } else { 135 id.hide(); 136 this.recolorList(); 137 } 138 }, 139 140 replaceListItem: function( id, h, update ) { 141 id = $(id); 142 if ( !update ) { 143 id.remove(); 144 this.addListItem( h ); 145 return; 146 } 147 id.replace(h); 148 Fat.fade_element(id.id); 149 }, 150 151 // toggles class 152 dimItem: function( id, dimClass, noFade ) { 153 id = $(id); 154 if ( id.hasClassName(dimClass) ) { 155 if ( !noFade ) 156 Fat.fade_element(id.id,null,700,null); 157 id.removeClassName(dimClass); 158 } else { 159 if ( !noFade ) 160 Fat.fade_element(id.id,null,700,'#FF3333'); 161 id.addClassName(dimClass); 162 } 163 }, 164 165 // store an element in case we need it later 166 store: function(action, id) { 167 if ( !this.dataStore ) 168 this.dataStore = $H(); 169 this.dataStore[action] = $(id).cloneNode(true); 170 }, 171 172 // delete from store 173 destore: function(action) { delete(this.dataStore[action]); }, 174 175 // restore element from store into existing (possibly hidden) element of same id 176 restore: function(action, error) { 177 var id = this.dataStore[action].id; 178 this.theList.replaceChild(this.dataStore[action], $(id)); 179 delete(this.dataStore[action]); 180 if ( error ) { 181 func = function() { $(id).setStyle( { 'background-color': '#FF3333' } ); } 182 func(); setTimeout(func, 705); // Hit it twice in case it's still fading. 183 } 184 }, 185 186 // Like Form.serialize, but excludes action and sets up clearInputs 187 grabInputs: function( where, ajaxObj ) { 188 if ( ajaxObj ) 189 ajaxObj.restoreInputs = []; 190 var elements = Form.getElements($(where)); 191 var queryComponents = new Array(); 192 for (var i = 0; i < elements.length; i++) { 193 if ( 'action' == elements[i].name ) 194 continue; 195 if ( 'hidden' != elements[i].type && 'submit' != elements[i].type && 'button' != elements[i].type ) { 196 this.clearInputs.push(elements[i]); 197 if ( ajaxObj ) 198 ajaxObj.restoreInputs.push([elements[i], elements[i].value]); 199 } 200 var queryComponent = Form.Element.serialize(elements[i]); 201 if (queryComponent) { 202 queryComponents.push(queryComponent); 203 } 204 } 205 return queryComponents.join('&'); 206 }, 207 208 // form.reset() can only do whole forms. This can do subsections. 209 clear: function() { 210 this.clearInputs.each( function(i) { 211 i = $(i); 212 if ( 'textarea' == i.tagName.toLowerCase() ) 213 i.value = ''; 214 else 215 switch ( i.type.toLowerCase() ) { 216 case 'password': case 'text': 217 i.value = ''; 218 break; 219 case 'checkbox': case 'radio': 220 i.checked = false; 221 break; 222 case 'select': case 'select-one': 223 i.selectedIndex = null; 224 break; 225 case 'select-multiple': 226 for (var o = 0; o < i.length; o++) i.options[o].selected = false; 227 break; 228 } 229 }); 230 this.clearInputs = []; 231 }, 232 233 restoreForm: function(elements) { 234 elements.each( function(i) { 235 i[0].value = i[1]; 236 }); 237 }, 238 239 recolorList: function() { 240 if ( !this.alt ) 241 return; 242 var alt = this.alt; 243 var offset = this.altOffset; 244 var listItems = $A(this.theList.childNodes).findAll( function(i) { return i.visible() } ); 245 listItems.each( function(i,n) { 246 if ( ( n + offset ) % 2 ) 247 i.removeClassName(alt); 248 else 249 i.addClassName(alt); 250 }); 18 251 } 19 this.parseAjaxResponseXML=function(){ 20 if(this.responseXML&&typeof this.responseXML=='object')return true; 21 if(isNaN(this.response)){this.myResponseElement.innerHTML='<div class="error"><p>'+this.response+'</p></div>';return false;} 22 var r=parseInt(this.response,10); 23 if(-1==r){this.myResponseElement.innerHTML="<div class='error'><p><?php _e("You don't have permission to do that."); ?></p></div>";} 24 else if(0==r){this.myResponseElement.innerHTML="<div class='error'><p><?php _e("Invalid Entry."); ?></p></div>";} 25 return false; 26 } 27 this.init(file,responseEl); 28 } WPAjax.prototype=new sack; 29 WPAjax.prototype.init=function(f,r){ 30 this.encVar('cookie', document.cookie); 31 this.requestFile=f?f:'<?php echo $handler; ?>';this.getResponseElement(r);this.method='POST'; 32 } 33 34 function listMan(theListId){ 35 this.theList=null;this.theListId=theListId; 36 this.ajaxRespEl=null;this.ajaxHandler='<?php echo $handler; ?>'; 37 this.inputData='';this.clearInputs=new Array();this.showLink=1; 38 this.topAdder=0;this.alt='alternate';this.recolorPos;this.reg_color='#FFFFFF';this.alt_color='#F1F1F1'; 39 this.addComplete=null;this.delComplete=null;this.dimComplete=null; 40 var listType;var listItems; 41 self.aTrap=0; 42 43 this.ajaxAdder=function(what,where,update){//for TR, server must wrap TR in TABLE TBODY. this.makeEl cleans it 44 if(self.aTrap)return;self.aTrap=1;setTimeout('aTrap=0',300); 45 this.ajaxAdd=new WPAjax(this.ajaxHandler,this.ajaxRespEl?this.ajaxRespEl:'ajax-response'); 46 if(this.ajaxAdd.failed)return true; 47 this.grabInputs(where); 48 var tempObj=this; 49 this.ajaxAdd.onCompletion=function(){ 50 if(!this.parseAjaxResponseXML())return; 51 var newItems=this.responseXML.getElementsByTagName(what); 52 if(tempObj.topAdder)tempObj.recolorPos=0; 53 if(newItems){for (c=0;c<newItems.length;c++){ 54 var id=getNodeValue(newItems[c],'id'); 55 var exists=document.getElementById(what+'-'+id); 56 if(exists)tempObj.replaceListItem(exists.id,getNodeValue(newItems[c],'newitem'),newItems.length,update); 57 else tempObj.addListItem(getNodeValue(newItems[c],'newitem'),newItems.length); 58 }} 59 tempObj.inputData=''; 60 if(tempObj.showLink){this.myResponseElement.innerHTML='<div id="jumplink" class="updated fade"><p><a href="#'+what+'-'+id+'"><?php _e('Jump to new item'); ?></a></p></div>';} 61 else this.myResponseElement.innerHTML=''; 62 for(var i=0;i<tempObj.clearInputs.length;i++){try{var theI=document.getElementById(tempObj.clearInputs[i]);if(theI.tagName.match(/select/i))theI.selectedIndex=0;else theI.value='';}catch(e){}} 63 if(tempObj.addComplete&&typeof tempObj.addComplete=='function')tempObj.addComplete(what,where,update); 64 tempObj.recolorList(tempObj.recolorPos,1000); 65 } 66 this.ajaxAdd.runAJAX('action='+(update?'update-':'add-')+what+this.inputData); 67 return false; 68 } 69 this.ajaxUpdater=function(what,where){return this.ajaxAdder(what,where,true);} 70 this.ajaxDelete=function(what,id){ 71 if(self.aTrap)return;self.aTrap=1;setTimeout('aTrap=0',300); 72 this.ajaxDel=new WPAjax(this.ajaxHandler,this.ajaxRespEl?this.ajaxRespEl:'ajax-response'); 73 if(this.ajaxDel.failed)return true; 74 var tempObj=this; 75 this.ajaxDel.onCompletion=function(){if(this.parseAjaxResponse()){tempObj.removeListItem(what.replace('-as-spam','')+'-'+id);this.myResponseElement.innerHTML='';if(tempObj.delComplete&&typeof tempObj.delComplete=='function')tempObj.delComplete(what,id);tempObj.recolorList(tempObj.recolorPos,1000)}}; 76 this.ajaxDel.runAJAX('action=delete-'+what+'&id='+id); 77 return false; 78 } 79 this.ajaxDimmer=function(what,id,dimClass){ 80 if(self.aTrap)return;self.aTrap=1;setTimeout('aTrap=0',300); 81 this.ajaxDim=new WPAjax(this.ajaxHandler,this.ajaxRespEl?this.ajaxRespEl:'ajax-response'); 82 if(this.ajaxDim.failed)return true; 83 var tempObj=this; 84 this.ajaxDim.onCompletion=function(){if(this.parseAjaxResponse()){tempObj.dimItem(what+'-'+id,dimClass);this.myResponseElement.innerHTML='';if(tempObj.dimComplete&&typeof tempObj.dimComplete=='function')tempObj.dimComplete(what,id,dimClass);}}; 85 this.ajaxDim.runAJAX('action=dim-'+what+'&id='+id); 86 return false; 87 } 88 this.makeEl=function(h){var fakeItem=document.createElement('div');fakeItem.innerHTML=h;var r=fakeItem.firstChild;while(r.tagName.match(/(table|tbody)/i)){r=r.firstChild;}return r;} 89 this.addListItem=function(h,tot){ 90 newItem=this.makeEl(h); 91 if(this.topAdder){var firstItem=this.theList.getElementsByTagName('table'==listType?'tr':'li')[0];listItems.unshift(newItem.id);this.recolorPos++} 92 else{listItems.push(newItem.id);this.recolorPos=listItems.length;} 93 if(this.alt&&!((tot-this.recolorPos)%2))newItem.className+=' '+this.alt; 94 if(firstItem)firstItem.parentNode.insertBefore(newItem,firstItem); 95 else this.theList.appendChild(newItem); 96 Fat.fade_element(newItem.id); 97 } 98 this.removeListItem=function(id,noFade){ 99 if(!noFade)Fat.fade_element(id,null,700,'#FF3333'); 100 var theItem=document.getElementById(id); 101 if(!noFade){var func=encloseFunc(function(a){a.parentNode.removeChild(a);},theItem);setTimeout(func,705);} 102 else{theItem.parentNode.removeChild(theItem);} 103 var pos=this.getListPos(id); 104 listItems.splice(pos,1); 105 } 106 this.replaceListItem=function(id,h,tot,update){ 107 if(!update){this.removeListItem(id,true);this.addListItem(h,tot);return;} 108 var newItem=this.makeEl(h); 109 var oldItem=document.getElementById(id); 110 var pos=this.getListPos(oldItem.id,1);if(this.alt&&!(pos%2))newItem.className+=' '+this.alt; 111 oldItem.parentNode.replaceChild(newItem,oldItem); 112 Fat.fade_element(newItem.id); 113 } 114 this.dimItem=function(id,dimClass,noFade){ 115 var theItem=document.getElementById(id); 116 if(theItem.className.match(dimClass)){if(!noFade)Fat.fade_element(id,null,700,null);theItem.className=theItem.className.replace(dimClass,'');} 117 else{if(!noFade)Fat.fade_element(id,null,700,'#FF3333');theItem.className=theItem.className+' '+dimClass;} 118 } 119 this.grabInputs=function(elId){//text,password,hidden,textarea,select 120 var theItem=document.getElementById(elId); 121 var inputs=new Array(); 122 inputs.push(theItem.getElementsByTagName('input'),theItem.getElementsByTagName('textarea'),theItem.getElementsByTagName('select')); 123 for(var a=0;a<inputs.length;a++){ 124 for(var i=0;i<inputs[a].length;i++){ 125 if('action'==inputs[a][i].name)continue; 126 if('text'==inputs[a][i].type||'password'==inputs[a][i].type||'hidden'==inputs[a][i].type||inputs[a][i].tagName.match(/textarea/i)){ 127 this.inputData+='&'+inputs[a][i].name+'='+encodeURIComponent(inputs[a][i].value);if('hidden'!=inputs[a][i].type)this.clearInputs.push(inputs[a][i].id); 128 }else if(inputs[a][i].tagName.match(/select/i)){ 129 this.inputData+='&'+inputs[a][i].name+'='+encodeURIComponent(inputs[a][i].options[inputs[a][i].selectedIndex].value);this.clearInputs.push(inputs[a][i].id); 130 } 131 } 132 } 133 } 134 this.getListPos=function(id,n){for(var i=0;i<listItems.length;i++){if(id==listItems[i]){var pos=i;break;}}if(!n){if(pos<this.recolorPos)this.recolorPos=pos;}return pos;} 135 this.getListItems=function(){ 136 if(this.theList)return; 137 listItems=new Array(); 138 if(this.theListId){this.theList=document.getElementById(this.theListId);if(!this.theList)return false;} 139 else{this.theList=document.getElementById('the-list');if(this.theList)this.theListId='the-list';} 140 if(this.theList){ 141 var items=this.theList.getElementsByTagName('tr');listType='table'; 142 if(!items[0]){items=this.theList.getElementsByTagName('li');listType='list';} 143 for(var i=0;i<items.length;i++){listItems.push(items[i].id);} 144 this.recolorPos=listItems.length; 145 } 146 } 147 this.recolorList=function(pos,dur){ 148 if(!this.alt)return;if(!pos)pos=0;this.recolorPos=listItems.length; 149 for(var i=pos;i<listItems.length;i++){var e=document.getElementById(listItems[i]);if(i%2)e.className=e.className.replace(this.alt,'fade-'+this.alt_color.slice(1));else e.className+=' '+this.alt+' fade-'+this.reg_color.slice(1);e.style.backgroundColor='';} 150 Fat.fade_all(dur); 151 var func=encloseFunc(function(l){for(var i=0;i<l.length;i++){var e=document.getElementById(l[i]);e.className=e.className.replace(/fade-[a-f0-9]{6}/i,'');}},listItems); 152 setTimeout(func,dur+5); 153 } 154 this.getListItems(); 155 } 252 }); 253 156 254 //No submit unless code returns true. 157 255 function killSubmit ( code, e ) { … … 160 258 var t = e.target ? e.target : e.srcElement; 161 259 if ( ( 'text' == t.type && e.keyCode == 13 ) || ( 'submit' == t.type && 'click' == e.type ) ) { 162 if ( ( 'string' == typeof code && !eval(code) ) || 'function' == typeof code && !code() ) {163 if ( !eval(code) ) { e.returnValue = false; e.cancelBubble = true; return false; }260 if ( ( 'string' == typeof code && !eval(code) ) || ( 'function' == typeof code && !code() ) ) { 261 e.returnValue = false; e.cancelBubble = true; return false; 164 262 } 165 263 } -
trunk/wp-includes/script-loader.php
r4185 r4187 20 20 $this->add( 'prototype', '/wp-includes/js/prototype.js', false, '1.5.0'); 21 21 $this->add( 'autosave', '/wp-includes/js/autosave.js.php', array('prototype', 'sack'), '4183'); 22 $this->add( 'wp-ajax', '/wp-includes/js/wp-ajax-js.php', array('prototype'), '4187'); 23 $this->add( 'listman', '/wp-includes/js/list-manipulation-js.php', array('wp-ajax', 'fat'), rand()); 22 24 if ( is_admin() ) { 23 25 $this->add( 'dbx-admin-key', '/wp-admin/dbx-admin-key-js.php', array('dbx'), '3651' ); 24 $this->add( 'listman ', '/wp-admin/list-manipulation-js.php', array('sack', 'fat'), '4042' ); // Make changeset # the correct one26 $this->add( 'listman-old', '/wp-admin/list-manipulation-js.php', array('sack', 'fat'), '4042' ); // Make changeset # the correct one 25 27 $this->add( 'ajaxcat', '/wp-admin/cat-js.php', array('listman'), '3684' ); 26 28 $this->add( 'admin-categories', '/wp-admin/categories.js', array('listman'), '3684' );
Note: See TracChangeset
for help on using the changeset viewer.