Content deleted Content added
problem comes when order of indentation is reversed |
m Maintenance: Replacing addPortletLink() with mw.util.addPortletLink() (mw:ResourceLoader/Migration_guide_(users)#addPortletLink) |
||
(16 intermediate revisions by 2 users not shown) | |||
Line 1:
//<pre>
// Unindent
// WARNING WARNING WARNING ----- DO NOT USE THIS SCRIPT
// OBSOLETE AND BUGGY ----- DO NOT USE THIS SCRIPT
// NOT DELETED ONLY BECAUSE I WANT TO REMEMBER SOME CODING IDEAS AND PITFALLS IN JAVASCRIPT
function unindent() {
Line 8 ⟶ 11:
var indent_level = 0;
var indent_level_string = "";
var prev_indent_level_string = "";
var prepended_string = "";
var empty_prepended_string = " ";
var DL_elements;
Line 19 ⟶ 26:
var num_DD_elements = 0;
var DD_element_index = 0;
var num_unindented_DD_elements = 0;
var num_higher_level_DD_elements = 0;
var top_node;
var child_node;
var parent_node;
var top_DL_node;▼
var top_DD_node;
▲ var top_DL_node;
var prev_top_DL_node;
var temp_DD_text;
Line 40 ⟶ 51:
// Colors to help sighted people after the unindenting
var num_colors = 0;
var DD_background_colors = ["white", "yellow", "greenyellow", "gold", "
Line 52 ⟶ 63:
// First-pass loop colors the links and adds the level to the beginning
diagnostic_string = "";
num_unindented_DD_elements = 0;
num_higher_level_DD_elements = 0;
top_DL_node = null;
prev_top_DL_node = null;
prepended_string = "";
indent_level_string = "";
prev_indent_level_string = "";
for (DD_element_index=0; DD_element_index<num_DD_elements; DD_element_index++) {
temp_DD_element = DD_elements[DD_element_index];
child_node = temp_DD_element.firstChild;
if (child_node) {
if ((child_node.nodeType == 3) && (child_node.data.match(/^\(Indent\s\d+\)/))) {
continue;
} // add "(Indent #)" to beginning if it isn't there already
}
num_sub_DL_elements = temp_DD_element.getElementsByTagName("DL").length;
Line 74 ⟶ 102:
indent_level = 0;
top_DL_node = null;
top_DD_node =
parent_node = temp_DD_element.parentNode;
Line 97 ⟶ 125:
parent_node = parent_node.parentNode;
} // closes loop climbing up the document tree
if (top_DL_node != prev_top_DL_node) {
prev_indent_level_string = "";
}
prev_top_DL_node = top_DL_node;
if (indent_level > 2) { num_higher_level_DD_elements++; }
if (indent_level > 0) {
Line 102 ⟶ 137:
temp_DD_element.style.cssText = "background-color:" + DD_background_colors[indent_level%num_colors];
indent_level_string = "(Indent
// indent_level_string = "(Indent
// if (num_sub_DL_elements > 0) {
// indent_level_string += "[ " + num_sub_DL_elements + " " + byte_count + " " + untagged_text + " ] ";
// }
if (indent_level_string == prev_indent_level_string) {
prepended_string = empty_prepended_string;
} else {
prepended_string = indent_level_string;
}
prev_indent_level_string = indent_level_string;
child_node = temp_DD_element.firstChild;
if (child_node) {
if ((child_node.nodeType != 3) || (!child_node.data.match(/^\(Indent\s\d+\)/))) {
temp_DD_element.insertBefore(document.createTextNode(
} // add "(Indent #)" to beginning if it isn't there already
} else {
indent_level_string += "No text in this DD element.\n";
temp_DD_element.appendChild(document.createTextNode(
}
temp_DD_element.normalize();
diagnostic_string += "DD element " + DD_element_index + " is indented to level " + indent_level + ".\n";▼
sibling_node_list[DD_element_index] = null;
Line 126 ⟶ 169:
}
} // closes check that both top_DD_node and top_DL_node are defined
if (sibling_node_list[DD_element_index]) {
▲ diagnostic_string += "DD element " + DD_element_index + " is indented to level " + indent_level + ".\n";
} else {
diagnostic_string += "DD element " + DD_element_index + " is indented to level " + indent_level + ". NULL SIBLING\n";
}
} // check for unindenting
} // closes loop over the DD elements of the document
// window.alert(diagnostic_string);
// Prevents repeated applications of the script from changing the colors
if (num_higher_level_DD_elements == 0) { return; }
// Second-pass loop changes the document tree structure
Line 164 ⟶ 215:
} // closes loop climbing up the document tree
if (indent_level >
if ((top_DD_node) && (top_DL_node)) {
// top_DL_node.insertBefore(temp_DD_element, top_DD_element);
sibling_node = sibling_node_list[DD_element_index
if (sibling_node) {
top_DL_node.insertBefore(temp_DD_element, sibling_code);
Line 188 ⟶ 239:
addOnloadHook(function () {
mw.util.addPortletLink('p-cactions', 'javascript:unindent()', 'unindent', 'ca-unindent', 'Unindent discussions', 'i', '');
});
|