User:Whiteknight/categorize.js
Jump to navigation
Jump to search
Note: After saving, changes may not occur immediately. Click here to learn how to bypass your browser's cache.
- Mozilla / Firefox / Safari: hold down Shift while clicking Reload, or press Ctrl-Shift-R (Cmd-Shift-R on Apple Mac);
- Internet Explorer: hold Ctrl while clicking Refresh, or press Ctrl-F5;
- Konqueror: simply click the Reload button, or press F5;
- Opera users may need to completely clear their cache in Tools→Preferences.
Warning: Malicious code can compromise your account. Page preview will cause your web browser to execute this page's content as code under some skins, including Monobook. If you have any questions about any code you plan to add, you can ask at the appropriate reading room. |
Documentation for this script can be added at User:Whiteknight/categorize. |
var cg = {
version: 2.05,
textspan: "WKCGSpan",
editspan: "WKCGFormSpanEdit",
statspan: "WKCGStatSpan",
formspan: "WKCGFormSpan"
}
cg.tags = "";
cg.notes = "";
cg.subjects = new Array(
["opt", "Computing"],
["Software (general)", "Computer software"],
["Programming Language", "Programming language"],
["Business Software", "Computer software"],
["Computer Science", "Computer science"],
["Operating Systems", "Computer software"],
["Computer Graphics", "Computer science"],
["Information Technology", "Information technology"],
["Meta Languages", "Domain-specific languages"],
["opt", "Engineering"],
["Engineering (general)", "Engineering"],
["Electrical Engineering", "Electrical Engineering"],
["Computer Engineering", "Computer Engineering"],
["Elec / Comp Engineering", "Electrical Engineering|Computer Engineering"],
["Mechanical Engineering", "Mechanical Engineering"],
["Civil Engineering", "Civil Engineering"],
["Chemical Engineering", "Chemical Engineering"],
["opt", "Science and Technology"],
["Science (general)", "Science"],
["Physics", "Physics"],
["Medicine", "Health science"],
["Technology", "Technology"],
["Biology", "Biology"],
["Life Science", "Life Science"],
["Mathematics", "Mathematics"],
["Chemistry", "Chemistry"],
["Earth Sciences", "Earth Sciences"],
["Environmental Science", "Environmental Science"],
["opt", "Arts and Humanities"],
["Art", "Arts"],
["Music", "Music"],
["Architecture", "Architecture"],
["Education", "Education"],
["Languages", "Languages"],
["English and Literature", "Language and literature"],
["Philosophy", "Philosophy"],
["Psychology", "Social Sciences"],
["Religion", "Religion"],
["Geography", "Humanities"],
["opt", "Social sciences"],
["History (general)", "History"],
["History (usa)", "History"],
["Business and Economics", "Business and economics"],
["Law", "Law"],
["Social Science", "Social sciences"],
["Agriculture", "Social sciences"],
["Political Science", "Political Science"],
["Military Science", "Military science"],
["Naval Science", "Naval science"],
["opt", "Miscellaneous"],
["Games and Athletics", "Games and athletics"],
["How To", "How-tos"],
["Study Guides", "Study guides"],
["Help", "Help"],
["Misc", "Miscellaneous"]
);
cg._form = null;
cg.getForm = function() {
if(cg._form == null) cg.createForm();
return cg._form;
}
cg.bookName = "";
cg.getBookName = function() {
cg.bookName = cg._booknameB.value;
return cg.bookName;
}
cg.makeOptgroup = function (parent, i) {
for( ; i < cg.subjects.length; i++) {
if(cg.subjects[i][0] == "opt") return i - 1;
else {
parent.appendChild(wk.makeElement("option", {value:i}, cg.subjects[i][0]));
}
}
return i;
}
cg.makeSubjectSelect = function(num, multi) {
var s = (num == null)?(1):(num);
cg._subjectB = wk.makeElement("select", {id:"WKCGSubjectB", size:s, name:"WKCGSubjectB"});
if(multi) {
cg._subjectB.multiple = true;
}
for(i = 0; i < cg.subjects.length; i++) {
if(cg.subjects[i][0] == "opt") {
var node = wk.makeElement("optgroup", {label:cg.subjects[i][1]});
i = cg.makeOptgroup(node, i + 1);
cg._subjectB.appendChild(node);
} else {
var node = wk.makeElement("option", {value:i}, subjects[i][0]);
cg._subjectB.appendChild(node);
}
}
return cg._subjectB;
}
cg.writeCats = function (subject, bookname) {
var temp = "{" + "{Subject|" + subject[1] + "}}\n";
if(bookname == "") temp += "{" + "{Alphabetical}}\n";
else temp += "{" + "{Alphabetical|" + bookname.substr(0, 1) + "}}";
return temp;
}
cg.createForm = function() {
var div = wk.spanText(cg.formspan, "");
if(div == null) return;
cg._displayB = wk.makeButton("WKCGDisplayB", "Display", cg.display);
cg._editB = wk.makeButton("WKCGEditB", "Edit", cg.edit);
cg._booknameB = wk.makeInput("WKCGBookNameB", "")
cg._form = wk.makeElement("form", {name:"WKCGFormB", method:"GET"}, [
cg._booknameB,
" ",
cg.makeSubjectSelect(),
wk.makeButton("WKCGCategorizeB", "Categorize", cg.categorize),
" ",
cg._displayB,
cg._editB,
wk.makeButton("WKCGClearB", "Clear", cg.clear)
]);
wk.toggleDisable(cg._displayB, true);
wk.toggleDisable(cg._editB, true);
div.appendChild(cg._form);
}
if(typeof wk == 'object' && wk.testVersion(2.40)) {
addOnloadHook(cg.createForm);
}
cg.clear = function() {
wk.toggleDisable(cg._displayB, true);
wk.toggleDisable(cg._editB, true);
wk.spanText(cg.textspan, "");
wk.spanText(cg.statspan, "");
}
cg.categorize = function () {
cg.clear();
alert("a");
cg.getBookName();
alert("b");
var form = cg.getForm();
var select = cg._subjectB;
var index = select.options[select.selectedIndex].value;
var subject = cg.subjects[index];
alert("c");
cg.tags = cg.writeCats(subject, cg.bookName);
cg.notes = "<b>Notes:</b><br><ul>" +
"<li>These are the templates necessary to categorize your book as being \"" +
"<b>" + subject[0] + "</b>\"";
cg.notes = cg.notes + "</ul>";
alert("d");
wk.toggleDisable(cg._displayB, false);
wk.toggleDisable(cg._editB, false);
wk.spanText(cg.statspan, "Created categories for [[" +
((cg.bookName == "")?("Unknown Book"):(wk.wikiLinkText(cg.bookName))) +
"]]. Click <b>Display</b> to see the created category templates. " +
"Click <b>Edit</b> to display an edit window and save changes.");
alert("e");
}
cg.display = function() {
wk.spanText(cg.textspan,
"<table width=\"100%\"><tr><td width=\"50%\" valign=\"top\">" +
"<b>Categorization Templates:</b><br>" +
"<pre>" + cg.tags + "</pre>" +
"</td><td valign=\"top\">" +
cg.notes + "</td></tr></table>");
if(cg.getBookName() == "") {
wk.spanText(cg.statspan,
"These are the categorization templates for your book. " +
"Copy and Paste these templates into your book.");
} else {
wk.spanText(cg.statspan,
"These are the categorization templates for [[" +
wk.wikiLinkText(cg.bookName) +
"]]. Copy and Paste these templates into your book, or click " +
"<b>Edit</b> to display an edit window and save these changes.");
}
}
cg.edit = function() {
if(cg.getBookName() == "") {
setSpanText(cg.statspan, "You must enter a valid book name to <b>Edit</b>");
return;
}
wk.spanText(cg.statspan, "Loading edit window...");
wk.loadEditPage(cg.bookName, function(xml) {
var editform = wk.showEditWindow(xml, cg.textspan);
var temp = editform.text.value;
if(temp.length < 20) {
wk.spanText(cg.statspan, "The page [[" +
wk.wikiLinkText(cg.bookName) +
"]] does not exist or is not a proper book table of contents (TOC). " +
"You should only categorize proper book pages or " +
"TOCs. Double-check the spelling of the title, if the page is supposed " +
"to exist. If the book does not yet exist, create it first with Whiteknight's " +
wk.wikiLinkText("User:Whiteknight/Book Designer Gadget", "Book Designer Gadget") +
".");
wk.spanText(cg.textspan, "");
return;
}
editform.summary.value = cg.bookName +
": Autocategorizing using Whiteknight's Categorization Gadget";
temp = temp.replace(/\{\{cleanup-link\}\}\n*/gi, "");
temp = temp.replace(/\{\{(alphabetical|DDC|LOC|Shelf)([^\}])*\}\}/gi, "");
temp = temp.replace(/\{\{(software|programming language|business software|computer science|operating systems|computer graphics)\}\}/gi, "");
temp = temp.replace(/\n\n\n+/g, "\n\n");
editform.text.value = temp + "\n" + cg.tags;
wk.spanText(cg.statspan,
"You are editing the text for [[" +
wk.wikiLinkText(cg.bookName) +
"]]. The categorization templates have been appended to the end of the page. " +
"Make sure that the text is correct, and then click <b>Save Page</b>."
);
});
}
cg.createForm2 = function() {
var div = document.getElementById(cg.editspan);
if(div == null) return;
wk.toggleDisplay(div, "block");
cg.bookName = div.innerHTML;
cg._booknameB = wk.makeElement("input", {type:"hidden", id:"WKCGBookNameB", value:cg.bookName})
cg._form = wk.makeElement("form", {name:"WKCGFormB", method:"GET"}, [
cg._booknameB,
cg.makeSubjectSelect(),
wk.makeButton("WKCGCategorizeB", "Categorize", cg.categorize2)
]);
div.appendChild(cg._form);
}
if(typeof wk == "object" && wk.testVersion(2.40)) {
addOnloadHook(cg.createForm2);
}
cg.categorize2 = function() {
cg.getBookName();
var select = cg._subjectB;
var index = select.options[select.selectedIndex].value;
tags = cg.writeCats(cg.subjects[index], cg.bookName);
var editwin = document.getElementById("wpTextbox1");
if(editwin) {
var temp = editwin.value;
temp = temp.replace(/\{\{(Alphabetical|DDC|LOC|UDC|Shelf|Subject)([^\}])*\}\}/gi, "");
temp = temp.replace(/\{\{(software|programming language|business software|computer science|operating systems|computer graphics|engineering)\}\}/gi, "");
temp = temp.replace(/\n\n\n+/g, "\n\n");
editwin.value = temp + "\n" + tags;
}
}
cg.returnAllSelected = function () {
var subjects = cg._subjectB;
var opts = new Array();
for(var i = 0; i < subjects.options.length; i++) {
if(subjects.options[i].selected) {
var index = subjects.options[i].value;
opts.push(cg.subjects[index][1]);
}
}
return opts;
}
cg.getItemIndex = function (item) {
for(var i = 0; i < cg.subjects.length; i++) {
if(cg.subjects[i][0] == 'opt') continue;
if(cg.subjects[i][0] == item) return i;
if(cg.subjects[i][1] == item) return i;
}
return 0;
}
cg.setItemSelected = function(value) {
for(var i = 0; i < cg._subjectB.options.length; i++) {
if(cg._subjectB.options[i].value == value) {
cg._subjectB.options[i].selected = true;
return i;
}
}
return 0;
}
cg.setSelected = function(opts) {
var subjects = cg._subjectB;
var index = 0;
for(var i = 0; i < opts.length; i++) {
if(typeof opts[i] == 'string') {
index = cg.getItemIndex(opts[i]);
} else {
index = opts[i];
}
cg.setItemSelected(index);
}
}