Adding categories on the fly is happiness. Fixes #1563 thanks to mdawaffe

git-svn-id: http://svn.automattic.com/wordpress/trunk@2767 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
matt 2005-08-09 08:16:29 +00:00
parent 4843099308
commit b34ca93366
4 changed files with 263 additions and 4 deletions

View File

@ -76,6 +76,7 @@ addLoadEvent(blurry);
//]]>
</script>
<script type="text/javascript" src="fat.js"></script>
<?php if ( isset( $editing ) ) : ?>
<?php if ( get_option('rich_editing') ) :?>
<script type="text/javascript" src="tinymce/tiny_mce_src.js"></script>
<script type="text/javascript">
@ -97,9 +98,105 @@ tinyMCE.init({
});
</script>
<?php endif; ?>
<?php if ( isset( $editing ) ) : ?>
<script type="text/javascript" src="dbx.js"></script>
<script type="text/javascript" src="dbx-key.js"></script>
<script type="text/javascript" src="tw-sack.js"></script>
<script type="text/javascript">
var ajaxCat = new sack();
function getResponseElement() {
var p = document.getElementById('ajaxcatresponse');
if (!p) {
p = document.createElement('p');
document.getElementById('categorydiv').appendChild(p);
p.id = 'ajaxcatresponse';
}
return p;
}
function newCatLoading() {
var p = getResponseElement();
p.innerHTML = 'Sending Data...';
}
function newCatLoaded() {
var p = getResponseElement();
p.innerHTML = 'Data Sent...';
}
function newCatInteractive() {
var p = getResponseElement();
p.innerHTML = 'Processing Data...';
}
function newCatCompletion() {
var p = getResponseElement();
var id = ajaxCat.response;
if ( id == '-1' ) {
p.innerHTML = "You don't have permission to do that.";
return;
}
if ( id == '0' ) {
p.innerHTML = "That category name is invalid. Try something else.";
return;
}
p.parentNode.removeChild(p);
var exists = document.getElementById('category-' + id);
if (exists) {
exists.checked = 'checked';
exists.parentNode.setAttribute('id', 'new-category-' + id);
var nowClass = exists.parentNode.getAttribute('class');
exists.parentNode.setAttribute('class', nowClass + ' fade');
Fat.fade_all();
exists.parentNode.setAttribute('class', nowClass);
} else {
var catDiv = document.getElementById('categorychecklist');
var newLabel = document.createElement('label');
catDiv.insertBefore(newLabel, catDiv.firstChild);
newLabel.setAttribute('for', 'category-' + id);
newLabel.setAttribute('id', 'new-category-' + id);
newLabel.setAttribute('class', 'selectit fade');
var newCheck = document.createElement('input');
newLabel.appendChild(newCheck);
newCheck.value = id;
newCheck.type = 'checkbox';
newCheck.checked = 'checked';
newCheck.name = 'post_category[]';
newCheck.id = 'category-' + id;
var newLabelText = document.createTextNode(' ' + document.getElementById('newcat').value);
newLabel.appendChild(newLabelText);
Fat.fade_all();
newLabel.setAttribute('class', 'selectit');
}
}
function ajaxNewCatKeyUp(e) {
if (!e) {
if (window.event) {
e = window.event;
} else {
return;
}
}
if (e.keyCode == 13) {
ajaxNewCat();
}
}
function ajaxNewCat() {
var newcat = document.getElementById('newcat');
var catString = 'ajaxnewcat=' + newcat.value;
ajaxCat.requestFile = 'edit-form-ajax-cat.php';
ajaxCat.method = 'GET';
ajaxCat.onLoading = newCatLoading;
ajaxCat.onLoaded = newCatLoaded;
ajaxCat.onInteractive = newCatInteractive;
ajaxCat.onCompletion = newCatCompletion;
ajaxCat.runAJAX(catString);
}
</script>
<?php endif; ?>
<?php do_action('admin_head'); ?>

View File

@ -83,10 +83,10 @@ addLoadEvent(focusit);
<fieldset id="categorydiv" class="dbx-box">
<h3 class="dbx-handle"><?php _e('Categories') ?></h3>
<div class="dbx-content"><div><?php dropdown_categories(get_settings('default_category')); ?></div>
<div class="dbx-content"><div id="categorychecklist"><?php dropdown_categories(get_settings('default_category')); ?></div>
<p id="ajaxcat">
<input type="text" name="newcat" id="newcat" size="16" />
<input type="button" name="Button" value="+">
<input type="text" name="newcat" id="newcat" size="16" onkeyup="ajaxNewCatKeyUp(event);" />
<input type="button" name="Button" value="+" onclick="ajaxNewCat();" />
</p>
</div>
</fieldset>

View File

@ -0,0 +1,29 @@
<?php
require_once('../wp-config.php');
require_once('admin-functions.php');
get_currentuserinfo();
if ( !current_user_can('manage_categories') )
die('-1');
function grab_id() {
global $new_cat_id;
$new_cat_id = func_get_arg(0);
}
add_action('edit_category', 'grab_id');
add_action('create_category', 'grab_id');
$cat_name = stripslashes($_GET['ajaxnewcat']);
if ( !$category_nicename = sanitize_title($cat_name) )
die('0');
if ( $already = $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE category_nicename = '$category_nicename'") )
die($already);
$cat_name = $wpdb->escape($cat_name);
$cat_array = compact('cat_name', 'category_nicename');
wp_insert_category($cat_array);
echo $new_cat_id;
?>

133
wp-admin/tw-sack.js Normal file
View File

@ -0,0 +1,133 @@
/* Simple AJAX Code-Kit (SACK) */
/* ©2005 Gregory Wild-Smith */
/* www.twilightuniverse.com */
/* Software licenced under a modified X11 licence, see documentation or authors website for more details */
function sack(file){
this.AjaxFailedAlert = "Your browser does not support the enhanced functionality of this website, and therefore you will have an experience that differs from the intended one.\n";
this.requestFile = file;
this.method = "POST";
this.URLString = "";
this.encodeURIString = true;
this.execute = false;
this.onLoading = function() { };
this.onLoaded = function() { };
this.onInteractive = function() { };
this.onCompletion = function() { };
this.createAJAX = function() {
try {
this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (err) {
this.xmlhttp = null;
}
}
if(!this.xmlhttp && typeof XMLHttpRequest != "undefined")
this.xmlhttp = new XMLHttpRequest();
if (!this.xmlhttp){
this.failed = true;
}
};
this.setVar = function(name, value){
if (this.URLString.length < 3){
this.URLString = name + "=" + value;
} else {
this.URLString += "&" + name + "=" + value;
}
}
this.encVar = function(name, value){
var varString = encodeURIComponent(name) + "=" + encodeURIComponent(value);
return varString;
}
this.encodeURLString = function(string){
varArray = string.split('&');
for (i = 0; i < varArray.length; i++){
urlVars = varArray[i].split('=');
if (urlVars[0].indexOf('amp;') != -1){
urlVars[0] = urlVars[0].substring(4);
}
varArray[i] = this.encVar(urlVars[0],urlVars[1]);
}
return varArray.join('&');
}
this.runResponse = function(){
eval(this.response);
}
this.runAJAX = function(urlstring){
this.responseStatus = new Array(2);
if(this.failed && this.AjaxFailedAlert){
alert(this.AjaxFailedAlert);
} else {
if (urlstring){
if (this.URLString.length){
this.URLString = this.URLString + "&" + urlstring;
} else {
this.URLString = urlstring;
}
}
if (this.encodeURIString){
var timeval = new Date().getTime();
this.URLString = this.encodeURLString(this.URLString);
this.setVar("rndval", timeval);
}
if (this.element) { this.elementObj = document.getElementById(this.element); }
if (this.xmlhttp) {
var self = this;
if (this.method == "GET") {
var totalurlstring = this.requestFile + "?" + this.URLString;
this.xmlhttp.open(this.method, totalurlstring, true);
} else {
this.xmlhttp.open(this.method, this.requestFile, true);
}
if (this.method == "POST"){
try {
this.xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
} catch (e) {}
}
this.xmlhttp.send(this.URLString);
this.xmlhttp.onreadystatechange = function() {
switch (self.xmlhttp.readyState){
case 1:
self.onLoading();
break;
case 2:
self.onLoaded();
break;
case 3:
self.onInteractive();
break;
case 4:
self.response = self.xmlhttp.responseText;
self.responseXML = self.xmlhttp.responseXML;
self.responseStatus[0] = self.xmlhttp.status;
self.responseStatus[1] = self.xmlhttp.statusText;
self.onCompletion();
if(self.execute){ self.runResponse(); }
if (self.elementObj) {
var elemNodeName = self.elementObj.nodeName;
elemNodeName.toLowerCase();
if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea"){
self.elementObj.value = self.response;
} else {
self.elementObj.innerHTML = self.response;
}
}
self.URLString = "";
break;
}
};
}
}
};
this.createAJAX();
}