Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117752883
newmail_notifier.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
6 KB
Referenced Files
None
Subscribers
None
newmail_notifier.js
View Options
/**
* New Mail Notifier plugin script
*
* @version @package_version@
* @author Aleksander Machniak <alec@alec.pl>
*/
if
(
window
.
rcmail
&&
rcmail
.
env
.
task
==
'mail'
)
{
rcmail
.
addEventListener
(
'plugin.newmail_notifier'
,
newmail_notifier_run
);
rcmail
.
addEventListener
(
'actionbefore'
,
newmail_notifier_stop
);
rcmail
.
addEventListener
(
'init'
,
function
()
{
// bind to messages list select event, so favicon will be reverted on message preview too
if
(
rcmail
.
message_list
)
rcmail
.
message_list
.
addEventListener
(
'select'
,
newmail_notifier_stop
);
});
}
// Executes notification methods
function
newmail_notifier_run
(
prop
)
{
if
(
prop
.
basic
)
newmail_notifier_basic
();
if
(
prop
.
sound
)
newmail_notifier_sound
();
if
(
prop
.
desktop
)
newmail_notifier_desktop
(
rcmail
.
gettext
(
'body'
,
'newmail_notifier'
));
}
// Stops notification
function
newmail_notifier_stop
(
prop
)
{
// revert original favicon
if
(
rcmail
.
env
.
favicon_href
&&
rcmail
.
env
.
favicon_changed
&&
(
!
prop
||
prop
.
action
!=
'check-recent'
))
{
$
(
'<link rel="shortcut icon" href="'
+
rcmail
.
env
.
favicon_href
+
'"/>'
).
replaceAll
(
'link[rel="shortcut icon"]'
);
rcmail
.
env
.
favicon_changed
=
0
;
}
// Remove IE icon overlay if we're pinned to Taskbar
try
{
if
(
window
.
external
.
msIsSiteMode
())
{
window
.
external
.
msSiteModeClearIconOverlay
();
}
}
catch
(
e
)
{}
}
// Basic notification: window.focus and favicon change
function
newmail_notifier_basic
()
{
var
w
=
rcmail
.
is_framed
()
?
window
.
parent
:
window
;
w
.
focus
();
// we cannot simply change a href attribute, we must to replace the link element (at least in FF)
var
link
=
$
(
'<link rel="shortcut icon" href="plugins/newmail_notifier/favicon.ico"/>'
),
oldlink
=
$
(
'link[rel="shortcut icon"]'
,
w
.
document
);
if
(
!
rcmail
.
env
.
favicon_href
)
rcmail
.
env
.
favicon_href
=
oldlink
.
attr
(
'href'
);
rcmail
.
env
.
favicon_changed
=
1
;
link
.
replaceAll
(
oldlink
);
// Add IE icon overlay if we're pinned to Taskbar
try
{
if
(
window
.
external
.
msIsSiteMode
())
{
window
.
external
.
msSiteModeSetIconOverlay
(
'plugins/newmail_notifier/overlay.ico'
,
rcmail
.
gettext
(
'title'
,
'newmail_notifier'
));
}
}
catch
(
e
)
{}
}
// Sound notification
function
newmail_notifier_sound
()
{
var
elem
,
src
=
'plugins/newmail_notifier/sound.wav'
;
// HTML5
try
{
elem
=
$
(
'<audio src="'
+
src
+
'" />'
);
elem
.
get
(
0
).
play
();
}
// old method
catch
(
e
)
{
elem
=
$
(
'<embed id="sound" src="'
+
src
+
'" hidden=true autostart=true loop=false />'
);
elem
.
appendTo
(
$
(
'body'
));
window
.
setTimeout
(
"$('#sound').remove()"
,
5000
);
}
}
// Desktop notification
// - Require Chrome or Firefox latest version (22+) / 21.0 or older with a plugin
function
newmail_notifier_desktop
(
body
)
{
var
timeout
=
rcmail
.
env
.
newmail_notifier_timeout
||
10
;
// As of 17 June 2013, Chrome/Chromium does not implement Notification.permission correctly that
// it gives 'undefined' until an object has been created:
// https://code.google.com/p/chromium/issues/detail?id=163226
try
{
if
(
Notification
.
permission
==
'granted'
||
Notification
.
permission
==
undefined
)
{
var
popup
=
new
Notification
(
rcmail
.
gettext
(
'title'
,
'newmail_notifier'
),
{
dir
:
"auto"
,
lang
:
""
,
body
:
body
,
tag
:
"newmail_notifier"
,
icon
:
"plugins/newmail_notifier/mail.png"
,
});
popup
.
onclick
=
function
()
{
this
.
close
();
}
setTimeout
(
function
()
{
popup
.
close
();
},
timeout
*
1000
);
if
(
popup
.
permission
==
'granted'
)
return
true
;
}
}
catch
(
e
)
{
var
dn
=
window
.
webkitNotifications
;
if
(
dn
&&
!
dn
.
checkPermission
())
{
if
(
rcmail
.
newmail_popup
)
rcmail
.
newmail_popup
.
cancel
();
var
popup
=
window
.
webkitNotifications
.
createNotification
(
'plugins/newmail_notifier/mail.png'
,
rcmail
.
gettext
(
'title'
,
'newmail_notifier'
),
body
);
popup
.
onclick
=
function
()
{
this
.
cancel
();
}
popup
.
show
();
setTimeout
(
function
()
{
popup
.
cancel
();
},
timeout
*
1000
);
rcmail
.
newmail_popup
=
popup
;
return
true
;
}
}
return
false
;
}
function
newmail_notifier_test_desktop
()
{
var
txt
=
rcmail
.
gettext
(
'testbody'
,
'newmail_notifier'
);
// W3C draft implementation (with fix for Chrome/Chromium)
try
{
var
testNotification
=
new
window
.
Notification
(
txt
,
{
tag
:
"newmail_notifier"
});
// Try to show a test message
if
(
Notification
.
permission
!==
'granted'
||
(
testNotification
.
permission
&&
testNotification
.
permission
!==
'granted'
))
newmail_notifier_desktop_authorize
();
}
// webkit implementation
catch
(
e
)
{
var
dn
=
window
.
webkitNotifications
;
if
(
dn
)
{
if
(
!
dn
.
checkPermission
())
newmail_notifier_desktop
(
txt
);
else
dn
.
requestPermission
(
function
()
{
if
(
!
newmail_notifier_desktop
(
txt
))
rcmail
.
display_message
(
rcmail
.
gettext
(
'desktopdisabled'
,
'newmail_notifier'
),
'error'
);
});
}
else
// Everything fails, means the browser has no support
rcmail
.
display_message
(
rcmail
.
gettext
(
'desktopunsupported'
,
'newmail_notifier'
),
'error'
);
}
}
function
newmail_notifier_test_basic
()
{
newmail_notifier_basic
();
}
function
newmail_notifier_test_sound
()
{
newmail_notifier_sound
();
}
function
newmail_notifier_desktop_authorize
()
{
Notification
.
requestPermission
(
function
(
perm
)
{
if
(
perm
==
'denied'
)
rcmail
.
display_message
(
rcmail
.
gettext
(
'desktopdisabled'
,
'newmail_notifier'
),
'error'
);
if
(
perm
==
'granted'
)
newmail_notifier_test_desktop
();
// Test again, which should show test message
});
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 4, 4:47 AM (1 d, 14 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18774246
Default Alt Text
newmail_notifier.js (6 KB)
Attached To
Mode
R113 roundcubemail
Attached
Detach File
Event Timeline