Look-up Words History

By keiciao 1 Last update May 3, 2006 — Installed 279 times.
// 
// Tile: Look-up Words History
// Category: Education
// 
// version 0.1 BETA!
// 2006-05-02
// Copyright (c) 2006, keiciao
//
// --------------------------------------------------------------------
//
// This is a Greasemonkey user script.  To install it, you need
// Greasemonkey 0.6.4 or later: http://greasemonkey.mozdev.org/
// Then restart Firefox and revisit this script.
// Under Tools, there will be a new menu item to "Install User Script".
// Accept the default configuration and install.
//
// To uninstall, go to Tools/Manage User Scripts,
// select "Look-up Words History", and click Uninstall.
//
// --------------------------------------------------------------------
///
// ==UserScript==
// @name          Look-up Words History
// @namespace     http://blog.goo.ne.jp/keiciao/
// @description   Look-up Words History
// @include       http://*.alc.co.jp/*
// ==/UserScript==

// constantt
var LWH_Storage_History = 'LWH_Storage_History';
var LWH_Storage_MAXSIZE = 50;

// create area for words
function LWH_Create_Area(words){
    // find keywords for new links
    var hidden_word_in2 = document.evaluate('//input[@type="hidden" and @name="word_in2"]',document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
    var hidden_word_in3 = document.evaluate('//input[@type="hidden" and @name="word_in3"]',document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);

    // if not a XPathResult, exit
    if (hidden_word_in2.snapshotLength < 1||
	hidden_word_in3.snapshotLength < 1)
	return;

    // crate table
    var words_table = document.createElement('table');
    words_table.cellspacing = 0;
    words_table.cellpadding = 0;
    words_table.border = 0;
    words_table.align = 'left';

    // crate tbody
    var words_tbody = document.createElement('tbody');

    // create title
    var title_label = document.createElement('label');
    title_label.innerHTML = 'RECENT WORDS';
    var title_tr = document.createElement('tr');
    var title_td = document.createElement('td');
    title_td.width = 91;
    title_td.noWrap = true;
    // append title
    title_td.appendChild(title_label);
    title_tr.appendChild(title_td);
    words_tbody.appendChild(title_tr);

    // for all words
    for (var i in words) {
	// crate tr
	var words_tr = document.createElement('tr');
	// create cells
	var words_td = document.createElement('td');
	words_td.noWrap = true;
	var words_a = document.createElement('a');
	words_a.href = 'http://www2.alc.co.jp/ejr/index.php?' +
	    'word_in=' + words[i] +
	    '&word_in2=' + hidden_word_in2.snapshotItem(0).value +
	    '&word_in3=' + hidden_word_in3.snapshotItem(0).value;
	words_a.innerHTML = (parseInt(i)+1) + '. ' + words[i];

	// append elements
	words_td.appendChild(words_a);
	words_tr.appendChild(words_td);
	words_tbody.appendChild(words_tr);
    }

    // append elements
    words_table.appendChild(words_tbody);

    // crate div
    var words_div = document.createElement('div');
    words_div.align = 'left';
    words_div.appendChild(words_table);
    // crate table
    var top_div = document.createElement('div');
    top_div.align = 'center';
    var top_table = document.createElement('table');
    top_table.width = 750;
    top_table.cellspacing = 0;
    top_table.cellpadding = 0;
    top_table.border = 0;
    var top_tbody = document.createElement('tbody');
    var top_tr = document.createElement('tr');
    var top_td1 = document.createElement('td');
    var top_td2 = document.createElement('td');

    // find original top div
    var alc_div = document.evaluate('//body/div',document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null).snapshotItem(0);

    // remove original
    document.body.removeChild(alc_div);
    // recreate page
    top_td1.appendChild(alc_div);
    top_td2.appendChild(words_div);
    top_td2.vAlign = 'top';
    top_tr.appendChild(top_td1);
    top_tr.appendChild(top_td2);
    top_tbody.appendChild(top_tr);
    top_table.appendChild(top_tbody);
    top_div.appendChild(top_table);
    // append top div
    document.body.appendChild(top_div);
}

// Show History
function LWH_Show_History(){
    // is storage?
    if ( !GM_getValue(LWH_Storage_History) ) {
	LWH_Create_Area('');
    }
    else {
	// remind words
	var words = GM_getValue(LWH_Storage_History).split(';', LWH_Storage_MAXSIZE);
	// if no words, return
	if ( words.length < 1) {
	    LWH_Create_Area('');
	}
	else {
	    // create area for words
	    LWH_Create_Area(words);
	}
    }
}

function LWH_Storage_Append(word){
    // if storage is empty, just append it then return.
    if( !GM_getValue(LWH_Storage_History) ){
	GM_setValue(LWH_Storage_History, word);
	return;
    }

    // get words
    var words = GM_getValue(LWH_Storage_History).split(';', LWH_Storage_MAXSIZE);
    // delete same word
    for(var i in words){
	if( words[i] == word ){
	    var buf_array = words.slice(0,i);
	    if( words[parseInt(i)+1] ){
		buf_array = buf_array.concat(words.slice(parseInt(i)+1,words.length));
	    }
	    words = buf_array;
	    delete buf_array;
	    break;
	}
    }

    // if it is full, put away the last
    if( words.length > LWH_Storage_MAXSIZE-1 )
	words.pop();

    // append word into words as a head
    words.unshift(word);

    // store db
    GM_setValue(LWH_Storage_History,words.join(';'));
}

function LWH_Char_Check(word){
    var res;
    for (var i=word.length-1; i>=0; i--) {
	res = word.charCodeAt(i);
	// check ascii code (http://www.december.com/html/spec/ascii.html)
	if( res < 32 ) return false;
	if( res > 126 ) return false;
    }
    delete res;
    return true;
}

(function(){
    // get results for look-up
    var results = document.evaluate('//span[@class="ejr_e"]',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);

    // get the input for look-up word
    var input = document.evaluate('//input[@name="word_in" and @accesskey="e"]',document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);

    // if not a XPathResult, exit
    if (input.snapshotLength != 1) return;

    // if only English, append it
    if ( results.snapshotLength > 0 &&
	 results.snapshotItem(0).textContent > 0 &&
	 input.snapshotItem(0).defaultValue.length > 0 &&
	 LWH_Char_Check(input.snapshotItem(0).defaultValue) )
	// append storage
	LWH_Storage_Append(input.snapshotItem(0).defaultValue.toLowerCase());

    // destructor
    delete results;
    delete input;

    // show words
    LWH_Show_History();
    
})();