core.js
Summary
Mozile's core properties, methods, and classes.
Project Homepage: http://mozile.mozdev.org
Version: 0.8
$Id: overview-summary-core.js.html,v 1.12 2006/08/23 23:30:17 jameso Exp $
Author: James A. Overton
var mozile = {
window: window,
document: document,
filesep: "/",
linesep: "\n",
root: ""
}
mozile.version = {
major: "0",
minor: "8",
micro: "0",
flag: "a1",
toString: function() {
with (mozile.version) {
return major + "." + minor + "." + micro + flag;
}
}
}
mozile.about = "Mozile is a WYSIWYG inline edtior for XHTML and XML+CSS files.";
mozile.copyright = "Copyright 2006, The Mozile Team";
mozile.license = "MPL 1.1/GPL 2.0/LGPL 2.1, http://mozile.mozdev.org/0.8/LICENSE";
mozile.homepage = "http://mozile.mozdev.org";
mozile.credits = "James A. Overton, Conor Dowling, Max d'Ayala, Christian Stocker, Paul Everitt, David Palm, Richard Prescott, Lars Kiilerich, Kingsley Kerse, Tobias Minich, Andreas Schamberger, and others...";
mozile.acknowledgements = "Icons created by Mark James <http://www.famfamfam.com/lab/icons/silk/>";
mozile.precompiled = false;
mozile.help = [mozile.root, "doc", "html", "index.html"].join(mozile.filesep);
mozile.useDesignMode = false;
mozile.defaultNS = null;
mozile.emptyToken = "\u00A0";
mozile.alternateSpace = null;
mozile.updateInterval = 500;
mozile.load = function(uri) {
var XHR;
try{
if(window.XMLHttpRequest) {
XHR = new XMLHttpRequest();
XHR.open("GET", uri, false);
XHR.send(null);
}
else if(window.ActiveXObject) {
XHR = new ActiveXObject('Microsoft.XMLHTTP');
XHR.open("GET", uri, false);
XHR.send();
}
} catch(e) {
if(mozile.debug) mozile.debug.inform("mozile.load", "File load failed loading '"+ uri +"' with error message:\n"+ e);
return null;
}
if(XHR) {
if(XHR.status == 0 || XHR.status == 200) return XHR.responseText;
else {
if(mozile.debug) mozile.debug.inform("mozile.load", "File load failed with status '"+ XHR.status +"' and message:\n"+ XHR.responseText);
return null;
}
}
if(mozile.debug) mozile.debug.inform("mozile.load", "No XMLHttpRequest available when trying to load '"+ uri +"'.");
return null;
}
mozile.findRoot = function() {
var scripts = document.getElementsByTagName("script");
for(var i=0; i < scripts.length; i++) {
if(scripts[i].getAttribute("src").indexOf("mozile.js") > -1) {
var root = scripts[i].getAttribute("src");
root = root.substring(0, root.lastIndexOf("mozile.js"));
if(root.indexOf("src") > -1)
root = root.substring(0, root.lastIndexOf("src"));
return root;
}
}
return "";
}
mozile.root = mozile.findRoot();
mozile.findModule = function(moduleName) {
var levels = moduleName.split(".");
var current = mozile.window;
for(var i=0; i < levels.length; i++) {
if(!current[levels[i]]) return null;
current = current[levels[i]];
}
return current;
}
mozile.loadModule = function(moduleName) {
if(!moduleName) return false;
var filename = mozile.root + mozile.filesep;
var levels = moduleName.split(".");
for(var i=0; i < levels.length; i++) {
if(levels[i] == "*") levels = levels.splice(i,1);
}
if(levels[0] && levels[0] == "mozile") {
levels.shift();
if(levels[0] && levels[0] == "test") {
levels.shift();
filename += "tests" + mozile.filesep;
}
else filename += "src" + mozile.filesep;
}
else return false;
if(levels.length == 0) return false;
while(levels.length > 1) {
filename += levels.shift() + mozile.filesep;
}
filename += levels.pop() +".js";
var file = mozile.load(filename);
if(!file && mozile.test && mozile.test.root) {
filename = filename.replace(mozile.root, mozile.test.root);
file = mozile.load(filename);
}
if(!file) {
var parent = moduleName.substring(0, moduleName.lastIndexOf("."));
return mozile.loadModule(parent);
}
try {
eval(file);
return true;
} catch(e) {
mozile.debug.inform("mozile.loadModule", "Error evaluating module '"+ moduleName +"' in file '"+ filename +"'.\n"+ mozile.dumpError(e));
return false;
}
}
mozile.require = function(moduleName) {
if(!mozile.findModule(moduleName)) {
if(mozile.precompiled) return false;
return mozile.loadModule(moduleName);
}
else return false;
}
mozile.provide = function() {
}
mozile.Module = function() {};
mozile.isPathAbsolute = function(path) {
if(!path) return false;
path = path.toString();
if(path.indexOf(":") == -1) return false;
var protocol = path.substring(0, path.indexOf(":"));
switch(protocol) {
case "http":
case "https":
case "file":
return true;
}
return false;
}
mozile.getPath = function(url) {
if(!url) return "";
url = url.toString();
if(url.indexOf("?") > -1) url = url.substring(0, url.indexOf("?"));
return url;
}
mozile.getDirectory = function(path) {
if(!path) return "";
path = path.toString();
path = mozile.getPath(path);
if(path.indexOf(mozile.filesep) > -1) {
if(path.indexOf(":///") > -1) {
var partial = path.substring(path.indexOf(":///")+4);
if(partial.indexOf(mozile.filesep) == -1) return path;
}
else if(path.indexOf("://") > -1) {
var partial = path.substring(path.indexOf("://")+3);
if(partial.indexOf(mozile.filesep) == -1) return path;
}
return path.substring(0, path.lastIndexOf(mozile.filesep)+1);
}
return path;
}
mozile.getAbsolutePath = function(path, root) {
if(!path) return "";
path = path.toString();
if(mozile.isPathAbsolute(path)) return path;
if(!root) root = location;
root = mozile.getDirectory(root);
root = mozile.getAbsolutePath(root);
return root + path;
}
mozile.debug = new Object();
mozile.debug.prototype = new mozile.Module;
mozile.debug.alertLevel = "suppress";
mozile.debug.logLevel = "inform";
mozile.debug.messages = new Array();
mozile.debug.window = null;
mozile.debug.isSelected = function(type, level) {
if(typeof(type) != "string") return false;
type = type.toLowerCase();
var checkLevel;
if(type == "alert") checkLevel = mozile.debug.alertLevel;
else if(type == "log") checkLevel = mozile.debug.logLevel;
else return false;
checkLevel = checkLevel.toLowerCase();
if(typeof(level) != "string") return false;
level = level.toLowerCase();
if(checkLevel == "suppress") return false;
if(checkLevel == "warn") {
if(level =="warn") return true;
else return false;
}
if(checkLevel == "inform") {
if(level == "warn" || level == "inform") return true;
else return false;
}
if(checkLevel == "debug") return true;
return false;
}
mozile.debug.warn = function(caller, message) {
var level = "warn";
var msg = "Mozile Warning ["+ caller +"] "+ message;
if(mozile.debug.isSelected("alert", level)) {
if(window.warn) warn(msg);
else mozile.alert(msg);
}
if(mozile.debug.isSelected("log", level)) {
mozile.debug.log(caller, level, message);
}
}
mozile.debug.inform = function(caller, message) {
var level = "inform";
var msg = "Mozile Information ["+ caller +"] "+ message;
if(mozile.debug.isSelected("alert", level)) {
if(window.inform) inform(msg);
else mozile.alert(msg);
}
if(mozile.debug.isSelected("log", level)) {
mozile.debug.log(caller, level, message);
}
}
mozile.debug.debug = function(caller, message) {
var level = "debug";
var msg = "Mozile Debugging ["+ caller +"] "+ message;
if(mozile.debug.isSelected("alert", level)) {
if(window.debug) debug(msg);
else mozile.alert(msg);
}
if(mozile.debug.isSelected("log", level)) {
mozile.debug.log(caller, level, message);
}
}
mozile.debug.log = function(caller, level, message) {
var date = new Date();
var msg = {
caller: caller,
level: level,
message: message,
date: date.toLocaleString(),
toString: function() {
return this.level.toUpperCase() +" ("+ this.date +") ["+ this.caller +"] "+ this.message;
}
};
mozile.debug.messages.push(msg);
if(mozile.debug.window && mozile.debug.window.document) {
mozile.debug.window.document.write(msg +"<br/>\n");
mozile.debug.window.scroll(0, document.body.clientHeight);
}
}
mozile.debug.show = function() {
if(!mozile.debug.window || !mozile.debug.window.document) {
mozile.debug.window = window.open("", "MozileDebugging", "");
mozile.debug.window.document.write("<h3>Mozile Debugging Messages</h3>");
mozile.debug.window.document.write(mozile.debug.messages.join("<br/>\n") + "<br/>\n");
}
else mozile.debug.window = window.open("", "MozileDebugging", "");
}
mozile.alert = function(message) {
alert(message);
}
mozile.dumpError = function(object) {
if(typeof(object) == "string") return object;
if(!mozile.browser.isIE) return object.toString();
if(object && object.description) {
var fields = [
"Name: "+ object.name,
"Number: "+ object.number,
"Message: "+ object.message,
"Description: "+ object.description,
];
return fields.join("\n");
}
if(!object) object = document;
if(!object.parseError) object = document;
if(!object.parseError) object = window;
if(!object.parseError) return "[No error to parse]";
var fields = [
"Error Code: "+ object.parseError.errorCode,
"File Position: "+object.parseError.filepos,
"Line: "+object.parseError.line,
"Line Position: "+object.parseError.linepos,
"Reason: "+object.parseError.reason,
"Source Text: "+object.parseError.srcText,
"Url: "+object.parseError.url
];
return fields.join("\n");
}
mozile.editElement = function(elementOrId) {
var element;
if(typeof(elementOrId) == "string") {
if(document.documentElement.nodeName.toLowerCase() == "html")
element = document.getElementById(elementOrId);
else return mozile.editElements(elementOrId, "id", true);
}
else if(elementOrId.nodeType &&
elementOrId.nodeType == mozile.dom.ELEMENT_NODE) {
element = elementOrId;
}
if(element) {
mozile.require("mozile.edit");
mozile.edit.setMark(element, "editable", true);
switch(element.getAttribute("contentEditable")) {
case "true":
mozile.edit.setMark(element, "contentEditable", true);
break;
case "false":
mozile.edit.setMark(element, "contentEditable", false);
break;
}
if(mozile.browser.isIE) {
element.setAttribute("contentEditable", "true");
}
}
return undefined;
}
mozile.editElements = function(listOrValue, name, single) {
mozile.require("mozile.dom");
var list = new Array();
if(name === undefined) name = "class";
if(typeof(listOrValue) == "string") {
if(document.createTreeWalker) {
var treeWalker = document.createTreeWalker(document.documentElement, mozile.dom.NodeFilter.SHOW_ELEMENT, null, false);
while(treeWalker.nextNode()) {
var node = treeWalker.currentNode;
if(name == "class" && mozile.browser.isIE && node.className == listOrValue) list.push(node);
else if(name && node.getAttribute(name) == listOrValue) list.push(node);
else if(!name && mozile.dom &&
mozile.dom.getLocalName(node).toLowerCase() == listOrValue) {
list.push(node);
}
if(single && list.length > 0) break;
}
}
}
else if(listOrValue.length) {
list = listOrValue;
}
if(list.length) {
for(var i=0; i < list.length; i++) {
if(list[i] && list[i].nodeType &&
list[i].nodeType == mozile.dom.ELEMENT_NODE) {
mozile.editElement(list[i]);
if(single) break;
}
}
}
return undefined;
}
mozile.editDocument = function(doc) {
if(!doc) doc = document;
mozile.editElement(doc.documentElement);
}
mozile.editAllText = function(rich) {
mozile.require("mozile.edit");
mozile.edit.addDefaultCommand(mozile.edit.navigateLeftRight);
mozile.edit.addDefaultCommand(mozile.edit.insertText);
mozile.edit.addDefaultCommand(mozile.edit.removeText);
if(rich) {
mozile.require("mozile.edit.rich");
mozile.edit.addDefaultCommand(mozile.edit.remove);
var splitBlocks = new mozile.edit.Split("splitBlocks");
splitBlocks.accel = "Return Enter";
mozile.edit.addDefaultCommand(splitBlocks);
}
}
mozile.useSchema = function(target) {
try {
mozile.require("mozile.rng");
mozile.require("mozile.edit");
mozile.require("mozile.edit.rich");
mozile.edit.extendRNG();
mozile.schema = new mozile.rng.Schema();
var validation = mozile.schema.parse(target);
if(validation.isValid) {
mozile.edit.generateCommands(mozile.schema);
return true;
}
else {
mozile.debug.inform("mozile.useSchema", "Schema validation failed.\n"+ validation.report(true));
return false;
}
} catch(e) {
mozile.debug.inform("mozile.useSchema", "Could not create schema for target '"+ target +"' because of an error:\n"+ mozile.dumpError(e));
return false;
}
}
mozile.os = new Object();
mozile.os.prototype = new mozile.Module;
mozile.os.isMac = false;
if(navigator.userAgent.match(/Macintosh/)) mozile.os.isMac = true;
mozile.browser = new Object();
mozile.browser.prototype = new mozile.Module;
mozile.browser.isMozilla = false;
mozile.browser.mozillaVersion = 0;
mozile.browser.mozillaVersion = navigator.userAgent.match(/rv\:(\d+\.\d+)/);
if(mozile.browser.mozillaVersion &&
Number(mozile.browser.mozillaVersion[1])) {
mozile.browser.isMozilla = true;
mozile.browser.mozillaVersion = Number(mozile.browser.mozillaVersion[1]);
}
mozile.browser.isIE = false;
if(navigator.userAgent.match(/MSIE/)) mozile.browser.isIE = true;
mozile.browser.isSafari = false;
if(navigator.userAgent.match(/Safari/)) mozile.browser.isSafari = true;
mozile.browser.safariVersion = 0;
mozile.browser.safariVersion = navigator.userAgent.match(/AppleWebKit\/(\d+)/);
if(mozile.browser.safariVersion &&
Number(mozile.browser.safariVersion[1])) {
mozile.browser.safariVersion = Number(mozile.browser.safariVersion[1]);
}
mozile.browser.isOpera = false;
if(navigator.userAgent.match(/Opera/)) mozile.browser.isOpera = true;
if(mozile.browser.isMozilla) {
if(document.contentType && document.contentType == "text/html") {
mozile.defaultNS = null;
}
else {
mozile.defaultNS = "http://www.w3.org/1999/xhtml";
}
}
Documentation generated by
JSDoc on Wed Aug 23 18:45:51 2006