Bug 243629 - Landing of ChatZilla 0.9.63.

Lots of bugs fixed, including: 226223, 230328, 127662, 185729, 226410, 231150, 235650, 238551, 238716, 73257, 226408, 238612, 108087, 180577, 211461, 218070, 242381
and 147452.

r=samuel@sieb.net
This commit is contained in:
silver%warwickcompsoc.co.uk 2004-06-09 03:33:50 +00:00
Родитель 364a3b1c62
Коммит e11c8cbd6f
34 изменённых файлов: 5784 добавлений и 1165 удалений

Просмотреть файл

@ -12,6 +12,7 @@ chatzilla.jar:
content/chatzilla/lib/js/irc.js (js/lib/irc.js)
content/chatzilla/lib/js/irc-debug.js (js/lib/irc-debug.js)
content/chatzilla/lib/js/file-utils.js (js/lib/file-utils.js)
content/chatzilla/lib/js/dcc.js (js/lib/dcc.js)
content/chatzilla/lib/xul/munger.js (xul/lib/munger.js)
content/chatzilla/chatzilla.xul (xul/content/chatzilla.xul)
content/chatzilla/scripts.xul (xul/content/scripts.xul)
@ -31,29 +32,12 @@ chatzilla.jar:
content/chatzilla/chatzillaOverlay.xul (xul/content/chatzillaOverlay.xul)
content/chatzilla/chatzillaOverlay.js (xul/content/chatzillaOverlay.js)
content/chatzilla/browserOverlay.xul (xul/content/browserOverlay.xul)
content/chatzilla/prefsOverlay.xul (xul/content/prefsOverlay.xul)
content/chatzilla/prefpanel/pref-irc.xul (xul/content/prefpanel/pref-irc.xul)
content/chatzilla/prefpanel/pref-irc.js (xul/content/prefpanel/pref-irc.js)
content/chatzilla/prefpanel/appearance.js (xul/content/prefpanel/appearance.js)
content/chatzilla/prefpanel/appearance.css (xul/content/prefpanel/appearance.css)
content/chatzilla/prefpanel/appearance.xul (xul/content/prefpanel/appearance.xul)
content/chatzilla/prefpanel/interface.js (xul/content/prefpanel/interface.js)
content/chatzilla/prefpanel/interface.xul (xul/content/prefpanel/interface.xul)
content/chatzilla/prefpanel/sound.js (xul/content/prefpanel/sound.js)
content/chatzilla/prefpanel/sound.xul (xul/content/prefpanel/sound.xul)
content/chatzilla/prefpanel/stalk.js (xul/content/prefpanel/stalk.js)
content/chatzilla/prefpanel/stalk.xul (xul/content/prefpanel/stalk.xul)
content/chatzilla/prefpanel/startup.js (xul/content/prefpanel/startup.js)
content/chatzilla/prefpanel/startup.xul (xul/content/prefpanel/startup.xul)
content/chatzilla/prefpanel/startup-newScript.js (xul/content/prefpanel/startup-newScript.js)
content/chatzilla/prefpanel/startup-newScript.xul (xul/content/prefpanel/startup-newScript.xul)
content/chatzilla/prefpanel/startup-newURL.js (xul/content/prefpanel/startup-newURL.js)
content/chatzilla/prefpanel/startup-newURL.xul (xul/content/prefpanel/startup-newURL.xul)
content/chatzilla/prefpanel/appearance-previewCSS.html (xul/content/prefpanel/appearance-previewCSS.html)
content/chatzilla/prefpanel/appearance-previewCSS.js (xul/content/prefpanel/appearance-previewCSS.js)
content/chatzilla/prefpanel/appearance-previewCSS.xul (xul/content/prefpanel/appearance-previewCSS.xul)
content/chatzilla/prefpanel/tabs.xul (xul/content/prefpanel/tabs.xul)
content/chatzilla/prefpanel/text.xul (xul/content/prefpanel/text.xul)
content/chatzilla/prefsOverlay.xul (xul/content/prefsOverlay.xul)
content/chatzilla/config.xul (xul/content/config.xul)
content/chatzilla/config-add.xul (xul/content/config-add.xul)
content/chatzilla/config.js (xul/content/config.js)
content/chatzilla/config-add.js (xul/content/config-add.js)
content/chatzilla/config.css (xul/content/config.css)
skin/modern/chatzilla/chatzilla.css (xul/skin/chatzilla.css)
skin/modern/chatzilla/chatzillaOverlay.css (xul/skin/chatzillaOverlay.css)
skin/modern/chatzilla/browserOverlay.css (xul/skin/browserOverlay.css)
@ -87,4 +71,4 @@ chatzilla.jar:
locale/en-US/chatzilla/browserOverlay.dtd (xul/locale/en-US/browserOverlay.dtd)
locale/en-US/chatzilla/chatzilla.dtd (xul/locale/en-US/chatzilla.dtd)
locale/en-US/chatzilla/chatzilla.properties (xul/locale/en-US/chatzilla.properties)
locale/en-US/chatzilla/pref-irc.dtd (xul/locale/en-US/pref-irc.dtd)
locale/en-US/chatzilla/config.dtd (xul/locale/en-US/config.dtd)

Просмотреть файл

@ -54,15 +54,23 @@ const CLINE_SERVICE_CONTRACTID =
"@mozilla.org/commandlinehandler/general-startup;1?type=chat";
const CLINE_SERVICE_CID =
Components.ID("{38a95514-1dd2-11b2-97e7-9da958640f2c}");
const IRCCNT_HANDLER_CONTRACTID =
"@mozilla.org/uriloader/content-handler;1?type=x-application-irc";
const IRCCNT_HANDLER_CID =
Components.ID("{98919a14-1dd1-11b2-be1a-b84344307f0a}");
//const IRCCONTENT_HANDLER_CONTRACTID =
// "@mozilla.org/uriloader/content-handler;1?type=x-application-irc";
//const IRCCONTENT_HANDLER_CID =
// Components.ID("{98919a14-1dd1-11b2-be1a-b84344307f0a}");
const IRCCONTENT_LISTENER_CONTRACTID =
"@mozilla.org/uriloader/irc-external-content-listener;1";
const IRCCONTENT_LISTENER_CID =
Components.ID("{0e339944-6f43-47e2-a6b5-989b1b5dd84c}");
// Components.ID("{98919a14-1dd1-11b2-be1a-b84344307f0a}");
const IRCPROT_HANDLER_CONTRACTID =
"@mozilla.org/network/protocol;1?name=irc";
const IRCPROT_HANDLER_CID =
Components.ID("{f21c35f4-1dd1-11b2-a503-9bf8a539ea39}");
const IRC_MIMETYPE = "application/x-irc";
/* components used in this file */
const MEDIATOR_CONTRACTID =
"@mozilla.org/appshell/window-mediator;1";
@ -80,6 +88,8 @@ const nsIWindowMediator = Components.interfaces.nsIWindowMediator;
const nsICmdLineHandler = Components.interfaces.nsICmdLineHandler;
const nsICategoryManager = Components.interfaces.nsICategoryManager;
const nsIContentHandler = Components.interfaces.nsIContentHandler;
const nsIURIContentListener = Components.interfaces.nsIURIContentListener
const nsIURILoader = Components.interfaces.nsIURILoader;
const nsIProtocolHandler = Components.interfaces.nsIProtocolHandler;
const nsIURI = Components.interfaces.nsIURI;
const nsIStandardURL = Components.interfaces.nsIStandardURL;
@ -88,6 +98,7 @@ const nsIRequest = Components.interfaces.nsIRequest;
const nsIIOService = Components.interfaces.nsIIOService;
const nsIAppShellService = Components.interfaces.nsIAppShellService;
const nsISupports = Components.interfaces.nsISupports;
const nsISupportsWeakReference = Components.interfaces.nsISupportsWeakReference;
const nsIRDFService = Components.interfaces.nsIRDFService;
/* Command Line handler service */
@ -117,66 +128,135 @@ function (outer, iid)
return new CLineService();
}
/* x-application-irc content handler */
function IRCContentHandler ()
/* content listener */
function IRCContentListener()
{}
IRCContentHandler.prototype.QueryInterface =
function (iid)
IRCContentListener.prototype.QueryInterface =
function irccl_QueryInterface(iid)
{
if (!iid.equals(nsIContentHandler))
if (!iid.equals(nsIURIContentListener) &&
!iid.equals(nsISupportsWeakReference) &&
!iid.equals(nsISupports))
{
throw Components.results.NS_ERROR_NO_INTERFACE;
}
return this;
}
IRCContentHandler.prototype.handleContent =
function (contentType, windowTarget, request)
IRCContentListener.prototype.loadCookie = null;
IRCContentListener.prototype.parentContentListener = null;
IRCContentListener.prototype.onStartURIOpen =
function irccl_onStartURIOpen(uri)
{
}
IRCContentListener.prototype.doContent =
function irccl_doContent(contentType, preferred, request, contentHandler, count)
{
var e;
var channel = request.QueryInterface(nsIChannel);
var windowManager =
Components.classes[MEDIATOR_CONTRACTID].getService(nsIWindowMediator);
var wmClass = Components.classes[MEDIATOR_CONTRACTID];
var windowManager = wmClass.getService(nsIWindowMediator);
var assClass = Components.classes[ASS_CONTRACTID];
var ass = assClass.getService(nsIAppShellService);
hiddenWin = ass.hiddenDOMWindow;
// Ok, not starting currently, so check if we've got existing windows.
var w = windowManager.getMostRecentWindow("irc:chatzilla");
if (w)
// Claiming that a ChatZilla window is loading.
if ("ChatZillaStarting" in hiddenWin)
{
w.focus();
w.gotoIRCURL(channel.URI.spec);
}
else
{
var ass =
Components.classes[ASS_CONTRACTID].getService(nsIAppShellService);
w = ass.hiddenDOMWindow;
var args = new Object ();
args.url = channel.URI.spec;
w.openDialog("chrome://chatzilla/content/chatzilla.xul", "_blank",
"chrome,menubar,toolbar,status,resizable,dialog=no",
args);
dump("cz-service: ChatZilla claiming to be starting.\n");
if (w && ("client" in w) && ("initialized" in w.client) &&
w.client.initialized)
{
dump("cz-service: It lied. It's finished starting.\n");
// It's actually loaded ok.
delete hiddenWin.ChatZillaStarting;
}
}
if ("ChatZillaStarting" in hiddenWin)
{
count = count || 0;
if ((new Date() - hiddenWin.ChatZillaStarting) > 10000)
{
dump("cz-service: Continuing to be unable to talk to existing window!\n");
}
else
{
//dump("cz-service: **** Try: " + count + ", delay: " + (new Date() - hiddenWin.ChatZillaStarting) + "\n");
// We have a ChatZilla window, but we're still loading.
hiddenWin.setTimeout(function wrapper(t, count) {
t.doContent(contentType, preferred, request, contentHandler, count + 1);
}, 250, this, count);
return true;
}
}
// We have a window.
if (w)
{
dump("cz-service: Existing, fully loaded window. Using.\n");
// Window is working and initialized ok. Use it.
w.focus();
w.gotoIRCURL(channel.URI.spec);
return true;
}
dump("cz-service: No windows, starting new one.\n");
// Ok, no available window, loading or otherwise, so start ChatZilla.
var args = new Object();
args.url = channel.URI.spec;
hiddenWin.ChatZillaStarting = new Date();
hiddenWin.openDialog("chrome://chatzilla/content/chatzilla.xul", "_blank",
"chrome,menubar,toolbar,status,resizable,dialog=no",
args);
return true;
}
/* content handler factory object (IRCContentHandler) */
var IRCContentHandlerFactory = new Object();
IRCContentListener.prototype.isPreferred =
function irccl_isPreferred(contentType, desiredContentType)
{
return (contentType == IRC_MIMETYPE);
}
IRCContentHandlerFactory.createInstance =
function (outer, iid)
IRCContentListener.prototype.canHandleContent =
function irccl_canHandleContent(contentType, isContentPreferred, desiredContentType)
{
return (contentType == IRC_MIMETYPE);
}
/* protocol handler factory object (IRCContentListener) */
var IRCContentListenerFactory = new Object();
IRCContentListenerFactory.createInstance =
function ircclf_createInstance(outer, iid)
{
if (outer != null)
throw Components.results.NS_ERROR_NO_AGGREGATION;
if (!iid.equals(nsIContentHandler) && !iid.equals(nsISupports))
if (!iid.equals(nsIURIContentListener) &&
!iid.equals(nsISupportsWeakReference) &&
!iid.equals(nsISupports))
{
throw Components.results.NS_ERROR_INVALID_ARG;
return new IRCContentHandler();
}
return new IRCContentListener();
}
/* irc protocol handler component */
function IRCProtocolHandler()
{
@ -189,13 +269,13 @@ IRCProtocolHandler.prototype.protocolFlags =
nsIProtocolHandler.ALLOWS_PROXY;
IRCProtocolHandler.prototype.allowPort =
function (port, scheme)
function ircph_allowPort(port, scheme)
{
return false;
}
IRCProtocolHandler.prototype.newURI =
function (spec, charset, baseURI)
function ircph_newURI(spec, charset, baseURI)
{
var cls = Components.classes[STANDARDURL_CONTRACTID];
var url = cls.createInstance(nsIStandardURL);
@ -205,50 +285,50 @@ function (spec, charset, baseURI)
}
IRCProtocolHandler.prototype.newChannel =
function (URI)
function ircph_newChannel(URI)
{
ios = Components.classes[IOSERVICE_CONTRACTID].getService(nsIIOService);
if (!ios.allowPort(URI.port, URI.scheme))
throw Components.results.NS_ERROR_FAILURE;
return new BogusChannel (URI);
return new BogusChannel(URI);
}
/* protocol handler factory object (IRCProtocolHandler) */
var IRCProtocolHandlerFactory = new Object();
IRCProtocolHandlerFactory.createInstance =
function (outer, iid)
function ircphf_createInstance(outer, iid)
{
if (outer != null)
throw Components.results.NS_ERROR_NO_AGGREGATION;
if (!iid.equals(nsIProtocolHandler) && !iid.equals(nsISupports))
throw Components.results.NS_ERROR_INVALID_ARG;
return new IRCProtocolHandler();
}
/* bogus IRC channel used by the IRCProtocolHandler */
function BogusChannel (URI)
function BogusChannel(URI)
{
this.URI = URI;
this.originalURI = URI;
}
BogusChannel.prototype.QueryInterface =
function (iid)
function bc_QueryInterface(iid)
{
if (!iid.equals(nsIChannel) && !iid.equals(nsIRequest) &&
!iid.equals(nsISupports))
throw Components.results.NS_ERROR_NO_INTERFACE;
return this;
}
/* nsIChannel */
BogusChannel.prototype.loadAttributes = null;
BogusChannel.prototype.contentType = "x-application-irc";
BogusChannel.prototype.contentType = IRC_MIMETYPE;
BogusChannel.prototype.contentLength = 0;
BogusChannel.prototype.owner = null;
BogusChannel.prototype.loadGroup = null;
@ -256,27 +336,26 @@ BogusChannel.prototype.notificationCallbacks = null;
BogusChannel.prototype.securityInfo = null;
BogusChannel.prototype.open =
BogusChannel.prototype.asyncOpen =
function ()
function bc_open()
{
throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
}
BogusChannel.prototype.asyncOpen =
function (observer, ctxt)
function bc_asyncOpen(observer, ctxt)
{
observer.onStartRequest (this, ctxt);
observer.onStartRequest(this, ctxt);
}
BogusChannel.prototype.asyncRead =
function (listener, ctxt)
function bc_asyncRead(listener, ctxt)
{
return listener.onStartRequest (this, ctxt);
return listener.onStartRequest(this, ctxt);
}
/* nsIRequest */
BogusChannel.prototype.isPending =
function ()
function bc_isPending()
{
return true;
}
@ -284,14 +363,14 @@ function ()
BogusChannel.prototype.status = Components.results.NS_OK;
BogusChannel.prototype.cancel =
function (status)
function bc_cancel(status)
{
this.status = status;
}
BogusChannel.prototype.suspend =
BogusChannel.prototype.resume =
function ()
function bc_suspres()
{
throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
}
@ -299,59 +378,52 @@ function ()
var ChatzillaModule = new Object();
ChatzillaModule.registerSelf =
function (compMgr, fileSpec, location, type)
function cz_mod_registerSelf(compMgr, fileSpec, location, type)
{
debug("*** Registering -chat handler.\n");
compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
var catman = Components.classes["@mozilla.org/categorymanager;1"]
.getService(nsICategoryManager);
debug("*** Registering -chat handler.\n");
compMgr.registerFactoryLocation(CLINE_SERVICE_CID,
"Chatzilla CommandLine Service",
CLINE_SERVICE_CONTRACTID,
fileSpec,
location,
type);
catman = Components.classes["@mozilla.org/categorymanager;1"]
.getService(nsICategoryManager);
catman.addCategoryEntry("command-line-argument-handlers",
fileSpec, location, type);
catman.addCategoryEntry("command-line-argument-handlers",
"chatzilla command line handler",
CLINE_SERVICE_CONTRACTID, true, true);
debug("*** Registering x-application-irc handler.\n");
compMgr.registerFactoryLocation(IRCCNT_HANDLER_CID,
"IRC Content Handler",
IRCCNT_HANDLER_CONTRACTID,
fileSpec,
location,
type);
debug("*** Registering content listener.\n");
compMgr.registerFactoryLocation(IRCCONTENT_LISTENER_CID,
"IRC content listener",
IRCCONTENT_LISTENER_CONTRACTID,
fileSpec, location, type);
catman.addCategoryEntry("external-uricontentlisteners",
IRC_MIMETYPE,
IRCCONTENT_LISTENER_CONTRACTID, true, true);
debug("*** Registering irc protocol handler.\n");
compMgr.registerFactoryLocation(IRCPROT_HANDLER_CID,
"IRC protocol handler",
IRCPROT_HANDLER_CONTRACTID,
fileSpec,
location,
type);
fileSpec, location, type);
debug("*** Registering done.\n");
}
ChatzillaModule.unregisterSelf =
function(compMgr, fileSpec, location)
function cz_mod_unregisterSelf(compMgr, fileSpec, location)
{
compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
compMgr.unregisterFactoryLocation(CLINE_SERVICE_CID,
fileSpec);
catman = Components.classes["@mozilla.org/categorymanager;1"]
var catman = Components.classes["@mozilla.org/categorymanager;1"]
.getService(nsICategoryManager);
catman.deleteCategoryEntry("command-line-argument-handlers",
catman.deleteCategoryEntry("command-line-argument-handlers",
CLINE_SERVICE_CONTRACTID, true);
}
ChatzillaModule.getClassObject =
function (compMgr, cid, iid)
function cz_mod_getClassObject(compMgr, cid, iid)
{
// Checking if we're disabled in the Chrome Registry.
var rv;
@ -368,22 +440,21 @@ function (compMgr, cid, iid)
if (cid.equals(CLINE_SERVICE_CID))
return CLineFactory;
if (cid.equals(IRCCNT_HANDLER_CID))
return IRCContentHandlerFactory;
if (cid.equals(IRCCONTENT_LISTENER_CID))
return IRCContentListenerFactory;
if (cid.equals(IRCPROT_HANDLER_CID))
return IRCProtocolHandlerFactory;
if (!iid.equals(Components.interfaces.nsIFactory))
throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
throw Components.results.NS_ERROR_NO_INTERFACE;
throw Components.results.NS_ERROR_NO_INTERFACE;
}
ChatzillaModule.canUnload =
function(compMgr)
function cz_mod_canUnload(compMgr)
{
return true;
}

Просмотреть файл

@ -43,6 +43,7 @@ const NS_ERROR_MODULE_NETWORK = 2152398848;
const NS_ERROR_UNKNOWN_HOST = NS_ERROR_MODULE_NETWORK + 30;
const NS_ERROR_CONNECTION_REFUSED = NS_ERROR_MODULE_NETWORK + 13;
const NS_ERROR_NET_TIMEOUT = NS_ERROR_MODULE_NETWORK + 14;
const NS_ERROR_NET_RESET = NS_ERROR_MODULE_NETWORK + 20;
const NS_NET_STATUS_RESOLVING_HOST = NS_ERROR_MODULE_NETWORK + 3;
const NS_NET_STATUS_CONNECTED_TO = NS_ERROR_MODULE_NETWORK + 4;
@ -50,18 +51,50 @@ const NS_NET_STATUS_SENDING_TO = NS_ERROR_MODULE_NETWORK + 5;
const NS_NET_STATUS_RECEIVING_FROM = NS_ERROR_MODULE_NETWORK + 6;
const NS_NET_STATUS_CONNECTING_TO = NS_ERROR_MODULE_NETWORK + 7;
function toScriptableInputStream (i)
{
var si = Components.classes["@mozilla.org/scriptableinputstream;1"];
si = si.createInstance();
si = si.QueryInterface(Components.interfaces.nsIScriptableInputStream);
si.init(i);
const nsIScriptableInputStream = Components.interfaces.nsIScriptableInputStream;
return si;
const nsIBinaryInputStream = Components.interfaces.nsIBinaryInputStream;
const nsIBinaryOutputStream = Components.interfaces.nsIBinaryOutputStream;
function toSInputStream(stream, binary)
{
var sstream;
if (binary)
{
sstream = Components.classes["@mozilla.org/binaryinputstream;1"];
sstream = sstream.createInstance(nsIBinaryInputStream);
sstream.setInputStream(stream);
}
else
{
sstream = Components.classes["@mozilla.org/scriptableinputstream;1"];
sstream = sstream.createInstance(nsIScriptableInputStream);
sstream.init(stream);
}
return sstream;
}
function CBSConnection ()
function toSOutputStream(stream, binary)
{
var sstream;
if (binary)
{
sstream = Components.classes["@mozilla.org/binaryoutputstream;1"];
sstream = sstream.createInstance(Components.interfaces.nsIBinaryOutputStream);
sstream.setOutputStream(stream);
}
else
{
sstream = stream;
}
return sstream;
}
function CBSConnection (binary)
{
var sockServiceClass =
Components.classesByID["{c07e81e0-ef12-11d2-92b6-00105a1b0d64}"];
@ -77,7 +110,11 @@ function CBSConnection ()
(Components.interfaces.nsISocketTransportService);
this.wrappedJSObject = this;
this.binaryMode = binary || false;
//if (!ASSERT(!this.binaryMode || jsenv.HAS_WORKING_BINARY_STREAMS,
// "Unable to use binary streams in this build."))
// return null;
}
CBSConnection.prototype.connect =
@ -126,12 +163,15 @@ function bc_connect(host, port, bind, tcp_flag, observer)
this._outputStream = this._transport.openOutputStream(0, -1, 0);
if (!this._outputStream)
throw "Error getting output stream.";
this._inputStream =
toScriptableInputStream(this._transport.openInputStream(0,
-1, 0));
this._sOutputStream = toSOutputStream(this._outputStream,
this.binaryMode);
this._inputStream = this._transport.openInputStream(0, -1, 0);
if (!this._inputStream)
throw "Error getting input stream.";
}
this._sInputStream = toSInputStream(this._inputStream,
this.binaryMode);
}
}
else
{
@ -153,9 +193,14 @@ function bc_connect(host, port, bind, tcp_flag, observer)
this._transport.openOutputStream(openFlags, 4096, -1);
if (!this._outputStream)
throw "Error getting output stream.";
this._sOutputStream = toSOutputStream(this._outputStream,
this.binaryMode);
this._inputStream = this._transport.openInputStream(openFlags, 0, 0);
if (!this._inputStream)
throw "Error getting input stream.";
this._sInputStream = toSInputStream(this._inputStream,
this.binaryMode);
}
this.connectDate = new Date();
@ -165,6 +210,109 @@ function bc_connect(host, port, bind, tcp_flag, observer)
}
CBSConnection.prototype.listen =
function bc_listen(port, observer)
{
var serverSockClass =
Components.classes["@mozilla.org/network/server-socket;1"];
if (!serverSockClass)
throw ("Couldn't get server socket class.");
var serverSock = serverSockClass.createInstance();
if (!serverSock)
throw ("Couldn't get server socket.");
this._serverSock = serverSock.QueryInterface
(Components.interfaces.nsIServerSocket);
this._serverSock.init(port, false, -1);
this._serverSockListener = new SocketListener(this, observer);
this._serverSock.asyncListen(this._serverSockListener);
this.port = this._serverSock.port;
return true;
}
CBSConnection.prototype.accept =
function bc_accept(transport, observer)
{
this._transport = transport;
this.host = this._transport.host.toLowerCase();
this.port = this._transport.port;
//this.bind = bind;
//this.tcp_flag = tcp_flag;
if (jsenv.HAS_STREAM_PROVIDER)
{
if (jsenv.HAS_NSPR_EVENTQ)
{ /* we've got an event queue, so start up an async write */
this._streamProvider = new StreamProvider (observer);
this._write_req =
this._transport.asyncWrite (this._streamProvider, this,
0, -1, 0);
}
else
{
/* no nspr event queues in this environment, we can't use async
* calls, so set up the streams. */
this._outputStream = this._transport.openOutputStream(0, -1, 0);
if (!this._outputStream)
throw "Error getting output stream.";
this._sOutputStream = toSOutputStream(this._outputStream,
this.binaryMode);
//this._scriptableInputStream =
this._inputStream = this._transport.openInputStream(0, -1, 0);
if (!this._inputStream)
throw "Error getting input stream.";
this._sInputStream = toSInputStream(this._inputStream,
this.binaryMode);
}
}
else
{
/* if we don't have an event queue, then all i/o must be blocking */
var openFlags;
if (jsenv.HAS_NSPR_EVENTQ)
openFlags = 0;
else
openFlags = Components.interfaces.nsITransport.OPEN_BLOCKING;
/* no limit on the output stream buffer */
this._outputStream =
this._transport.openOutputStream(openFlags, 4096, -1);
if (!this._outputStream)
throw "Error getting output stream.";
this._sOutputStream = toSOutputStream(this._outputStream,
this.binaryMode);
this._inputStream = this._transport.openInputStream(openFlags, 0, 0);
if (!this._inputStream)
throw "Error getting input stream.";
this._sInputStream = toSInputStream(this._inputStream,
this.binaryMode);
}
this.connectDate = new Date();
this.isConnected = true;
// Clean up listening socket.
this._serverSock.close();
return this.isConnected;
}
CBSConnection.prototype.close =
function bc_close()
{
if ("_serverSock" in this && this._serverSock)
this._serverSock.close();
}
CBSConnection.prototype.disconnect =
function bc_disconnect()
{
@ -202,7 +350,10 @@ function bc_readdata(timeout, count)
try
{
rv = this._scriptableInputStream.read (count);
if (this.binaryMode)
rv = this._sInputStream.readBytes(count);
else
rv = this._sInputStream.read(count);
}
catch (ex)
{
@ -258,7 +409,10 @@ function bc_senddatanow(str)
try
{
this._outputStream.write(str, str.length);
if (this.binaryMode)
this._sOutputStream.writeBytes(str, str.length);
else
this._sOutputStream.write(str, str.length);
rv = true;
}
catch (ex)
@ -377,10 +531,25 @@ function sl_dataavail (request, ctxt, inStr, sourceOffset, count)
return;
}
if (!("_scriptableInputStream" in ctxt))
ctxt._scriptableInputStream = toScriptableInputStream (inStr);
if (this._observer)
this._observer.onStreamDataAvailable(request, inStr, sourceOffset,
count);
}
function SocketListener(connection, observer)
{
this._connection = connection;
this._observer = observer;
}
SocketListener.prototype.onSocketAccepted =
function sl_onSocketAccepted(socket, transport)
{
this._observer.onSocketAccepted(socket, transport);
}
SocketListener.prototype.onStopListening =
function sl_onStopListening(socket, status)
{
delete this._connection._serverSockListener;
delete this._connection._serverSock;
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -310,11 +310,12 @@ function LocalFile(file, mode, perms, tmp)
if (mode & (MODE_RDONLY | MODE_RDWR))
{
var is = classes[FILEIN_CTRID].createInstance(nsIFileInputStream);
is.init(this.localFile, mode, perms, tmp);
this.baseInputStream =
classes[FILEIN_CTRID].createInstance(nsIFileInputStream);
this.baseInputStream.init(this.localFile, mode, perms, tmp);
this.inputStream =
classes[SCRIPTSTREAM_CTRID].createInstance(nsIScriptableInputStream);
this.inputStream.init(is);
this.inputStream.init(this.baseInputStream);
}
}

Просмотреть файл

@ -86,7 +86,8 @@ function event_tracer (e)
break;
case "dcc-chat":
name = e.destObject.host + ":" + e.destObject.port;
case "dcc-file":
name = e.destObject.localIP + ":" + e.destObject.port;
if (e.type == "rawdata")
data = "'" + e.data + "'";
break;

Просмотреть файл

@ -80,6 +80,7 @@ function decodeParam(number, charsetOrObject)
function CIRCNetwork (name, serverList, eventPump)
{
this.name = name;
this.displayName = name;
this.servers = new Object();
this.serverList = new Array();
this.ignoreList = new Object();
@ -495,6 +496,16 @@ function serv_logout(reason)
this.connection.disconnect();
}
CIRCServer.prototype.addTarget =
function serv_addtarget(name)
{
if (arrayIndexOf(this.channelTypes, name[0]) != -1) {
return this.addChannel(name);
} else {
return this.addUser(name);
}
}
CIRCServer.prototype.addChannel =
function serv_addchan(unicodeName, charset)
{
@ -669,7 +680,10 @@ function serv_disconnect(e)
e.destObject = this.parent;
for (var c in this.channels)
{
this.channels[c].users = new Object();
this.channels[c].active = false;
}
this.connection = null;
this.isConnected = false;
@ -1027,7 +1041,7 @@ function serv_001 (e)
this.supports.chidlen = 5;
/* Make sure it's possible to tell if we've actually got a 005 message. */
this.supports.rpl_isupport = false;
this.channelTypes = { '#': true, '&': true };
this.channelTypes = [ '#', '&' ];
/* This next one isn't in the isupport draft, but instead is defaulting to
* the codes we understand. It should be noted, some servers include the
* mode characters (o, h, v) in the 'a' list, although the draft spec says
@ -1108,7 +1122,7 @@ function serv_005 (e)
{
this.channelTypes = [];
for (m = 0; m < this.supports.chantypes.length; m++)
this.channelTypes[this.supports.chantypes[m]] = true;
this.channelTypes.push( this.supports.chantypes[m] );
}
if ("prefix" in this.supports)
@ -1155,18 +1169,6 @@ function serv_005 (e)
}
/* TOPIC reply */
CIRCServer.prototype.on332 =
function serv_332 (e)
{
e.channel = new CIRCChannel (this, e.params[2]);
e.channel.topic = toUnicode(e.params[3], e.channel);
e.destObject = e.channel;
e.set = "channel";
return true;
}
/* whois name */
CIRCServer.prototype.on311 =
function serv_311 (e)
@ -1175,6 +1177,8 @@ function serv_311 (e)
e.user.desc = e.decodeParam(6, e.user);
e.destObject = this.parent;
e.set = "network";
this.pendingWhoisLines = e.user;
}
/* whois server */
@ -1199,6 +1203,53 @@ function serv_317 (e)
e.set = "network";
}
/* whois channel list */
CIRCServer.prototype.on319 =
function serv_319(e)
{
e.user = new CIRCUser(this, e.params[2]);
e.destObject = this.parent;
e.set = "network";
}
/* end of whois */
CIRCServer.prototype.on318 =
function serv_318(e)
{
e.user = new CIRCUser(this, e.params[2]);
if ("pendingWhoisLines" in this)
delete this.pendingWhoisLines;
e.destObject = this.parent;
e.set = "network";
}
/* TOPIC reply - no topic set */
CIRCServer.prototype.on331 =
function serv_331 (e)
{
e.channel = new CIRCChannel (this, e.params[2]);
e.channel.topic = "";
e.destObject = e.channel;
e.set = "channel";
return true;
}
/* TOPIC reply - topic set */
CIRCServer.prototype.on332 =
function serv_332 (e)
{
e.channel = new CIRCChannel (this, e.params[2]);
e.channel.topic = toUnicode(e.params[3], e.channel);
e.destObject = e.channel;
e.set = "channel";
return true;
}
/* topic information */
CIRCServer.prototype.on333 =
function serv_333 (e)
@ -1320,14 +1371,118 @@ function serv_324 (e)
return true;
}
/* channel ban entry */
CIRCServer.prototype.on367 =
function serv_367(e)
{
e.channel = new CIRCChannel (this, e.params[2]);
e.destObject = e.channel;
e.set = "channel";
e.ban = e.params[3];
e.user = new CIRCUser(this, e.params[4]);
e.banTime = new Date (Number(e.params[5]) * 1000);
if (typeof e.channel.bans[e.ban] == "undefined")
{
e.channel.bans[e.ban] = {host: e.ban, user: e.user, time: e.banTime };
var ban_evt = new CEvent("channel", "ban", e.channel, "onBan");
ban_evt.channel = e.channel;
ban_evt.ban = e.ban;
ban_evt.source = e.user;
this.parent.eventPump.addEvent(ban_evt);
}
return true;
}
/* channel ban list end */
CIRCServer.prototype.on368 =
function serv_368(e)
{
e.channel = new CIRCChannel (this, e.params[2]);
e.destObject = e.channel;
e.set = "channel";
/* This flag is cleared in a timeout (which occurs right after the current
* message has been processed) so that the new event target (the channel)
* will still have the flag set when it executes.
*/
if ("pendingBanList" in e.channel)
setTimeout(function() { delete e.channel.pendingBanList; }, 0);
return true;
}
/* channel except entry */
CIRCServer.prototype.on348 =
function serv_348(e)
{
e.channel = new CIRCChannel (this, e.params[2]);
e.destObject = e.channel;
e.set = "channel";
return true;
}
/* channel except list end */
CIRCServer.prototype.on349 =
function serv_349(e)
{
e.channel = new CIRCChannel (this, e.params[2]);
e.destObject = e.channel;
e.set = "channel";
if ("pendingExceptList" in e.channel)
setTimeout(function (){ delete e.channel.pendingExceptList; }, 0);
return true;
}
/* don't have operator perms */
CIRCServer.prototype.on482 =
function serv_482(e)
{
e.channel = new CIRCChannel (this, e.params[2]);
e.destObject = e.channel;
e.set = "channel";
/* Some servers (e.g. Hybrid) don't let you get the except list without ops,
* so we might be waiting for this list forever otherwise.
*/
if ("pendingExceptList" in e.channel)
setTimeout(function (){ delete e.channel.pendingExceptList; }, 0);
return true;
}
/* userhost reply */
CIRCServer.prototype.on302 =
function serv_302(e)
{
var list = e.params[2].split(/\s+/);
for (var i = 0; i < list.length; i++)
{
// <reply> ::= <nick>['*'] '=' <'+'|'-'><hostname>
// '*' == IRCop. '+' == here, '-' == away.
var data = list[i].match(/^(.*)(\*?)=([-+])(.*)@(.*)$/);
if (data)
this.addUser(data[1], data[4], data[5]);
}
e.destObject = this.parent;
e.set = "network";
return true;
}
/* user changed the mode */
CIRCServer.prototype.onMode =
function serv_mode (e)
{
e.destObject = this;
/* modes are not allowed in +channels -> no need to test that here.. */
if ((e.params[1][0] == "#") || (e.params[1][0] == "&") ||
(e.params[1][0] == "!"))
if (arrayIndexOf(this.channelTypes, e.params[1][0]) != -1)
{
e.channel = new CIRCChannel (this, e.params[1]);
if ("user" in e && e.user)
@ -1347,7 +1502,7 @@ function serv_mode (e)
CIRCServer.prototype.onUserMode =
function serv_usermode (e)
{
e.user = new CIRCUser(this.parent, e.params[1])
e.user = new CIRCUser(this, e.params[1])
e.user.modestr = e.params[2];
e.destObject = this.parent;
e.set = "network";
@ -1631,22 +1786,44 @@ function serv_kick (e)
}
CIRCServer.prototype.onJoin =
function serv_join (e)
function serv_join(e)
{
e.channel = new CIRCChannel (this, e.params[1]);
if (e.user == this.me)
e.server.sendData ("MODE " + e.channel.encodedName + "\n" /* +
"BANS " + e.channel.encodedName + "\n" */);
e.user = new CIRCChanUser (e.channel, e.user.nick);
e.channel = new CIRCChannel(this, e.params[1]);
e.user = new CIRCChanUser(e.channel, e.user.nick);
if (userIsMe(e.user))
{
// Give us the channel mode!
e.server.sendData("MODE " + e.channel.encodedName + "\n");
// Get a full list of bans and exceptions, if supported.
if (arrayContains(this.channelModes.a, "b"))
{
e.server.sendData("MODE " + e.channel.encodedName + " +b\n");
e.channel.pendingBanList = true;
}
if (arrayContains(this.channelModes.a, "e"))
{
e.server.sendData("MODE " + e.channel.encodedName + " +e\n");
e.channel.pendingExceptList = true;
}
/* Clean up the topic, since servers don't always send RPL_NOTOPIC
* (no topic set) when joining a channel without a topic. In fact,
* the RFC even fails to mention sending a RPL_NOTOPIC after a join!
*/
e.channel.topic = "";
e.channel.topicBy = null;
e.channel.topicDate = null;
// And we're in!
e.channel.active = true;
e.channel.joined = true;
}
e.destObject = e.channel;
e.set = "channel";
return true;
}
@ -1689,8 +1866,7 @@ function serv_notice (e)
return true;
}
if ((e.params[1][0] == "#") || (e.params[1][0] == "&") ||
(e.params[1][0] == "+") || (e.params[1][0] == "!"))
if (arrayIndexOf(this.channelTypes, e.params[1][0]) != -1)
{
e.channel = new CIRCChannel(this, e.params[1]);
e.user = new CIRCChanUser (e.channel, e.user.nick);
@ -1721,8 +1897,7 @@ function serv_privmsg (e)
{
/* setting replyTo provides a standard place to find the target for */
/* replys associated with this event. */
if ((e.params[1][0] == "#") || (e.params[1][0] == "&") ||
(e.params[1][0] == "+") || (e.params[1][0] == "!"))
if (arrayIndexOf(this.channelTypes, e.params[1][0]) != -1)
{
e.channel = new CIRCChannel(this, e.params[1]);
e.user = new CIRCChanUser(e.channel, e.user.nick);
@ -1807,6 +1982,9 @@ function serv_ctcp (e)
return false;
}
e.CTCPCode = toUnicode(e.CTCPCode, e.replyTo);
e.CTCPData = toUnicode(e.CTCPData, e.replyTo);
e.type = "ctcp-" + e.CTCPCode;
e.destMethod = "onCTCP" + ary[1][0].toUpperCase() +
ary[1].substr (1, ary[1].length).toLowerCase();
@ -1917,7 +2095,13 @@ function serv_dccchat (e)
return false;
e.id = ary[2];
e.port = ary[3];
// Checky longword --> dotted IP conversion.
var host = Number(e.id).toString(16);
e.host = Number("0x" + host.substr(0, 2)) + "." +
Number("0x" + host.substr(2, 2)) + "." +
Number("0x" + host.substr(4, 2)) + "." +
Number("0x" + host.substr(6, 2));
e.port = Number(ary[3]);
e.destObject = e.replyTo;
e.set = (e.replyTo == e.user) ? "user" : "channel";
@ -1927,15 +2111,27 @@ function serv_dccchat (e)
CIRCServer.prototype.onDCCSend =
function serv_dccsend (e)
{
var ary = e.DCCData.match (/(\S+) (\d+) (\d+) (\d+)/);
var ary = e.DCCData.match(/(\S+) (\d+) (\d+) (\d+)/);
/* Just for mIRC: filenames with spaces may be enclosed in double-quotes.
* (though by default it replaces spaces with underscores, but we might as
* well cope). */
if (ary[1][0] == '"')
ary = e.DCCData.match(/"(.+)" (\d+) (\d+) (\d+)/);
if (ary == null)
return false;
e.file = ary[1];
e.id = ary[2];
e.port = ary[3];
e.size = ary[4];
// Cheeky longword --> dotted IP conversion.
var host = Number(e.id).toString(16);
e.host = Number("0x" + host.substr(0, 2)) + "." +
Number("0x" + host.substr(2, 2)) + "." +
Number("0x" + host.substr(4, 2)) + "." +
Number("0x" + host.substr(6, 2));
e.port = Number(ary[3]);
e.size = Number(ary[4]);
e.destObject = e.replyTo;
e.set = (e.replyTo == e.user) ? "user" : "channel";
@ -1960,6 +2156,7 @@ function CIRCChannel (parent, encodedName, unicodeName)
this.unicodeName = unicodeName;
else
this.unicodeName = toUnicode(encodedName, this);
this.displayName = this.unicodeName;
this.users = new Object();
this.bans = new Object();
@ -1997,6 +2194,14 @@ function chan_geturl ()
return this.parent.parent.getURL(target);
}
CIRCChannel.prototype.rehome =
function chan_rehome(newParent)
{
delete this.parent.channels[this.normalizedName];
this.parent = newParent;
this.parent.channels[this.normalizedName] = this;
}
CIRCChannel.prototype.addUser =
function chan_adduser (nick, modes)
{
@ -2101,7 +2306,8 @@ function chan_ctcpto (code, msg, type)
msg = msg || "";
type = type || "PRIVMSG";
this.parent.messageTo(type, this.encodedName, fromUnicode(msg, this), code);
this.parent.ctcpTo(this.encodedName, fromUnicode(code, this),
fromUnicode(msg, this), type);
}
CIRCChannel.prototype.join =
@ -2303,6 +2509,7 @@ function CIRCUser (parent, nick, name, host)
this.parent = parent;
this.nick = nick;
this.properNick = properNick;
this.displayName = properNick;
this.name = name;
this.host = host;
this.connectionHost = null;
@ -2323,10 +2530,19 @@ function usr_geturl ()
return this.parent.parent.getURL(this.nick) + ",isnick";
}
CIRCUser.prototype.rehome =
function usr_rehome(newParent)
{
delete this.parent.users[this.nick];
this.parent = newParent;
this.parent.users[this.nick] = this;
}
CIRCUser.prototype.changeNick =
function usr_changenick (nick)
{
this.properNick = nick;
this.displayName = nick;
this.nick = this.parent.toLowerCase(nick);
}
@ -2365,7 +2581,8 @@ function usr_ctcp (code, msg, type)
msg = msg || "";
type = type || "PRIVMSG";
this.parent.messageTo(type, this.name, fromUnicode(msg, this), code);
this.parent.ctcpTo(this.nick, fromUnicode(code, this),
fromUnicode(msg, this), type);
}
CIRCUser.prototype.whois =

Просмотреть файл

@ -197,7 +197,7 @@ function mmgr_showpop (event)
catch (ex)
{
dd ("caught exception evaling '" + node.getAttribute("id") + "'.'" +
attr + "'\n" + ex);
attr + "': '" + expr + "'\n" + ex);
}
return true;
};

Просмотреть файл

@ -41,12 +41,16 @@ const PREF_RELOAD = true;
const PREF_WRITETHROUGH = true;
const PREF_CHARSET = "utf-8"; // string prefs stored in this charset
function PrefRecord (name, defaultValue, label, help)
function PrefRecord(name, defaultValue, label, help, group)
{
this.name = name;
this.defaultValue = defaultValue;
this.help = help;
this.label = label ? label : name;
this.group = group ? group : "";
// Prepend the group 'general' if there isn't one already.
if (this.group.match(/^(\.|$)/))
this.group = "general" + this.group;
this.realValue = null;
}
@ -174,6 +178,7 @@ function pm_addprefs(prefSpecs)
for (var i = 0; i < prefSpecs.length; ++i)
{
this.addPref(prefSpecs[i][0], prefSpecs[i][1],
3 in prefSpecs[i] ? prefSpecs[i][3] : null, null,
2 in prefSpecs[i] ? prefSpecs[i][2] : null);
}
}
@ -370,16 +375,16 @@ function pm_reset(prefName)
}
PrefManager.prototype.addPref =
function pm_addpref(prefName, defaultValue, setter, bundle)
function pm_addpref(prefName, defaultValue, setter, bundle, group)
{
var prefManager = this;
if (!bundle)
bundle = this.defaultBundle;
function updateArrayPref() { prefManager.updateArrayPref(prefName); };
function prefGetter() { return prefManager.getPref(prefName); };
function prefSetter(value) { return prefManager.setPref(prefName, value); };
if (!ASSERT(!(prefName in this.defaultValues),
"Preference already exists: " + prefName))
{
@ -391,17 +396,22 @@ function pm_addpref(prefName, defaultValue, setter, bundle)
if (defaultValue instanceof Array)
defaultValue.update = updateArrayPref;
var label = getMsgFrom(bundle, "pref." + prefName + ".label", null, name);
var label = getMsgFrom(bundle, "pref." + prefName + ".label", null, prefName);
var help = getMsgFrom(bundle, "pref." + prefName + ".help", null,
MSG_NO_HELP);
if (label == prefName)
dd("WARNING: !!! Preference without label: " + prefName);
if (help == MSG_NO_HELP)
dd("WARNING: Preference without help text: " + prefName);
this.prefRecords[prefName] = new PrefRecord (prefName, defaultValue,
label, help);
label, help, group);
this.prefNames.push(prefName);
this.prefNames.sort();
this.prefs.__defineGetter__(prefName, prefGetter);
this.prefs.__defineSetter__(prefName, setter);
}

Просмотреть файл

@ -105,6 +105,7 @@ jsenv.HAS_RHINO = (typeof defineClass == "function");
jsenv.HAS_DOCUMENT = (typeof document == "object");
jsenv.HAS_NSPR_EVENTQ = jsenv.HAS_DOCUMENT;
jsenv.HAS_STREAM_PROVIDER = ("nsIStreamProvider" in Components.interfaces);
jsenv.HAS_SERVER_SOCKETS = ("nsIServerSocket" in Components.interfaces);
function dumpObject (o, pfx, sep)
{
@ -425,7 +426,7 @@ function encodeChar(ch)
function escapeFileName(fileName)
{
return fileName.replace(/[^\w\d.,#\-_]/g, encodeChar);
return fileName.replace(/[^\w\d.,#\-_%]/g, encodeChar);
}
function getCommonPfx (list)

Просмотреть файл

@ -139,8 +139,7 @@
<text id="server-nick" value=""/>
<hbox id="multiline-box" flex="1" collapsed="true">
<textbox id="multiline-input" multiline="true" flex="1" height="100px"
class="multiline-input-widget" onfocus="onInputFocus();"
onkeypress="onInputKeypress(this)"/>
class="multiline-input-widget" onfocus="onInputFocus();"/>
<vbox>
<toolbarbutton id="button-input" flex="1"
oncommand="onMultilineSend(event);"
@ -152,7 +151,7 @@
</hbox>
<hbox id="singleline-box" flex="1" collapsed="true">
<textbox id="input" class="input-widget" flex="1" autostretch="true"
onfocus="onInputFocus();" onkeypress="onInputKeypress(this)"/>
onfocus="onInputFocus();"/>
<toolbarbutton id="button-multiline-expand"
oncommand="dispatch('pref multiline true');"
tooltiptext="&multiline-expand.tooltip;"/>

Просмотреть файл

@ -61,7 +61,14 @@ function initCommands()
["cmd-copy-link-url", cmdCopyLinkURL, 0],
["cmd-selectall", cmdSelectAll, 0],
["op", cmdChanUserMode, CMD_NEED_CHAN | CMD_CONSOLE],
["dcc-accept", cmdDCCAccept, CMD_CONSOLE],
["dcc-chat", cmdDCCChat, CMD_NEED_NET | CMD_CONSOLE],
["dcc-close", cmdDCCClose, CMD_CONSOLE],
["dcc-decline", cmdDCCDecline, CMD_CONSOLE],
["dcc-list", cmdDCCList, CMD_CONSOLE],
["dcc-send", cmdDCCSend, CMD_NEED_NET | CMD_CONSOLE],
["deop", cmdChanUserMode, CMD_NEED_CHAN | CMD_CONSOLE],
["describe", cmdDescribe, CMD_NEED_SRV | CMD_CONSOLE],
["hop", cmdChanUserMode, CMD_NEED_CHAN | CMD_CONSOLE],
["dehop", cmdChanUserMode, CMD_NEED_CHAN | CMD_CONSOLE],
["voice", cmdChanUserMode, CMD_NEED_CHAN | CMD_CONSOLE],
@ -117,6 +124,7 @@ function initCommands()
["quote", cmdQuote, CMD_NEED_SRV | CMD_CONSOLE],
["rlist", cmdRlist, CMD_NEED_SRV | CMD_CONSOLE],
["reload-ui", cmdReloadUI, 0],
["say", cmdSay, CMD_NEED_SRV | CMD_CONSOLE],
["server", cmdServer, CMD_CONSOLE],
["squery", cmdSquery, CMD_NEED_SRV | CMD_CONSOLE],
["stalk", cmdStalk, CMD_CONSOLE],
@ -194,8 +202,8 @@ function initCommands()
"message", "params", "font",
"reason", "expression",
"ircCommand", "prefValue",
"newTopic", "commandList"],
"rest");
"newTopic", "commandList",
"file"], "rest");
client.commandManager.argTypes["plugin"] = parsePlugin;
}
@ -885,8 +893,10 @@ function cmdTestDisplay(e)
var me = e.server.me;
var sampleUser = {TYPE: "IRCUser", nick: "ircmonkey",
name: "IRCMonkey", properNick: "IRCMonkey",
displayName: "IRCMonkey",
host: ""};
var sampleChannel = {TYPE: "IRCChannel", name: "#mojo"};
var sampleChannel = {TYPE: "IRCChannel", name: "#mojo",
displayName: "#mojo"};
function test (from, to)
{
@ -1030,6 +1040,8 @@ function cmdDeleteView(e)
if (e.view.TYPE == "IRCChannel" && e.view.active)
e.view.part();
if (e.view.TYPE == "IRCDCCChat" && e.view.active)
e.view.disconnect();
if (client.viewsArray.length < 2)
{
@ -1043,6 +1055,11 @@ function cmdDeleteView(e)
var i = deleteTab (tb);
if (i != -1)
{
if (e.view.logFile)
{
e.view.logFile.close();
e.view.logFile = null;
}
delete e.view.messageCount;
delete e.view.messages;
client.deck.removeChild(e.view.frame);
@ -1230,10 +1247,19 @@ function cmdMe(e)
display(getMsg(MSG_ERR_IMPROPER_VIEW, "me"), MT_ERROR);
return;
}
var msg = filterOutput(e.action, "ACTION", "ME!");
e.sourceObject.display(msg, "ACTION", "ME!", e.sourceObject);
e.sourceObject.act(msg);
}
e.action = filterOutput (e.action, "ACTION", "ME!");
display (e.action, "ACTION", "ME!", e.sourceObject);
e.sourceObject.act (e.action);
function cmdDescribe(e)
{
var target = e.server.addTarget(e.target);
var msg = filterOutput(e.action, "ACTION", "ME!");
e.sourceObject.display(msg, "ACTION", "ME!", target);
target.act(msg);
}
function cmdMotif(e)
@ -1328,8 +1354,15 @@ function cmdListPlugins(e)
return;
}
for (var i = 0; i < client.plugins.length; ++i)
listPlugin(client.plugins[i], i);
if (client.plugins.length > 0)
{
for (var i = 0; i < client.plugins.length; ++i)
listPlugin(client.plugins[i], i);
}
else
{
display(MSG_NO_PLUGINS);
}
}
function cmdRlist(e)
@ -1363,13 +1396,26 @@ function cmdQuery(e)
return user;
}
function cmdSay(e)
{
if (!("say" in e.sourceObject))
{
display(getMsg(MSG_ERR_IMPROPER_VIEW, "say"), MT_ERROR);
return;
}
var msg = filterOutput(e.message, "PRIVMSG", "ME!");
e.sourceObject.display(msg, "PRIVMSG", "ME!", e.sourceObject);
e.sourceObject.say(msg, e.sourceObject);
}
function cmdMsg(e)
{
var usr = e.server.addUser(e.nickname);
var target = e.server.addTarget(e.nickname);
var msg = filterOutput(e.message, "PRIVMSG", "ME!");
usr.display(e.message, "PRIVMSG", "ME!", usr);
usr.say(e.message, e.sourceObject);
e.sourceObject.display(msg, "PRIVMSG", "ME!", target);
target.say(msg, target);
}
function cmdNick(e)
@ -1459,7 +1505,8 @@ function cmdGotoURL(e)
function cmdCTCP(e)
{
e.server.ctcpTo (e.target, e.code, e.params);
var obj = e.server.addTarget(e.target);
obj.ctcp(e.code, e.params);
}
function cmdJoin(e)
@ -1504,8 +1551,8 @@ function cmdJoin(e)
e.key = channel.mode.key
}
if (e.channelName[0].search(/[#&+!]/) != 0)
e.channelName = "#" + e.channelName;
if (arrayIndexOf(e.server.channelTypes, e.channelName[0]) == -1)
e.channelName = e.server.channelTypes[0] + e.channelName;
var charset = e.charset ? e.charset : e.network.prefs["charset"];
e.channel = e.server.addChannel(e.channelName, charset);
@ -1541,8 +1588,8 @@ function cmdLeave(e)
if (e.channelName)
{
if (e.channelName[0].search(/[#&+!]/) != 0)
e.channelName = "#" + e.channelName;
if (arrayIndexOf(e.server.channelTypes, e.channelName[0]) == -1)
e.channelName = e.server.channelTypes[0] + e.channelName;
e.channelName = fromUnicode(e.channelName, e.network);
var key = e.server.toLowerCase(e.channelName);
@ -1826,6 +1873,14 @@ function cmdPref (e)
msg = MSG_FMT_PREF;
}
var ary = pm.listPrefs(e.prefName);
if (ary.length == 0)
{
display (getMsg(MSG_ERR_UNKNOWN_PREF, [e.prefName]),
MT_ERROR);
return false;
}
if (e.prefValue == "-")
e.deletePref = true;
@ -1883,14 +1938,6 @@ function cmdPref (e)
}
else
{
var ary = pm.listPrefs(e.prefName);
if (ary.length == 0)
{
display (getMsg(MSG_ERR_UNKNOWN_PREF, [e.prefName]),
MT_ERROR);
return false;
}
for (var i = 0; i < ary.length; ++i)
{
var value;
@ -2133,7 +2180,7 @@ function cmdSupports(e)
if ("channelTypes" in server)
display(getMsg(MSG_SUPPORTS_CHANTYPES,
keys(server.channelTypes).join(MSG_COMMASP)));
server.channelTypes.join(MSG_COMMASP)));
if ("channelModes" in server)
{
display(getMsg(MSG_SUPPORTS_CHANMODESA,
@ -2352,3 +2399,304 @@ function cmdFont(e)
dispatch("font-size", { fontSize: val });
}
}
function cmdDCCChat(e)
{
if (!jsenv.HAS_SERVER_SOCKETS)
return display(MSG_DCC_NOT_POSSIBLE);
if (!client.prefs["dcc.enabled"])
return display(MSG_DCC_NOT_ENABLED);
if (!e.nickname && !e.user)
return display(MSG_DCC_ERR_NOUSER);
var user;
if (e.nickname)
user = e.server.addUser(e.nickname);
else
user = e.server.addUser(e.user.nick);
var u = client.dcc.addUser(user);
var c = client.dcc.addChat(u, client.dcc.getNextPort());
c.request();
display(getMsg(MSG_DCCCHAT_SENT_REQUEST, [u.properNick, c.localIP,
c.port]));
return true;
}
function cmdDCCClose(e)
{
if (!jsenv.HAS_SERVER_SOCKETS)
return display(MSG_DCC_NOT_POSSIBLE);
if (!client.prefs["dcc.enabled"])
return display(MSG_DCC_NOT_ENABLED);
// If there is no nickname specified, use current view.
if (!e.nickname)
{
if (client.currentObject.TYPE == "IRCDCCChat")
return client.currentObject.abort();
// ...if there is one.
return display(MSG_DCC_ERR_NOCHAT);
}
if (e.type)
e.type = [e.type.toLowerCase()];
else
e.type = ["chat", "file"];
// Go ask the DCC code for some matching requets.
var list = client.dcc.getMatches
(e.nickname, e.file, e.type, [DCC_DIR_GETTING, DCC_DIR_SENDING],
[DCC_STATE_REQUESTED, DCC_STATE_ACCEPTED, DCC_STATE_CONNECTED]);
// Disconnect if only one match.
if (list.length == 1)
return list[0].abort();
// Oops, couldn't figure the user's requets out, so give them some help.
display(getMsg(MSG_DCC_ACCEPTED_MATCHES, [list.length]));
display(MSG_DCC_MATCHES_HELP);
return true;
}
function cmdDCCSend(e)
{
if (!jsenv.HAS_SERVER_SOCKETS)
return display(MSG_DCC_NOT_POSSIBLE);
if (!client.prefs["dcc.enabled"])
return display(MSG_DCC_NOT_ENABLED);
const DIRSVC_CID = "@mozilla.org/file/directory_service;1";
const nsIProperties = Components.interfaces.nsIProperties;
if (!e.nickname && !e.user)
return display(MSG_DCC_ERR_NOUSER);
// Accept the request passed in...
var file;
if (!e.file)
{
var pickerRv = pickOpen(MSG_DCCFILE_SEND);
if (pickerRv.reason == PICK_CANCEL)
return false;
file = pickerRv.file;
}
else
{
// Wrap in try/catch because nsILocalFile creation throws a freaking
// error if it doesn't get a FULL path.
try
{
file = nsLocalFile(e.file);
}
catch(ex)
{
// Ok, try user's home directory.
var fl = Components.classes[DIRSVC_CID].getService(nsIProperties);
file = fl.get("Home", Components.interfaces.nsILocalFile);
// Another freaking try/catch wrapper.
try
{
// NOTE: This is so pathetic it can't cope with any path
// separators in it, so don't even THINK about lobing a
// relative path at it.
file.append(e.file);
// Wow. We survived.
}
catch (ex)
{
return display(MSG_DCCFILE_ERR_NOTFOUND);
}
}
}
if (!file.exists())
return display(MSG_DCCFILE_ERR_NOTFOUND);
if (!file.isFile())
return display(MSG_DCCFILE_ERR_NOTAFILE);
if (!file.isReadable())
return display(MSG_DCCFILE_ERR_NOTREADABLE);
var user;
if (e.nickname)
user = e.server.addUser(e.nickname);
else
user = e.server.addUser(e.user.nick);
var u = client.dcc.addUser(user);
var c = client.dcc.addFileTransfer(u, client.dcc.getNextPort());
c.request(file);
display(getMsg(MSG_DCCFILE_SENT_REQUEST, [u.properNick, c.localIP,
c.port, file.leafName, c.size]));
return true;
}
function cmdDCCList(e) {
if (!jsenv.HAS_SERVER_SOCKETS)
return display(MSG_DCC_NOT_POSSIBLE);
if (!client.prefs["dcc.enabled"])
return display(MSG_DCC_NOT_ENABLED);
var counts = { pending: 0, connected: 0, failed: 0 };
var k;
// Get all the DCC sessions.
var list = client.dcc.getMatches();
for (k = 0; k < list.length; k++) {
var c = list[k];
var type = c.TYPE.substr(6, c.TYPE.length - 6);
var dir = MSG_UNKNOWN;
var tf = MSG_UNKNOWN;
if (c.state.dir == DCC_DIR_SENDING)
{
dir = MSG_DCCLIST_DIR_OUT;
tf = MSG_DCCLIST_TO;
}
else if (c.state.dir == DCC_DIR_GETTING)
{
dir = MSG_DCCLIST_DIR_IN;
tf = MSG_DCCLIST_FROM;
}
var state = MSG_UNKNOWN;
switch (c.state.state)
{
case DCC_STATE_REQUESTED:
state = MSG_DCC_STATE_REQUEST;
counts.pending++;
break;
case DCC_STATE_ACCEPTED:
state = MSG_DCC_STATE_ACCEPT;
counts.connected++;
break;
case DCC_STATE_DECLINED:
state = MSG_DCC_STATE_DECLINE;
break;
case DCC_STATE_CONNECTED:
state = MSG_DCC_STATE_CONNECT;
counts.connected++;
break;
case DCC_STATE_DONE:
state = MSG_DCC_STATE_DISCONNECT;
break;
case DCC_STATE_ABORTED:
state = MSG_DCC_STATE_ABORT;
counts.failed++;
break;
case DCC_STATE_FAILED:
state = MSG_DCC_STATE_FAIL;
counts.failed++;
break;
}
display(getMsg(MSG_DCCLIST_LINE, [k + 1, state, dir, type, tf, c.name,
c.remoteIP, c.port]));
}
display(getMsg(MSG_DCCLIST_SUMMARY, [counts.pending, counts.connected,
counts.failed]));
return true;
}
function cmdDCCAccept(e)
{
if (!jsenv.HAS_SERVER_SOCKETS)
return display(MSG_DCC_NOT_POSSIBLE);
if (!client.prefs["dcc.enabled"])
return display(MSG_DCC_NOT_ENABLED);
function accept(c)
{
if (c.TYPE == "IRCDCCChat")
return c.accept();
// Accept the request passed in...
var filename = c.filename;
var ext = "*";
var m = filename.match(/...\.([a-z]+)$/i);
if (m)
ext = "*." + m[1];
var pickerRv = pickSaveAs(getMsg(MSG_DCCFILE_SAVE_TO, filename),
["$all", ext], filename);
if (pickerRv.reason == PICK_CANCEL)
return false;
c.accept(pickerRv.file);
if (c.TYPE == "CIRCDCCChat")
display(getMsg(MSG_DCCCHAT_ACCEPTED, [c.name, c.remoteIP, c.port]));
else
display(getMsg(MSG_DCCFILE_ACCEPTED, [c.name, c.remoteIP, c.port]));
return true;
};
// If there is no nickname specified, use the "last" item.
// This is the last DCC request that arrvied.
if (!e.nickname && client.dcc.last)
{
if ((new Date() - client.dcc.lastTime) >= 10000)
return accept(client.dcc.last);
return display(MSG_DCC_ERR_ACCEPT_TIME);
}
if (e.type)
e.type = [e.type.toLowerCase()];
else
e.type = ["chat", "file"];
// Go ask the DCC code for some matching requets.
var list = client.dcc.getMatches(e.nickname, e.file, e.type,
[DCC_DIR_GETTING], [DCC_STATE_REQUESTED]);
// Accept if only one match.
if (list.length == 1)
return accept(list[0]);
// Oops, couldn't figure the user's requets out, so give them some help.
display(getMsg(MSG_DCC_PENDING_MATCHES, [list.length]));
display(MSG_DCC_MATCHES_HELP);
return true;
}
function cmdDCCDecline(e)
{
if (!jsenv.HAS_SERVER_SOCKETS)
return display(MSG_DCC_NOT_POSSIBLE);
if (!client.prefs["dcc.enabled"])
return display(MSG_DCC_NOT_ENABLED);
function decline(c)
{
// Decline the request passed in...
c.decline();
if (c.TYPE == "CIRCDCCChat")
display(getMsg(MSG_DCCCHAT_DECLINED, [c.name, c.remoteIP, c.port]));
else
display(getMsg(MSG_DCCFILE_DECLINED, [c.name, c.remoteIP, c.port]));
};
// If there is no nickname specified, use the "last" item.
// This is the last DCC request that arrvied.
if (!e.nickname && client.dcc.last)
{
return decline(client.dcc.last);
}
if (!e.type)
e.type = ["chat", "file"];
// Go ask the DCC code for some matching requets.
var list = client.dcc.getMatches(e.nickname, e.file, e.type,
[DCC_DIR_GETTING], [DCC_STATE_REQUESTED]);
// Decline if only one match.
if (list.length == 1)
return decline(list[0]);
// Oops, couldn't figure the user's requets out, so give them some help.
display(getMsg(MSG_DCC_PENDING_MATCHES, [list.length]));
display(MSG_DCC_MATCHES_HELP);
return true;
}

Просмотреть файл

@ -0,0 +1,87 @@
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is ChatZilla.
*
* The Initial Developer of the Original Code is James Ross.
* Portions created by the Initial Developer are Copyright (C) 2004
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* James Ross <silver@warwickcompsoc.co.uk>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
var rv, rad, box1, box2;
function changeType()
{
box2.disabled = (rad.value == "net");
}
function onOK()
{
rv.ok = true;
rv.type = rad.value;
rv.net = box1.value;
rv.chan = box2.value;
return true;
}
function onCancel()
{
rv.ok = false;
return true;
}
function onLoad()
{
rad = document.getElementById("prefType");
box1 = document.getElementById("prefName1");
box2 = document.getElementById("prefName2");
rv = window.arguments[0];
if (!("type" in rv))
rv.type = "";
if (!("net" in rv))
rv.net = "";
if (!("chan" in rv))
rv.chan = "";
rv.ok = false;
if (rv.type == "net")
rad.selectedIndex = 0;
if (rv.type == "chan")
rad.selectedIndex = 1;
if (rv.type == "user")
rad.selectedIndex = 2;
box1.value = rv.net || "";
box2.value = rv.chan || "";
}

Просмотреть файл

@ -0,0 +1,87 @@
<?xml version="1.0"?>
<!-- ***** BEGIN LICENSE BLOCK *****
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
-
- The contents of this file are subject to the Mozilla Public License Version
- 1.1 (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS IS" basis,
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- for the specific language governing rights and limitations under the
- License.
-
- The Original Code is ChatZilla.
-
- The Initial Developer of the Original Code is James Ross.
- Portions created by the Initial Developer are Copyright (C) 2004
- the Initial Developer. All Rights Reserved.
-
- Contributor(s):
- James Ross <silver@warwickcompsoc.co.uk>
-
- Alternatively, the contents of this file may be used under the terms of
- either the GNU General Public License Version 2 or later (the "GPL"), or
- the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- in which case the provisions of the GPL or the LGPL are applicable instead
- of those above. If you wish to allow use of your version of this file only
- under the terms of either the GPL or the LGPL, and not to allow others to
- use your version of this file under the terms of the MPL, indicate your
- decision by deleting the provisions above and replace them with the notice
- and other provisions required by the LGPL or the GPL. If you do not delete
- the provisions above, a recipient may use your version of this file under
- the terms of any one of the MPL, the GPL or the LGPL.
-
- ***** END LICENSE BLOCK ***** -->
<!DOCTYPE dialog SYSTEM "chrome://chatzilla/locale/config.dtd">
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="config.css" type="text/css"?>
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:html="http://www.w3.org/1999/xhtml"
windowtype="irc:chatzilla:config:add"
buttons="accept,cancel"
ondialogaccept="onOK();"
ondialogcancel="onCancel();"
onload="onLoad();"
title="&config.add.title;">
<script src="config-add.js"/>
<vbox>
<hbox align="center">
<label value="&config.type.label;" accesskey="&config.type.accesskey;"
tooltiptext="&config.type.hint;" control="prefType"/>
<!-- Beware the hacks, number 264: add |value| attribute to make .value
work when the dialog loads (|selected| selects an item, but doesn't
set .value). -->
<radiogroup orient="horizontal" id="prefType" value="chan"
onselect="changeType();">
<radio value="net" label="&network;"/>
<radio value="chan" label="&channel;" selected="true"/>
<radio value="user" label="&user;"/>
</radiogroup>
</hbox>
<separator class="groove"/>
<grid>
<columns><column/><column flex="1"/></columns>
<rows>
<row align="center">
<label value="&config.network.label;" control="prefName1"
tooltiptext="&config.network.hint;"
accesskey="&config.network.accesskey;"/>
<textbox id="prefName1"/>
</row>
<row align="center">
<label value="&config.target.label;" control="prefName2"
tooltiptext="&config.target.hint;"
accesskey="&config.target.accesskey;"/>
<textbox id="prefName2"/>
</row>
</rows>
</grid>
</vbox>
</dialog>

Просмотреть файл

@ -0,0 +1,61 @@
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is ChatZilla.
*
* The Initial Developer of the Original Code is James Ross.
* Portions created by the Initial Developer are Copyright (C) 2004
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* James Ross <silver@warwickcompsoc.co.uk>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* OSX uses lotsa padding on tabs. Need to allow window to expand. */
/* Instead of setting on dialog, we're going to set it on the two main
* components of the window, so that large changes in the size of bits of the
* dialog don't upset things.
*/
/* Set min-width on the left-side tree. */
#pref-objects {
min-width: 25ex;
}
/* Set min-width and min-height on tabs container. */
#pref-object-deck {
min-width: 65ex;
min-height: 32em;
width: 65ex;
height: 32em;
}
scroller {
overflow: auto;
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,111 @@
<?xml version="1.0"?>
<!-- ***** BEGIN LICENSE BLOCK *****
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
-
- The contents of this file are subject to the Mozilla Public License Version
- 1.1 (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS IS" basis,
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- for the specific language governing rights and limitations under the
- License.
-
- The Original Code is ChatZilla.
-
- The Initial Developer of the Original Code is James Ross.
- Portions created by the Initial Developer are Copyright (C) 2004
- the Initial Developer. All Rights Reserved.
-
- Contributor(s):
- James Ross <silver@warwickcompsoc.co.uk>
-
- Alternatively, the contents of this file may be used under the terms of
- either the GNU General Public License Version 2 or later (the "GPL"), or
- the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- in which case the provisions of the GPL or the LGPL are applicable instead
- of those above. If you wish to allow use of your version of this file only
- under the terms of either the GPL or the LGPL, and not to allow others to
- use your version of this file under the terms of the MPL, indicate your
- decision by deleting the provisions above and replace them with the notice
- and other provisions required by the LGPL or the GPL. If you do not delete
- the provisions above, a recipient may use your version of this file under
- the terms of any one of the MPL, the GPL or the LGPL.
-
- ***** END LICENSE BLOCK ***** -->
<!DOCTYPE dialog SYSTEM "chrome://chatzilla/locale/config.dtd">
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="config.css" type="text/css"?>
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:html="http://www.w3.org/1999/xhtml"
windowtype="irc:chatzilla:config"
buttons="accept,cancel,extra1"
extra1Label="&dialog.apply;"
ondialogaccept="gPrefWindow.onOK();"
ondialogcancel="gPrefWindow.onCancel();"
ondialogextra1="gPrefWindow.onApply();"
onload="setupButtons(); gPrefWindow.onLoad();"
onunload="gPrefWindow.onClose();"
title="&window.title;">
<script src="chrome://global/content/strres.js"/>
<script src="chrome://chatzilla/content/lib/js/utils.js"/>
<script src="chrome://chatzilla/content/lib/js/file-utils.js"/>
<script src="chrome://chatzilla/content/lib/js/pref-manager.js"/>
<script src="chrome://chatzilla/content/lib/js/message-manager.js"/>
<script src="chrome://chatzilla/content/prefs.js"/>
<script src="chrome://chatzilla/content/messages.js"/>
<script src="config.js"/>
<tooltip id="czPrefTip" orient="vertical"
onpopupshowing="return gPrefWindow.onTooltipPopupShowing(this);">
<vbox>
<label id="czPrefTipTitle" class="header">.</label>
<label id="czPrefTipLabel">.</label>
</vbox>
<spacer flex="1"/>
</tooltip>
<deck id="loadDeck" flex="1">
<vbox flex="1" align="center" pack="center">
<label class="loading" value="&loading.label;"/>
</vbox>
<hbox flex="1">
<vbox id="pref-objects">
<tree id="pref-tree-object" flex="1" seltype="single"
hidecolumnpicker="true" onselect="gPrefWindow.onSelectObject();">
<treecols>
<treecol id="pref-col-name" primary="true" flex="1"
hideheader="true"/>
</treecols>
<treechildren id="pref-tree"/>
</tree>
<hbox>
<button label="&object.add.label;" tooltiptext="&object.add.hint;"
accesskey="&object.add.accesskey;" flex="1"
oncommand="gPrefWindow.onAddObject();"/>
<button label="&object.del.label;" tooltiptext="&object.del.hint;"
accesskey="&object.del.accesskey;" flex="1"
oncommand="gPrefWindow.onDeleteObject();" id="object-delete"/>
</hbox>
</vbox>
<vbox flex="1">
<dialogheader id="pref-header" title=""/>
<deck flex="1" id="pref-object-deck"/>
<hbox align="center">
<button label="&object.reset.label;" tooltiptext="&object.reset.hint;"
accesskey="&object.reset.accesskey;"
oncommand="gPrefWindow.onResetObject();"/>
<spacer flex="1"/>
<html:a onclick="" target="_blank" href="&homepage.url;"
style="display: block; color: blue; text-decoration:
underline;">&homepage.label;</html:a>
</hbox>
</vbox>
</hbox>
</deck>
</dialog>

Просмотреть файл

@ -9,13 +9,13 @@
<!-- package information -->
<RDF:Description about="urn:mozilla:package:chatzilla"
chrome:displayName="ChatZilla 0.9.61"
chrome:displayName="ChatZilla 0.9.63"
chrome:author="mozilla.org"
chrome:authorURL="http://www.mozilla.org/projects/rt-messaging/chatzilla/"
chrome:description="A simple, straightforward Internet Relay Chat (IRC) client."
#expand chrome:localeVersion="__MOZILLA_LOCALE_VERSION__"
chrome:extension="true"
chrome:settingsURL=""
chrome:settingsURL="chrome://chatzilla/content/config.xul"
chrome:name="chatzilla">
</RDF:Description>

Просмотреть файл

@ -46,7 +46,7 @@ function onresize()
scrollDown(client.deck.childNodes[i], true);
}
function onInputFocus ()
function onInputFocus()
{
}
@ -60,6 +60,12 @@ function onLoad()
catch (ex)
{
dd("caught exception while initializing:\n" + dumpObjectTree(ex));
setTimeout(function delayError() {
baseAlert("The was an error starting ChatZilla. " +
"Please report the following information:\n" +
dumpObjectTree(ex));
}, 100);
}
dd("}");
@ -77,6 +83,10 @@ function initHandlers()
window.onkeypress = onWindowKeyPress;
window.isFocused = false;
window.addEventListener("focus", onWindowFocus, true);
window.addEventListener("blur", onWindowBlue, true);
client.inputPopup = null;
}
@ -259,6 +269,8 @@ function onTooltip(event)
function onInputKeyPress (e)
{
if (client.prefs["outgoing.colorCodes"])
setTimeout(onInputKeyPressCallback, 100, e.target);
switch (e.keyCode)
{
@ -500,6 +512,16 @@ function onWindowKeyPress (e)
}
}
function onWindowFocus(e)
{
window.isFocused = true;
}
function onWindowBlue(e)
{
window.isFocused = false;
}
function onInputCompleteLine(e)
{
if (!client.inputHistory.length || client.inputHistory[0] != e.line)
@ -544,13 +566,7 @@ function onNotifyTimeout ()
}
}
function onInputKeypress (el)
{
if (client.prefs["outgoing.colorCodes"])
setTimeout(onInputKeypressCallback, 100, el);
}
function onInputKeypressCallback (el)
function onInputKeyPressCallback (el)
{
function doPopup(popup)
{
@ -613,6 +629,7 @@ CIRCNetwork.prototype.onInit =
function net_oninit ()
{
this.logFile = null;
this.lastServer = null;
}
CIRCNetwork.prototype.onInfo =
@ -624,6 +641,16 @@ function my_netinfo (e)
CIRCNetwork.prototype.onUnknown =
function my_unknown (e)
{
if ("pendingWhoisLines" in e.server)
{
/* whois lines always have the nick in param 2 */
e.user = new CIRCUser(e.server, e.params[2]);
e.destMethod = "onUnknownWhois";
e.destObject = this;
return;
}
e.params.shift(); /* remove the code */
e.params.shift(); /* and the dest. nick (always me) */
@ -675,27 +702,39 @@ function my_showtonet (e)
break;
case "001":
// Welcome to history.
client.globalHistory.addPage(this.getURL());
updateTitle(this);
this.updateHeader();
client.updateHeader();
updateStalkExpression(this);
// Code moved to lower down to speed this bit up. :)
var cmdary = this.prefs["autoperform"];
for (var i = 0; i < cmdary.length; ++i)
this.dispatch(cmdary[i])
if (("lastServer" in this) && this.lastServer)
if (this.lastServer)
{
for (var c in this.lastServer.channels)
var c, u;
// Re-home channels and users only if nessessary.
if (this.lastServer != this.primServ)
{
var chan = this.lastServer.channels[c];
for (c in this.lastServer.channels)
this.lastServer.channels[c].rehome(this.primServ);
for (u in this.lastServer.users)
this.lastServer.users[u].rehome(this.primServ);
// This makes sure we have the *right* me object.
this.primServ.me.rehome(this.primServ);
}
// Re-join channels from previous connection.
// (note they're all on .primServ now, not .lastServer)
for (c in this.primServ.channels)
{
var chan = this.primServ.channels[c];
if (chan.joined)
chan.join(chan.mode.key);
}
}
this.lastServer = this.primServ;
if ("pendingURLs" in this)
{
var url = this.pendingURLs.pop();
@ -706,7 +745,26 @@ function my_showtonet (e)
}
delete this.pendingURLs;
}
// Update everything.
// Welcome to history.
client.globalHistory.addPage(this.getURL());
updateTitle(this);
this.updateHeader();
client.updateHeader();
updateStalkExpression(this);
// Do this after the JOINs, so they are quicker.
// This is not time-critical code.
if (jsenv.HAS_SERVER_SOCKETS && client.prefs["dcc.enabled"] &&
this.prefs["dcc.useServerIP"])
{
// This is the quickest way to get out host/IP.
this.pendingUserhostReply = true;
this.primServ.sendData("USERHOST " +
this.primServ.me.nick + "\n");
}
str = e.decodeParam(2);
if ("onLogin" in this)
{
@ -735,7 +793,8 @@ CIRCNetwork.prototype.onUnknownCTCPReply =
function my_ctcprunk (e)
{
this.display(getMsg(MSG_FMT_CTCPREPLY,
[e.CTCPCode, e.CTCPData, e.user.properNick]),
[toUnicode(e.CTCPCode, this),
toUnicode(e.CTCPData, this), e.user.properNick]),
"CTCP_REPLY", e.user, e.server.me, this);
}
@ -745,6 +804,27 @@ function my_notice (e)
this.display(e.decodeParam(2), "NOTICE", this, e.server.me);
}
/* userhost reply */
CIRCNetwork.prototype.on302 =
function my_302(e)
{
if (jsenv.HAS_SERVER_SOCKETS && client.prefs["dcc.enabled"] &&
this.prefs["dcc.useServerIP"] && ("pendingUserhostReply" in this))
{
var me = new RegExp("^" + this.primServ.me.nick + "\\*?=", "i");
if (e.params[2].match(me))
client.dcc.addHost(this.primServ.me.host, true);
delete this.pendingUserhostReply;
return true;
}
e.destMethod = "onUnknown";
e.destObject = this;
return true;
}
CIRCNetwork.prototype.on303 = /* ISON (aka notify) reply */
function my_303 (e)
{
@ -988,15 +1068,18 @@ CIRCNetwork.prototype.on319 = /* whois channels */
CIRCNetwork.prototype.on312 = /* whois server */
CIRCNetwork.prototype.on317 = /* whois idle time */
CIRCNetwork.prototype.on318 = /* whois end of whois*/
CIRCNetwork.prototype.onUnknownWhois = /* misc whois line */
function my_whoisreply (e)
{
var text = "egads!";
var nick = e.params[2];
var user;
if (nick in e.server.users)
user = e.server.users[nick];
if (e.user)
user = e.user;
dd("WHOIS: " + nick + ", " + e.user);
switch (Number(e.code))
{
case 311:
@ -1027,12 +1110,16 @@ function my_whoisreply (e)
user.updateHeader();
break;
default:
text = toUnicode(e.params.splice(2, e.params.length).join(" "),
this);
}
if (user && "messages" in user)
user.displayHere (text, e.code);
else
e.server.parent.display(text, e.code);
//if (user && "messages" in user)
// user.displayHere(text, e.code);
//else
// e.server.parent.display(text, e.code);
this.display(text, e.code);
}
CIRCNetwork.prototype.on330 = /* ircu's 330 numeric ("X is logged in as Y") */
@ -1131,6 +1218,11 @@ function my_netdisconnect (e)
[this.getURL(), e.server.getURL()]);
break;
case NS_ERROR_NET_RESET:
msg = getMsg(MSG_CONNECTION_RESET,
[this.getURL(), e.server.getURL()]);
break;
case NS_ERROR_UNKNOWN_HOST:
msg = getMsg(MSG_UNKNOWN_HOST,
e.server.hostname);
@ -1150,14 +1242,24 @@ function my_netdisconnect (e)
[this.name, e.server.hostname, e.server.port]);
}
for (var v in client.viewsArray)
/* If we were only /trying/ to connect, and failed, just put an error on
* the network tab. If we were actually connected ok, put it on all tabs.
*/
if (this.connecting)
{
var obj = client.viewsArray[v].source;
if (obj != client)
{
var details = getObjectDetails(obj);
if ("server" in details && details.server == e.server)
obj.displayHere (msg, "ERROR");
this.displayHere(msg, "ERROR");
}
else
{
for (var v in client.viewsArray)
{
var obj = client.viewsArray[v].source;
if (obj != client)
{
var details = getObjectDetails(obj);
if ("server" in details && details.server == e.server)
obj.displayHere(msg, "ERROR");
}
}
}
@ -1166,14 +1268,6 @@ function my_netdisconnect (e)
var channel = this.primServ.channels[c];
client.rdf.clearTargets(channel.getGraphResource(),
client.rdf.resChanUser);
channel.active = false;
}
if (!this.connecting)
{
/* Make a note of the server we were on, so that the reconnect will
* be able to find out what we were joined. */
this.lastServer = this.primServ;
}
this.connecting = false;
@ -1260,7 +1354,7 @@ function my_cprivmsg (e)
if (typeof v != "undefined")
{
if (v != null)
if (v != null)
v = String(v);
else
v = "null";
@ -1276,9 +1370,8 @@ function my_cprivmsg (e)
this.say(rsp + v, this);
}
}
return true;
return true;
}
/* end of names */
@ -1354,6 +1447,23 @@ function my_topic (e)
}
}
CIRCChannel.prototype.on367 = /* channel ban stuff */
CIRCChannel.prototype.on368 =
function my_bans(e)
{
// Uh, we'll format this some other time.
if (!("pendingBanList" in this))
this.display(toUnicode(e.params.join(" "), this), e.code.toUpperCase());
}
CIRCChannel.prototype.on348 = /* channel except stuff */
CIRCChannel.prototype.on349 =
function my_excepts(e)
{
if (!("pendingExceptList" in this))
this.display(toUnicode(e.params.join(" "), this), e.code.toUpperCase());
}
CIRCChannel.prototype.onNotice =
function my_notice (e)
@ -1364,13 +1474,13 @@ function my_notice (e)
CIRCChannel.prototype.onCTCPAction =
function my_caction (e)
{
this.display (toUnicode(e.CTCPData, this), "ACTION", e.user, this);
this.display (e.CTCPData, "ACTION", e.user, this);
}
CIRCChannel.prototype.onUnknownCTCP =
function my_unkctcp (e)
{
this.display (getMsg(MSG_UNKNOWN_CTCP, [e.CTCPCode, e.CTCPData,
this.display (getMsg(MSG_UNKNOWN_CTCP, [e.CTCPCode, e.CTCPData,
e.user.properNick]),
"BAD-CTCP", e.user, this);
}
@ -1380,13 +1490,13 @@ function my_cjoin (e)
{
if (!("messages" in this))
this.displayHere(getMsg(MSG_CHANNEL_OPENED, this.unicodeName), MT_INFO);
if (userIsMe (e.user))
{
this.display (getMsg(MSG_YOU_JOINED, e.channel.unicodeName), "JOIN",
e.server.me, this);
client.globalHistory.addPage(this.getURL());
/* !-channels are "safe" channels, and get a server-generated prefix.
* For this reason, creating the channel is delayed until this point.
*/
@ -1559,24 +1669,15 @@ function user_oninit ()
}
CIRCUser.prototype.onPrivmsg =
function my_cprivmsg (e)
function my_cprivmsg(e)
{
if ("messages" in this)
if (!("messages" in this))
{
playSounds(client.prefs["queryBeep"]);
}
else
{
playSounds(client.prefs["msgBeep"]);
var limit = client.prefs["newTabLimit"];
if (limit == 0 || client.viewsArray.length < limit)
{
var tab = openQueryTab (e.server, e.user.nick);
if (client.FOCUS_NEW_TAB)
setCurrentObject(tab);
}
openQueryTab(e.server, e.user.nick);
}
this.display(e.decodeParam(2), "PRIVMSG", e.user, e.server.me);
}
@ -1603,13 +1704,20 @@ function my_unick (e)
CIRCUser.prototype.onNotice =
function my_notice (e)
{
this.display (e.decodeParam(2), "NOTICE", this, e.server.me);
this.display(e.decodeParam(2), "NOTICE", this, e.server.me);
}
CIRCUser.prototype.onCTCPAction =
function my_uaction (e)
function my_uaction(e)
{
e.user.display(toUnicode(e.CTCPData, this), "ACTION", this, e.server.me);
if (!("messages" in this))
{
var limit = client.prefs["newTabLimit"];
if (limit == 0 || client.viewsArray.length < limit)
openQueryTab(e.server, e.user.nick);
}
this.display(e.CTCPData, "ACTION", this, e.server.me);
}
CIRCUser.prototype.onUnknownCTCP =
@ -1617,7 +1725,133 @@ function my_unkctcp (e)
{
this.parent.parent.display (getMsg(MSG_UNKNOWN_CTCP,
[e.CTCPCode, e.CTCPData,
e.user.properNick]),
e.user.properNick]),
"BAD-CTCP", this, e.server.me);
}
CIRCUser.prototype.onDCCChat =
function my_dccchat(e)
{
if (!jsenv.HAS_SERVER_SOCKETS || !client.prefs["dcc.enabled"])
return;
this.parent.parent.display(getMsg(MSG_DCCCHAT_GOT_REQUEST, [e.user.properNick, e.host, e.port]), "INFO");
var u = client.dcc.addUser(e.user, e.host);
var c = client.dcc.addChat(u, e.port);
// Pass the event over to the DCC Chat object.
e.set = "dcc-chat";
e.destObject = c;
e.destMethod = "onGotRequest";
}
CIRCUser.prototype.onDCCSend =
function my_dccchat(e)
{
if (!jsenv.HAS_SERVER_SOCKETS || !client.prefs["dcc.enabled"])
return;
this.parent.parent.display(getMsg(MSG_DCCFILE_GOT_REQUEST, [e.user.properNick, e.host, e.port, e.file, e.size]), "INFO");
var u = client.dcc.addUser(e.user, e.host);
var f = client.dcc.addFileTransfer(u, e.port, e.file, e.size);
// Pass the event over to the DCC Chat object.
e.set = "dcc-file";
e.destObject = f;
e.destMethod = "onGotRequest";
}
CIRCUser.prototype.onDCCReject =
function my_dccchat(e)
{
if (!client.prefs["dcc.enabled"])
return;
//FIXME: Uh... cope. //
// Pass the event over to the DCC Chat object.
//e.set = "dcc-file";
//e.destObject = f;
//e.destMethod = "onGotReject";
}
CIRCDCCChat.prototype.onInit =
function my_dccinit(e)
{
//FIXME//
this.prefs = client.prefs;
}
CIRCDCCChat.prototype.onPrivmsg =
function my_dccprivmsg(e)
{
this.displayHere(e.line, "PRIVMSG", e.user, "ME!");
}
CIRCDCCChat.prototype.onCTCPAction =
function my_uaction(e)
{
this.displayHere(e.CTCPData, "ACTION", e.user, "ME!");
}
CIRCDCCChat.prototype.onUnknownCTCP =
function my_unkctcp(e)
{
this.displayHere(getMsg(MSG_UNKNOWN_CTCP, [e.CTCPCode, e.CTCPData,
e.user.properNick]),
"BAD-CTCP", e.user, "ME!");
}
CIRCDCCChat.prototype.onConnect =
function my_dccdisconnect(e)
{
playEventSounds("dccchat", "connect");
this.displayHere(getMsg(MSG_DCCCHAT_OPENED,
[this.user.displayName, this.localIP, this.port]),
"DCC-CHAT");
}
CIRCDCCChat.prototype.onAbort =
function my_dccabort(e)
{
this.display(getMsg(MSG_DCCCHAT_ABORTED,
[this.user.displayName, this.localIP, this.port]),
"DCC-CHAT");
}
CIRCDCCChat.prototype.onDisconnect =
function my_dccdisconnect(e)
{
playEventSounds("dccchat", "disconnect");
this.display(getMsg(MSG_DCCCHAT_CLOSED,
[this.user.displayName, this.localIP, this.port]),
"DCC-CHAT");
}
CIRCDCCFileTransfer.prototype.onConnect =
function my_dccfileconnect(e)
{
this.display(getMsg(MSG_DCCFILE_OPENED,
[this.user.displayName, this.localIP, this.port]),
"DCC-FILE");
}
CIRCDCCFileTransfer.prototype.onAbort =
function my_dccfileabort(e)
{
this.display(getMsg(MSG_DCCFILE_ABORTED,
[this.user.displayName, this.localIP, this.port]),
"DCC-FILE");
}
CIRCDCCFileTransfer.prototype.onDisconnect =
function my_dccfiledisconnect(e)
{
this.display(getMsg(MSG_DCCFILE_CLOSED,
[this.user.displayName, this.localIP, this.port]),
"DCC-FILE");
}

Просмотреть файл

@ -111,9 +111,10 @@ function initMenus()
getContext: getDefaultContext,
items:
[
["delete-view", {enabledif: "client.viewsArray.length > 1"}],
["quit"],
["leave", {visibleif: "cx.TYPE == 'IRCChannel'"}],
["delete-view", {visibleif: "cx.TYPE != 'IRCChannel'"}],
["disconnect"],
["quit"],
["-"],
[navigator.platform.search(/win/i) == -1 ?
"quit-mozilla" : "exit-mozilla"]
@ -143,17 +144,15 @@ function initMenus()
[
[">popup:showhide"],
["-"],
["clear-view"],
["hide-view", {enabledif: "client.viewsArray.length > 1"}],
["toggle-oas",
{type: "checkbox",
checkedif: "isStartupURL(cx.sourceObject.getURL())"}],
["clear-view"],
["delete-view",
{visibleif: "!cx.channel || !cx.channel.active",
enabledif: "client.viewsArray.length > 1"}],
["leave", {visibleif: "cx.channel && cx.channel.active"}],
["-"],
[">popup:motifs"],
[">popup:fonts"],
["-"],
["toggle-ccm",
{type: "checkbox",
checkedif: "client.prefs['collapseMsgs']"}],
@ -229,19 +228,26 @@ function initMenus()
]
};
var isopish = "(cx.channel.iAmOp() || cx.channel.iAmHalfOp())";
// Me is op.
var isop = "(cx.channel.iAmOp()) && ";
// Me is op or half-op.
var isopish = "(cx.channel.iAmOp() || cx.channel.iAmHalfOp()) && ";
// Server has half-ops.
var shop = "(cx.server.supports.prefix.indexOf('h') > 0) && ";
client.menuSpecs["popup:opcommands"] = {
label: MSG_MNU_OPCOMMANDS,
items:
[
["op", {enabledif: isopish + " && !cx.user.isOp"}],
["deop", {enabledif: isopish + " && cx.user.isOp"}],
["voice", {enabledif: isopish + " && !cx.user.isVoice"}],
["devoice", {enabledif: isopish + " && cx.user.isVoice"}],
["op", {visibleif: isop + "!cx.user.isOp"}],
["deop", {visibleif: isop + "cx.user.isOp"}],
["hop", {visibleif: isopish + shop + "!cx.user.isHalfOp"}],
["dehop", {visibleif: isopish + shop + "cx.user.isHalfOp"}],
["voice", {visibleif: isopish + "!cx.user.isVoice"}],
["devoice", {visibleif: isopish + "cx.user.isVoice"}],
["-"],
["kick", {enabledif: isopish}],
["kick-ban", {enabledif: isopish}]
["kick", {enabledif: "(" + isop + "1) || (" + isopish + "!cx.user.isOp)"}],
["kick-ban", {enabledif: "(" + isop + "1) || (" + isopish + "!cx.user.isOp)"}]
]
};
@ -255,7 +261,7 @@ function initMenus()
["toggle-umode", {type: "checkbox",
checkedif: "client.prefs['showModeSymbols']"}],
["-"],
[">popup:opcommands", {enabledif: "cx.channel && " + isopish}],
[">popup:opcommands", {enabledif: "cx.channel && " + isopish + "cx.user"}],
["whois"],
["query"],
["version"],
@ -277,20 +283,20 @@ function initMenus()
["cmd-copy", {visibleif: "!" + urlenabled, enabledif: textselected }],
["cmd-selectall", {visibleif: "!" + urlenabled }],
["-"],
["leave",
{enabledif: "cx.TYPE == 'IRCChannel'"}],
["delete-view", {enabledif: "client.viewsArray.length > 1"}],
["disconnect"],
["clear-view"],
["hide-view", {enabledif: "client.viewsArray.length > 1"}],
["toggle-oas",
{type: "checkbox",
checkedif: "isStartupURL(cx.sourceObject.getURL())"}],
["-"],
[">popup:opcommands", {enabledif: "cx.channel && " + isopish}],
[">popup:opcommands", {enabledif: "cx.channel && " + isopish + "cx.user"}],
["whois"],
["query"],
["version"],
["-"],
[">popup:motifs"],
["toggle-oas",
{type: "checkbox",
checkedif: "isStartupURL(cx.sourceObject.getURL())"}],
["leave", {visibleif: "cx.TYPE == 'IRCChannel'"}],
["delete-view", {visibleif: "cx.TYPE != 'IRCChannel'"}],
["disconnect"]
]
};
@ -298,14 +304,15 @@ function initMenus()
getContext: getTabContext,
items:
[
["leave",
{enabledif: "cx.TYPE == 'IRCChannel'"}],
["delete-view", {enabledif: "client.viewsArray.length > 1"}],
["disconnect"],
["-"],
["clear-view"],
["hide-view", {enabledif: "client.viewsArray.length > 1"}],
["toggle-oas",
{type: "checkbox",
checkedif: "isStartupURL(cx.sourceObject.getURL())"}],
["-"],
["leave", {visibleif: "cx.TYPE == 'IRCChannel'"}],
["delete-view", {visibleif: "cx.TYPE != 'IRCChannel'"}],
["disconnect"]
]
};

Просмотреть файл

@ -117,7 +117,7 @@
<menuitem id="menu_selectAll"/>
<menuseparator/>
<menuitem id="menu_preferences"
oncommand="goPreferences('chatzillaItem', 'chrome://chatzilla/content/prefpanel/pref-irc.xul', 'chatzillaItem');"/>
oncommand="window.openDialog('chrome://chatzilla/content/config.xul', '', 'chrome,resizable,dialog=no', window);"/>
</menupopup>
</menu>

Просмотреть файл

@ -44,7 +44,7 @@ function initMessages()
client.messageManager = new MessageManager();
client.defaultBundle = client.messageManager.addBundle(path);
client.name = MSG_CLIENT_NAME;
client.displayName = client.name = MSG_CLIENT_NAME;
client.responseCodeMap =
{
"HELLO": MSG_RSP_HELLO,

Просмотреть файл

@ -451,31 +451,31 @@ a.chatzilla-link:hover {
* ACTION: when a user performs a /me.
* NOTIFY: when a server or user sends you a notification.
*/
.msg-data[msg-user="|"], /* messages from common "bulk */
.msg-data[msg-user="||"], /* paste" nicks */
.msg-data[msg-user="|||"],
.msg-data[msg-user="]"],
.msg-data[msg-user="["],
.msg-data[msg-type="372"], /* MOTD */
.msg-data[msg-type="EVAL-IN"], /* /eval results */
.msg-data[msg-type="EVAL-OUT"] {
.msg[msg-user="|"] .msg-data, /* messages from common "bulk */
.msg[msg-user="||"] .msg-data, /* paste" nicks */
.msg[msg-user="|||"] .msg-data,
.msg[msg-user="]"] .msg-data,
.msg[msg-user="["] .msg-data,
.msg[msg-type="372"] .msg-data, /* MOTD */
.msg[msg-type="EVAL-IN"] .msg-data, /* /eval results */
.msg[msg-type="EVAL-OUT"] .msg-data {
font-size: 90%;
font-family: monospace;
}
.msg-data[msg-type="USAGE"] {
.msg[msg-type="USAGE"] .msg-data {
font-style: italic;
}
.msg-data[msg-type="HELP"] {
.msg[msg-type="HELP"] .msg-data {
font-weight: normal;
}
.msg-user[msg-type="ACTION"] {
.msg[msg-type="ACTION"] .msg-user {
font-style: italic;
}
.msg-user[important="true"] {
.msg[important="true"] .msg-user {
font-weight: bold;
}
@ -490,50 +490,50 @@ a.chatzilla-link:hover {
.msg-user:after {
content: ">";
}
.msg-user[important="true"]:before {
.msg[important="true"] .msg-user:before {
font-weight: bold;
}
.msg-user[important="true"]:after {
.msg[important="true"] .msg-user:after {
font-weight: bold;
}
.msg-user[msg-user$="ME!"]:before {
.msg[msg-user$="ME!"] .msg-user:before {
content: "<";
}
.msg-user[msg-user$="ME!"]:after {
.msg[msg-user$="ME!"] .msg-user:after {
content: ">";
}
.msg-user[msg-type="ACTION"]:before,
.msg-user[msg-type="ACTION"]:after {
.msg[msg-type="ACTION"] .msg-user:before,
.msg[msg-type="ACTION"] .msg-user:after {
content: "";
}
.msg-user[msg-type="NOTICE"]:before {
.msg[msg-type="NOTICE"] .msg-user:before {
content: "[";
}
.msg-user[msg-type="NOTICE"]:after {
.msg[msg-type="NOTICE"] .msg-user:after {
content: "]";
}
/* private messages *not* in a query window */
.msg-user[dest-type="IRCUser"]:before {
.msg[dest-type="IRCUser"] .msg-user:before {
content: "to(";
}
.msg-user[msg-dest$="ME!"]:before {
.msg[dest-type="IRCUser"][msg-dest$="ME!"] .msg-user:before {
content: "from(";
}
.msg-user[dest-type="IRCUser"]:after {
.msg[dest-type="IRCUser"] .msg-user:after {
content: ")";
}
/* private messages in a query window */
.msg-user[view-type="IRCUser"]:before {
.msg[view-type="IRCUser"] .msg-user:before {
content: "{";
}
.msg-user[view-type="IRCUser"]:after {
.msg[view-type="IRCUser"] .msg-user:after {
content: "}";
}
.msg-user[view-type="IRCUser"][msg-user$="ME!"]:before {
.msg[view-type="IRCUser"][msg-dest$="ME!"] .msg-user:before {
content: "{";
}
.msg-user[view-type="IRCUser"][msg-user$="ME!"]:after {
.msg[view-type="IRCUser"][msg-dest$="ME!"] .msg-user:after {
content: "}";
}

Просмотреть файл

@ -164,6 +164,25 @@
</tbody>
</table>
</div>
<div class="header" id="dcc-chat-container" hidden="true">
<table id="h-table">
<tbody>
<tr>
<td class="label">URL</td>
<td class="value" width="100%">
<a id="dcc-chat-url-anchor" class="chatzilla-link"
href="irc://foo/bar">irc://foo/bar</a>
</td>
<td class="label" id="dcc-chat-remotestr-l">Connected to</td>
<td class="value" id="dcc-chat-remotestr">&lt;none&gt;</td>
</tr>
<tr>
<td id="dcc-chat-title" colspan="4">&lt;none&gt;</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="messages-outer" hidden="true">

Просмотреть файл

@ -75,6 +75,12 @@ var headers = {
fields: ["container", "url-anchor", "serverstr", "title",
"descnodes"],
update: updateUser
},
IRCDCCChat: {
prefix: "dcc-chat-",
fields: ["container", "url-anchor", "remotestr", "title"],
update: updateDCCChat
}
};
@ -418,3 +424,19 @@ function updateUser()
setText("descnodes", "");
}
}
function updateDCCChat()
{
var source;
if (view.user)
source = view.user.displayName;
else
source = MSG_UNKNOWN;
if (view.state == 3)
setText("remotestr", view.remoteIP + ":" + view.port, true);
else
setText("remotestr", null, true);
setText("title", getMsg(MSG_TITLE_USER, [view.user.displayName, source]));
}

Просмотреть файл

@ -50,7 +50,8 @@ function initPrefs()
var profilePath = getSpecialDirectory("ProfD");
profilePath.append("chatzilla");
client.prefManager.addPref("profilePath", profilePath.path);
client.prefManager.addPref("profilePath", profilePath.path, null, null,
"global");
profilePath = new nsLocalFile(client.prefs["profilePath"]);
@ -76,76 +77,100 @@ function initPrefs()
var prefs =
[
["activityFlashDelay", 200],
["aliases", []],
["autoRejoin", false],
["bugURL", "http://bugzilla.mozilla.org/show_bug.cgi?id=%s"],
["channelHeader", true],
["channelLog", false],
["channelMaxLines", 500],
["charset", "utf-8"],
["clientMaxLines", 200],
["collapseMsgs", false],
["connectTries", 5],
["copyMessages", true],
["debugMode", ""],
["desc", "New Now Know How"],
["deleteOnPart", true],
["displayHeader", true],
["guessCommands", true],
["font.family", "lucida, sans-serif"],
["font.size", 0],
["initialURLs", []],
["initialScripts", [getURLSpecFromFile(scriptPath.path)]],
["log", false],
["logFileName", logDefault.path],
["messages.click", "goto-url"],
["messages.ctrlClick", "goto-url-newwin"],
["messages.metaClick", "goto-url-newtab"],
["messages.middleClick", "goto-url-newtab"],
["motif.dark", "chrome://chatzilla/skin/output-dark.css"],
["motif.light", "chrome://chatzilla/skin/output-light.css"],
["motif.default", "chrome://chatzilla/skin/output-default.css"],
["motif.current", "chrome://chatzilla/skin/output-default.css"],
["msgBeep", "beep beep"],
["multiline", false],
["munger.bold", true],
["munger.bugzilla-link", true],
["munger.channel-link",true],
["munger.colorCodes", true],
["munger.ctrl-char", true],
["munger.ear", false],
["munger.face", true],
["munger.italic", true],
["munger.link", true],
["munger.mailto", true],
["munger.quote", true],
["munger.rheet", true],
["munger.underline", true],
["munger.word-hyphenator", true],
["networkHeader", true],
["networkLog", false],
["networkMaxLines", 200],
["newTabLimit", 15],
["notify.aggressive", true],
["nickCompleteStr", ":"],
["nickname", DEFAULT_NICK],
["outgoing.colorCodes", false],
["outputWindowURL", "chrome://chatzilla/content/output-window.html"],
["sortUsersByMode", true],
["queryBeep", "beep"],
["reconnect", true],
["showModeSymbols", false],
["stalkBeep", "beep"],
["stalkWholeWords", true],
["stalkWords", []],
["timestamps", false],
["timestampFormat", "[%h:%n]"],
["username", "chatzilla"],
["usermode", "+i"],
["userHeader", true],
["userLog", false],
["userMaxLines", 200]
["activityFlashDelay", 200, "global"],
["aliases", [], "lists.aliases"],
["autoRejoin", false, ".connect"],
["bugURL", "http://bugzilla.mozilla.org/show_bug.cgi?id=%s",
"global"],
["channelHeader", true, "global.header"],
["channelLog", false, "global.log"],
["channelMaxLines", 500, "global.maxLines"],
["charset", "utf-8", ".connect"],
["clientMaxLines", 200, "global.maxLines"],
["collapseMsgs", false, "appearance.misc"],
["connectTries", 5, ".connect"],
["copyMessages", true, "global"],
["dcc.enabled", true, "dcc"],
["dcc.listenPorts", [], "dcc.ports"],
["dcc.useServerIP", true, "dcc"],
["debugMode", "", "global"],
["desc", "New Now Know How", ".ident"],
["deleteOnPart", true, "global"],
["displayHeader", true, "appearance.misc"],
["guessCommands", true, "global"],
["hasPrefs", false, "hidden"],
["font.family", "default", "appearance.misc"],
["font.size", 0, "appearance.misc"],
["initialURLs", [], "startup.initialURLs"],
["initialScripts", [getURLSpecFromFile(scriptPath.path)],
"startup.initialScripts"],
["log", false, ".log"],
["logFileName", logDefault.path, ".log"],
["messages.click", "goto-url", "global.links"],
["messages.ctrlClick", "goto-url-newwin", "global.links"],
["messages.metaClick", "goto-url-newtab", "global.links"],
["messages.middleClick", "goto-url-newtab", "global.links"],
["motif.dark", "chrome://chatzilla/skin/output-dark.css",
"appearance.motif"],
["motif.light", "chrome://chatzilla/skin/output-light.css",
"appearance.motif"],
["motif.default", "chrome://chatzilla/skin/output-default.css",
"appearance.motif"],
["motif.current", "chrome://chatzilla/skin/output-default.css",
"appearance.motif"],
//["msgBeep", "beep beep", "global.sounds"],
["multiline", false, "global"],
["munger.bold", true, "munger"],
["munger.bugzilla-link", true, "munger"],
["munger.channel-link",true, "munger"],
["munger.colorCodes", true, "munger"],
["munger.ctrl-char", true, "munger"],
["munger.ear", false, "munger"],
["munger.face", true, "munger"],
["munger.italic", true, "munger"],
["munger.link", true, "munger"],
["munger.mailto", true, "munger"],
["munger.quote", true, "munger"],
["munger.rheet", true, "munger"],
["munger.underline", true, "munger"],
["munger.word-hyphenator", true, "munger"],
["networkHeader", true, "global.header"],
["networkLog", false, "global.log"],
["networkMaxLines", 200, "global.maxLines"],
["newTabLimit", 15, "global"],
["notify.aggressive", true, "global"],
["nickCompleteStr", ":", "global"],
["nickname", DEFAULT_NICK, ".ident"],
["outgoing.colorCodes", false, "global"],
["outputWindowURL", "chrome://chatzilla/content/output-window.html",
"appearance.misc"],
["sortUsersByMode", true, "appearance.userlist"],
//["queryBeep", "beep", "global.sounds"],
["reconnect", true, ".connect"],
["showModeSymbols", false, "appearance.userlist"],
//["stalkBeep", "beep", "global.sounds"],
["stalkWholeWords", true, "lists.stalkWords"],
["stalkWords", [], "lists.stalkWords"],
// Start == When view it opened.
// Event == "Superfluous" activity.
// Chat == "Activity" activity.
// Stalk == "Attention" activity.
["sound.enabled", true, "global.sounds"],
["sound.overlapDelay", 2000, "global.sounds"],
//["sound.surpressActive",false, "global.sounds"],
["sound.channel.start", "", "global.soundEvts"],
["sound.channel.event", "", "global.soundEvts"],
["sound.channel.chat", "", "global.soundEvts"],
["sound.channel.stalk", "beep", "global.soundEvts"],
["sound.user.start", "beep beep", "global.soundEvts"],
["sound.user.stalk", "beep", "global.soundEvts"],
["timestamps", false, "appearance.timestamps"],
["timestampFormat", "[%h:%n]", "appearance.timestamps"],
["username", "chatzilla", ".ident"],
["usermode", "+i", ".ident"],
["userHeader", true, "global.header"],
["userLog", false, "global.log"],
["userMaxLines", 200, "global.maxLines"]
];
client.prefManager.addPrefs(prefs);
@ -189,26 +214,29 @@ function getNetworkPrefManager(network)
var prefs =
[
["autoRejoin", defer],
["charset", defer],
["collapseMsgs", defer],
["connectTries", defer],
["desc", defer],
["displayHeader", client.prefs["networkHeader"]],
["font.family", defer],
["font.size", defer],
["log", client.prefs["networkLog"]],
["logFileName", logDefault.path],
["motif.current", defer],
["nickname", defer],
["notifyList", []],
["outputWindowURL", defer],
["reconnect", defer],
["timestamps", defer],
["timestampFormat", defer],
["username", defer],
["usermode", defer],
["autoperform", []]
["autoRejoin", defer, ".connect"],
["charset", defer, ".connect"],
["collapseMsgs", defer, "appearance.misc"],
["connectTries", defer, ".connect"],
["dcc.useServerIP", defer, "dcc"],
["desc", defer, ".ident"],
["displayHeader", client.prefs["networkHeader"],
"appearance.misc"],
["font.family", defer, "appearance.misc"],
["font.size", defer, "appearance.misc"],
["hasPrefs", false, "hidden"],
["log", client.prefs["networkLog"], ".log"],
["logFileName", logDefault.path, ".log"],
["motif.current", defer, "appearance.motif"],
["nickname", defer, ".ident"],
["notifyList", [], "lists.notifyList"],
["outputWindowURL", defer, "appearance.misc"],
["reconnect", defer, ".connect"],
["timestamps", defer, "appearance.timestamps"],
["timestampFormat", defer, "appearance.timestamps"],
["username", defer, ".ident"],
["usermode", defer, ".ident"],
["autoperform", [], "lists.autoperform"]
];
var branch = "extensions.irc.networks." + pref_mungeName(network.name) +
@ -263,18 +291,20 @@ function getChannelPrefManager(channel)
var prefs =
[
["autoRejoin", defer],
["charset", defer],
["collapseMsgs", defer],
["displayHeader", client.prefs["channelHeader"]],
["font.family", defer],
["font.size", defer],
["log", client.prefs["channelLog"]],
["logFileName", logDefault.path],
["motif.current", defer],
["timestamps", defer],
["timestampFormat", defer],
["outputWindowURL", defer]
["autoRejoin", defer, ".connect"],
["charset", defer, ".connect"],
["collapseMsgs", defer, "appearance.misc"],
["displayHeader", client.prefs["channelHeader"],
"appearance.misc"],
["font.family", defer, "appearance.misc"],
["font.size", defer, "appearance.misc"],
["hasPrefs", false, "hidden"],
["log", client.prefs["channelLog"], ".log"],
["logFileName", logDefault.path, ".log"],
["motif.current", defer, "appearance.motif"],
["timestamps", defer, "appearance.timestamps"],
["timestampFormat", defer, "appearance.timestamps"],
["outputWindowURL", defer, "appearance.misc"]
];
var branch = "extensions.irc.networks." + pref_mungeName(network.name) +
@ -309,17 +339,18 @@ function getUserPrefManager(user)
var prefs =
[
["charset", defer],
["collapseMsgs", defer],
["displayHeader", client.prefs["userHeader"]],
["font.family", defer],
["font.size", defer],
["motif.current", defer],
["outputWindowURL", defer],
["log", client.prefs["userLog"]],
["logFileName", logDefault.path],
["timestamps", defer],
["timestampFormat", defer]
["charset", defer, ".connect"],
["collapseMsgs", defer, "appearance.misc"],
["displayHeader", client.prefs["userHeader"], "appearance.misc"],
["font.family", defer, "appearance.misc"],
["font.size", defer, "appearance.misc"],
["hasPrefs", false, "hidden"],
["motif.current", defer, "appearance.motif"],
["outputWindowURL", defer, "appearance.misc"],
["log", client.prefs["userLog"], ".log"],
["logFileName", logDefault.path, ".log"],
["timestamps", defer, "appearance.timestamps"],
["timestampFormat", defer, "appearance.timestamps"]
];
var branch = "extensions.irc.networks." + pref_mungeName(network.name) +

Просмотреть файл

@ -36,53 +36,16 @@
- the terms of any one of the MPL, the GPL or the LGPL.
-
- ***** END LICENSE BLOCK ***** -->
<!--
- This file isn't used any more, and is only here to prevent the Mozilla
- preferences window from breaking.
-->
<!DOCTYPE overlay SYSTEM "chrome://chatzilla/locale/pref-irc.dtd">
<overlay id="ovCZPrefs"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<treechildren id="panelChildren">
<treeitem container="true" id="chatzillaItem" insertbefore="advancedItem">
<treerow>
<treecell url="chrome://chatzilla/content/prefpanel/pref-irc.xul"
label="&pref-irc.window.title;"/>
</treerow>
<treechildren id="chatzillaChildren">
<treeitem>
<treerow>
<treecell url="chrome://chatzilla/content/prefpanel/startup.xul"
label="&startup.window.title;"/>
</treerow>
</treeitem>
<treeitem>
<treerow>
<treecell url="chrome://chatzilla/content/prefpanel/interface.xul"
label="&interface.window.title;"/>
</treerow>
</treeitem>
<treeitem>
<treerow>
<treecell url="chrome://chatzilla/content/prefpanel/appearance.xul"
label="&appearance.window.title;"/>
</treerow>
</treeitem>
<treeitem>
<treerow>
<treecell url="chrome://chatzilla/content/prefpanel/stalk.xul"
label="&stalk.window.title;"/>
</treerow>
</treeitem>
<treeitem>
<treerow>
<treecell url="chrome://chatzilla/content/prefpanel/sound.xul"
label="&sound.window.title;"/>
</treerow>
</treeitem>
</treechildren>
</treeitem>
</treechildren>
</overlay>

Просмотреть файл

@ -52,6 +52,15 @@
<script src="chrome://communicator/content/contentAreaUtils.js"/>
<script src="chrome://communicator/content/contentAreaDD.js"/>
<script><![CDATA[
/* utils.js overloads the standard JS messages with prompt service
* calls, which require the locale support to have loaded. This next
* line is needed so that the onLoad function in handlers.js can
* display the "error loading ChatZilla" message even if the locale
* support is what failed to load.
*/
window.baseAlert = window.alert;
]]></script>
<script src="chrome://chatzilla/content/lib/js/utils.js"/>
<script src="chrome://chatzilla/content/lib/js/connection-xpcom.js"/>
<script src="chrome://chatzilla/content/lib/js/events.js"/>
@ -62,6 +71,7 @@
<script src="chrome://chatzilla/content/lib/js/irc.js"/>
<script src="chrome://chatzilla/content/lib/js/irc-debug.js"/>
<script src="chrome://chatzilla/content/lib/js/file-utils.js"/>
<script src="chrome://chatzilla/content/lib/js/dcc.js"/>
<script src="chrome://chatzilla/content/lib/xul/munger.js"/>
<script src="chrome://chatzilla/content/static.js"/>

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -66,7 +66,7 @@ cmd.channel-motif.help = Sets the CSS file used for the message tab for this s
cmd.channel-pref.params = [<pref-name> [<pref-value> [<delete-pref> [<channel>]]]]
cmd.channel-pref.help = Sets the value of the preference named <pref-name> to the value of <pref-value> on the channel <channel>. If <pref-value> is not provided, the current value of <pref-name> will be displayed. If both <pref-name> and <pref-value> are omitted, all preferences will be displayed. If <delete-pref> is provided and is |true|, |on|, |yes|, or |1|, or if <pref-name> starts with a minus ('-') character, then the preference will revert back to its default value. If <channel> is not provided, the current channel is assumed.
cmd.clear-view.label = Cl&ear This Tab
cmd.clear-view.label = Cl&ear Tab
cmd.clear-view.params = [<view>]
cmd.clear-view.help = Clear the current view, discarding *all* content.
@ -87,12 +87,12 @@ cmd.cmd-copy-link-url.help = Copies the URL of the current link to clipboard.
cmd.commands.params = [<pattern>]
cmd.commands.help = Lists all command names matching <pattern>, or all command names if pattern is not specified.
cmd.sync-fonts.help = Syncronizes all views with their current font settings.
cmd.sync-headers.help = Syncronizes all views with their current header display setting.
cmd.sync-logs.help = Syncronizes all views with their current logging setting.
cmd.sync-motifs.help = Syncronizes all views with their current motif setting.
cmd.sync-timestamps.help = Syncronizes all views with their current timestamp display settings.
cmd.sync-windows.help = Syncronizes all views with their current output window setting.
cmd.sync-fonts.help = Synchronizes all views with their current font settings.
cmd.sync-headers.help = Synchronizes all views with their current header display setting.
cmd.sync-logs.help = Synchronizes all views with their current logging setting.
cmd.sync-motifs.help = Synchronizes all views with their current motif setting.
cmd.sync-timestamps.help = Synchronizes all views with their current timestamp display settings.
cmd.sync-windows.help = Synchronizes all views with their current output window setting.
cmd.ctcp.params = <target> <code> [<params>]
cmd.ctcp.help = Sends the CTCP code <code> to the target (user or channel) <target>. If <params> are specified they are sent along as well.
@ -100,6 +100,27 @@ cmd.ctcp.help = Sends the CTCP code <code> to the target (user or channel) <ta
cmd.default-charset.params = [<new-charset>]
cmd.default-charset.help = Sets the global default character encoding mode to <new-charset>, or displays the current global default character encoding mode if <new-charset> is not provided.
cmd.describe.params = <target> <action>
cmd.describe.help = Performs an 'action' at the |target|, either a channel or a user.
cmd.dcc-accept.params = [<nickname> [<type> [<file>]]]
cmd.dcc-accept.help = Accepts an incoming DCC Chat or Send offer. If a |nickname| is not specified, the last offer that arrived will be accepted (for security reasons, this will not work in the first 10 seconds after an offer is received).
cmd.dcc-chat.params = [<nickname>]
cmd.dcc-chat.help = Sends a DCC Chat offer to |nickname| on the current server. On a query view, |nickname| may be omitted to send the offer to the query view's user.
cmd.dcc-close.params = [<nickname> [<type> [<file>]]]
cmd.dcc-close.help = Closes an existing DCC connection. |nickname| may be omitted if run from a DCC view, in which case the DCC connection for that view will be closed. |type| and |file| may be needed to identify the connection.
cmd.dcc-decline.params = [<nickname>]
cmd.dcc-decline.help = Declines an incoming DCC Chat or Send offer. If a |nickname| is not specified, the last offer that arrived will be declined.
cmd.dcc-list.params = [<type>]
cmd.dcc-list.help = Lists the currently known about DCC offers and connections. This may be limited to just "chat" or "send" using the |type| parameter.
cmd.dcc-send.params = [<nickname> [<file>]]
cmd.dcc-send.help = Offers a file to |nickname|. On a query view, |nickname| may be omitted to send the offer to the query view's user. A file may be specified directly by passing |file| or, if omitted, selected from a browse dialog.
cmd.delete-view.key = accel W
cmd.delete-view.label = &Close Tab
cmd.delete-view.params = [<view>]
@ -124,7 +145,7 @@ cmd.devoice.params = <nickname> [<...>]
cmd.devoice.help = Removes voice status from <nickname> on current channel. Requires operator (or half-operator) status.
cmd.disconnect.format = Disconnect From $networkName
cmd.disconnect.label = Disconnect
cmd.disconnect.label = &Disconnect
cmd.disconnect.params = [<reason>]
cmd.disconnect.help = Disconnects from the server represented by the active view when the command is executed providing the reason <reason> or the default reason if <reason> is not specified.
@ -192,11 +213,12 @@ cmd.header.help = Toggles visiblility of the header bar.
cmd.help.params = [<pattern>]
cmd.help.help = Displays help on all commands matching <pattern>, if <pattern> is not given, displays help on all commands.
cmd.hide-view.label = &Hide Tab
cmd.hide-view.params = [<view>]
cmd.hide-view.help = Drop the current view's icon from the tab strip, but save its contents. The icon will reappear the next time there is activity on the view.
cmd.hide-view.help = Drop the current view's icon from the tab strip, but save its contents. The icon will reappear the next time there is activity on the view.
cmd.hop.format = Give Half-operator Status to $nickname
cmd.hop.label = Give Half-perator Status
cmd.hop.label = Give Half-operator Status
cmd.hop.params = <nickname> [<...>]
cmd.hop.help = Gives half-operator status to <nickname> on current channel. Requires operator status.
@ -239,7 +261,7 @@ cmd.join.params = <channel-name> [<key>]
cmd.join.help = Joins the global (name starts with #), local (name starts with &), or modeless (name starts with a +) channel named <channel-name>. If no prefix is given, # is assumed. Provides the key <key> if specified.
cmd.join-charset.params = [<channel-name> <charset> [<key>]]
cmd.join-charset.help = Joins the global (name starts with #), local (name starts with &), or modeless (name starts with a +) channel named <channel-name>. Messages will be encoded and decoded according for the character set specified by <charset>. The <charset> parameter is independent of the default character set, which can be selected with the /charset command. If no prefix is given, # is assumed. Provides the key <key> if specified.
cmd.join-charset.help = Joins the global (name starts with #), local (name starts with &), or modeless (name starts with a +) channel named <channel-name>. Messages will be encoded and decoded according to the character encoding specified by <charset>. The <charset> parameter is independent of the default character encoding, which can be selected with the /charset command. If no prefix is given, # is assumed. Provides the key <key> if specified.
cmd.kick.format = Kick $nickname from $channelName
cmd.kick.label = Kick
@ -317,6 +339,9 @@ cmd.op.help = Gives operator status to <nickname> on current channel. Requires
cmd.open-at-startup.params = [<toggle>]
cmd.open-at-startup.help = Used to add the current view to the list of views that will be automatically opened at startup. If <toggle> is not provided, the status of the current view will be displayed. <toggle> can be one of: yes, on, true, 1, no, off, false, 0, or toggle, to toggle the current state.
cmd.say.params = <message>
cmd.say.help = Sends a message to the current view.
cmd.timestamps.params = [<toggle>]
cmd.timestamps.help = Sets the visibility of timestamps in the current view. If <toggle> is provided and is |true|, |on|, |yes|, or |1|, timestamps will be turned on. Values |false|, |off|, |no| and |0| will turn timestamps off, and |toggle| will toggle the state. Ommit <toggle> to see the current state.
@ -416,39 +441,39 @@ cmd.whowas.help = List brief information for users with a nickname matching <n
msg.err.internal.dispatch = Internal error dispatching command ``%1$S''.
msg.err.internal.hook = Internal error processing hook ``%1$S''.
msg.err.no.command = No command named ``%1$S''.
msg.err.invalid.param = Invalid value for parameter %1$S (%2$S)
msg.err.disabled = Sorry, ``%1$S'' is currently disabled
msg.err.notimplemented = Sorry, ``%1$S'' has not been implemented
msg.err.required.param = Missing required parameter %1$S
msg.err.ambigcommand = Ambiguous command, ``%1$S'', %2$S commands match [%3$S]
msg.err.invalid.param = Invalid value for parameter %1$S (%2$S).
msg.err.disabled = Sorry, ``%1$S'' is currently disabled.
msg.err.notimplemented = Sorry, ``%1$S'' has not been implemented.
msg.err.required.param = Missing required parameter %1$S.
msg.err.ambigcommand = Ambiguous command, ``%1$S'', %2$S commands match [%3$S].
## chatzilla error messages ##
msg.err.invalid.pref = Invalid value for preference %1$S (%2$S)
msg.err.failure = Operation Failed: %1$S
msg.err.invalid.pref = Invalid value for preference %1$S (%2$S).
msg.err.failure = Operation Failed: %1$S.
msg.err.scriptload = Error loading subscript from <%1$S>.
msg.err.invalid.scheme = Invalid scheme in url <%1$S>.
msg.err.unknown.pref = Unknown pref name ``%1$S''.
msg.err.unknown.network = Unknown network ``%S''
msg.err.unknown.channel = Unknown channel ``%S''
msg.err.unknown.user = Unknown user ``%S''
msg.err.unknown.stalk = Not stalking %S
msg.err.unknown.motif = Unknown motif ``%S''
msg.err.unknown.network = Unknown network ``%S''.
msg.err.unknown.channel = Unknown channel ``%S''.
msg.err.unknown.user = Unknown user ``%S''.
msg.err.unknown.stalk = Not stalking %S.
msg.err.unknown.motif = Unknown motif ``%S''.
msg.err.invalid.charset = Invalid character encoding mode ``%S''.
msg.err.improper.view = ``%S'' cannot be used from this view.
msg.err.not.connected = Not connected.
msg.err.last.view = Cannot delete last view.
msg.err.bad.ircurl = Invalid IRC URL ``%S''
msg.err.need.network = Command ``%1$S'' must be run in the context of a network
msg.err.need.server = Command ``%1$S'' must be run in the context of an attached server
msg.err.need.channel = Command ``%1$S'' must be run in the context of a channel
msg.err.need.user = Command ``%1$S'' must be run in the context of a user
msg.err.no.default = No default action for objects of type ``%S''
msg.err.no.match = No match for ``%S''
msg.err.no.socket = Error creating socket
msg.err.bad.ircurl = Invalid IRC URL ``%S''.
msg.err.need.network = Command ``%1$S'' must be run in the context of a network.
msg.err.need.server = Command ``%1$S'' must be run in the context of an attached server.
msg.err.need.channel = Command ``%1$S'' must be run in the context of a channel.
msg.err.need.user = Command ``%1$S'' must be run in the context of a user.
msg.err.no.default = No default action for objects of type ``%S''.
msg.err.no.match = No match for ``%S''.
msg.err.no.socket = Error creating socket.
msg.err.exhausted = Connection attempts exhausted, giving up.
# Better IRC error messages
msg.err.irc.471 = This channel has reached it's set capacity; you connot join it.
msg.err.irc.471 = This channel has reached its set capacity; you cannot join it.
msg.err.irc.473 = This channel is invite-only. You must have an invite from an existing member of the channel to join.
msg.err.irc.474 = You are banned from this channel.
msg.err.irc.475 = This channel needs a key. You must provide the correct key to join the channel. See "/help join" for details on joining a channel with a key.
@ -459,30 +484,30 @@ msg.val.on = on
msg.val.off = off
## formatting ##
msg.fmt.usage = %1$S %2$S
msg.fmt.jsexception = %1$S: %2$S @ <%3$S> %4$S"
msg.fmt.usage = "%1$S %2$S"
msg.fmt.jsexception = "%1$S: %2$S @ <%3$S> %4$S"
# 1: error number, 2: error text, 3: file name, 4: line number, 5: function name
# 1: pref name 2: value
msg.fmt.pref = Preference ``%1$S'' is ``%2$S''
msg.fmt.netpref = Network preference ``%1$S'' is ``%2$S''
msg.fmt.chanpref = Channel preference ``%1$S'' is ``%2$S''
msg.fmt.userpref = User preference ``%1$S'' is ``%2$S''
msg.fmt.pref = Preference ``%1$S'' is ``%2$S''.
msg.fmt.netpref = Network preference ``%1$S'' is ``%2$S''.
msg.fmt.chanpref = Channel preference ``%1$S'' is ``%2$S''.
msg.fmt.userpref = User preference ``%1$S'' is ``%2$S''.
msg.fmt.plugin1 = Plugin at index %S, loaded from <%S>
msg.fmt.plugin2 = id: %S, version: %S, enabled: %S, status: %S
msg.fmt.plugin3 = Description: %S
msg.fmt.plugin1 = Plugin at index %S, loaded from <%S>.
msg.fmt.plugin2 = id: %S, version: %S, enabled: %S, status: %S.
msg.fmt.plugin3 = Description: %S.
msg.fmt.usercount = %S, %S@, %S%%, %S+
msg.fmt.alias = %S = %S
msg.fmt.seconds = %S seconds
msg.fmt.usercount = "%S, %S@, %S%%, %S+"
msg.fmt.alias = "%S = %S"
msg.fmt.seconds = "%S seconds
msg.fmt.matchlist = %S matches for ``%S'': [%S]
msg.fmt.ctcpreply = CTCP %S reply ``%S'' from %S
msg.fmt.chanlist = %S %S %S
msg.fmt.logged.on = %S is logged in as %S
msg.fmt.matchlist = "%S matches for ``%S'': [%S]
msg.fmt.ctcpreply = CTCP %S reply ``%S'' from %S"
msg.fmt.chanlist = "%S %S %S"
msg.fmt.logged.on = "%S is logged in as %S"
# 1: local short date/time, 2: nick info
msg.fmt.status = %S, %S
msg.fmt.status = "%S, %S"
msg.unknown = <unknown>
msg.none = <none>
@ -508,10 +533,10 @@ msg.connecting = Connecting
msg.connected = Connected
msg.disconnected = Disconnected
msg.days=%S days
msg.hours=%S hours
msg.minutes=%S minutes
msg.seconds=%S seconds
msg.days = "%S days
msg.hours = "%S hours
msg.minutes = "%S minutes
msg.seconds = "%S seconds
msg.rsp.hello = [HELLO]
@ -536,35 +561,36 @@ msg.cant.disable = Plugin %S does not support being disabled.
msg.cant.enable = Plugin %S does not support being enabled.
msg.no.help = Help not available.
msg.no.cmdmatch = No commands match ``%1$S''.
msg.no.plugins = There are no plugins loaded.
msg.cmdmatch = Commands matching ``%1$S'' are [%2$S].
msg.default.alias.help = This command is an alias for |%1$S|.
msg.extra.params = Extra parameters ``%1$S'' ignored.
msg.version.reply = Chatzilla %S [%S]
msg.nothing.to.cancel = No connection in progress, nothing to cancel.
msg.cancelling = Cancelling connection to ``%S''...
msg.current.charset = Using ``%S'' as default charset.
msg.current.charset.view = Using ``%S'' as charset for this view.
msg.current.charset = Using ``%S'' as default character encoding.
msg.current.charset.view = Using ``%S'' as character encoding for this view.
msg.current.css = Using <%S> as default motif.
msg.current.css.net = Using <%S> as default motif for this network.
msg.current.css.chan = Using <%S> as motif for this channel.
msg.current.css.user = Using <%S> as motif for this user.
msg.subscript.loaded = Subscript <%1$S> loaded with result ``%2$S''.
msg.user.info = Default nickname, ``%S'', username ``%S'', and description ``%S''.
msg.connection.info = %S: User %S connected via %S:%S (%S server).
msg.server.info = %S: Connected for %S, last ping: %S, server roundtrip (lag): %S seconds.
msg.connect.via = Connected via %S
msg.user.mode = User mode for %S is now %S
msg.not.connected = %S: Not connected.
msg.connection.info = "%S: User %S connected via %S:%S (%S server).
msg.server.info = "%S: Connected for %S, last ping: %S, server roundtrip (lag): %S seconds.
msg.connect.via = Connected via %S"
msg.user.mode = User mode for %S is now %S"
msg.not.connected = "%S: Not connected.
msg.member = Member
msg.operator = Operator member
msg.voiced = Voiced member
msg.voiceop = Operator and voiced member
msg.no.mode = no mode
msg.topic.info = %S, %S: Topic, ``%S''
msg.notopic.info = %S, %S: No topic.
msg.channel.info = %S: %S of %S (%S) <%S>
msg.channel.details = %S/%S: %S users total, %S operators, %S voiced.
msg.nonmember = %S: No longer a member of %S.
msg.topic.info = "%S, %S: Topic, ``%S''
msg.notopic.info = "%S, %S: No topic.
msg.channel.info = "%S: %S of %S (%S) <%S>
msg.channel.details = "%S/%S: %S users total, %S operators, %S voiced.
msg.nonmember = "%S: No longer a member of %S.
msg.end.status = End of status.
msg.networks.heada = Available networks are [
msg.networks.headb = ].
@ -577,33 +603,33 @@ msg.all.commands = Currently implemented commands are [%S].
msg.homepage = Please visit the ChatZilla homepage at <http://www.mozilla.org/projects/rt-messaging/chatzilla/> for more information.
msg.client.opened = JavaScript console for ``*client*'' opened.
msg.newnick.you = YOU are now known as %S
msg.newnick.notyou = %S is now known as %S
msg.newnick.notyou = "%S is now known as %S
msg.no.notify.list = Your notify list is empty
msg.notify.addone = %S has been added to your notify list.
msg.notify.addsome = %S have been added to your notify list.
msg.notify.delone = %S has been removed from your notify list.
msg.notify.delsome = %S have been removed from your notify list.
msg.no.notify.list = Your notify list is empty.
msg.notify.addone = "%S has been added to your notify list.
msg.notify.addsome = "%S have been added to your notify list.
msg.notify.delone = "%S has been removed from your notify list.
msg.notify.delsome = "%S have been removed from your notify list.
msg.not.an.alias = No such alias: %S
msg.alias.removed = Removed alias: %S
msg.alias.created = Created alias: %S = %S
msg.no.aliases = No aliases are defined
msg.not.an.alias = No such alias: %S.
msg.alias.removed = Removed alias: %S.
msg.alias.created = Created alias: %S = %S.
msg.no.aliases = No aliases are defined.
msg.no.stalk.list = No stalking victims.
msg.stalk.list = Currently stalking [%S]
msg.stalk.add = Now stalking %S
msg.stalk.del = No longer stalking %S
msg.stalk.list = Currently stalking [%S].
msg.stalk.add = Now stalking %S.
msg.stalk.del = No longer stalking %S.
msg.title.net.on = User %S on ``%S'' (%S:%S)
msg.title.net.off = User %S, not connected to network ``%S''
msg.title.nonick = <unregistered-user>
msg.title.no.topic = No Topic
msg.title.no.mode = No Mode
msg.title.channel = %S on %S (%S): %S
msg.title.user = Conversation with %S %S
msg.title.channel = "%S on %S (%S): %S"
msg.title.user = Conversation with %S %S"
msg.title.unknown = ChatZilla!
msg.title.activity = %S -- Activity [%S]
msg.title.activity = "%S -- Activity [%S]
msg.logging.off = Logging is off.
msg.logging.on = Logging is on. Log output is going to file ``%S''.
@ -619,8 +645,61 @@ msg.already.connected = You are already connected to ``%S''.
msg.enter.nick = Please select a nickname
msg.network.connecting = Attempting to connect to ``%S''. Use /cancel to abort.
msg.url.password = Enter a password for the url %S
msg.url.key = Enter key for url %S
# DCC CHAT messages.
msg.dccchat.sent.request = Sent DCC Chat offer to ``%S'' from YOU (%S:%S).
msg.dccchat.got.request = Got DCC Chat offer from ``%S'' (%S:%S).
msg.dccchat.accepted = Accepted DCC Chat with ``%S'' (%S:%S).
msg.dccchat.declined = Declined DCC Chat with ``%S'' (%S:%S).
msg.dccchat.aborted = Aborted DCC Chat with ``%S'' (%S:%S).
msg.dccchat.opened = DCC Chat with ``%S'' (%S:%S) connected.
msg.dccchat.closed = DCC Chat with ``%S'' (%S:%S) disconnected.
# DCC FILE messages.
msg.dccfile.sent.request = Sent DCC File offer to ``%S'' from YOU (%S:%S) for ``%S'' (%S bytes).
msg.dccfile.got.request = Got DCC File offer from ``%S'' (%S:%S) of ``%S'' (%S bytes).
msg.dccfile.accepted = Accepted DCC File with ``%S'' (%S:%S).
msg.dccfile.declined = Declined DCC File with ``%S'' (%S:%S).
msg.dccfile.aborted = Aborted DCC File with ``%S'' (%S:%S).
msg.dccfile.opened = DCC File with ``%S'' (%S:%S) started.
msg.dccfile.closed = DCC File with ``%S'' (%S:%S) finished.
msg.dccfile.send = Pick file to send
msg.dccfile.save.to = Save incoming file (%S)
msg.dccfile.err.notfound = The file specified could not be found.
msg.dccfile.err.notafile = The path specified is not a normal file.
msg.dccfile.err.notreadable = The file specified cannot be read.
# General DCC messages.
msg.dcc.pending.matches = "%S pending incoming DCC offers matched.
msg.dcc.accepted.matches = "%S DCC connections matched.
msg.dcc.matches.help = You must specify enough of the user's nickname to uniquely identify the request, or include the request type and even the filename if necessary.
msg.dcc.not.enabled = DCC is disabled. If you need DCC functionality, you may turn it on from the Preferences window.
msg.dcc.not.possible = DCC is unavailable in this version of the host software platform (e.g. Mozilla, Firefox) - the feature "scriptable server sockets" is missing. Mozilla builds after 2003-11-15 should contain this feature (e.g. Mozilla 1.6 or later).
msg.dcc.err.nouser = Must specify |nickname| or run the command from a query view.
msg.dcc.err.accept.time = You cannot use the short form of |/dcc-accept| within the first 10 seconds of receiving a DCC request.
msg.dcc.err.nochat = Must specify |nickname| or run the command from a DCC Chat view.
# /dcc-list words and phrases.
msg.dcclist.dir.in = incoming
msg.dcclist.dir.out = outgoing (offer)
msg.dcclist.to = to
msg.dcclist.from = from
## Params: index, state, direction (incoming/outgoing), DCC type, direction (to/from), user (ip:port).
msg.dcclist.line = %S: %S %S DCC %S %S %S (%S:%S)
## Params: waiting, running, done.
msg.dcclist.summary = DCC sessions: %S pending, %S connected, %S finished.
# DCC state names.
msg.dcc.state.abort = Aborted
msg.dcc.state.request = Requested
msg.dcc.state.accept = Accepted
msg.dcc.state.connect = Connected
msg.dcc.state.disconnect = Done
msg.dcc.state.decline = Declined
msg.dcc.state.fail = Failed
msg.url.password = Enter a password for the url %S:
msg.url.key = Enter key for url %S:
msg.startup.added = <%1$S> will now open at startup.
msg.startup.removed = <%1$S> will no longer open at startup.
@ -645,7 +724,7 @@ msg.test.join = Sample Join message, <http://testurl.com/foo.html>.
msg.test.part = Sample Part message, <http://testurl.com/foo.html>.
msg.test.kick = Sample Kick message, <http://testurl.com/foo.html>.
msg.test.quit = Sample Quit message, <http://testurl.com/foo.html>.
msg.test.stalk = %S : Sample /stalk match, <http://testurl.com/foo.html>.
msg.test.stalk = "%S : Sample /stalk match, <http://testurl.com/foo.html>.
msg.test.ctlchr = Sample control char >%01<\\1 -- >%05<\\5 -- >%10<\\10
msg.test.color = Sample color %033c%034o%034l%033o%033r%034%20%036t%036e%032s%034t%0f message.
msg.test.quote = Sample ``double quote'' message.
@ -656,95 +735,81 @@ msg.default.status = Welcome to ChatZilla!
msg.closing = Disconnecting from IRC. Click close again to exit now.
msg.whois.name = %S <%S@%S> ``%S''
msg.whois.channels = %S: member of %S
msg.whois.server = %S: attached to %S ``%S''
msg.whois.idle = %S: idle for %S (on since %S)
msg.whois.end = End of WHOIS information for %S
msg.whois.name = "%S <%S@%S> ``%S''
msg.whois.channels = "%S: member of %S"
msg.whois.server = "%S: attached to %S ``%S''
msg.whois.idle = "%S: idle for %S (on since %S)
msg.whois.end = End of WHOIS information for %S.
msg.ignore.list.1 = Currently not ignoring anyone.
msg.ignore.list.2 = Currently ignoring [%S].
msg.ignore.add = You are now ignoring %S.
msg.ignore.adderr = You are already ignoring %s.
msg.ignore.adderr = You are already ignoring %S.
msg.ignore.del = You are no longer ignoring %S.
msg.ignore.delerr = %S not found in your ignore list.
msg.ignore.delerr = "%S not found in your ignore list.
msg.you.invite = You have invited %S to %S
msg.invite.you = %S (%S@%S) has invited you to %S
msg.you.invite = You have invited %S to %S.
msg.invite.you = "%S (%S@%S) has invited you to %S.
msg.nick.in.use = The nickname ``%S'' is already in use, use the /nick command to pick a new one.
msg.retry.nick = The nickname ``%S'' is already in use, trying ``%S''.
msg.list.rerouted = List reply will appear on the ``%S'' view.
msg.list.end = Displayed %S of %S channels
msg.list.end = Displayed %S of %S channels.
msg.who.end = End of WHO results for ``%S'', %S user(s) found
msg.who.match = User %S, (%S@%S) ``%S'' (%S), member of %S, is connected to <irc://%S/>, %S hop(s)
msg.who.end = End of WHO results for ``%S'', %S user(s) found.
msg.who.match = User %S, (%S@%S) ``%S'' (%S), member of %S, is connected to <irc://%S/>, %S hop(s).
msg.connection.attempt = Connecting to %S via %S:%S, attempt %S of %S...
msg.connection.refused = Connection to %S (%S) refused.
msg.connection.timeout = Connection to %S (%S) timed out.
msg.unknown.host = Unknown host %S.
msg.connection.closed = Connection to %S (%S) closed.
msg.connection.reset = Connection to %S (%S) reset.
msg.close.status = Connection to %S (%S) closed with status %S.
msg.ping.reply = Ping reply from %S in %S
msg.prefix.response = %S , your result is,
msg.ping.reply = Ping reply from %S in %S"
msg.prefix.response = "%S, your result is,
msg.topic.changed = %S has changed the topic to ``%S''
msg.topic.changed = "%S has changed the topic to ``%S''
msg.topic = Topic for %S is ``%S''
msg.no.topic = No topic for channel %S
msg.topic.date = Topic for %S was set by %S on %S
msg.no.topic = No topic for channel %S"
msg.topic.date = Topic for %S was set by %S on %S"
msg.you.joined = YOU have joined %S
msg.someone.joined = %S (%S@%S) has joined %S
msg.you.left = YOU have left %S
msg.someone.left = %S has left %S
msg.someone.left.reason = %S has left %S (%S)
msg.you.joined = YOU have joined %S"
msg.someone.joined = "%S (%S@%S) has joined %S"
msg.you.left = YOU have left %S"
msg.someone.left = "%S has left %S"
msg.someone.left.reason = "%S has left %S (%S)
msg.youre.gone = YOU have been booted from %S by %S (%S)
msg.someone.gone = %S was booted from %S by %S (%S)
msg.someone.gone = "%S was booted from %S by %S (%S)
msg.mode.changed = Mode %S by %S
msg.mode.changed = Mode %S by %S"
msg.you.quit = YOU have left %S (%S)
msg.someone.quit = %S has left %S (%S)
msg.someone.quit = "%S has left %S (%S)
msg.unknown.ctcp = Unknown CTCP %S (%S) from %S
msg.unknown.ctcp = Unknown CTCP %S (%S) from %S"
msg.fonts.family.fmt = Font family is ``%S''.
msg.fonts.family.fmt = Font family is ``%S''
msg.fonts.family.pick = Enter the font family you wish to use:
msg.fonts.size.fmt = Font size is %Spt.
msg.fonts.size.default = Font size is default.
msg.fonts.size.fmt = Font size is %Spt
msg.fonts.size.default = Font size is default
msg.fonts.size.pick = Enter the font size you wish to use:
msg.supports.chanTypes = Supported channel types: %S.
msg.supports.chanModesA = Supported channel modes (A: lists): %S.
msg.supports.chanModesB = Supported channel modes (B: param): %S.
msg.supports.chanModesC = Supported channel modes (C: on-param): %S.
msg.supports.chanModesD = Supported channel modes (D: boolean): %S.
msg.supports.userMode = %S (%S)
msg.supports.userModes = Supported channel user modes: %S.
msg.supports.flagsOn = This server DOES support: %S.
msg.supports.flagsOff = This server DOESN'T support: %S.
msg.supports.miscOption = %S=%S
msg.supports.miscOptions = Server settings/limits: %S.
msg.supports.chanTypes = Supported channel types: %S"
msg.supports.chanModesA = Supported channel modes (A: lists): %S"
msg.supports.chanModesB = Supported channel modes (B: param): %S"
msg.supports.chanModesC = Supported channel modes (C: on-param): %S"
msg.supports.chanModesD = Supported channel modes (D: boolean): %S"
msg.supports.userMode = "%S (%S)
msg.supports.userModes = Supported channel user modes: %S"
msg.supports.flagsOn = This server DOES support: %S"
msg.supports.flagsOff = This server DOESN'T support: %S"
msg.supports.miscOption = "%S=%S"
msg.supports.miscOptions = Server settings/limits: %S"
# pref-irc-appearance.js
file_browse_CSS=Choose a Cascading Stylesheet (CSS) file
file_browse_CSS_spec=Cascading Stylesheet files (*.css)
# pref-irc-sound.js
file_browse_Wave=Choose a Wave Sound file
file_browse_Wave_spec=Sound files (*.wav)
# pref-irc-stalk.js
stalk_add_msg=Enter the stalk word to add:
# pref-irc-startup.js
file_browse_Script=Choose a JavaScript Script file
file_browse_Script_spec=JavaScript Script files (*.js)
munger.mailto=Mailto
munger.link=URLs
munger.channel-link=IRC channel
@ -759,153 +824,254 @@ munger.teletype=Teletype
munger.underline=Underline
munger.ctrl-char=Control Chars
# Messages used in config.js, part of the pref window.
# We only allow one pref window open at once, this occurs when a 2nd is opened.
msg.prefs.alreadyOpen = Chatzilla's preferences are already open; you may not open a second copy.
msg.prefs.err.save = An exception occured trying to save the preferences: %S.
msg.prefs.browse = Browse...
msg.prefs.browse.title = ChatZilla Browse
msg.prefs.move.up = Move up
msg.prefs.move.down = Move down
msg.prefs.add = Add...
msg.prefs.edit = Edit
msg.prefs.delete = Delete
msg.prefs.list.add = Enter item to add:
msg.prefs.list.edit = Edit the item as needed:
msg.prefs.list.delete = Are you sure you want to remove the item ``%S''?
msg.prefs.object.delete = Are you sure you want remove the object ``%S'' and all it's preferences?
msg.prefs.object.reset = Are you sure you want to reset all the preferences for ``%S'' to their defaults?
# First is for adding prefix/suffix to the overall header, and the next three
# are for the different objects (first is network name, second is channel/user
# name).
msg.prefs.fmt.header = "%S"
msg.prefs.fmt.display.network = Network %S"
msg.prefs.fmt.display.channel = Network %S, channel %S"
msg.prefs.fmt.display.user = Network %S, user %S"
# Name for "global" object.
msg.prefs.global = Global Settings
# Localized names for all the prefs and tooltip "help" messages.
# NOTE: "Bugzilla", "Chatzilla" and "mIRC" are product names.
pref.activityFlashDelay.label = Activity flash delay
pref.activityFlashDelay.help = When a tab that has already had activity on it gets more activity, the tab is flashed to indicate this. This preference is the length of the flash, 0 disables it.
pref.aliases.label = Command aliases
pref.aliases.help = Allows you to make short-cuts to various commands or sequences of commands. Each item is of the form "<name> = <command-list>", and the command-list is a list of commands (without the leading "/") and parameters, each separated by ";". The name of the alias will automatically be turned into a command when Chatzilla starts.
pref.aliases.help = Allows you to make shortcuts to various commands or sequences of commands. Each item is of the form "<name> = <command-list>", and the command-list is a list of commands (without the leading "/") and parameters, each separated by ";". The name of the alias will automatically be turned into a command when Chatzilla starts.
pref.autoperform.label = Auto-perform
pref.autoperform.help = When connecting to a server, you might want to send some commands each time, and don't want to type them out each time. Simply enter each command in this list (without the leading "/"), with parameters, and Chatzilla will do it all for you. The commands are run in the order listed.
pref.autoRejoin.label = Automatically rejoin
pref.autoRejoin.label = Automatically rejoin channels
pref.autoRejoin.help = If this is turned on, Chatzilla will try (only once) to rejoin a channel if you get kicked from it. Note, some channels dislike auto-rejoin, and will ban you, so be careful. You can set this preference on channels, networks and globally.
pref.bugURL.label = Bugzilla URL
pref.bugURL.help = The URL used for links to bugs, with "%s" replaced with the bug number. The text "bug " followed by a number will get turned into a link using this URL.
pref.charset.label = Character set
pref.charset.help = For multiple clients to correctly read messages with non-ASCII characters on IRC, they need to use the same character set.
pref.charset.label = Character encoding
pref.charset.help = For multiple clients to correctly read messages with non-ASCII characters on IRC, they need to use the same character encoding.
pref.collapseMsgs.label = Collapse messages
pref.collapseMsgs.help = Makes multiple messages from one person only show their nickname against the first, which can look cleaner than having the nickname repeated.
pref.connectTries.label = Connection attempts
pref.connectTries.help = The number of times Chatzilla attemps to connect to a server or network.
pref.copyMessages.label = Copy important messages
pref.copyMessages.help = Any message marked as "important" will also be copied to the network view with this turned on. It allows you do go away for a long time and still not miss any messages addressed to you.
pref.dcc.enabled.label = DCC Enabled
pref.dcc.enabled.help = When disabled, no DCC-related commands will do anything, and all DCC requests from other users will be ignored completely.
pref.dcc.listenPorts.label = Listen Ports
pref.dcc.listenPorts.help = List of ports that other user can connect to remotely. Each item may be a single port number, or a range specified as "lower-upper". Leave empty to use a random, OS-picked port always. Each time you offer a DCC connection to someone, the next port listed is picked.
pref.dcc.useServerIP.label = Get local IP from server
pref.dcc.useServerIP.help = When turned on, ChatZilla will ask the server for your IP address when connecting. This allows DCC to obtain the correct IP address when operating behind a gateway or NAT-based system.
pref.debugMode.label = Debug mode
pref.debugMode.help = This preferences is for deubgging Chatzilla and can generate a lot of debug output (usually to the console). It is a list of letters, signifying what you want you want debug messages about. "c" for context menus (dumps data when opening a context menu), "d" for dispatch (dumps data when dispatching commands), and "t" for trace/hook (dumps data about hooks and the event queue processing) debug.
pref.debugMode.help = This preference is for deubgging Chatzilla and can generate a lot of debug output (usually to the console). It is a list of letters, signifying what you want debug messages about. "c" for context menus (dumps data when opening a context menu), "d" for dispatch (dumps data when dispatching commands), and "t" for trace/hook (dumps data about hooks and the event queue processing) debugging.
pref.desc.label = Description
pref.desc.help = Sets the "description" (aka "real name") field shown in your /whois information. It is commonly used to include ones' real name, but you are not required to enter anything.
pref.deleteOnPart.label = Delete channel views on part
pref.deleteOnPart.help = Removes the channel view when you leave using /leave or /part.
pref.displayHeader.label = Show header
pref.displayHeader.help = Display the chat header on this view. This contains information like the URL of the current view, and the topic and modes for a channel view.
pref.font.family.label = Font Family
pref.font.family.help = Selects the font you want ChatZilla to display messages with. The value "default" will use your global font family, "serif", "sans-serif" and "monospace" will use your global font settings, other values will set a font directly.
pref.font.size.label = Font Size (pt)
pref.font.size.help = Selects the font size you want ChatZilla to display messages with. The value 0 will use your global font size, and other values will be interpreted as the size in points (pt).
pref.guessCommands.label = Guess unknown commands
pref.guessCommands.help = If you enter a command (starts with "/") that Chatzilla doesn't understand, then it can try "guessing" by sending the command to the server. You can turn this off if you don't want Chatzilla to try this.
pref.hasPrefs.label = Object has prefs
pref.hasPrefs.help = Indicates the object has preferences saved. Never shown in preferences window. :)
pref.initialURLs.label = Auto-connect URLs
pref.initialURLs.help = A list of IRC URLs that Chatzilla should connect to (load) when starting. These will not be loaded if Chatzilla is started because of a URL that goes somewhere (e.g. irc://moznet/).
pref.initialScripts.label = Auto-load scripts
pref.initialScripts.help = When Chatzilla starts, it loads all the scripts listed here. If an item is a directory, however, it loads "init.js" from that directory, and any subdirectory.
pref.log.label = Log this view
pref.log.help = Makes Chatzilla log this view. The log file is usually stored in your profile, which can be overriden with "Profile path" (for the base path) or "Log file name" for a specific view's log.
pref.logFileName.label = Log file name
pref.logFileName.help = This is the file which Chatzilla will log this view to. Generally, if the view is currently open and logging, changing this option won't take effect until it next starts logging.
pref.messages.click.label = Links: Normal click
pref.messages.click.help = The three link preferences define how Chatzilla reacts to different kinds of clicks on links. You can re-arrange these to suit your preferences.
pref.messages.ctrlClick.label = Links: Control-click
pref.messages.ctrlClick.help = The three link preferences define how Chatzilla reacts to different kinds of clicks on links. You can re-arrange these to suit your preferences.
pref.messages.metaClick.label = Links: Alt/Meta-click
pref.messages.metaClick.help = The three link preferences define how Chatzilla reacts to different kinds of clicks on links. You can re-arrange these to suit your preferences.
pref.motif.dark.label = Dark motif URL
pref.messages.click.label = Normal click
pref.messages.click.help = What to do when clicking a URL normally.
pref.messages.ctrlClick.label = Control-click
pref.messages.ctrlClick.help = What to do when clicking a URL with the Control key held down.
pref.messages.metaClick.label = Alt/Meta-click
pref.messages.metaClick.help = What to do when clicking a URL with the Alt or Meta key held down.
pref.messages.middleClick.label = Middle-click
pref.messages.middleClick.help = What to do when clicking a URL with the middle mouse button.
pref.motif.dark.label = Dark motif
pref.motif.dark.help = The dark motif selectable from the View > Color Scheme menu.
pref.motif.light.label = Light motif URL
pref.motif.light.label = Light motif
pref.motif.light.help = The light motif selectable from the View > Color Scheme menu.
pref.motif.default.label = Default motif URL
pref.motif.default.label = Default motif
pref.motif.default.help = The default motif selectable from the View > Color Scheme menu.
pref.motif.current.label = Current motif
pref.motif.current.help = The currently selected motif file. A Motif is a CSS file that describes how do display the chat view, and can be used to customize the display.
pref.msgBeep.label = Sounds: New query view
pref.msgBeep.help = The sound(s) to play when a new query view is created. This is a space separated list of either "beep" or file: URLs.
pref.multiline.label = Multiline input mode
pref.multiline.help = Sets whether Chatzilla is using the multiline input box or the normal single-line one.
pref.munger.bold.label = Display bold
pref.munger.bold.label = Bold
pref.munger.bold.help = Makes Chatzilla display *bold* actually in bold face.
pref.munger.bugzilla-link.label = Display Bugzilla links
pref.munger.bugzilla-link.label = Bugzilla links
pref.munger.bugzilla-link.help = Makes Chatzilla convert "bug <number>" into a link, using the "Bugzilla URL" as the link.
pref.munger.channel-link.label = Display channel links
pref.munger.channel-link.label = Channel links
pref.munger.channel-link.help = Makes Chatzilla convert "#channel" into a link to the channel.
pref.munger.colorCodes.label = Display mIRC colors
pref.munger.colorCodes.label = mIRC colors
pref.munger.colorCodes.help = Enables the display of colors on the chat text, as well as other mIRC codes (bold and underline). When disabled, Chatzilla understands the codes but doesn't do anything with the display (so you don't get the codes or the colors).
pref.munger.ctrl-char.label = Display control characters
pref.munger.ctrl-char.label = Control characters
pref.munger.ctrl-char.help = Makes Chatzilla display control characters it doesn't understand.
pref.munger.ear.label = Display ear
pref.munger.ear.label = Ear
pref.munger.ear.help = Makes Chatzilla display an image of an ear for "(*".
pref.munger.face.label = Display faces (emoticons)
pref.munger.face.label = Faces (emoticons)
pref.munger.face.help = Makes Chatzilla display images for common smilies, such as :-) and ;-).
pref.munger.italic.label = Display italic
pref.munger.italic.label = Italic
pref.munger.italic.help = Makes Chatzilla display /italic/ actually in italics.
pref.munger.link.label = Display web links
pref.munger.link.label = Web links
pref.munger.link.help = Makes Chatzilla convert text that looks like a web link into a link.
pref.munger.mailto.label = Display mail links
pref.munger.mailto.label = Mail links
pref.munger.mailto.help = Makes Chatzilla convert text that looks like an e-mail address into a e-mail link.
pref.munger.quote.label = Display neater quotes
pref.munger.quote.label = Neater quotes
pref.munger.quote.help = Makes Chatzilla replace `` with \u201C and '' with \u201D.
pref.munger.rheet.label = Display rheet
pref.munger.rheet.label = Rheet
pref.munger.rheet.help = Makes Chatzilla turn "rheet" into a link (a very Mozilla.org-centric feature).
pref.munger.underline.label = Display underline
pref.munger.underline.label = Underline
pref.munger.underline.help = Makes Chatzilla display _underline_ actually with an underline.
pref.munger.word-hyphenator.label = Automaticall hyphenate long works
pref.munger.word-hyphenator.label = Hyphenate long words
pref.munger.word-hyphenator.help = Makes Chatzilla automatically insert "hyphenation points" into long words and URLs so they can wrap to the screen size.
pref.newTabLimit.label = Max auto-created views
pref.newTabLimit.help = Sets the number of views (such as query views) that may be created automatically by Chatzilla. Once the limit is reached, private messages will show up on the current view instead. Set this to 0 for unlimited, or 1 to disallow all auto-created views.
pref.nickCompleteStr.label = Nickname completion string
pref.nickCompleteStr.help = This string is appended to a nickname when tab-completed at the start of a line.
pref.nickname.label = Nickname
pref.nickname.help = This is the name seen by everyone else when on IRC. You can use anything you like, but can't contain particularily "weird" characters, so keep to alpha-numeric characters.
pref.nickname.help = This is the name seen by everyone else when on IRC. You can use anything you like, but it can't contain particularly "weird" characters, so keep to alpha-numeric characters.
pref.notify.aggressive.label = Aggressive notify
pref.notify.aggressive.help = When someone private messages you, says your nickname, or mentions one of your "stalk words", Chatzilla considers the message to be worth getting your attention. This preference sets whether it's allowed to flash the window or bring it to the front (varies by OS) in order to get your attention.
pref.notifyList.label = Notify list
pref.notifyList.help = A list of nicknames to periodically check to see if they are on-line or not. Every 5 minutes, Chatzilla will check this list, and inform you if anyone is now on-line or has gone off-line.
pref.outgoing.colorCodes.label = Enable sending color codes
pref.outgoing.colorCodes.help = Allows you to send color and other mIRC codes, such as bold and underline, using special %-sequences. When enabled, simply type "%" to see a popup of the various choices.
pref.outputWindowURL.label = Output Window URL
pref.outputWindowURL.label = Output Window
pref.outputWindowURL.help = You probably don't want to change this. The chat view loads this URL to display the actual messages, header, etc., and the file must correctly define certain items or you'll get JavaScript errors and a blank chat window!
pref.profilePath.label = Profile path
pref.profilePath.help = This is the base location for Chatzilla-related files. By default, Chatzilla loads scripts in the "scripts" subdirectory, and stores log files in the "logs" subdirectory.
pref.sortUsersByMode.label = Userlist: sort users by mode
pref.sortUsersByMode.help = Causes the userlist to sort users by their mode, op first, then half-op (if supported on the server), then voice, and then everyone else.
pref.queryBeep.label = Sounds: Query message
pref.queryBeep.help = The sound(s) to play when a message arrvies in a query view. This is a space separated list of either "beep" or file: URLs.
pref.reconnect.label = Automatically reconnect
pref.reconnect.help = When your connection is lost unexpectedly, Chatzilla can automatically reconnect to the server for you.
pref.showModeSymbols.label = Userlist: show user mode symbols
pref.showModeSymbols.label = Show user mode symbols
pref.showModeSymbols.help = The userlist can either show mode symbols ("@" for op, "%" for half-op, "+" for voice), or it can use lights (green for op, dark blue for half-op, light blue (cyan) for voice, and black/off for normal). Turn this preference on to use the mode symbols instead of the lights.
pref.stalkBeep.label = Sounds: Important message
pref.stalkBeep.help = The sound(s) to play when a message is found to be "important" (has your nickname in it, or a stalk word). This is a space separated list of either "beep" or file: URLs.
pref.sortUsersByMode.label = Sort users by mode
pref.sortUsersByMode.help = Causes the userlist to sort users by their mode, op first, then half-op (if supported on the server), then voice, and then everyone else.
pref.sound.enabled.label = Enabled
pref.sound.enabled.help = Tick this preference to allow sound, or untick to turn off all sounds. Provides nothing more than a global toggle.
pref.sound.overlapDelay.label = Overlap Delay
pref.sound.overlapDelay.help = Sets the period of time during which the same event will not trigger the sound to be played. For example, the default value of 2000ms (2 seconds) means if two stalk matches occur within 2 seconds of each other, only the first will cause the sound to be played.
##pref.sound.surpressActive.label = Supress Sounds for active view
##pref.sound.surpressActive.help = Stops sounds generated by the active view from playing if ChatZilla is the active window. Sounds from other views, or when ChatZilla is not active, will always play.
pref.sound.channel.start.label = Channel: Start session
pref.sound.channel.start.help =
pref.sound.channel.event.label = Channel: Non-chat event
pref.sound.channel.event.help =
pref.sound.channel.chat.label = Channel: Normal chat
pref.sound.channel.chat.help =
pref.sound.channel.stalk.label = Channel: Stalk match
pref.sound.channel.stalk.help =
pref.sound.user.start.label = User: Start session
pref.sound.user.start.help =
pref.sound.user.stalk.label = User: Normal chat
pref.sound.user.stalk.help =
pref.stalkWholeWords.label = Stalk whole words only
pref.stalkWholeWords.help = This preferences toggles Chatzilla's handling of stalk words between finding matching words, or simple substrings. For example, "Chatzilla is cool" will match the stalk word "zilla" only if this preferences is off.
pref.stalkWords.label = Stalk words
pref.stalkWords.help = A list of words that, when a line contains one, make Chatzilla make the line as "important", and will try to get your attention if "Aggressive notify" is turned on.
pref.timestampFormat.label = Timestamps format
pref.timestampFormat.help = Sets the format used for timestamps in this view. Enter the string format to use for time stamps, with the following replacements: %y = 4-digit year, %m = month number (1-12), %d = day of month, %h = hour, %n = minutes, %s = seconds.
pref.timestamps.label = Timestamps enabled
pref.timestamps.help = Enables timestamps in this view. Timestamps display the time of each message in the chat view.
pref.username.label = Username
pref.username.help = Your username is used to construct your "host mask", which is a string representing you, by including your connection's host name and this username. It is sometimes used for setting auto-op, bans, and other things specific to one person.
pref.usermode.label = Usermode
pref.usermode.help = Your usermode determins how the IRC server treats you (it is a list of letters preceeded by "+") - for example, you can get the server to send to message about "behind the scenes"-like things but setting a different usermode. The most common option, "i", makes you not show up as a member of a channel unless the user making the query is already in the channel (it stands for "invisible").
# These are the prefs that get grouped
# Localizers should make sure each version has the same string, and that they
# don't include any indication of which pref it actually is - this will be
# provided by the dialog itself.
# Preference group labels #
pref.networkHeader.label = Show header
pref.networkHeader.help = Sets the default visibility for headers of views. Each view can override this default if nessessary.
pref.channelHeader.label = Show header
pref.channelHeader.help = Sets the default visibility for headers of views. Each view can override this default if nessessary.
pref.userHeader.label = Show header
pref.userHeader.help = Sets the default visibility for headers of views. Each view can override this default if nessessary.
pref.group.general.label = General
pref.group.general.connect.label = Connection
pref.group.general.ident.label = Identification
pref.group.general.log.label = Logging
pref.group.appearance.label = Appearance
pref.group.appearance.misc.label = Miscellaneous
pref.group.appearance.motif.label = Motifs
pref.group.appearance.timestamps.label = Timestamps
pref.group.appearance.timestamps.help = Substitutions: %y = 4-digit year, %m = month number (1-12), %d = day of month, %h = hour, %n = minutes, %s = seconds.
pref.group.appearance.userlist.label = Userlist
pref.group.dcc.label = DCC
pref.group.dcc.ports.label = Ports
pref.group.munger.label = Formatting
pref.group.startup.label = Startup
pref.group.startup.initialURLs.label = Auto-connect URLs
pref.group.startup.initialScripts.label = Auto-load scripts
pref.group.lists.label = Lists
pref.group.lists.stalkWords.label = Stalk words
pref.group.lists.aliases.label = Command aliases
pref.group.lists.notifyList.label = Notify list
pref.group.lists.autoperform.label = Auto-perform
pref.group.global.label = Global
pref.group.global.header.label = Headers
pref.group.global.header.help = Sets the default visibility for headers of views. Each view can override this default if necessary.
pref.group.global.links.label = Links
pref.group.global.links.help = The three link preferences define how Chatzilla reacts to different kinds of clicks on links. You can re-arrange these to suit your preferences.
pref.group.global.log.label = Log these view types
pref.group.global.log.help = Sets the default logging state for views. Each view can override this default if necessary.
pref.group.global.maxLines.label = Scrollback size
pref.group.global.maxLines.help = The number of lines of text to keep in this view type. Once the limit is reached, the oldest lines are removed as new lines are added.
pref.group.global.sounds.label = Sound Configuration
pref.group.global.sounds.help =
pref.group.global.soundEvts.label = Sound Events
pref.group.global.soundEvts.help = Sounds for certain client events. These preferences are a space-separated list of either "beep" or file: URLs.
pref.log.label = Log this view
pref.log.help = Makes Chatzilla log this view. The log file is usually stored in your profile, which can be overriden with "Profile path" (for the base path) or "Log file name" for a specific view's log.
pref.networkLog.label = Log these view types
pref.networkLog.help = Sets the default loging state for views. Each view can override this default if nessessary.
pref.channelLog.label = Log these view types
pref.channelLog.help = Sets the default loging state for views. Each view can override this default if nessessary.
pref.userLog.label = Log these view types
pref.userLog.help = Sets the default loging state for views. Each view can override this default if nessessary.
# These are the prefs that get grouped #
pref.clientMaxLines.label = Scrollback size
pref.clientMaxLines.help = The number of lines of text to keep in this view type. Once the limit is reached, the oldest lines are removed as new lines are added.
pref.networkMaxLines.label = Scrollback size
pref.networkMaxLines.help = The number of lines of text to keep in this view type. Once the limit is reached, the oldest lines are removed as new lines are added.
pref.channelMaxLines.label = Scrollback size
pref.channelMaxLines.help = The number of lines of text to keep in this view type. Once the limit is reached, the oldest lines are removed as new lines are added.
pref.userMaxLines.label = Scrollback size
pref.userMaxLines.help = The number of lines of text to keep in this view type. Once the limit is reached, the oldest lines are removed as new lines are added.
pref.networkHeader.label = Networks
pref.networkHeader.help =
pref.channelHeader.label = Channels
pref.channelHeader.help =
pref.userHeader.label = Users
pref.userHeader.help =
pref.networkLog.label = Networks
pref.networkLog.help =
pref.channelLog.label = Channels
pref.channelLog.help =
pref.userLog.label = Users
pref.userLog.help =
pref.clientMaxLines.label = Client
pref.clientMaxLines.help =
pref.networkMaxLines.label = Networks
pref.networkMaxLines.help =
pref.channelMaxLines.label = Channels
pref.channelMaxLines.help =
pref.userMaxLines.label = Users
pref.userMaxLines.help =
pref.timestampFormat.label = Format
pref.timestampFormat.help =
pref.timestamps.label = Enabled
pref.timestamps.help =
pref.msgBeep.label = New query view
pref.msgBeep.help =
pref.queryBeep.label = Query message
pref.queryBeep.help =
pref.stalkBeep.label = Important message
pref.stalkBeep.help =

Просмотреть файл

@ -0,0 +1,72 @@
<!-- ***** BEGIN LICENSE BLOCK *****
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
-
- The contents of this file are subject to the Mozilla Public License Version
- 1.1 (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS IS" basis,
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- for the specific language governing rights and limitations under the
- License.
-
- The Original Code is ChatZilla.
-
- The Initial Developer of the Original Code is James Ross.
- Portions created by the Initial Developer are Copyright (C) 2004
- the Initial Developer. All Rights Reserved.
-
- Contributor(s):
- James Ross <silver@warwickcompsoc.co.uk>
-
- Alternatively, the contents of this file may be used under the terms of
- either the GNU General Public License Version 2 or later (the "GPL"), or
- the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- in which case the provisions of the GPL or the LGPL are applicable instead
- of those above. If you wish to allow use of your version of this file only
- under the terms of either the GPL or the LGPL, and not to allow others to
- use your version of this file under the terms of the MPL, indicate your
- decision by deleting the provisions above and replace them with the notice
- and other provisions required by the LGPL or the GPL. If you do not delete
- the provisions above, a recipient may use your version of this file under
- the terms of any one of the MPL, the GPL or the LGPL.
-
- ***** END LICENSE BLOCK ***** -->
<!ENTITY window.title "ChatZilla Preferences">
<!ENTITY loading.label "Please wait, loading...">
<!ENTITY homepage.url "http://www.hacksrus.com/~ginda/chatzilla/">
<!ENTITY homepage.label "ChatZilla Homepage">
<!ENTITY object.add.label "Add...">
<!ENTITY object.add.hint "Add a new network, channel or user to set preferences on">
<!ENTITY object.add.accesskey "A">
<!ENTITY object.del.label "Remove">
<!ENTITY object.del.hint "Remove the current object, clearing all of its preferences">
<!ENTITY object.del.accesskey "R">
<!ENTITY object.reset.label "Reset">
<!ENTITY object.reset.hint "Reset this object's preferences to the defaults">
<!ENTITY object.reset.accesskey "s">
<!ENTITY dialog.apply "Apply">
<!ENTITY network "Network">
<!ENTITY channel "Channel">
<!ENTITY user "User">
<!ENTITY config.add.title "Add Preference Object">
<!ENTITY config.type.label "Type:">
<!ENTITY config.type.hint "Type of object to add preferences for">
<!ENTITY config.type.accesskey "T">
<!ENTITY config.network.label "Network:">
<!ENTITY config.network.hint "Known name of the network, or the server name">
<!ENTITY config.network.accesskey "N">
<!ENTITY config.target.label "Target:">
<!ENTITY config.target.hint "Target channel or user name">
<!ENTITY config.target.accesskey "g">

Просмотреть файл

@ -96,12 +96,12 @@ a.chatzilla-link:visited {
color: lightgreen;
}
.msg-data[msg-type="JOIN"] a.chatzilla-link,
.msg-data[msg-type="PART"] a.chatzilla-link {
.msg[msg-type="JOIN"] .msg-data a.chatzilla-link,
.msg[msg-type="PART"] .msg-data a.chatzilla-link {
color: lightcyan;
}
.msg-data[msg-type="KICK"] a.chatzilla-link {
.msg[msg-type="KICK"] .msg-data a.chatzilla-link {
color: #ff5700;
}
@ -133,63 +133,63 @@ a.chatzilla-link:visited {
color: white !important; /* a message (channel and query */
} /* views) */
.msg-data[mark="even"] { /* use even/odd marks to create a */
.msg[mark="even"] .msg-data { /* use even/odd marks to create a */
color: white; /* subtle brightness change when */
} /* the speaker changes. */
.msg-data[msg-type="JOIN"],
.msg-data[msg-type="PART"] {
.msg[msg-type="JOIN"] .msg-data,
.msg[msg-type="PART"] .msg-data {
color: lightblue;
}
.msg-data[msg-type="PART"] {
.msg[msg-type="PART"] .msg-data {
color: lightblue;
}
.msg-data[msg-type="HELLO"] {
.msg[msg-type="HELLO"] .msg-data {
color: yellow;
}
.msg-data[msg-type="ERROR"] {
.msg[msg-type="ERROR"] .msg-data {
background: red;
color: white;
}
.msg-data[msg-type="USAGE"] {
.msg[msg-type="USAGE"] .msg-data {
color: white;
}
.msg-data[msg-type="ACTION"] {
.msg[msg-type="ACTION"] .msg-data {
color: #6ac9ee;
}
.msg-data[msg-type="NICK"] {
.msg[msg-type="NICK"] .msg-data {
color: #96fa94;
}
.msg-data[msg-type="NOTICE"],
.msg-data[msg-type="MODE"] {
.msg[msg-type="NOTICE"] .msg-data,
.msg[msg-type="MODE"] .msg-data {
color: #60e066;
}
.msg-data[msg-type="NOTICE"] a.chatzilla-link,
.msg-data[msg-type="MODE"] a.chatzilla-link {
.msg[msg-type="NOTICE"] .msg-data a.chatzilla-link,
.msg[msg-type="MODE"] .msg-data a.chatzilla-link {
color: #6dff74;
}
.msg-data[msg-type="KICK"] {
.msg[msg-type="KICK"] .msg-data {
color: #d85d24;
}
.msg-data[msg-type="QUIT"] {
.msg[msg-type="QUIT"] .msg-data {
color: #f7b183;
}
/* important="true" means that the message has text from your /stalk list in
* it, has your nickname in it, or was spoken by someone in your /stalk list.
*/
.msg-user[important="true"],
.msg-data[important="true"] {
.msg[important="true"] .msg-user,
.msg[important="true"] .msg-data {
background: #333333 !important;
}
@ -198,39 +198,39 @@ a.chatzilla-link:visited {
color: blue;
}
.msg-user[msg-user$="ME!"]:before,
.msg-user[msg-user$="ME!"]:after {
.msg[msg-user$="ME!"] .msg-user:before,
.msg[msg-user$="ME!"] .msg-user:after {
color: #6afc73;
}
.msg-user[msg-type="ACTION"]:before,
.msg-user[msg-type="ACTION"]:after {
.msg[msg-type="ACTION"] .msg-user:before,
.msg[msg-type="ACTION"] .msg-user:after {
color: cyan;
}
.msg-user[msg-type="NOTICE"]:before,
.msg-user[msg-type="NOTICE"]:after {
.msg[msg-type="NOTICE"] .msg-user:before,
.msg[msg-type="NOTICE"] .msg-user:after {
color: #6afc73;
}
/* private messages *not* in a query window */
.msg-user[dest-type="IRCUser"]:before,
.msg-user[dest-type="IRCUser"]:after {
.msg[dest-type="IRCUser"] .msg-user:before,
.msg[dest-type="IRCUser"] .msg-user:after {
color: #6afc73;
}
.msg-user[msg-dest$="ME!"]:before,
.msg-user[msg-dest$="ME!"]:after {
.msg[msg-dest$="ME!"] .msg-user:before,
.msg[msg-dest$="ME!"] .msg-user:after {
color: magenta;
}
/* private messages in a query window */
.msg-user[view-type="IRCUser"]:before,
.msg-user[view-type="IRCUser"]:after {
.msg[view-type="IRCUser"] .msg-user:before,
.msg[view-type="IRCUser"] .msg-user:after {
color: white;
}
.msg-user[view-type="IRCUser"][msg-user$="ME!"]:before,
.msg-user[view-type="IRCUser"][msg-user$="ME!"]:after {
.msg[view-type="IRCUser"][msg-user$="ME!"] .msg-user:before,
.msg[view-type="IRCUser"][msg-user$="ME!"] .msg-user:after {
color: #6afc73;
}

Просмотреть файл

@ -48,33 +48,33 @@
background-color: white;
}
.msg-data[msg-type="ACTION"] {
.msg[msg-type="ACTION"] .msg-data {
font-style: italic;
}
.msg-type[msg-type="JOIN"],
.msg-type[msg-type="PART"],
.msg-type[msg-type="QUIT"] {
.msg[msg-type="JOIN"] .msg-type,
.msg[msg-type="PART"] .msg-type,
.msg[msg-type="QUIT"] .msg-type {
font-weight: bold;
}
.msg-data[msg-type="QUIT"] {
.msg[msg-type="QUIT"] .msg-data {
font-variant: small-caps;
font-weight: bold;
}
.msg-data[msg-type="JOIN"],
.msg-data[msg-type="PART"] {
.msg[msg-type="JOIN"] .msg-data,
.msg[msg-type="PART"] .msg-data {
font-variant: small-caps;
}
.msg-data[msg-type="HELLO"],
.msg-type[msg-type="NICK"],
.msg-data[msg-type="NOTICE"] {
.msg[msg-type="HELLO"] .msg-data,
.msg[msg-type="NICK"] .msg-type,
.msg[msg-type="NOTICE"] .msg-data {
font-weight: bold;
}
.msg-data[msg-type="NICK"] {
.msg[msg-type="NICK"] .msg-data {
font: 10pt courier;
}
@ -86,11 +86,11 @@
font-weight: bolder;
}
.msg-user[dest-type="IRCUser"],
.msg-user[dest-type="IRCUser"][msg-dest$="ME!"] {
.msg[dest-type="IRCUser"] .msg-user,
.msg[dest-type="IRCUser"][msg-dest$="ME!"] .msg-user {
font-style: italic;
}
.msg-user[msg-user$="ME!"] {
.msg[msg-user$="ME!"] .msg-user {
font-weight: bold;
}

Просмотреть файл

@ -90,35 +90,35 @@ a.chatzilla-link {
color: #2ec908;
}
.msg-data[msg-type="PRIVMSG"],
.msg-data[msg-type="ACTION"] {
.msg[msg-type="PRIVMSG"] .msg-data,
.msg[msg-type="ACTION"] .msg-data {
background-color: #F0F0F0;
}
.msg-data[msg-type="HELLO"] a.chatzilla-link {
.msg[msg-type="HELLO"] .msg-data a.chatzilla-link {
color: #d7d9dd;
}
.msg-data[msg-type="JOIN"] a.chatzilla-link,
.msg-data[msg-type="PART"] a.chatzilla-link {
.msg[msg-type="JOIN"] .msg-data a.chatzilla-link,
.msg[msg-type="PART"] .msg-data a.chatzilla-link {
font-weight: bold;
color: #11c411;
}
.msg-data[msg-type="ERROR"] a.chatzilla-link {
.msg[msg-type="ERROR"] .msg-data a.chatzilla-link {
font-weight: bold;
color: white;
}
.msg-data[msg-type="KICK"] a.chatzilla-link {
.msg[msg-type="KICK"] .msg-data a.chatzilla-link {
color: #aa0d08;
}
.msg-data[msg-type="NOTICE"] a.chatzilla-link {
.msg[msg-type="NOTICE"] .msg-data a.chatzilla-link {
color: #d64444;
}
.msg-data[msg-type="QUIT"] a.chatzilla-link {
.msg[msg-type="QUIT"] .msg-data a.chatzilla-link {
color: #c46907;
}
@ -152,12 +152,12 @@ a.chatzilla-link {
font-weight: bold; /* views) */
}
.msg-data[mark="even"] { /* use even/odd marks to create a */
.msg[mark="even"] .msg-data { /* use even/odd marks to create a */
color: #555555; /* subtle brightness change when */
} /* the speaker changes. */
.msg-data[msg-type="JOIN"],
.msg-data[msg-type="PART"] {
.msg[msg-type="JOIN"] .msg-data,
.msg[msg-type="PART"] .msg-data {
color: #0e9e0e;
background-color: #c3f7c3;
font-weight: bold;
@ -165,52 +165,52 @@ a.chatzilla-link {
/*border: thin darkblue solid;*/
}
.msg-data[msg-type="QUIT"] {
.msg[msg-type="QUIT"] .msg-data {
background: #fff196;
color: #ff8d02;
font-weight: bold;
-moz-border-radius: 5px 5px 5px 5px;
}
.msg-data[msg-type="HELLO"] {
.msg[msg-type="HELLO"] .msg-data {
background: #1342a5;
color: white;
-moz-border-radius: 5px 5px 5px 5px;
font-weight: bold;
}
.msg-data[msg-type="ERROR"] {
.msg[msg-type="ERROR"] .msg-data {
-moz-border-radius: 5px 5px 5px 5px;
background: #a8221e;
color: white;
}
.msg-data[msg-type="USAGE"] {
.msg[msg-type="USAGE"] .msg-data {
color: black;
}
.msg-data[msg-type="ACTION"] {
.msg[msg-type="ACTION"] .msg-data {
color: black;
font-style: italic;
}
.msg-data[msg-type="NICK"] {
.msg[msg-type="NICK"] .msg-data {
color: #4e8387;
background-color: #d5e9ea;
font-weight: bold;
}
.msg-data[msg-type="NOTICE"] {
.msg[msg-type="NOTICE"] .msg-data {
color: #ae4141;
font-weight: bold;
}
.msg-data[msg-type="MODE"] {
.msg[msg-type="MODE"] .msg-data {
color: #2709ed;
font-weight: bold;
}
.msg-data[msg-type="KICK"] {
.msg[msg-type="KICK"] .msg-data {
color: #ff1a0a;
background: #ffdbcc;
font-weight: bold;
@ -220,12 +220,12 @@ a.chatzilla-link {
/* important="true" means that the message has text from your /stalk list in
* it, has your nickname in it, or was spoken by someone in your /stalk list.
*/
.msg-user[important="true"] {
.msg[important="true"] .msg-user {
background: #d4d8d4;
-moz-border-radius: 5px 0px 0px 5px;
}
.msg-data[important="true"] {
.msg[important="true"] .msg-data {
background: #eaefeb;
}
@ -236,7 +236,7 @@ a.chatzilla-link {
color: #777499;
}
.msg-user[msg-user$="ME!"]:before, /* the decoration around MY */
.msg-user[msg-user$="ME!"]:after { /* nick */
.msg[msg-user$="ME!"] .msg-user:before, /* the decoration around MY */
.msg[msg-user$="ME!"] .msg-user:after { /* nick */
color: #843c6c;
}