LJ Profile Incremental

By Xtina Last update Sep 3, 2009 — Installed 149 times.

There are 1 previous version of this script.

// ==UserScript==
// @name           LJ Profile Incremental
// @namespace      http://axisofevil.net/~xtina/
// @description    Resets the LJ profile back *one step*.
// @include        http://*.livejournal.com/profile*
// @include        http://*.livejournal.com/*/profile*
// @exclude        http://*.livejournal.com/*/*/profile*
// ==/UserScript==

// Resets the profile to look like this:
// http://pics.livejournal.com/chasethestars/pic/0026w81k

// If true, this will append the reformatted profile to the existing profile.
var debug = false;

// What kind of profile: community, syndicated, or user?
// Also get the username.
var ljType = window.location.href;

var ljFoo = ljType.split(".")[0];
if (ljFoo == "http://community") {
	var ljUsername = ljType.split("/")[3];
	ljType = "C";
} else if (ljFoo == "http://syndicated") {
	var ljUsername = ljType.split("/")[3];
	ljType = "S";
} else if (ljFoo == "http://users") {
	var ljUsername = ljType.split("/")[3];
	ljType = "U";
} else {
	var ljUsername = ljFoo.split("//")[1];
	if (ljUsername == "news") { ljType = "N"; } else { ljType = "U"; }
}

ljUsername = ljUsername.replace(/-/g, "_");


// Change the CSS.

//http://userscripts.org/scripts/review/3775
var css = new Array();

function writeStyle(css) {
    var style = document.createElement('style');
    style.type = 'text/css';
    if (document.getElementsByTagName) {
        document.getElementsByTagName('head')[0].appendChild(style);
        if (style.sheet && style.sheet.insertRule) {
            for (var i = 0; i < css.length; i++) {
                style.sheet.insertRule(css[i], 0);
            }
        }
    }
}

function addStyle(style) {
    css[css.length] = style;
}

// Define your CSS here.
addStyle(".section { font-size: 1.2em; border-bottom: 1px solid #BDBDBD; background-color: #FFF; color: #505050; }");

// Writes CSS to the document
writeStyle(css);



/* ***
*/


// The top stats tiem.
var ljDoc = document.getElementById("profile_top");
var ljUserpic = getElementsByClassName(document, "div", "userpicdiv")[0].innerHTML;
var ljUser = getElementsByClassName(document, "div", "username")[0].innerHTML;
var ljActions = getElementsByClassName(document, "div", "actions")[0].childNodes[0].childNodes;

/*
	| User | UN  |          actions |
	|  Pic | T/S | Stats1 |  Stats2 |
*/

var ljNewStats = document.createElement("table");
ljNewStats.setAttribute("border", "0");
ljNewStats.setAttribute("width", "100%");
ljNewStats.setAttribute("cellpadding", "5");
ljNewStats.setAttribute("cellspacing", "-1");

var tmp1 = document.createElement("tr");
tmp1.style.verticalAlign = "top";

// Userpic.
var tmp2 = document.createElement("td");
tmp2.setAttribute("rowspan", "2");
tmp2.innerHTML = ljUserpic;
tmp1.appendChild(tmp2);

// Username.
tmp2 = document.createElement("td");
tmp2.style.borderBottom = "1px solid #999";
tmp2.style.fontSize = "1.4em";
tmp2.innerHTML = ljUser;
tmp1.appendChild(tmp2);

// Actionstrip.
tmp2 = document.createElement("td");
tmp2.setAttribute("colspan", "2");
tmp2.style.fontWeight = "bold";
tmp2.style.textAlign = "right";
tmp2.style.borderBottom = "1px solid #999";
tmp2.style.whiteSpace = "nowrap";
for (var x = 0; x < ljActions.length; x++) {
	tmp2.innerHTML += ljActions[x].innerHTML;
	if (x < ljActions.length) {
		tmp2.innerHTML += "&nbsp;";
	}
}
for (var x = 0; x < tmp2.getElementsByTagName("img").length; x++) {
	tmp2.getElementsByTagName("img")[x].style.border = "0";
	tmp2.getElementsByTagName("img")[x].style.margin = "0 4px 0 4px";
	tmp2.getElementsByTagName("img")[x].style.verticalAlign = "middle";
}
tmp1.appendChild(tmp2);
ljNewStats.appendChild(tmp1);

tmp1 = document.createElement("tr");
tmp1.style.verticalAlign = "top";

// Process the stats, aiee.
tmp2 = document.createElement("td");

// Title/subtitle.
var ljTitleblock;
if (ljType != "S") {
	var ljTitle = getElementsByClassName(document, "p", "journal_title")[0];
	if (ljTitle) { ljTitle = '<b>' + ljTitle.innerHTML + '</b>'; }
	var ljSubtitle = getElementsByClassName(document, "p", "journal_subtitle")[0];
	if (ljSubtitle != null) { ljSubtitle = '<i>' + ljSubtitle.innerHTML + '</i>'; }

	if (ljTitle != null && ljSubtitle != null) {
		ljTitleblock = ljTitle + "<br />" + ljSubtitle + "</div><br />";
	} else if (ljTitle != null && ljSubtitle == null) {
		ljTitleblock = ljTitle + "</div><br />";
	} else if (ljTitle == null && ljSubtitle != null) {
		ljTitleblock = ljSubtitle + "</div><br />";
	}
}
if (ljTitleblock) {
	tmp2.innerHTML = ljTitleblock;
	tmp1.appendChild(tmp2);
	tmp2 = document.createElement("td");
} else {
	tmp2.setAttribute("colspan", "2");
}

// Get the stats, and break them out into left/right.
tmp2.style.fontSize = "smaller";
var ljDetails = getElementsByClassName(document, "div", "details_stats")[0].childNodes;
for (var x = 0; x < ljDetails.length; x++) {
	var tmpThing = ljDetails[x].innerHTML;
// User number, created/joined, last updated.  All on one line.
	if (tmpThing.indexOf(" (#") > -1) {
		var tmpArray = tmpThing.split(",")[0].split(" ");
		var ljUnum = tmpArray.pop();
		ljUnum = "LJ User No.: " + ljUnum.substr(2, ljUnum.length - 3);

		var ljTool = tmpArray.pop();
		var ljCreated = tmpArray.pop();
		ljTool = ljCreated + ' ' + ljTool;
		ljCreated = tmpArray.join(" ") + ': <span style="border-bottom: 1px dotted #999;" title="' + ljTool + '">' + ljCreated + '</span>';

		if (ljDetails[x].childNodes.length == 1) {
			var ljUpdated = "Never updated";
		} else {
			var ljUpdated = ljDetails[x].innerHTML.split(", ")[1];
			ljUpdated = Left(ljUpdated, 1).toUpperCase() + Right(ljUpdated, ljUpdated.length - 1);
		}
// Account type.
	} else if (tmpThing.toLowerCase().indexOf("<strong") > -1) {
		var ljAccountType = ljDetails[x].innerHTML;
// Adult concepts, oh noes!
	} else if (tmpThing.toLowerCase().indexOf("warning.gif") > -1) {
		var ljAdult = tmpThing;
// Oh lord.  Comments and support points.
	} else {
		var ljComments = tmpThing;
		if (ljComments.indexOf("/support/") > -1) {
			var ljSupport = ljComments.split(", ")[2];
			ljSupport = '<a' + ljSupport.split(" <a")[1] + ': ' + ljSupport.split(" <a")[0];
			ljComments = ljComments.split(", ")[0] + ', ' + ljComments.split(", ")[1];
		}
	}
}

// The links line.
tmpThing = getElementsByClassName(document, "div", "details_links")[0].childNodes[0].childNodes;
var tmpLinks = getElementsByClassName(document, "div", "details_links")[0].childNodes[0].innerHTML.split("</a>,");

var ljLinks = "";
for (var x = 0; x < tmpLinks.length; x++) {
	var tmpLink = tmpLinks[x];
	if (x == 0) {
		var ljEntries = (tmpLink + "</a>").toLowerCase();
	} else if (tmpLink.indexOf("vgift.bml") > -1) {
		var ljVgifts = '<a' + tmpLink.split(" <a")[1] + '</a>:' + tmpLink.split(" <a")[0];
	} else {
		if (tmpLink.indexOf("allpics.bml") == -1) {
			ljLinks += trim(tmpLink) + "</a>, ";
		}
	}
}
if (Right(ljLinks, 6) == "</a>, ") { ljLinks = trim(Left(ljLinks, ljLinks.length - 2)) }

// Add to middle stats block: entries, updated, comments, links, adult.
tmp2.innerHTML += ljEntries + '<br />';
tmp2.innerHTML += ljUpdated + '<br />';
tmp2.innerHTML += ljComments + '<br />';
if (ljLinks.length > 1) { tmp2.innerHTML += ljLinks + '<br />'; }
if (ljAdult) { tmp2.innerHTML += ljAdult + '<br />'; }
tmp1.appendChild(tmp2);

// Add to right stats block: #, joined, support, vgifts, actype.

tmp2 = document.createElement("td");
tmp2.style.fontSize = "smaller";
tmp2.style.whiteSpace = "nowrap";
tmp2.style.textAlign = "right";

tmp2.innerHTML = ljUnum + '<br />';
tmp2.innerHTML += ljCreated + '<br />';
if (ljSupport) { tmp2.innerHTML += ljSupport + '<br />'; }
if (ljVgifts) { tmp2.innerHTML += ljVgifts + '<br />'; }
if (ljAccountType) { tmp2.innerHTML += ljAccountType + '<br />'; }
tmp1.appendChild(tmp2);
ljNewStats.appendChild(tmp1);

// Wee, replace!
ljDoc.parentNode.replaceChild(ljNewStats, ljDoc);


/**
***
**/


if (ljType == "U") {
	// Fie.  Make a new table.
	var ljNewInfo = document.createElement("table");
	ljNewInfo.setAttribute("border", "0");
	ljNewInfo.setAttribute("width", "100%");
	ljNewInfo.setAttribute("cellpadding", "5");
	ljNewInfo.setAttribute("cellspacing", "-1");

	tmp1 = document.createElement("tr");
	tmp1.style.verticalAlign = "top";

	var ljServices = getElementsByClassName(document, "div", "external_services")[0];
	if (ljServices) { ljServices = ljServices.innerHTML; }
	var ljInfo = getElementsByClassName(document, "div", "userinfo")[0].innerHTML;
	ljInfo = ljInfo.replace(/<th>/g, "<th style=\"color: #444; text-align: right;\">");
	var ljSchools = getElementsByClassName(document, "div", "schools")[0];
	if (ljSchools) { ljSchools = ljSchools.innerHTML; }
	var ljContact = getElementsByClassName(document, "div", "contact")[0].innerHTML;
	
	if (ljServices) {
		var tmp = getElementsByClassName(document, "div", "external_services")[0];
		tmp.parentNode.removeChild(tmp);
	}
	tmp = getElementsByClassName(document, "div", "schools")[0];
	if (ljSchools) { tmp.parentNode.removeChild(tmp); }

	tmp2 = document.createElement("td");
	tmp2.style.width = "50%";
	tmp2.innerHTML = ljInfo + "<br />";
	if (ljServices) { tmp2.innerHTML += ljServices; }
	tmp1.appendChild(tmp2);

// For reasons that elude me, the LJ Talk image loves borders.  :p
	for (x = 0; x < tmp1.getElementsByTagName("img").length; x++) {
		tmp1.getElementsByTagName("img")[x].style.border = "0";
	}
	
	tmp2 = document.createElement("td");
	tmp2.innerHTML = ljContact + "<br />";
	if (ljSchools) { tmp2.innerHTML += ljSchools; }
	tmp1.appendChild(tmp2);

	ljNewInfo.appendChild(tmp1);
	document.getElementById("basics_body").innerHTML = '<table>' + ljNewInfo.innerHTML + '</table>';

	// Rename the Interests section.
	tmp = document.getElementById("interests_body").childNodes[0];
	if (tmp) {
		tmp = tmp.innerHTML.split(" (")[0];
		document.getElementById("interests_header").childNodes[1].nodeValue = 
			' ' + document.getElementById("interests_body").childNodes[0].innerHTML.split(" (")[0];
	}
}

/* ***
*/

// Code from: http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all :
        oElm.getElementsByTagName(strTagName);

    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];     
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

// Code from: http://www.expertsforge.com/Web-Development/Tutorial-217.asp
function Left(str, n) {
   if (n <= 0)
         return "";
   else if (n > String(str).length)
         return str;
   else
         return String(str).substring(0,n);
}

// Code from: http://www.expertsforge.com/Web-Development/Tutorial-218.asp
function Right(str, n) {
      if (n <= 0)
          return "";
      else if (n > String(str).length)
          return str;
      else
   {
          var iLen = String(str).length;
          return String(str).substring(iLen, iLen - n);
      }
}

// Code from: http://snipplr.com/view.php?codeview&id=8329
function trim(str) {
    while('' + str.charAt(0) == ' ') {
        str = str.substring(1, str.length);
    }
    while('' + str.charAt(str.length-1)==' ') {
        str = str.substring(0, str.length-1);
    }
    return str;
}