Mercurial > google_bookmarks_incsearch
diff chrome/content/init.js @ 0:c47ec96326ad
initial import
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Fri, 15 Aug 2008 01:57:59 +0900 |
parents | |
children | ac5648afee47 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/chrome/content/init.js Fri Aug 15 01:57:59 2008 +0900 @@ -0,0 +1,287 @@ +var DEFAULT_NUMBER_OF_RESULTS = 10; +var DEFAULT_SIZE_OF_INPUT_AREA = 80; +var USER_EXT_JS = "user-extension.js" +var USER_EXT_JS_SAMPLE = "user-extension-sample.js" +var USER_CSS = "user.css" +var USER_CSS_SAMPLE = "user-sample.css" + +if (!createTableSql) { + var createTableSql = "CREATE TABLE bookmark(id INTEGER, url TEXT, title TEXT, info TEXT, tags TEXT, time TEXT, search_text TEXT, PRIMARY KEY(id))"; +} + +var database = new Database('bookmark', EXTENSION_NAME); + +var prefSvc = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); +var prefBranch = prefSvc.getBranch('extensions.' + EXTENSION_NAME + '.'); +var incsearch = null; + +window.addEventListener('load', function(){ + var text = document.getElementById('text'); + var viewArea = document.getElementById('viewArea'); + var status = document.getElementById('status'); + var sync = document.getElementById('sync'); + var setting = document.getElementById('setting'); + var help = document.getElementById('help'); + var loadingBox = document.getElementById('loadingBox'); + var loadingImage = document.getElementById('loadingImage'); + var loadingMessage = document.getElementById('loadingMessage'); + var pageLinkTop = document.getElementById('pageLinkTop'); + var pageLinkBottom = document.getElementById('pageLinkBottom'); + + var userId = null; + try { + userId = prefBranch.getCharPref("userId"); + } catch(e){ + } + + var numberOfResults = DEFAULT_NUMBER_OF_RESULTS; + try { + numberOfResults = prefBranch.getIntPref("numberOfResults"); + } catch(e){ + } + + var sizeOfInputArea = DEFAULT_SIZE_OF_INPUT_AREA; + try { + sizeOfInputArea = prefBranch.getIntPref("sizeOfInputArea"); + } catch(e){ + } + + text.size = sizeOfInputArea; + + + try { + if (!userId || !database.connection.tableExists('bookmark')) { + if (database.connection.tableExists('bookmark')) { + database.execute("DROP TABLE bookmark"); + } + database.execute(createTableSql); + } + } catch(e) { + + status.innerHTML = e.message || e; + loading.style.display = 'none'; + throw e; + } + + // global + incsearch = new IncSearch( + text, + viewArea, + { + dispMax: numberOfResults, + status: status, + pageLinkTop: pageLinkTop, + pageLinkBottom: pageLinkBottom, + database: database, + userId: userId + } + ); + incsearch.input.focus(); + + var update = function() { + incsearch.input.focus(); + new BookmarkLoader(loadingBox, loadingMessage, database); + }; + + sync.addEventListener('click', update, false); + + // settings + var settingBox = document.getElementById('settingBox'); + var settingSave = document.getElementById('settingSave'); + var settingCancel = document.getElementById('settingCancel'); + var numberOfResultElement = document.getElementById('numberOfResults'); + var sizeOfInputAreaElement = document.getElementById('sizeOfInputArea'); + + var openSetting = function() { + Glayer.showBox(settingBox); + numberOfResultElement.value = incsearch.dispMax; + numberOfResultElement.focus(); + sizeOfInputAreaElement.value = text.size; + }; + + var closeSetting = function() { + Glayer.hideBox(settingBox); + incsearch.input.focus(); + }; + + setting.addEventListener('click', openSetting, false); + + numberOfResultElement.addEventListener( + 'keydown', + function(event) { + if (event.keyCode == 13) { + settingSave.click(); + } + }, + false); + + sizeOfInputAreaElement.addEventListener( + 'keydown', + function(event) { + if (event.keyCode == 13) { + settingSave.click(); + } + }, + false); + + settingSave.addEventListener( + 'click', + function() { + Glayer.hideBox(settingBox); + incsearch.dispMax = parseInt(numberOfResultElement.value) || incsearch.dispMax; + prefBranch.setIntPref('numberOfResults', incsearch.dispMax); + incsearch.input.size = parseInt(sizeOfInputAreaElement.value) || incsearch.input.size; + prefBranch.setIntPref('sizeOfInputArea', incsearch.input.size); + + incsearch.reset(); + incsearch.input.focus(); + }, + false); + + settingCancel.addEventListener('click', closeSetting, false); + + // help + var helpBox = document.getElementById('helpBox'); + var helpClose = document.getElementById('helpClose'); + + var openHelp = function() { + Glayer.showBox(helpBox); + helpClose.focus(); + }; + + var closeHelp = function() { + Glayer.hideBox(helpBox); + incsearch.input.focus(); + }; + + var hideMsgBox = function() { + helpBox.style.display = 'none'; + settingBox.style.display = 'none'; + loadingBox.style.display = 'none'; + + var confirmBox = document.getElementById('glayer_confirm'); + if (confirmBox) { + confirmBox.style.display = 'none'; + } + var alertBox = document.getElementById('glayer_alert'); + if (alertBox) { + alertBox.style.display = 'none'; + } + } + + help.addEventListener('click', openHelp, false); + helpClose.addEventListener('click', closeHelp, false); + + // shortcut + document.addEventListener( + 'keydown', + function(event) { + if (event.ctrlKey) { + switch(event.keyCode) { + case 85: // u (Sync) + hideMsgBox(); + update(); + IncSearch._stopEvent(event); + break; + case 83: // s (Setting) + if (settingBox.style.display == '') { + closeSetting(); + } else { + hideMsgBox(); + openSetting(); + } + IncSearch._stopEvent(event); + break; + case 191: // / (Help) + if (helpBox.style.display == '') { + closeHelp(); + } else { + hideMsgBox(); + openHelp(); + } + IncSearch._stopEvent(event); + break; + default: + break; + } + } + }, + false); + + + if (!userId) update(); + +}, false); + +window.addEventListener('unload', function(){ +if (database.connection.transactionInProgress) database.connection.rollbackTransaction(); +}, false); + + +(function() { + function getContents(aURL){ + var ioService = Components.classes["@mozilla.org/network/io-service;1"] + .getService(Components.interfaces.nsIIOService); + var scriptableStream = Components.classes["@mozilla.org/scriptableinputstream;1"] + .getService(Components.interfaces.nsIScriptableInputStream); + + var channel = ioService.newChannel(aURL, null, null); + var input = channel.open(); + scriptableStream.init(input); + var str = scriptableStream.read(input.available()); + scriptableStream.close(); + input.close(); + return str; + } + + var ios = Components.classes["@mozilla.org/network/io-service;1"] + .getService(Components.interfaces.nsIIOService); + var fileHandler = ios.getProtocolHandler("file") + .QueryInterface(Components.interfaces.nsIFileProtocolHandler); + + // user extension javascript + var userExtJs = Components.classes["@mozilla.org/file/directory_service;1"] + .getService(Components.interfaces.nsIProperties) + .get("ProfD", Components.interfaces.nsIFile); + + userExtJs.append(EXTENSION_NAME); + userExtJs.append(USER_EXT_JS); + + if (!userExtJs.exists()) { + var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"] + .createInstance(Components.interfaces.nsIFileOutputStream); + + foStream.init(userExtJs, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate + + var sample = getContents("chrome://" + EXTENSION_NAME + "/content/" + USER_EXT_JS_SAMPLE); + foStream.write(sample, sample.length); + foStream.close(); + } + + var userExtJsURL = fileHandler.getURLSpecFromFile(userExtJs); + + document.write('<script type="text/javascript" src="'+ userExtJsURL +'"><\/script>'); + + // user stylesheet + var userCss = Components.classes["@mozilla.org/file/directory_service;1"] + .getService(Components.interfaces.nsIProperties) + .get("ProfD", Components.interfaces.nsIFile); + + userCss.append(EXTENSION_NAME); + userCss.append(USER_CSS); + + if (!userCss.exists()) { + var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"] + .createInstance(Components.interfaces.nsIFileOutputStream); + + foStream.init(userCss, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate + + var sample = getContents("chrome://" + EXTENSION_NAME + "/content/" + USER_CSS_SAMPLE); + foStream.write(sample, sample.length); + foStream.close(); + } + + var userCssURL = fileHandler.getURLSpecFromFile(userCss); + + document.write('<link rel="stylesheet" href="' + userCssURL + '" type="text/css" />'); +})();