зеркало из https://github.com/mozilla/pjs.git
Bug #132643 --> land the animated alerts infrastructure from the ALERTS_SERVICE_BRANCH
These files aren't part of the windows build yet but they soon will be. r=sspitzer sr=hewitt a=asa
This commit is contained in:
Родитель
b61e6438ca
Коммит
711dc2fcaa
|
@ -0,0 +1,71 @@
|
|||
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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 mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2002
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Scott MacGregor <mscott@netscape.com>
|
||||
*
|
||||
* 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 NPL, 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 NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
/* nsIAlertsListener --> when a consumer asks the alerts service to put up an alert, they have the option
|
||||
of passing in an alert listener as well. The alert listener gets notified when the alert has gone away.
|
||||
*/
|
||||
[scriptable, uuid(A840623B-5B87-4e99-A74A-9EF0886C11DD)]
|
||||
interface nsIAlertListener : nsISupports
|
||||
{
|
||||
void onAlertFinished(in wstring aAlertCookie);
|
||||
void onAlertClickCallback(in wstring aAlertCookie); // if the user clicks on the link and you wanted notified....
|
||||
};
|
||||
|
||||
[scriptable, uuid(7E8B76C6-A70C-4075-81AA-D48B6152E1B4)]
|
||||
interface nsIAlertsService : nsISupports
|
||||
{
|
||||
/* showAlertNotification: shows an animated alert icon
|
||||
aImageUrl --> a url identifying an image to put in the alert.
|
||||
aAlertTitle --> the title text for the alert (i.e. You have New Mail)
|
||||
aAlertText --> the contents of the alert
|
||||
alertTextClickable --> set to true if you wish to be notified if the user attempts to click
|
||||
the alert text. Also causes the alert text to look like a link.
|
||||
aAlertCookie --> a blind cookie the alert will pass back to the consumer during the alert listener callbacks
|
||||
*/
|
||||
void showAlertNotification(in string aImageUrl, in wstring aAlertTitle,
|
||||
in wstring aAlertText, in boolean alertTextClickable,
|
||||
in wstring aAlertCookie,
|
||||
in nsIAlertListener aAlertListener );
|
||||
};
|
||||
|
||||
%{ C++
|
||||
#define NS_ALERTSERVICE_CONTRACTID "@mozilla.org/alerts-service;1"
|
||||
%}
|
|
@ -0,0 +1,137 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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 mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Scott MacGregor <mscott@netscape.com>
|
||||
*
|
||||
* 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 NPL, 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 NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
var gCurrentHeight = 0;
|
||||
var gFinalHeight = 50;
|
||||
var gWidth = 260;
|
||||
var gSlideIncrement = 1;
|
||||
var gSlideTime = 10;
|
||||
var gOpenTime = 3000; // total time the alert should stay up once we are done animating.
|
||||
|
||||
var gAlertListener = null;
|
||||
var gAlertTextClickable = false;
|
||||
var gAlertCookie = "";
|
||||
|
||||
// fudge factor constants used to help guess a good width for the alert
|
||||
var imageWidthFudgeFactor = 40; // an alert image should be 26 pixels wide plus a fudge factor
|
||||
var alertTextFudgeMultiplier = 7;
|
||||
|
||||
function onAlertLoad()
|
||||
{
|
||||
// unwrap all the args....
|
||||
// arguments[0] --> the image src url
|
||||
// arguments[1] --> the alert title
|
||||
// arguments[2] --> the alert text
|
||||
// arguments[3] --> is the text clickable?
|
||||
// arguments[4] --> the alert cookie to be passed back to the listener
|
||||
// arguments[5] --> an optional callback listener (nsIAlertListener)
|
||||
|
||||
document.getElementById('alertImage').setAttribute('src', window.arguments[0]);
|
||||
document.getElementById('alertTitleLabel').firstChild.nodeValue = window.arguments[1];
|
||||
document.getElementById('alertTextLabel').firstChild.nodeValue = window.arguments[2];
|
||||
gAlertTextClickable = window.arguments[3];
|
||||
gAlertCookie = window.arguments[4];
|
||||
|
||||
// HACK: we need to make sure the alert is wide enough to cleanly hold the image
|
||||
// plus the length of the text passed in. Unfortunately we currently have no way to convert
|
||||
// .ems into pixels. So I'm "faking" this by multiplying the length of the alert text by a fudge
|
||||
// factor. I'm then adding to that the width of the image + a small fudge factor.
|
||||
window.outerWidth = imageWidthFudgeFactor + window.arguments[2].length * alertTextFudgeMultiplier;
|
||||
|
||||
if (gAlertTextClickable)
|
||||
document.getElementById('alertTextLabel').setAttribute('clickable', true);
|
||||
|
||||
// the 5th argument is optional
|
||||
if (window.arguments[5])
|
||||
gAlertListener = window.arguments[5].QueryInterface(Components.interfaces.nsIAlertListener);
|
||||
|
||||
// read out our initial settings from prefs.
|
||||
try
|
||||
{
|
||||
var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService();
|
||||
prefService = prefService.QueryInterface(Components.interfaces.nsIPrefService);
|
||||
var prefBranch = prefService.getBranch(null);
|
||||
gSlideIncrement = prefBranch.getIntPref("alerts.slideIncrement");
|
||||
gSlideTime = prefBranch.getIntPref("alerts.slideIncrementTime");
|
||||
gOpenTime = prefBranch.getIntPref("alerts.totalOpenTime");
|
||||
gFinalHeight = prefBranch.getIntPref("alerts.height");
|
||||
} catch (ex) {}
|
||||
|
||||
// offset the alert by 10 pixels from the far right edge of the screen
|
||||
gWidth = window.outerWidth + 10;
|
||||
|
||||
window.moveTo(screen.availWidth, screen.availHeight); // move it offscreen initially
|
||||
// force a resize on the window to make sure it is wide enough then after that, begin animating the alert.
|
||||
setTimeout('window.resizeTo(gWidth - 10, 1);', 1);
|
||||
setTimeout(animateAlert, 10);
|
||||
}
|
||||
|
||||
function animateAlert()
|
||||
{
|
||||
if (gCurrentHeight < gFinalHeight)
|
||||
{
|
||||
gCurrentHeight += gSlideIncrement;
|
||||
window.outerHeight = gCurrentHeight;
|
||||
window.moveTo((screen.availWidth - gWidth), screen.availHeight - gCurrentHeight);
|
||||
setTimeout(animateAlert, gSlideTime);
|
||||
}
|
||||
else
|
||||
setTimeout(closeAlert, gOpenTime);
|
||||
}
|
||||
|
||||
function closeAlert()
|
||||
{
|
||||
if (gCurrentHeight)
|
||||
{
|
||||
gCurrentHeight -= gSlideIncrement;
|
||||
window.outerHeight = gCurrentHeight;
|
||||
window.moveTo((screen.availWidth - gWidth), screen.availHeight - gCurrentHeight);
|
||||
setTimeout(closeAlert, gSlideTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gAlertListener)
|
||||
gAlertListener.onAlertFinished(gAlertCookie);
|
||||
window.close();
|
||||
}
|
||||
}
|
||||
|
||||
function onAlertClick()
|
||||
{
|
||||
if (gAlertListener && gAlertTextClickable)
|
||||
gAlertListener.onAlertClickCallback(gAlertCookie);
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
The contents of this file are subject to the Netscape 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/NPL/
|
||||
|
||||
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 Mozilla Communicator client code, released
|
||||
March 31, 1998.
|
||||
|
||||
The Initial Developer of the Original Code is Netscape
|
||||
Communications Corporation. Portions created by Netscape are
|
||||
Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
Rights Reserved.
|
||||
-->
|
||||
|
||||
<?xml-stylesheet href="chrome://communicator/skin/alerts/alert.css" type="text/css"?>
|
||||
|
||||
<window id="alertNotification"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
windowtype="alert:alert"
|
||||
height="50"
|
||||
onload="onAlertLoad()">
|
||||
|
||||
<script type="application/x-javascript" src="chrome://communicator/content/alerts/alert.js"/>
|
||||
|
||||
<hbox class="alertBox" flex="1">
|
||||
|
||||
<hbox class="alertImageBox" align="center" valign="center">
|
||||
<image id="alertImage" autostretch="never"/>
|
||||
</hbox>
|
||||
|
||||
<vbox flex="1">
|
||||
<label id="alertTitleLabel" class="alertTitle plain">*</label>
|
||||
<label id="alertTextLabel" class="alertText plain" flex="1" onclick="onAlertClick();">*</label>
|
||||
</vbox>
|
||||
|
||||
</hbox>
|
||||
|
||||
</window>
|
||||
|
|
@ -0,0 +1,123 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode:nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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 mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2002
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Scott MacGregor <mscott@netscape.com>
|
||||
*
|
||||
* 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 NPL, 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 NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsAlertsService.h"
|
||||
#include "nsISupportsArray.h"
|
||||
#include "nsISupportsPrimitives.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIDOMWindowInternal.h"
|
||||
#include "nsIWindowWatcher.h"
|
||||
|
||||
#define ALERT_CHROME_URL "chrome://communicator/content/alerts/alert.xul"
|
||||
|
||||
NS_IMPL_THREADSAFE_ADDREF(nsAlertsService);
|
||||
NS_IMPL_THREADSAFE_RELEASE(nsAlertsService);
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN(nsAlertsService)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIAlertsService)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIAlertsService)
|
||||
NS_INTERFACE_MAP_END_THREADSAFE
|
||||
|
||||
nsAlertsService::nsAlertsService()
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
}
|
||||
|
||||
nsAlertsService::~nsAlertsService()
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP nsAlertsService::ShowAlertNotification(const char * aImageUrl, const PRUnichar * aAlertTitle,
|
||||
const PRUnichar * aAlertText, PRBool aAlertTextClickable,
|
||||
const PRUnichar * aAlertCookie,
|
||||
nsIAlertListener * aAlertListener)
|
||||
{
|
||||
nsCOMPtr<nsIWindowWatcher> wwatch(do_GetService("@mozilla.org/embedcomp/window-watcher;1"));
|
||||
nsCOMPtr<nsIDOMWindow> newWindow;
|
||||
nsresult rv;
|
||||
|
||||
nsCOMPtr<nsISupportsArray> argsArray;
|
||||
rv = NS_NewISupportsArray(getter_AddRefs(argsArray));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// create scriptable versions of our strings that we can store in our nsISupportsArray....
|
||||
nsCOMPtr<nsISupportsString> scriptableImageUrl (do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID));
|
||||
NS_ENSURE_TRUE(scriptableImageUrl, NS_ERROR_FAILURE);
|
||||
|
||||
scriptableImageUrl->SetData(aImageUrl);
|
||||
argsArray->AppendElement(scriptableImageUrl);
|
||||
|
||||
nsCOMPtr<nsISupportsWString> scriptableAlertTitle (do_CreateInstance(NS_SUPPORTS_WSTRING_CONTRACTID));
|
||||
NS_ENSURE_TRUE(scriptableAlertTitle, NS_ERROR_FAILURE);
|
||||
|
||||
scriptableAlertTitle->SetData(aAlertTitle);
|
||||
argsArray->AppendElement(scriptableAlertTitle);
|
||||
|
||||
nsCOMPtr<nsISupportsWString> scriptableAlertText (do_CreateInstance(NS_SUPPORTS_WSTRING_CONTRACTID));
|
||||
NS_ENSURE_TRUE(scriptableAlertText, NS_ERROR_FAILURE);
|
||||
|
||||
scriptableAlertText->SetData(aAlertText);
|
||||
argsArray->AppendElement(scriptableAlertText);
|
||||
|
||||
nsCOMPtr<nsISupportsPRBool> scriptableIsClickable (do_CreateInstance(NS_SUPPORTS_PRBOOL_CONTRACTID));
|
||||
NS_ENSURE_TRUE(scriptableIsClickable, NS_ERROR_FAILURE);
|
||||
|
||||
scriptableIsClickable->SetData(aAlertTextClickable);
|
||||
argsArray->AppendElement(scriptableIsClickable);
|
||||
|
||||
nsCOMPtr<nsISupportsWString> scriptableAlertCookie (do_CreateInstance(NS_SUPPORTS_WSTRING_CONTRACTID));
|
||||
NS_ENSURE_TRUE(scriptableAlertCookie, NS_ERROR_FAILURE);
|
||||
|
||||
scriptableAlertCookie->SetData(aAlertCookie);
|
||||
argsArray->AppendElement(scriptableAlertCookie);
|
||||
|
||||
if (aAlertListener)
|
||||
{
|
||||
nsCOMPtr<nsISupportsInterfacePointer> ifptr = do_CreateInstance(NS_SUPPORTS_INTERFACE_POINTER_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsISupports> iSupports (do_QueryInterface(aAlertListener));
|
||||
ifptr->SetData(iSupports);
|
||||
ifptr->SetDataIID(&NS_GET_IID(nsIAlertListener));
|
||||
argsArray->AppendElement(ifptr);
|
||||
}
|
||||
|
||||
rv = wwatch->OpenWindow(0, ALERT_CHROME_URL, "_blank",
|
||||
"chrome,dialog=yes,titlebar=no,popup=yes", argsArray,
|
||||
getter_AddRefs(newWindow));
|
||||
return rv;
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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 mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2002
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Scott MacGregor <mscott@netscape.com>
|
||||
*
|
||||
* 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 NPL, 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 NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef nsAlertsService_h__
|
||||
#define nsAlertsService_h__
|
||||
|
||||
#include "nsIAlertsService.h"
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
#define NS_ALERTSSERVICE_CID { 0xa0ccaaf8, 0x9da, 0x44d8, { 0xb2, 0x50, 0x9a, 0xc3, 0xe9, 0x3c, 0x81, 0x17 } }
|
||||
|
||||
class nsAlertsService : public nsIAlertsService
|
||||
{
|
||||
public:
|
||||
NS_DECL_NSIALERTSSERVICE
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
nsAlertsService();
|
||||
virtual ~nsAlertsService();
|
||||
|
||||
protected:
|
||||
};
|
||||
|
||||
#endif /* nsAlertsService_h__ */
|
Загрузка…
Ссылка в новой задаче