зеркало из https://github.com/mozilla/pjs.git
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:
Родитель
364a3b1c62
Коммит
e11c8cbd6f
|
@ -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"><none></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="dcc-chat-title" colspan="4"><none></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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче